primeng-shadowdom-directives
Version:
Directives that make PrimeNG plays nicely with ShadowDOM
54 lines • 7.39 kB
JavaScript
import { isPlatformBrowser } from '@angular/common';
import { Directive, Host, Inject, Optional, PLATFORM_ID, Self, } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "primeng/menu";
export class psdMenuDirective {
constructor(hostEl, platformId) {
this.hostEl = hostEl;
this.platformId = platformId;
hostEl.bindDocumentClickListener = () => {
if (!hostEl.documentClickListener && isPlatformBrowser(platformId)) {
const documentTarget = hostEl.el
? hostEl.el.nativeElement.ownerDocument
: 'document';
hostEl.documentClickListener = hostEl.renderer.listen(documentTarget, 'click', (event) => {
const isOutsideContainer = hostEl.containerViewChild?.nativeElement &&
!hostEl.containerViewChild.nativeElement.contains(event.target.shadowRoot
? event.target.shadowRoot.activeElement
: event.target);
const isOutsideTarget = !(hostEl.target &&
(hostEl.target === event.target ||
hostEl.target.contains(event.target)));
if (!hostEl.popup && isOutsideContainer && isOutsideTarget) {
hostEl.onListBlur(event);
}
if (hostEl.preventDocumentDefault &&
hostEl.overlayVisible &&
isOutsideContainer &&
isOutsideTarget) {
hostEl.hide();
hostEl.preventDocumentDefault = false;
}
});
}
};
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: psdMenuDirective, deps: [{ token: i1.Menu, host: true, optional: true, self: true }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: psdMenuDirective, selector: "[psdMenu]", ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: psdMenuDirective, decorators: [{
type: Directive,
args: [{
selector: '[psdMenu]',
}]
}], ctorParameters: () => [{ type: i1.Menu, decorators: [{
type: Host
}, {
type: Self
}, {
type: Optional
}] }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1lbmctc2hhZG93ZG9tLWRpcmVjdGl2ZXMvc3JjL2RpcmVjdGl2ZXMvbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsU0FBUyxFQUNULElBQUksRUFDSixNQUFNLEVBQ04sUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEdBQ0wsTUFBTSxlQUFlLENBQUM7OztBQU12QixNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQytDLE1BQVksRUFDNUIsVUFBZTtRQURDLFdBQU0sR0FBTixNQUFNLENBQU07UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUU1QyxNQUFNLENBQUMseUJBQXlCLEdBQUcsR0FBRyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLElBQUksaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsTUFBTSxjQUFjLEdBQVEsTUFBTSxDQUFDLEVBQUU7b0JBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhO29CQUN2QyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUVmLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDbkQsY0FBYyxFQUNkLE9BQU8sRUFDUCxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNSLE1BQU0sa0JBQWtCLEdBQ3RCLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxhQUFhO3dCQUN4QyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUMvQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVU7NEJBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhOzRCQUN2QyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDakIsQ0FBQztvQkFDSixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQ3ZCLE1BQU0sQ0FBQyxNQUFNO3dCQUNiLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTs0QkFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3hDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksa0JBQWtCLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQzNELE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNCLENBQUM7b0JBQ0QsSUFDRSxNQUFNLENBQUMsc0JBQXNCO3dCQUM3QixNQUFNLENBQUMsY0FBYzt3QkFDckIsa0JBQWtCO3dCQUNsQixlQUFlLEVBQ2YsQ0FBQzt3QkFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ2QsTUFBTSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztvQkFDeEMsQ0FBQztnQkFDSCxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDOytHQTNDVSxnQkFBZ0IsOEVBR2pCLFdBQVc7bUdBSFYsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUg1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO2lCQUN0Qjs7MEJBR0ksSUFBSTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUTs7MEJBQ3hCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdCxcbiAgSW5qZWN0LFxuICBPcHRpb25hbCxcbiAgUExBVEZPUk1fSUQsXG4gIFNlbGYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1twc2RNZW51XScsXG59KVxuZXhwb3J0IGNsYXNzIHBzZE1lbnVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASG9zdCgpIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBob3N0RWw6IE1lbnUsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnlcbiAgKSB7XG4gICAgaG9zdEVsLmJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBpZiAoIWhvc3RFbC5kb2N1bWVudENsaWNrTGlzdGVuZXIgJiYgaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRUYXJnZXQ6IGFueSA9IGhvc3RFbC5lbFxuICAgICAgICAgID8gaG9zdEVsLmVsLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudFxuICAgICAgICAgIDogJ2RvY3VtZW50JztcblxuICAgICAgICBob3N0RWwuZG9jdW1lbnRDbGlja0xpc3RlbmVyID0gaG9zdEVsLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICBkb2N1bWVudFRhcmdldCxcbiAgICAgICAgICAnY2xpY2snLFxuICAgICAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNPdXRzaWRlQ29udGFpbmVyID1cbiAgICAgICAgICAgICAgaG9zdEVsLmNvbnRhaW5lclZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgICAhaG9zdEVsLmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC5zaGFkb3dSb290XG4gICAgICAgICAgICAgICAgICA/IGV2ZW50LnRhcmdldC5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIDogZXZlbnQudGFyZ2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBpc091dHNpZGVUYXJnZXQgPSAhKFxuICAgICAgICAgICAgICBob3N0RWwudGFyZ2V0ICYmXG4gICAgICAgICAgICAgIChob3N0RWwudGFyZ2V0ID09PSBldmVudC50YXJnZXQgfHxcbiAgICAgICAgICAgICAgICBob3N0RWwudGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFob3N0RWwucG9wdXAgJiYgaXNPdXRzaWRlQ29udGFpbmVyICYmIGlzT3V0c2lkZVRhcmdldCkge1xuICAgICAgICAgICAgICBob3N0RWwub25MaXN0Qmx1cihldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGhvc3RFbC5wcmV2ZW50RG9jdW1lbnREZWZhdWx0ICYmXG4gICAgICAgICAgICAgIGhvc3RFbC5vdmVybGF5VmlzaWJsZSAmJlxuICAgICAgICAgICAgICBpc091dHNpZGVDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgaXNPdXRzaWRlVGFyZ2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaG9zdEVsLmhpZGUoKTtcbiAgICAgICAgICAgICAgaG9zdEVsLnByZXZlbnREb2N1bWVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl19