@mobilelivenpm/fds-angular-qa
Version:
This library was generated with [Nx](https://nx.dev).
149 lines • 17 kB
JavaScript
import { Directive, ElementRef, Input, Renderer2, Inject, PLATFORM_ID, SecurityContext, HostBinding, HostListener, InjectionToken, Optional } from '@angular/core';
import { isPlatformServer } from '@angular/common';
import tippy from 'tippy.js';
import { DomSanitizer } from '@angular/platform-browser';
let uidIterator = 0;
/** Injection token to be used to override the default options for `matPopover`. */
export const FDS_POPOVER_DEFAULT_OPTIONS = new InjectionToken('mat-tooltip-default-options', {
providedIn: 'root',
factory: FDS_POPOVER_DEFAULT_OPTIONS_FACTORY
});
/** @docs-private */
export function FDS_POPOVER_DEFAULT_OPTIONS_FACTORY() {
return {
closeBtnScreenReadersText: 'Close button',
placement: 'top',
theme: 'dark',
animation: 'shift-away'
};
}
export class PopoverDirective {
constructor(elementRef, renderer, domSanitizer, platform, _defaultOptions) {
this.elementRef = elementRef;
this.renderer = renderer;
this.domSanitizer = domSanitizer;
this.platform = platform;
this._defaultOptions = _defaultOptions;
this.fdsPopover = {};
this.tabindex = '0';
this.fdsPopoverUID = `fdsPopover` + uidIterator++;
this.defProps = {
arrow: true,
maxWidth: 'auto',
allowHTML: true,
interactive: true,
interactiveBorder: 50,
trigger: 'manual'
};
this.config = {};
}
onClick() {
if (this.tippyInstance) {
if (!this.tippyInstance.state.isVisible) {
this.tippyInstance.show();
}
else {
this.tippyInstance.hide();
}
}
}
documentClick(e) {
if (e.dataset && e.dataset.popoverId === this.fdsPopoverUID) {
this.tippyInstance.hide();
}
}
ngOnInit() {
if (isPlatformServer(this.platform))
return;
this.initTippy();
}
ngOnDestroy() {
this.tippyInstance.destroy();
}
ngOnChanges(changes) {
if (!this.tippyInstance)
return;
if (changes['fdsPopover']) {
// ReInit when any input was changed
this.initTippy();
}
else if (changes['fdsPopoverBody'] || changes['fdsPopoverTitle']) {
this.updateTippyContent();
}
}
/**
* Popover initialize
*/
initTippy() {
if (this.tippyInstance) {
this.tippyInstance.destroy();
}
tippy(this.elementRef.nativeElement, this.getConfig());
this.setTippyInstance();
}
updateTippyContent() {
const { content } = this.getConfig();
this.tippyInstance.setContent(content);
}
getConfig() {
const config = Object.assign(Object.assign(Object.assign({}, this.defProps), this._defaultOptions), this.fdsPopover);
config.content = this.getTemplate(config.theme, config.closeBtnScreenReadersText);
return config;
}
getTemplate(theme = 'dark', closeBtnText) {
const classList = [
'd--flex',
'align--items--start',
'p--3',
'curved',
theme
];
return `<div class="${classList.join(' ')}"
data-type="popover" tabindex="0"
style="opacity: 1; visibility: visible; position:static;">
<span></span>
<span tabindex="0">
${this.getTitle()
? `<strong class="title">${this.getTitle()}</strong>`
: ``}
${this.getBody()}
</span>
<a href="javascript:void(0)" tabindex="0" type="button"
class="btn--close ml--3" data-popover-id="${this.fdsPopoverUID}">
<span class="icon icon-cross-circle" data-popover-id="${this.fdsPopoverUID}">
<span class="sr--only">${closeBtnText}</span>
</span>
</a>
</div>`;
}
getTitle() {
return this.domSanitizer.sanitize(SecurityContext.HTML, this.fdsPopoverTitle);
}
getBody() {
return this.domSanitizer.sanitize(SecurityContext.HTML, this.fdsPopoverBody);
}
setTippyInstance() {
this.tippyInstance = this.elementRef.nativeElement._tippy;
}
}
PopoverDirective.decorators = [
{ type: Directive, args: [{
selector: '[fdsPopover],[fdsPopoverBody]'
},] }
];
PopoverDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: DomSanitizer },
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [FDS_POPOVER_DEFAULT_OPTIONS,] }] }
];
PopoverDirective.propDecorators = {
fdsPopover: [{ type: Input }],
fdsPopoverBody: [{ type: Input }],
fdsPopoverTitle: [{ type: Input }],
tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }, { type: Input }],
onClick: [{ type: HostListener, args: ['click',] }, { type: HostListener, args: ['keydown.space',] }, { type: HostListener, args: ['keydown.enter',] }],
documentClick: [{ type: HostListener, args: ['document:click', ['$event.target'],] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmRzUG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9wb3BvdmVyL2Zkc1BvcG92ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsVUFBVSxFQUNWLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksRUFHWixjQUFjLEVBQ2QsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sS0FBOEIsTUFBTSxVQUFVLENBQUM7QUFLdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTXpELElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQVVwQixtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBRTNELDZCQUE2QixFQUFFO0lBQy9CLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxtQ0FBbUM7Q0FDN0MsQ0FBQyxDQUFDO0FBRUgsb0JBQW9CO0FBQ3BCLE1BQU0sVUFBVSxtQ0FBbUM7SUFDakQsT0FBTztRQUNMLHlCQUF5QixFQUFFLGNBQWM7UUFDekMsU0FBUyxFQUFFLEtBQUs7UUFDaEIsS0FBSyxFQUFFLE1BQU07UUFDYixTQUFTLEVBQUUsWUFBWTtLQUN4QixDQUFDO0FBQ0osQ0FBQztBQUtELE1BQU0sT0FBTyxnQkFBZ0I7SUF3QjNCLFlBQ1UsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsWUFBMEIsRUFDTCxRQUFnQixFQUdyQyxlQUF5QztRQU56QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsaUJBQVks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LEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIFJlbmRlcmVyMixcbiAgSW5qZWN0LFxuICBQTEFURk9STV9JRCxcbiAgU2VjdXJpdHlDb250ZXh0LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEluamVjdGlvblRva2VuLFxuICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHRpcHB5LCB7IEluc3RhbmNlLCBQbGFjZW1lbnQgfSBmcm9tICd0aXBweS5qcyc7XG5pbXBvcnQge1xuICBOZ3hUaXBweVByb3BzLFxuICBOZ3hUaXBweUluc3RhbmNlXG59IGZyb20gJy4uL3NoYXJlZC90aXBweS90aXBweS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbnRlcmZhY2UgVGlwcHlIVE1MRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgX3RpcHB5OiBJbnN0YW5jZTtcbn1cblxubGV0IHVpZEl0ZXJhdG9yID0gMDtcblxuLyoqIERlZmF1bHQgYGZkc1BvcG92ZXJgIG9wdGlvbnMgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmRzUG9wb3ZlckRlZmF1bHRPcHRpb25zIHtcbiAgY2xvc2VCdG5TY3JlZW5SZWFkZXJzVGV4dDogc3RyaW5nO1xuICB0aGVtZTogJ2RhcmsnIHwgJ2xpZ2h0JztcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnQ7XG4gIGFuaW1hdGlvbjogc3RyaW5nIHwgYm9vbGVhbjtcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGBtYXRQb3BvdmVyYC4gKi9cbmV4cG9ydCBjb25zdCBGRFNfUE9QT1ZFUl9ERUZBVUxUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48XG4gIEZkc1BvcG92ZXJEZWZhdWx0T3B0aW9uc1xuPignbWF0LXRvb2x0aXAtZGVmYXVsdC1vcHRpb25zJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6IEZEU19QT1BPVkVSX0RFRkFVTFRfT1BUSU9OU19GQUNUT1JZXG59KTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBGRFNfUE9QT1ZFUl9ERUZBVUxUX09QVElPTlNfRkFDVE9SWSgpOiBGZHNQb3BvdmVyRGVmYXVsdE9wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIGNsb3NlQnRuU2NyZWVuUmVhZGVyc1RleHQ6ICdDbG9zZSBidXR0b24nLFxuICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgdGhlbWU6ICdkYXJrJyxcbiAgICBhbmltYXRpb246ICdzaGlmdC1hd2F5J1xuICB9O1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZmRzUG9wb3Zlcl0sW2Zkc1BvcG92ZXJCb2R5XSdcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZmRzUG9wb3ZlcjogTmd4VGlwcHlQcm9wcyA9IHt9O1xuXG4gIEBJbnB1dCgpIGZkc1BvcG92ZXJCb2R5Pzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGZkc1BvcG92ZXJUaXRsZT86IHN0cmluZztcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKSBASW5wdXQoKSB0YWJpbmRleDogc3RyaW5nID0gJzAnO1xuXG4gIHB1YmxpYyBmZHNQb3BvdmVyVUlEID0gYGZkc1BvcG92ZXJgICsgdWlkSXRlcmF0b3IrKztcblxuICBwcml2YXRlIHRpcHB5SW5zdGFuY2U6IE5neFRpcHB5SW5zdGFuY2U7XG5cbiAgcHJpdmF0ZSBkZWZQcm9wcyA9IHtcbiAgICBhcnJvdzogdHJ1ZSxcbiAgICBtYXhXaWR0aDogJ2F1dG8nLFxuICAgIGFsbG93SFRNTDogdHJ1ZSxcbiAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICBpbnRlcmFjdGl2ZUJvcmRlcjogNTAsXG4gICAgdHJpZ2dlcjogJ21hbnVhbCdcbiAgfTtcblxuICBwcml2YXRlIGNvbmZpZyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtOiBPYmplY3QsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEZEU19QT1BPVkVSX0RFRkFVTFRfT1BUSU9OUylcbiAgICBwcml2YXRlIF9kZWZhdWx0T3B0aW9uczogRmRzUG9wb3ZlckRlZmF1bHRPcHRpb25zXG4gICkge31cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc3BhY2UnKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJylcbiAgb25DbGljaygpIHtcbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlKSB7XG4gICAgICBpZiAoIXRoaXMudGlwcHlJbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy50aXBweUluc3RhbmNlLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgZG9jdW1lbnRDbGljayhlKSB7XG4gICAgaWYgKGUuZGF0YXNldCAmJiBlLmRhdGFzZXQucG9wb3ZlcklkID09PSB0aGlzLmZkc1BvcG92ZXJVSUQpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybSkpIHJldHVybjtcbiAgICB0aGlzLmluaXRUaXBweSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50aXBweUluc3RhbmNlLmRlc3Ryb3koKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMudGlwcHlJbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgaWYgKGNoYW5nZXNbJ2Zkc1BvcG92ZXInXSkge1xuICAgICAgLy8gUmVJbml0IHdoZW4gYW55IGlucHV0IHdhcyBjaGFuZ2VkXG4gICAgICB0aGlzLmluaXRUaXBweSgpO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snZmRzUG9wb3ZlckJvZHknXSB8fCBjaGFuZ2VzWydmZHNQb3BvdmVyVGl0bGUnXSkge1xuICAgICAgdGhpcy51cGRhdGVUaXBweUNvbnRlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9wb3ZlciBpbml0aWFsaXplXG4gICAqL1xuICBpbml0VGlwcHkoKSB7XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSkge1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aXBweSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5nZXRDb25maWcoKSk7XG4gICAgdGhpcy5zZXRUaXBweUluc3RhbmNlKCk7XG4gIH1cblxuICB1cGRhdGVUaXBweUNvbnRlbnQoKSB7XG4gICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zZXRDb250ZW50KGNvbnRlbnQpO1xuICB9XG5cbiAgZ2V0Q29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuZGVmUHJvcHMsXG4gICAgICAuLi50aGlzLl9kZWZhdWx0T3B0aW9ucyxcbiAgICAgIC4uLnRoaXMuZmRzUG9wb3ZlclxuICAgIH07XG4gICAgY29uZmlnLmNvbnRlbnQgPSB0aGlzLmdldFRlbXBsYXRlKFxuICAgICAgY29uZmlnLnRoZW1lLFxuICAgICAgY29uZmlnLmNsb3NlQnRuU2NyZWVuUmVhZGVyc1RleHRcbiAgICApO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBnZXRUZW1wbGF0ZSh0aGVtZSA9ICdkYXJrJywgY2xvc2VCdG5UZXh0KSB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gW1xuICAgICAgJ2QtLWZsZXgnLFxuICAgICAgJ2FsaWduLS1pdGVtcy0tc3RhcnQnLFxuICAgICAgJ3AtLTMnLFxuICAgICAgJ2N1cnZlZCcsXG4gICAgICB0aGVtZVxuICAgIF07XG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0xpc3Quam9pbignICcpfVwiXG4gICAgICAgICBkYXRhLXR5cGU9XCJwb3BvdmVyXCIgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMTsgdmlzaWJpbGl0eTogdmlzaWJsZTsgcG9zaXRpb246c3RhdGljO1wiPlxuICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgPHNwYW4gdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICR7XG4gICAgICAgICAgdGhpcy5nZXRUaXRsZSgpXG4gICAgICAgICAgICA/IGA8c3Ryb25nIGNsYXNzPVwidGl0bGVcIj4ke3RoaXMuZ2V0VGl0bGUoKX08L3N0cm9uZz5gXG4gICAgICAgICAgICA6IGBgXG4gICAgICAgIH1cbiAgICAgICAgJHt0aGlzLmdldEJvZHkoKX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiB0YWJpbmRleD1cIjBcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgIGNsYXNzPVwiYnRuLS1jbG9zZSBtbC0tM1wiIGRhdGEtcG9wb3Zlci1pZD1cIiR7dGhpcy5mZHNQb3BvdmVyVUlEfVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaWNvbi1jcm9zcy1jaXJjbGVcIiBkYXRhLXBvcG92ZXItaWQ9XCIke1xuICAgICAgICAgIHRoaXMuZmRzUG9wb3ZlclVJRFxuICAgICAgICB9XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ItLW9ubHlcIj4ke2Nsb3NlQnRuVGV4dH08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBnZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuc2FuaXRpemUoXG4gICAgICBTZWN1cml0eUNvbnRleHQuSFRNTCxcbiAgICAgIHRoaXMuZmRzUG9wb3ZlclRpdGxlXG4gICAgKTtcbiAgfVxuXG4gIGdldEJvZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tU2FuaXRpemVyLnNhbml0aXplKFxuICAgICAgU2VjdXJpdHlDb250ZXh0LkhUTUwsXG4gICAgICB0aGlzLmZkc1BvcG92ZXJCb2R5XG4gICAgKTtcbiAgfVxuXG4gIHNldFRpcHB5SW5zdGFuY2UoKSB7XG4gICAgdGhpcy50aXBweUluc3RhbmNlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuX3RpcHB5O1xuICB9XG59XG4iXX0=