@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
91 lines • 8.45 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 { Directive, ElementRef, HostBinding, Input } from '@angular/core';
import * as i0 from "@angular/core";
export class OpensInNewTabDirective {
constructor(el) {
this.el = el;
}
/**
* Allows user to set custom rel attribute.
* @default 'noopener noreferrer'
* @builtin true
*/
get rel() {
return this._rel;
}
set rel(value) {
this._rel = value;
}
/**
* Allows user to set custom target attribute.
* @default '_blank'
* @builtin true
*/
get target() {
return this._target;
}
set target(value) {
this._target = value;
}
/**
* Allows user to set custom aria-label attribute.
* @default '<inner-text-of-link> (opens in new tab)'
*/
get ariaLabel() {
return this._ariaLabel;
}
set ariaLabel(value) {
this._ariaLabel = value;
}
get attrRel() {
return this._rel ? this._rel : 'noopener noreferrer';
}
get attrTarget() {
return this._target ? this._target : '_blank';
}
get attrAriaLabel() {
return this._ariaLabel ? this._ariaLabel : `${this.el.nativeElement.innerText.trim()} (opens in new tab)`;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OpensInNewTabDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: OpensInNewTabDirective, isStandalone: true, selector: "[vOpensInNewTab], ", inputs: { rel: "rel", target: "target", ariaLabel: ["aria-label", "ariaLabel"] }, host: { properties: { "attr.rel": "this.attrRel", "attr.target": "this.attrTarget", "attr.aria-label": "this.attrAriaLabel" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OpensInNewTabDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
// tslint:disable-next-line:directive-selector
selector: '[vOpensInNewTab], '
}]
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { rel: [{
type: Input
}], target: [{
type: Input
}], ariaLabel: [{
type: Input,
args: ['aria-label']
}], attrRel: [{
type: HostBinding,
args: ['attr.rel']
}], attrTarget: [{
type: HostBinding,
args: ['attr.target']
}], attrAriaLabel: [{
type: HostBinding,
args: ['attr.aria-label']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnMtaW4tbmV3LXRhYi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25vdmEtbGliL3NyYy9saWIvX3V0aWxpdGllcy9hbmd1bGFyLXNwZWNpZmljLWRpcmVjdGl2ZXMvb3BlbnMtaW4tbmV3LXRhYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztJQWVJO0FBQ0osT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPMUUsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtJQUFHLENBQUM7SUFFdEM7Ozs7T0FJRztJQUNILElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsSUFDSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFHRCxJQUNJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFDSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUM7SUFDNUcsQ0FBQzsrR0F2RFUsc0JBQXNCO21HQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLDhDQUE4QztvQkFDOUMsUUFBUSxFQUFFLG9CQUFvQjtpQkFDL0I7K0VBVUssR0FBRztzQkFETixLQUFLO2dCQWVGLE1BQU07c0JBRFQsS0FBSztnQkFjRixTQUFTO3NCQURaLEtBQUs7dUJBQUMsWUFBWTtnQkFVZixPQUFPO3NCQURWLFdBQVc7dUJBQUMsVUFBVTtnQkFLbkIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLGFBQWE7Z0JBS3RCLGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDI1IFZpc2EsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3ZPcGVuc0luTmV3VGFiXSwgJ1xufSlcbmV4cG9ydCBjbGFzcyBPcGVuc0luTmV3VGFiRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge31cblxuICAvKipcbiAgICogQWxsb3dzIHVzZXIgdG8gc2V0IGN1c3RvbSByZWwgYXR0cmlidXRlLlxuICAgKiBAZGVmYXVsdCAnbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICogQGJ1aWx0aW4gdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZWw7XG4gIH1cbiAgc2V0IHJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVsID0gdmFsdWU7XG4gIH1cbiAgX3JlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvd3MgdXNlciB0byBzZXQgY3VzdG9tIHRhcmdldCBhdHRyaWJ1dGUuXG4gICAqIEBkZWZhdWx0ICdfYmxhbmsnXG4gICAqIEBidWlsdGluIHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0YXJnZXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xuICB9XG4gIHNldCB0YXJnZXQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RhcmdldCA9IHZhbHVlO1xuICB9XG4gIF90YXJnZXQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIHVzZXIgdG8gc2V0IGN1c3RvbSBhcmlhLWxhYmVsIGF0dHJpYnV0ZS5cbiAgICogQGRlZmF1bHQgJyZsdDtpbm5lci10ZXh0LW9mLWxpbmsmZ3Q7IChvcGVucyBpbiBuZXcgdGFiKSdcbiAgICovXG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpXG4gIGdldCBhcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXJpYUxhYmVsO1xuICB9XG4gIHNldCBhcmlhTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FyaWFMYWJlbCA9IHZhbHVlO1xuICB9XG4gIF9hcmlhTGFiZWw6IHN0cmluZztcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIucmVsJylcbiAgZ2V0IGF0dHJSZWwoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbCA/IHRoaXMuX3JlbCA6ICdub29wZW5lciBub3JlZmVycmVyJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFyZ2V0JylcbiAgZ2V0IGF0dHJUYXJnZXQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldCA/IHRoaXMuX3RhcmdldCA6ICdfYmxhbmsnO1xuICB9XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcbiAgZ2V0IGF0dHJBcmlhTGFiZWwoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2FyaWFMYWJlbCA/IHRoaXMuX2FyaWFMYWJlbCA6IGAke3RoaXMuZWwubmF0aXZlRWxlbWVudC5pbm5lclRleHQudHJpbSgpfSAob3BlbnMgaW4gbmV3IHRhYilgO1xuICB9XG59XG4iXX0=