UNPKG

@visa/nova-angular

Version:

Visa Product Design System Nova Angular library

146 lines 15.9 kB
/** * © 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 { computed, ContentChild, Directive, HostBinding, Input, signal } from '@angular/core'; import { UUIDService } from '../_utilities/services/uuid.service'; import { ListboxDirective } from '../listbox/listbox.directive'; import * as i0 from "@angular/core"; import * as i1 from "../_utilities/services/uuid.service"; export class ListboxContainerDirective { /** * Provides custom class(es) for custom styling. * @default .v-listbox-container */ get class() { return [ this._class, 'v-listbox-container', this._invalid ? 'v-listbox-error' : '', this._disabled ? 'v-listbox-disabled' : '' ].join(' '); } set class(value) { this._class = value; } get hostClass() { return this.class; } get hostRole() { if (this._isRoleListboxVariant() && !this.role) { this.role = 'listbox'; } return this.role; } get hostAriaMultiselectable() { if (this._multiselect && this._isRoleListboxVariant()) { return 'true'; } } get hostAriaInvalid() { return this._invalid ? 'true' : null; } get hostAriaRequired() { return this._required ? 'true' : null; } get hostAriaActiveDescendant() { if (this.ariaActiveDescendant() && !this._inCombobox) { return this.ariaActiveDescendant(); } } get hostId() { return this.id; } constructor(uuidService) { this.uuidService = uuidService; this._disabled = false; this._invalid = false; this._isRoleListboxVariant = signal(null); this._class = ''; this._multiselect = false; this._required = false; this._inCombobox = false; /** * Aria attribute relaying what active element the listbox container refers to. * @builtin true */ this.ariaActiveDescendant = signal(null); /** * Sets custom id. * @default uuidService.getUUID('v-listbox-container-') * @builtin true */ this.id = this.uuidService.getUUID('v-listbox-container-'); } ngAfterContentInit() { if (this.listbox) { this._multiselect = this.listbox.multiselect; this._required = this.listbox.required; this._disabled = this.listbox.disabled; this._invalid = this.listbox.invalid; this._inCombobox = this.listbox._inCombobox; // update invalid and disabled classes based on listbox this.listbox.communicateState.subscribe((state) => { this._disabled = state.disabled; this._invalid = state.invalid; }); this._isRoleListboxVariant = computed(() => this.listbox?._isRoleListboxVariant()); this.ariaActiveDescendant = computed(() => this.listbox?.ariaActiveDescendant()); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListboxContainerDirective, deps: [{ token: i1.UUIDService }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ListboxContainerDirective, isStandalone: true, selector: "[v-listbox-container] ", inputs: { class: "class", role: "role", ariaActiveDescendant: ["aria-activedescendant", "ariaActiveDescendant"], id: "id" }, host: { properties: { "class": "this.hostClass", "attr.role": "this.hostRole", "attr.aria-multiselectable": "this.hostAriaMultiselectable", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-required": "this.hostAriaRequired", "attr.aria-activedescendant": "this.hostAriaActiveDescendant", "attr.id": "this.hostId" } }, queries: [{ propertyName: "listbox", first: true, predicate: ListboxDirective, descendants: true }], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListboxContainerDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[v-listbox-container] ' }] }], ctorParameters: () => [{ type: i1.UUIDService }], propDecorators: { listbox: [{ type: ContentChild, args: [ListboxDirective] }], class: [{ type: Input }], hostClass: [{ type: HostBinding, args: ['class'] }], role: [{ type: Input }], hostRole: [{ type: HostBinding, args: ['attr.role'] }], hostAriaMultiselectable: [{ type: HostBinding, args: ['attr.aria-multiselectable'] }], hostAriaInvalid: [{ type: HostBinding, args: ['attr.aria-invalid'] }], hostAriaRequired: [{ type: HostBinding, args: ['attr.aria-required'] }], ariaActiveDescendant: [{ type: Input, args: ['aria-activedescendant'] }], hostAriaActiveDescendant: [{ type: HostBinding, args: ['attr.aria-activedescendant'] }], id: [{ type: Input }], hostId: [{ type: HostBinding, args: ['attr.id'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC1jb250YWluZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ub3ZhLWxpYi9zcmMvbGliL2xpc3Rib3gtY29udGFpbmVyL2xpc3Rib3gtY29udGFpbmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQW9CLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBTWhFLE1BQU0sT0FBTyx5QkFBeUI7SUFLcEM7OztPQUdHO0lBQ0gsSUFDSSxLQUFLO1FBQ1AsT0FBTztZQUNMLElBQUksQ0FBQyxNQUFNO1lBQ1gscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzNDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBU0QsSUFDSSxRQUFRO1FBQ1YsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxHQUFH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SUFBSTtvQkFDaEIsUUFBUSxFQUFFLHdCQUF3QjtpQkFDbkM7Z0ZBRWlDLE9BQU87c0JBQXRDLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQVMxQixLQUFLO3NCQURSLEtBQUs7Z0JBY0YsU0FBUztzQkFEWixXQUFXO3VCQUFDLE9BQU87Z0JBV1gsSUFBSTtzQkFBWixLQUFLO2dCQUVGLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxXQUFXO2dCQVVwQix1QkFBdUI7c0JBRDFCLFdBQVc7dUJBQUMsMkJBQTJCO2dCQVFwQyxlQUFlO3NCQURsQixXQUFXO3VCQUFDLG1CQUFtQjtnQkFPNUIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLG9CQUFvQjtnQkFVRCxvQkFBb0I7c0JBQW5ELEtBQUs7dUJBQUMsdUJBQXVCO2dCQUUxQix3QkFBd0I7c0JBRDNCLFdBQVc7dUJBQUMsNEJBQTRCO2dCQWF6QyxFQUFFO3NCQURELEtBQUs7Z0JBR0YsTUFBTTtzQkFEVCxXQUFXO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICAgICAgICAgICAgICDCqSAyMDI1IFZpc2FcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIGNvbXB1dGVkLCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0LCBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVVVJRFNlcnZpY2UgfSBmcm9tICcuLi9fdXRpbGl0aWVzL3NlcnZpY2VzL3V1aWQuc2VydmljZSc7XG5pbXBvcnQgeyBMaXN0Ym94RGlyZWN0aXZlIH0gZnJvbSAnLi4vbGlzdGJveC9saXN0Ym94LmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1t2LWxpc3Rib3gtY29udGFpbmVyXSAnXG59KVxuZXhwb3J0IGNsYXNzIExpc3Rib3hDb250YWluZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgQENvbnRlbnRDaGlsZChMaXN0Ym94RGlyZWN0aXZlKSBsaXN0Ym94OiBMaXN0Ym94RGlyZWN0aXZlO1xuICBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgX2ludmFsaWQgPSBmYWxzZTtcbiAgX2lzUm9sZUxpc3Rib3hWYXJpYW50OiBTaWduYWw8Ym9vbGVhbiB8IG51bGw+ID0gc2lnbmFsKG51bGwpO1xuICAvKipcbiAgICogUHJvdmlkZXMgY3VzdG9tIGNsYXNzJiM0MDtlcyYjNDE7IGZvciBjdXN0b20gc3R5bGluZy5cbiAgICogQGRlZmF1bHQgLnYtbGlzdGJveC1jb250YWluZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBjbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLl9jbGFzcyxcbiAgICAgICd2LWxpc3Rib3gtY29udGFpbmVyJyxcbiAgICAgIHRoaXMuX2ludmFsaWQgPyAndi1saXN0Ym94LWVycm9yJyA6ICcnLFxuICAgICAgdGhpcy5fZGlzYWJsZWQgPyAndi1saXN0Ym94LWRpc2FibGVkJyA6ICcnXG4gICAgXS5qb2luKCcgJyk7XG4gIH1cbiAgc2V0IGNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jbGFzcyA9IHZhbHVlO1xuICB9XG4gIF9jbGFzczogc3RyaW5nID0gJyc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3M7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjdXN0b20gcm9sZS5cbiAgICogQGRlZmF1bHQgJ2xpc3Rib3gnIGlmIG5vIGNoaWxkIGxpc3QgaXRlbSBjb250YWlucyBhIGNoaWxkIHJhZGlvIG9yIGNoZWNrYm94LlxuICAgKiBAZGVmYXVsdCBub3QgcHJlc2VudCBpZiBjaGlsZCBsaXN0IGl0ZW0gY29udGFpbnMgYSBjaGlsZCByYWRpbyBvciBjaGVja2JveC5cbiAgICogQGJ1aWx0aW4gdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgcm9sZTogc3RyaW5nO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gIGdldCBob3N0Um9sZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9pc1JvbGVMaXN0Ym94VmFyaWFudCgpICYmICF0aGlzLnJvbGUpIHtcbiAgICAgIHRoaXMucm9sZSA9ICdsaXN0Ym94JztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgfVxuXG4gIF9tdWx0aXNlbGVjdCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGUnKVxuICBnZXQgaG9zdEFyaWFNdWx0aXNlbGVjdGFibGUoKTogc3RyaW5nIHwgdm9pZCB7XG4gICAgaWYgKHRoaXMuX211bHRpc2VsZWN0ICYmIHRoaXMuX2lzUm9sZUxpc3Rib3hWYXJpYW50KCkpIHtcbiAgICAgIHJldHVybiAndHJ1ZSc7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpXG4gIGdldCBob3N0QXJpYUludmFsaWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ludmFsaWQgPyAndHJ1ZScgOiBudWxsO1xuICB9XG5cbiAgX3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlcXVpcmVkJylcbiAgZ2V0IGhvc3RBcmlhUmVxdWlyZWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkID8gJ3RydWUnIDogbnVsbDtcbiAgfVxuXG4gIF9pbkNvbWJvYm94ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBBcmlhIGF0dHJpYnV0ZSByZWxheWluZyB3aGF0IGFjdGl2ZSBlbGVtZW50IHRoZSBsaXN0Ym94IGNvbnRhaW5lciByZWZlcnMgdG8uXG4gICAqIEBidWlsdGluIHRydWVcbiAgICovXG4gIEBJbnB1dCgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JykgYXJpYUFjdGl2ZURlc2NlbmRhbnQ6IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudCcpXG4gIGdldCBob3N0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKTogc3RyaW5nIHwgbnVsbCB8IHZvaWQge1xuICAgIGlmICh0aGlzLmFyaWFBY3RpdmVEZXNjZW5kYW50KCkgJiYgIXRoaXMuX2luQ29tYm9ib3gpIHtcbiAgICAgIHJldHVybiB0aGlzLmFyaWFBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY3VzdG9tIGlkLlxuICAgKiBAZGVmYXVsdCB1dWlkU2VydmljZS5nZXRVVUlEKCd2LWxpc3Rib3gtY29udGFpbmVyLScpXG4gICAqIEBidWlsdGluIHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGlkOiBzdHJpbmcgPSB0aGlzLnV1aWRTZXJ2aWNlLmdldFVVSUQoJ3YtbGlzdGJveC1jb250YWluZXItJyk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gIGdldCBob3N0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXVpZFNlcnZpY2U6IFVVSURTZXJ2aWNlKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5saXN0Ym94KSB7XG4gICAgICB0aGlzLl9tdWx0aXNlbGVjdCA9IHRoaXMubGlzdGJveC5tdWx0aXNlbGVjdDtcbiAgICAgIHRoaXMuX3JlcXVpcmVkID0gdGhpcy5saXN0Ym94LnJlcXVpcmVkO1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0aGlzLmxpc3Rib3guZGlzYWJsZWQ7XG4gICAgICB0aGlzLl9pbnZhbGlkID0gdGhpcy5saXN0Ym94LmludmFsaWQ7XG4gICAgICB0aGlzLl9pbkNvbWJvYm94ID0gdGhpcy5saXN0Ym94Ll9pbkNvbWJvYm94O1xuICAgICAgLy8gdXBkYXRlIGludmFsaWQgYW5kIGRpc2FibGVkIGNsYXNzZXMgYmFzZWQgb24gbGlzdGJveFxuICAgICAgdGhpcy5saXN0Ym94LmNvbW11bmljYXRlU3RhdGUuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHN0YXRlLmRpc2FibGVkO1xuICAgICAgICB0aGlzLl9pbnZhbGlkID0gc3RhdGUuaW52YWxpZDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9pc1JvbGVMaXN0Ym94VmFyaWFudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGlzdGJveD8uX2lzUm9sZUxpc3Rib3hWYXJpYW50KCkpO1xuICAgICAgdGhpcy5hcmlhQWN0aXZlRGVzY2VuZGFudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGlzdGJveD8uYXJpYUFjdGl2ZURlc2NlbmRhbnQoKSk7XG4gICAgfVxuICB9XG59XG4iXX0=