@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
77 lines • 8.97 kB
JavaScript
/**
* © 2025 Visa
*
* 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY2xvc3VyZS10YWItaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25vdmEtbGliL3NyYy9saWIvZGlzY2xvc3VyZS10YWItaXRlbS9kaXNjbG9zdXJlLXRhYi1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFvQixZQUFZLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFN0Q7OztHQUdHO0FBTUgsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQzs7O09BR0c7SUFDSCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQW1CO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQVFEO1FBUEEsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQjs7V0FFRztRQUNPLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFFOUMsQ0FBQztJQUVoQixrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUV6QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGVBQWU7b0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvRyxDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzdGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7K0dBdENVLDBCQUEwQjttR0FBMUIsMEJBQTBCLHdOQUN2QixlQUFlOzs0RkFEbEIsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQiw4Q0FBOEM7b0JBQzlDLFFBQVEsRUFBRSw2QkFBNkI7aUJBQ3hDO3dEQUVnQyxNQUFNO3NCQUFwQyxZQUFZO3VCQUFDLGVBQWU7Z0JBT3pCLFFBQVE7c0JBRFgsS0FBSztnQkFZSSxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICAgICAgICAgICAgICDCqSAyMDI1IFZpc2FcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgZm9yIGNyZWF0aW5nIGEgZGlzY2xvc3VyZSB0YWIgaXRlbS4gVGhpcyBkaXJlY3RpdmUgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgdi10YWItaXRlbWAgZGlyZWN0aXZlLiA8YnIgLz5cbiAqIEl0IGlzIHVzZWQgdG8gY3JlYXRlIGEgdGFiIGl0ZW0gdGhhdCBjYW4gYmUgZXhwYW5kZWQgb3IgY29sbGFwc2VkLiBUaGlzIGl0ZW0gY2Fubm90IGJlIHNldCBhcyBhY3RpdmUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3YtdGFiLWl0ZW1dW2Rpc2Nsb3N1cmVUYWJdJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJJdGVtRGlzY2xvc3VyZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBAQ29udGVudENoaWxkKEJ1dHRvbkRpcmVjdGl2ZSkgYnV0dG9uOiBCdXR0b25EaXJlY3RpdmU7XG5cbiAgLyoqXG4gICAqIFNldHMgZXhwYW5kZWQgc3RhdGUgb2YgZGlzY2xvc3VyZSB0YWIgaXRlbS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gIH1cbiAgc2V0IGV4cGFuZGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9leHBhbmRlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgX2V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV4cGFuZGVkIHN0YXRlIHdoZW4gdGhlIGNoaWxkIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGRpc2Nsb3N1cmVUYWJUb2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICB0aGlzLmJ1dHRvbi5hcmlhRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xuXG4gICAgICBpZiAodGhpcy5idXR0b24udG9nZ2xlSWNvbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAodGhpcy5idXR0b24udG9nZ2xlSWNvbkNvbXBvbmVudC5yb3RhdGVkVGVtcGxhdGUpIHRoaXMuYnV0dG9uLnRvZ2dsZUljb25Db21wb25lbnQucm90YXRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnV0dG9uLmNsaWNrZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gIXRoaXMuZXhwYW5kZWQ7XG4gICAgICAgIHRoaXMuYnV0dG9uLmFyaWFFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbi50b2dnbGVJY29uQ29tcG9uZW50KSB0aGlzLmJ1dHRvbi50b2dnbGVJY29uQ29tcG9uZW50LnJvdGF0ZWQgPSB0aGlzLmV4cGFuZGVkO1xuICAgICAgICB0aGlzLmRpc2Nsb3N1cmVUYWJUb2dnbGVkLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==