@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
168 lines • 18.7 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, HostBinding, HostListener, Input, Output } from '@angular/core';
import { AccordionHeadingDirective } from '../accordion-heading/accordion-heading.directive';
import { AccordionPanelDirective } from '../accordion-panel/accordion-panel.directive';
import { IconToggleComponent } from '../icon-toggle/icon-toggle.component';
import { IconToggleDirective } from '../icon-toggle/icon-toggle.directive';
import * as i0 from "@angular/core";
export class AccordionDetailsDirective {
/**
* Provides custom class(es) for custom styling.
* @default .v-accordion
*/
get class() {
return [this._class, 'v-accordion'].join(' ');
}
set class(value) {
this._class = value;
}
get hostClass() {
return this.class;
}
/** @ignore native details/summary prop */
get expanded() {
return this._expanded;
}
set expanded(value) {
this._expanded = coerceBooleanProperty(value);
if (this.expanded !== null)
this.toggled.emit(this.expanded);
}
get hostOpen() {
if (this.expanded !== null)
return this.expanded;
}
get hostId() {
return this.id;
}
/** @ignore */
get name() {
return this._name;
}
set name(value) {
this._name = value;
}
get hostName() {
return this.name;
}
get hostTabIndex() {
if (this.heading?.hostButton?.disabled) {
return '-1';
}
}
constructor() {
this._class = '';
this._expanded = false;
this._name = '';
/**
* Emits expanded state of item when toggled.
*/
this.toggled = new EventEmitter();
}
toggle(event) {
// should be of type ToggleEvent but Angular 16 doesn't recognize ToggleEvent
this.expanded = event.newState === 'open';
if (this.toggleIconComponent)
this.toggleIconComponent.rotated = this.expanded;
if (this.toggleIcon)
this.toggleIcon.icon.icon = this.expanded ? this.toggleIcon.expandedIcon : this.toggleIcon.collapsedIcon;
this.toggled.emit(this.expanded);
}
ngAfterContentInit() {
if (this.panel)
this.panel._native = true;
if (this.heading) {
if (this.heading.expanded && !this.expanded)
this.expanded = true;
this.heading.toggled.subscribe(() => {
this.expanded = this.heading.expanded;
});
}
if (this.toggleIcon) {
this.toggleIcon.class = [this.toggleIcon.class, 'v-accordion-toggle-icon'].join(' ');
if (!this.toggleIcon._iconSet) {
if (!this.toggleIcon._expandedSet)
this.toggleIcon.expandedIcon = 'chevron-down';
if (!this.toggleIcon._collapsedSet)
this.toggleIcon.collapsedIcon = 'chevron-right';
}
}
else if (this.toggleIconComponent) {
this.toggleIconComponent._accordionToggle = true;
if (this.toggleIconComponent.rotatedTemplate) {
this.toggleIconComponent.rotatedTemplate.class = 'v-accordion-toggle-icon';
}
if (this.toggleIconComponent.defaultTemplate) {
this.toggleIconComponent.defaultTemplate.class = 'v-accordion-toggle-icon';
}
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccordionDetailsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AccordionDetailsDirective, isStandalone: true, selector: "details[v-accordion-item]", inputs: { class: "class", expanded: ["open", "expanded"], id: "id", name: "name" }, outputs: { toggled: "toggled" }, host: { listeners: { "toggle": "toggle($event)" }, properties: { "class": "this.hostClass", "open": "this.hostOpen", "attr.id": "this.hostId", "attr.name": "this.hostName", "attr.tabindex": "this.hostTabIndex" } }, queries: [{ propertyName: "panel", first: true, predicate: AccordionPanelDirective, descendants: true }, { propertyName: "heading", first: true, predicate: AccordionHeadingDirective, descendants: true }, { propertyName: "toggleIcon", first: true, predicate: IconToggleDirective, descendants: true }, { propertyName: "toggleIconComponent", first: true, predicate: IconToggleComponent, descendants: true }], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccordionDetailsDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
// tslint:disable-next-line:directive-selector
selector: 'details[v-accordion-item]'
}]
}], ctorParameters: () => [], propDecorators: { panel: [{
type: ContentChild,
args: [AccordionPanelDirective]
}], heading: [{
type: ContentChild,
args: [AccordionHeadingDirective]
}], toggleIcon: [{
type: ContentChild,
args: [IconToggleDirective]
}], toggleIconComponent: [{
type: ContentChild,
args: [IconToggleComponent]
}], class: [{
type: Input
}], hostClass: [{
type: HostBinding,
args: ['class']
}], expanded: [{
type: Input,
args: ['open']
}], hostOpen: [{
type: HostBinding,
args: ['open']
}], id: [{
type: Input
}], hostId: [{
type: HostBinding,
args: ['attr.id']
}], name: [{
type: Input
}], hostName: [{
type: HostBinding,
args: ['attr.name']
}], hostTabIndex: [{
type: HostBinding,
args: ['attr.tabindex']
}], toggled: [{
type: Output
}], toggle: [{
type: HostListener,
args: ['toggle', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ub3ZhLWxpYi9zcmMvbGliL2FjY29yZGlvbi1pdGVtL2FjY29yZGlvbi1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFPM0UsTUFBTSxPQUFPLHlCQUF5QjtJQU1wQzs7O09BR0c7SUFDSCxJQUNJLEtBQUs7UUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBMEI7UUFD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UUFBUTtzQkFEWCxXQUFXO3VCQUFDLE1BQU07Z0JBVW5CLEVBQUU7c0JBREQsS0FBSztnQkFHRixNQUFNO3NCQURULFdBQVc7dUJBQUMsU0FBUztnQkFPbEIsSUFBSTtzQkFEUCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxXQUFXO2dCQU1wQixZQUFZO3NCQURmLFdBQVc7dUJBQUMsZUFBZTtnQkFZbEIsT0FBTztzQkFBaEIsTUFBTTtnQkFHUCxNQUFNO3NCQURMLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDI1IFZpc2EsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2NvcmRpb25IZWFkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi4vYWNjb3JkaW9uLWhlYWRpbmcvYWNjb3JkaW9uLWhlYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFjY29yZGlvblBhbmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vYWNjb3JkaW9uLXBhbmVsL2FjY29yZGlvbi1wYW5lbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvblRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24tdG9nZ2xlL2ljb24tdG9nZ2xlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vaWNvbi10b2dnbGUvaWNvbi10b2dnbGUuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdkZXRhaWxzW3YtYWNjb3JkaW9uLWl0ZW1dJ1xufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25EZXRhaWxzRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBDb250ZW50Q2hpbGQoQWNjb3JkaW9uUGFuZWxEaXJlY3RpdmUpIHBhbmVsOiBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZTtcbiAgQENvbnRlbnRDaGlsZChBY2NvcmRpb25IZWFkaW5nRGlyZWN0aXZlKSBoZWFkaW5nOiBBY2NvcmRpb25IZWFkaW5nRGlyZWN0aXZlO1xuICBAQ29udGVudENoaWxkKEljb25Ub2dnbGVEaXJlY3RpdmUpIHRvZ2dsZUljb246IEljb25Ub2dnbGVEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoSWNvblRvZ2dsZUNvbXBvbmVudCkgdG9nZ2xlSWNvbkNvbXBvbmVudDogSWNvblRvZ2dsZUNvbXBvbmVudDtcblxuICAvKipcbiAgICogUHJvdmlkZXMgY3VzdG9tIGNsYXNzJiM0MDtlcyYjNDE7IGZvciBjdXN0b20gc3R5bGluZy5cbiAgICogQGRlZmF1bHQgLnYtYWNjb3JkaW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgY2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW3RoaXMuX2NsYXNzLCAndi1hY2NvcmRpb24nXS5qb2luKCcgJyk7XG4gIH1cbiAgc2V0IGNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jbGFzcyA9IHZhbHVlO1xuICB9XG4gIF9jbGFzczogc3RyaW5nID0gJyc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3M7XG4gIH1cblxuICAvKiogQGlnbm9yZSBuYXRpdmUgZGV0YWlscy9zdW1tYXJ5IHByb3AgKi9cbiAgQElucHV0KCdvcGVuJylcbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gIH1cbiAgc2V0IGV4cGFuZGVkKHZhbHVlOiBCb29sZWFuSW5wdXQgfCBudWxsKSB7XG4gICAgdGhpcy5fZXhwYW5kZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmICh0aGlzLmV4cGFuZGVkICE9PSBudWxsKSB0aGlzLnRvZ2dsZWQuZW1pdCh0aGlzLmV4cGFuZGVkKTtcbiAgfVxuICBfZXhwYW5kZWQ6IGJvb2xlYW4gfCBudWxsID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnb3BlbicpXG4gIGdldCBob3N0T3BlbigpOiBib29sZWFuIHwgdm9pZCB7XG4gICAgaWYgKHRoaXMuZXhwYW5kZWQgIT09IG51bGwpIHJldHVybiB0aGlzLmV4cGFuZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY3VzdG9tIGlkLlxuICAgKiBAYnVpbHRpbiB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBpZDogc3RyaW5nO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICBnZXQgaG9zdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBASW5wdXQoKVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgX25hbWU6IHN0cmluZyA9ICcnO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubmFtZScpXG4gIGdldCBob3N0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgaG9zdFRhYkluZGV4KCk6IHN0cmluZyB8IHZvaWQge1xuICAgIGlmICh0aGlzLmhlYWRpbmc/Lmhvc3RCdXR0b24/LmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gJy0xJztcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV4cGFuZGVkIHN0YXRlIG9mIGl0ZW0gd2hlbiB0b2dnbGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcigndG9nZ2xlJywgWyckZXZlbnQnXSlcbiAgdG9nZ2xlKGV2ZW50OiB7IG5ld1N0YXRlOiBzdHJpbmcgfSkge1xuICAgIC8vIHNob3VsZCBiZSBvZiB0eXBlIFRvZ2dsZUV2ZW50IGJ1dCBBbmd1bGFyIDE2IGRvZXNuJ3QgcmVjb2duaXplIFRvZ2dsZUV2ZW50XG4gICAgdGhpcy5leHBhbmRlZCA9IGV2ZW50Lm5ld1N0YXRlID09PSAnb3Blbic7XG4gICAgaWYgKHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudCkgdGhpcy50b2dnbGVJY29uQ29tcG9uZW50LnJvdGF0ZWQgPSB0aGlzLmV4cGFuZGVkO1xuICAgIGlmICh0aGlzLnRvZ2dsZUljb24pXG4gICAgICB0aGlzLnRvZ2dsZUljb24uaWNvbi5pY29uID0gdGhpcy5leHBhbmRlZCA/IHRoaXMudG9nZ2xlSWNvbi5leHBhbmRlZEljb24gOiB0aGlzLnRvZ2dsZUljb24uY29sbGFwc2VkSWNvbjtcbiAgICB0aGlzLnRvZ2dsZWQuZW1pdCh0aGlzLmV4cGFuZGVkKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYW5lbCkgdGhpcy5wYW5lbC5fbmF0aXZlID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmhlYWRpbmcpIHtcbiAgICAgIGlmICh0aGlzLmhlYWRpbmcuZXhwYW5kZWQgJiYgIXRoaXMuZXhwYW5kZWQpIHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgdGhpcy5oZWFkaW5nLnRvZ2dsZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IHRoaXMuaGVhZGluZy5leHBhbmRlZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRvZ2dsZUljb24pIHtcbiAgICAgIHRoaXMudG9nZ2xlSWNvbi5jbGFzcyA9IFt0aGlzLnRvZ2dsZUljb24uY2xhc3MsICd2LWFjY29yZGlvbi10b2dnbGUtaWNvbiddLmpvaW4oJyAnKTtcbiAgICAgIGlmICghdGhpcy50b2dnbGVJY29uLl9pY29uU2V0KSB7XG4gICAgICAgIGlmICghdGhpcy50b2dnbGVJY29uLl9leHBhbmRlZFNldCkgdGhpcy50b2dnbGVJY29uLmV4cGFuZGVkSWNvbiA9ICdjaGV2cm9uLWRvd24nO1xuICAgICAgICBpZiAoIXRoaXMudG9nZ2xlSWNvbi5fY29sbGFwc2VkU2V0KSB0aGlzLnRvZ2dsZUljb24uY29sbGFwc2VkSWNvbiA9ICdjaGV2cm9uLXJpZ2h0JztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudCkge1xuICAgICAgdGhpcy50b2dnbGVJY29uQ29tcG9uZW50Ll9hY2NvcmRpb25Ub2dnbGUgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudC5yb3RhdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVJY29uQ29tcG9uZW50LnJvdGF0ZWRUZW1wbGF0ZS5jbGFzcyA9ICd2LWFjY29yZGlvbi10b2dnbGUtaWNvbic7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2dnbGVJY29uQ29tcG9uZW50LmRlZmF1bHRUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZUljb25Db21wb25lbnQuZGVmYXVsdFRlbXBsYXRlLmNsYXNzID0gJ3YtYWNjb3JkaW9uLXRvZ2dsZS1pY29uJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==