UNPKG

@visa/nova-angular

Version:

Visa Product Design System Nova Angular library

107 lines 10.8 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 { coerceBooleanProperty } from '@angular/cdk/coercion'; import { Directive, Input, HostBinding, ElementRef, HostListener } from '@angular/core'; import { UUIDService } from '../_utilities/services/uuid.service'; import * as i0 from "@angular/core"; import * as i1 from "../_utilities/services/uuid.service"; export class LabelDirective { /** * Attribute set to the id of the element it's labeling. <br /> * This property is set by default for radio and checkbox components when used within <code>v-input-container</code> as directed. */ get for() { return this._for; } set for(value) { this._for = value; } get labelFor() { return this._for; } get hostId() { return this.id; } get hostClasses() { this.class = [this.progressLabel ? 'v-progress-label' : 'v-label'].join(' '); return this.class; } /** * Swaps <code>v-label</code> class for <code>v-progress-label</code> when true. <br /> * Intended for use when label is describing a progress component. <br /> * Automatically set to true when used within a Circular Progress component. * @default false */ get progressLabel() { return this._progressLabel; } set progressLabel(value) { this._progressLabel = coerceBooleanProperty(value); } constructor(el, uuidService) { this.el = el; this.uuidService = uuidService; /** * Sets custom id. * @default uuidService.getUUID('v-label-') * @builtin true */ this.id = this.uuidService.getUUID('v-label-'); /** * Provides custom class&#40;es&#41; for custom styling. * @default .v-label - when <code>progressLabel</code> is false and not used within a Circular Progress component. * @default .v-progress-label when <code>progressLabel</code> is true or when used within a Circular Progress component. */ this.class = ''; this._progressLabel = false; } // needed for vdsChip styling onClick(event) { // stops click event for firing for label **and** input. // event will still fire for input event.stopPropagation(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LabelDirective, deps: [{ token: i0.ElementRef }, { token: i1.UUIDService }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: LabelDirective, isStandalone: true, selector: "[v-label]", inputs: { for: "for", id: "id", class: "class", progressLabel: "progressLabel" }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.for": "this.labelFor", "attr.id": "this.hostId", "class": "this.hostClasses" } }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LabelDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[v-label]' }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.UUIDService }], propDecorators: { for: [{ type: Input }], labelFor: [{ type: HostBinding, args: ['attr.for'] }], id: [{ type: Input }], hostId: [{ type: HostBinding, args: ['attr.id'] }], class: [{ type: Input }], hostClasses: [{ type: HostBinding, args: ['class'] }], progressLabel: [{ type: Input }], onClick: [{ type: HostListener, args: ['click', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ub3ZhLWxpYi9zcmMvbGliL2xhYmVsL2xhYmVsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFNbEUsTUFBTSxPQUFPLGNBQWM7SUFDekI7OztPQUdHO0lBQ0gsSUFDSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFHRCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQVFELElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBUUQsSUFDSSxXQUFXO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQ0ksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxhQUFhLENBQUMsS0FBbUI7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBR0QsWUFDUyxFQUFjLEVBQ2IsV0FBd0I7UUFEekIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNiLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBeENsQzs7OztXQUlHO1FBQ00sT0FBRSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBTTNEOzs7O1dBSUc7UUFDTSxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBb0JwQixtQkFBYyxHQUFZLEtBQUssQ0FBQztJQUtyQyxDQUFDLENBQUMsNkJBQTZCO0lBR2xDLE9BQU8sQ0FBQyxLQUFZO1FBQ2xCLHdEQUF3RDtRQUN4RCxrQ0FBa0M7UUFDbEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7K0dBbkVVLGNBQWM7bUdBQWQsY0FBYzs7NEZBQWQsY0FBYztrQkFKMUIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLFdBQVc7aUJBQ3RCO3lHQU9LLEdBQUc7c0JBRE4sS0FBSztnQkFVRixRQUFRO3NCQURYLFdBQVc7dUJBQUMsVUFBVTtnQkFVZCxFQUFFO3NCQUFWLEtBQUs7Z0JBRUYsTUFBTTtzQkFEVCxXQUFXO3VCQUFDLFNBQVM7Z0JBVWIsS0FBSztzQkFBYixLQUFLO2dCQUVGLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPO2dCQWFoQixhQUFhO3NCQURoQixLQUFLO2dCQWVOLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICAgICAgICAgICAgICDCqSAyMDI1IFZpc2FcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIEhvc3RCaW5kaW5nLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVVSURTZXJ2aWNlIH0gZnJvbSAnLi4vX3V0aWxpdGllcy9zZXJ2aWNlcy91dWlkLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbdi1sYWJlbF0nXG59KVxuZXhwb3J0IGNsYXNzIExhYmVsRGlyZWN0aXZlIHtcbiAgLyoqXG4gICAqIEF0dHJpYnV0ZSBzZXQgdG8gdGhlIGlkIG9mIHRoZSBlbGVtZW50IGl0J3MgbGFiZWxpbmcuIDxiciAvPlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHNldCBieSBkZWZhdWx0IGZvciByYWRpbyBhbmQgY2hlY2tib3ggY29tcG9uZW50cyB3aGVuIHVzZWQgd2l0aGluIDxjb2RlPnYtaW5wdXQtY29udGFpbmVyPC9jb2RlPiBhcyBkaXJlY3RlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBmb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yO1xuICB9XG4gIHNldCBmb3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZvciA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2Zvcjogc3RyaW5nO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKVxuICBnZXQgbGFiZWxGb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY3VzdG9tIGlkLlxuICAgKiBAZGVmYXVsdCB1dWlkU2VydmljZS5nZXRVVUlEKCd2LWxhYmVsLScpXG4gICAqIEBidWlsdGluIHRydWVcbiAgICovXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSB0aGlzLnV1aWRTZXJ2aWNlLmdldFVVSUQoJ3YtbGFiZWwtJyk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gIGdldCBob3N0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBjdXN0b20gY2xhc3MmIzQwO2VzJiM0MTsgZm9yIGN1c3RvbSBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAudi1sYWJlbCAtIHdoZW4gPGNvZGU+cHJvZ3Jlc3NMYWJlbDwvY29kZT4gaXMgZmFsc2UgYW5kIG5vdCB1c2VkIHdpdGhpbiBhIENpcmN1bGFyIFByb2dyZXNzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgLnYtcHJvZ3Jlc3MtbGFiZWwgd2hlbiA8Y29kZT5wcm9ncmVzc0xhYmVsPC9jb2RlPiBpcyB0cnVlIG9yIHdoZW4gdXNlZCB3aXRoaW4gYSBDaXJjdWxhciBQcm9ncmVzcyBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKTogc3RyaW5nIHtcbiAgICB0aGlzLmNsYXNzID0gW3RoaXMucHJvZ3Jlc3NMYWJlbCA/ICd2LXByb2dyZXNzLWxhYmVsJyA6ICd2LWxhYmVsJ10uam9pbignICcpO1xuICAgIHJldHVybiB0aGlzLmNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3YXBzIDxjb2RlPnYtbGFiZWw8L2NvZGU+IGNsYXNzIGZvciA8Y29kZT52LXByb2dyZXNzLWxhYmVsPC9jb2RlPiB3aGVuIHRydWUuIDxiciAvPlxuICAgKiBJbnRlbmRlZCBmb3IgdXNlIHdoZW4gbGFiZWwgaXMgZGVzY3JpYmluZyBhIHByb2dyZXNzIGNvbXBvbmVudC4gPGJyIC8+XG4gICAqIEF1dG9tYXRpY2FsbHkgc2V0IHRvIHRydWUgd2hlbiB1c2VkIHdpdGhpbiBhIENpcmN1bGFyIFByb2dyZXNzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBwcm9ncmVzc0xhYmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wcm9ncmVzc0xhYmVsO1xuICB9XG4gIHNldCBwcm9ncmVzc0xhYmVsKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9wcm9ncmVzc0xhYmVsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9wcm9ncmVzc0xhYmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdXVpZFNlcnZpY2U6IFVVSURTZXJ2aWNlXG4gICkge30gLy8gbmVlZGVkIGZvciB2ZHNDaGlwIHN0eWxpbmdcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gc3RvcHMgY2xpY2sgZXZlbnQgZm9yIGZpcmluZyBmb3IgbGFiZWwgKiphbmQqKiBpbnB1dC5cbiAgICAvLyBldmVudCB3aWxsIHN0aWxsIGZpcmUgZm9yIGlucHV0XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cbiJdfQ==