@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
107 lines • 10.8 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 { 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(es) 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==