primeng-shadowdom-directives
Version:
Directives that make PrimeNG plays nicely with ShadowDOM
58 lines • 7.96 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/splitbutton";
export class psdSplitButtonDirective {
constructor(hostEl, platformId) {
this.hostEl = hostEl;
this.platformId = platformId;
hostEl.onDropdownButtonClick = (event) => {
hostEl.onDropdownClick.emit(event);
hostEl.menu?.toggle({
currentTarget: hostEl.containerViewChild?.nativeElement,
relativeAlign: hostEl.appendTo == null,
});
hostEl.isExpanded.set(hostEl.menu?.visible);
};
}
ngAfterViewInit() {
const menu = this.hostEl.menu;
menu.bindOutsideClickListener = () => {
if (isPlatformBrowser(this.platformId)) {
if (!menu.outsideClickListener) {
menu.outsideClickListener = menu.renderer.listen(document, 'click', (event) => {
const path = event.path || (event.composedPath && event.composedPath());
const target = event.target.shadowRoot ? path[0] : event.target;
const isOutsideContainer = menu.containerViewChild &&
!menu.containerViewChild.nativeElement.contains(target);
const isOutsideTarget = menu.popup
? !(menu.target &&
(menu.target === target || menu.target.contains(target)))
: true;
if (isOutsideContainer && isOutsideTarget) {
menu.hide();
}
});
}
}
};
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: psdSplitButtonDirective, deps: [{ token: i1.SplitButton, 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: psdSplitButtonDirective, selector: "[psdSplitButton]", ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: psdSplitButtonDirective, decorators: [{
type: Directive,
args: [{
selector: '[psdSplitButton]',
}]
}], ctorParameters: () => [{ type: i1.SplitButton, decorators: [{
type: Host
}, {
type: Self
}, {
type: Optional
}] }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXRidXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmltZW5nLXNoYWRvd2RvbS1kaXJlY3RpdmVzL3NyYy9kaXJlY3RpdmVzL3NwbGl0YnV0dG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxTQUFTLEVBQ1QsSUFBSSxFQUNKLE1BQU0sRUFDTixRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksR0FDTCxNQUFNLGVBQWUsQ0FBQzs7O0FBTXZCLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDK0MsTUFBbUIsRUFDbkMsVUFBZTtRQURDLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkMsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUU1QyxNQUFNLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDcEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7Z0JBQ2xCLGFBQWEsRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsYUFBYTtnQkFDdkQsYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSTthQUN2QyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEdBQUcsRUFBRTtZQUNuQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDOUMsUUFBUSxFQUNSLE9BQU8sRUFDUCxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNSLE1BQU0sSUFBSSxHQUNSLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO3dCQUVoRSxNQUFNLGtCQUFrQixHQUN0QixJQUFJLENBQUMsa0JBQWtCOzRCQUN2QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSzs0QkFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FDQyxJQUFJLENBQUMsTUFBTTtnQ0FDWCxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3pEOzRCQUNILENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ1QsSUFBSSxrQkFBa0IsSUFBSSxlQUFlLEVBQUUsQ0FBQzs0QkFDMUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNkLENBQUM7b0JBQ0gsQ0FBQyxDQUNGLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDOytHQTdDVSx1QkFBdUIscUZBR3hCLFdBQVc7bUdBSFYsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUhuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCOzswQkFHSSxJQUFJOzswQkFBSSxJQUFJOzswQkFBSSxRQUFROzswQkFDeEIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBIb3N0LFxuICBJbmplY3QsXG4gIE9wdGlvbmFsLFxuICBQTEFURk9STV9JRCxcbiAgU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcGxpdEJ1dHRvbiB9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbcHNkU3BsaXRCdXR0b25dJyxcbn0pXG5leHBvcnQgY2xhc3MgcHNkU3BsaXRCdXR0b25EaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASG9zdCgpIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBob3N0RWw6IFNwbGl0QnV0dG9uLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55XG4gICkge1xuICAgIGhvc3RFbC5vbkRyb3Bkb3duQnV0dG9uQ2xpY2sgPSAoZXZlbnQ/OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBob3N0RWwub25Ecm9wZG93bkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgaG9zdEVsLm1lbnU/LnRvZ2dsZSh7XG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6IGhvc3RFbC5jb250YWluZXJWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHJlbGF0aXZlQWxpZ246IGhvc3RFbC5hcHBlbmRUbyA9PSBudWxsLFxuICAgICAgfSk7XG4gICAgICBob3N0RWwuaXNFeHBhbmRlZC5zZXQoaG9zdEVsLm1lbnU/LnZpc2libGUhKTtcbiAgICB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IG1lbnUgPSB0aGlzLmhvc3RFbC5tZW51ITtcbiAgICBtZW51LmJpbmRPdXRzaWRlQ2xpY2tMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgIGlmICghbWVudS5vdXRzaWRlQ2xpY2tMaXN0ZW5lcikge1xuICAgICAgICAgIG1lbnUub3V0c2lkZUNsaWNrTGlzdGVuZXIgPSBtZW51LnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwYXRoID1cbiAgICAgICAgICAgICAgICBldmVudC5wYXRoIHx8IChldmVudC5jb21wb3NlZFBhdGggJiYgZXZlbnQuY29tcG9zZWRQYXRoKCkpO1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQuc2hhZG93Um9vdCA/IHBhdGhbMF0gOiBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgICAgY29uc3QgaXNPdXRzaWRlQ29udGFpbmVyID1cbiAgICAgICAgICAgICAgICBtZW51LmNvbnRhaW5lclZpZXdDaGlsZCAmJlxuICAgICAgICAgICAgICAgICFtZW51LmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgICAgICAgICAgIGNvbnN0IGlzT3V0c2lkZVRhcmdldCA9IG1lbnUucG9wdXBcbiAgICAgICAgICAgICAgICA/ICEoXG4gICAgICAgICAgICAgICAgICAgIG1lbnUudGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgICAgIChtZW51LnRhcmdldCA9PT0gdGFyZ2V0IHx8IG1lbnUudGFyZ2V0LmNvbnRhaW5zKHRhcmdldCkpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgICBpZiAoaXNPdXRzaWRlQ29udGFpbmVyICYmIGlzT3V0c2lkZVRhcmdldCkge1xuICAgICAgICAgICAgICAgIG1lbnUuaGlkZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==