@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
77 lines • 9.01 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 { ContentChild, Directive, EventEmitter, Input, Output } from '@angular/core';
import { ButtonDirective } from '../button/button.directive';
import * as i0 from "@angular/core";
/**
* Directive for creating a disclosure tab item. This directive is used in conjunction with the `v-tab-item` directive. <br />
* It is used to create a tab item that can be expanded or collapsed. This item cannot be set as active.
*/
export class TabItemDisclosureDirective {
/**
* Sets expanded state of disclosure tab item.
* @default false
*/
get expanded() {
return this._expanded;
}
set expanded(value) {
this._expanded = coerceBooleanProperty(value);
}
constructor() {
this._expanded = false;
/**
* Emits expanded state when the child button is clicked.
*/
this.disclosureTabToggled = new EventEmitter();
}
ngAfterContentInit() {
if (this.button) {
this.button.ariaExpanded = this.expanded;
if (this.button.toggleIconComponent) {
if (this.button.toggleIconComponent.rotatedTemplate)
this.button.toggleIconComponent.rotated = this.expanded;
}
this.button.clicked.subscribe((event) => {
this.expanded = !this.expanded;
this.button.ariaExpanded = this.expanded;
if (this.button.toggleIconComponent)
this.button.toggleIconComponent.rotated = this.expanded;
this.disclosureTabToggled.emit(this.expanded);
});
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabItemDisclosureDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TabItemDisclosureDirective, isStandalone: true, selector: "[v-tab-item][disclosureTab]", inputs: { expanded: "expanded" }, outputs: { disclosureTabToggled: "disclosureTabToggled" }, queries: [{ propertyName: "button", first: true, predicate: ButtonDirective, descendants: true }], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabItemDisclosureDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
// tslint:disable-next-line:directive-selector
selector: '[v-tab-item][disclosureTab]'
}]
}], ctorParameters: () => [], propDecorators: { button: [{
type: ContentChild,
args: [ButtonDirective]
}], expanded: [{
type: Input
}], disclosureTabToggled: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY2xvc3VyZS10YWItaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25vdmEtbGliL3NyYy9saWIvZGlzY2xvc3VyZS10YWItaXRlbS9kaXNjbG9zdXJlLXRhYi1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFvQixZQUFZLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFN0Q7OztHQUdHO0FBTUgsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQzs7O09BR0c7SUFDSCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQW1CO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQVFEO1FBUEEsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQjs7V0FFRztRQUNPLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFFOUMsQ0FBQztJQUVoQixrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUV6QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGVBQWU7b0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvRyxDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzdGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7K0dBdENVLDBCQUEwQjttR0FBMUIsMEJBQTBCLHdOQUN2QixlQUFlOzs0RkFEbEIsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQiw4Q0FBOEM7b0JBQzlDLFFBQVEsRUFBRSw2QkFBNkI7aUJBQ3hDO3dEQUVnQyxNQUFNO3NCQUFwQyxZQUFZO3VCQUFDLGVBQWU7Z0JBT3pCLFFBQVE7c0JBRFgsS0FBSztnQkFZSSxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMjUgVmlzYSwgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICoqL1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29udGVudENoaWxkLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSBmb3IgY3JlYXRpbmcgYSBkaXNjbG9zdXJlIHRhYiBpdGVtLiBUaGlzIGRpcmVjdGl2ZSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGB2LXRhYi1pdGVtYCBkaXJlY3RpdmUuIDxiciAvPlxuICogSXQgaXMgdXNlZCB0byBjcmVhdGUgYSB0YWIgaXRlbSB0aGF0IGNhbiBiZSBleHBhbmRlZCBvciBjb2xsYXBzZWQuIFRoaXMgaXRlbSBjYW5ub3QgYmUgc2V0IGFzIGFjdGl2ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbdi10YWItaXRlbV1bZGlzY2xvc3VyZVRhYl0nXG59KVxuZXhwb3J0IGNsYXNzIFRhYkl0ZW1EaXNjbG9zdXJlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBDb250ZW50Q2hpbGQoQnV0dG9uRGlyZWN0aXZlKSBidXR0b246IEJ1dHRvbkRpcmVjdGl2ZTtcblxuICAvKipcbiAgICogU2V0cyBleHBhbmRlZCBzdGF0ZSBvZiBkaXNjbG9zdXJlIHRhYiBpdGVtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcbiAgfVxuICBzZXQgZXhwYW5kZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2V4cGFuZGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBfZXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgZXhwYW5kZWQgc3RhdGUgd2hlbiB0aGUgY2hpbGQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgZGlzY2xvc3VyZVRhYlRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5idXR0b24pIHtcbiAgICAgIHRoaXMuYnV0dG9uLmFyaWFFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG5cbiAgICAgIGlmICh0aGlzLmJ1dHRvbi50b2dnbGVJY29uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbi50b2dnbGVJY29uQ29tcG9uZW50LnJvdGF0ZWRUZW1wbGF0ZSkgdGhpcy5idXR0b24udG9nZ2xlSWNvbkNvbXBvbmVudC5yb3RhdGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idXR0b24uY2xpY2tlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSAhdGhpcy5leHBhbmRlZDtcbiAgICAgICAgdGhpcy5idXR0b24uYXJpYUV4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uLnRvZ2dsZUljb25Db21wb25lbnQpIHRoaXMuYnV0dG9uLnRvZ2dsZUljb25Db21wb25lbnQucm90YXRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgICAgIHRoaXMuZGlzY2xvc3VyZVRhYlRvZ2dsZWQuZW1pdCh0aGlzLmV4cGFuZGVkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19