@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
146 lines • 15.9 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 { 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=