UNPKG

@visa/nova-angular

Version:

Visa Product Design System Nova Angular library

91 lines 8.45 kB
/** * 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=