ngx-tiptap-editor
Version:
[](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml) [ • 15.4 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { ChangeDetectionStrategy, Component, HostBinding, Inject, ViewChild } from '@angular/core';
import { fromEvent } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { sleep } from '../../helpers';
import { PopOverPopUpAnimation } from './dialog.animations';
import { DialogBaseClass, TIP_DIALOG_DATA } from './dialog.helpers';
import * as i0 from "@angular/core";
import * as i1 from "./dialog.helpers";
import * as i2 from "@angular/common";
// @dynamic
export class PopoverComponent extends DialogBaseClass {
constructor(data, document, dialogRef, ngZone, cd, element) {
super();
this.data = data;
this.document = document;
this.dialogRef = dialogRef;
this.ngZone = ngZone;
this.cd = cd;
this.element = element;
this.style = {};
this.style = this.calculateStyle();
}
ngOnInit() {
super.ngOnInit();
this.ngZone.runOutsideAngular(async () => {
await sleep(1000);
fromEvent(this.document, 'click')
.pipe(takeUntil(this.destroy$), filter(e => !this.element.nativeElement.contains(e.target)))
.subscribe(() => this.ngZone.run(() => this.dialogRef.cancel()));
});
}
ngAfterViewInit() {
const position = this.popover.nativeElement.getBoundingClientRect();
const window = this.document.defaultView;
if (!window)
return;
const windowWidth = window.innerWidth;
const overflowRight = (position.x + position.width) - windowWidth;
const updateStyles = {};
if (position.x < 0) {
updateStyles.transform = `translate(calc(-50% + ${Math.abs(position.x - 5)}px), -100%)`;
}
else if (overflowRight > 0) {
updateStyles.transform = `translate(calc(-50% - ${overflowRight + 5}px), -100%)`;
}
if (Object.keys(updateStyles).length > 0) {
this.style = {
...this.style,
...updateStyles
};
this.cd.detectChanges();
}
}
calculateStyle() {
const config = this.dialogRef.dialogConfig;
return {
'top.px': config.position.y - 10,
'left.px': config.position.x,
};
}
}
PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PopoverComponent, deps: [{ token: TIP_DIALOG_DATA }, { token: DOCUMENT }, { token: i1.DialogRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: PopoverComponent, selector: "tip-popover", host: { properties: { "@popUp": "this.ngAfterViewInit" } }, viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
<div class="popover-wrapper" [ngStyle]="style" #popover>
<ng-container *ngIf="dialogRef.component" [ngComponentOutlet]="dialogRef.component"></ng-container>
<div class="hide-arrow"></div>
<div class="arrow"></div>
</div>
`, isInline: true, styles: [".popover-wrapper{border-radius:5px;background-color:var(--tip-background-color);position:fixed;transform:translate(-50%,-100%);box-shadow:0 1px 3px 1px #3c404326;padding:11px;z-index:2000}.hide-arrow{position:absolute;width:30px;height:10px;transform:translate(-50%,-100%);top:100%;left:50%;background-color:var(--tip-background-color);z-index:1}.arrow{position:absolute;top:100%;left:50%;width:0;height:0;box-shadow:1px 1px 3px 1px #3c404326;border:7px solid var(--tip-background-color);transform:rotate(45deg) translate(-50%,-50%);transform-origin:0 0;z-index:0}\n"], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }], animations: [PopOverPopUpAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PopoverComponent, decorators: [{
type: Component,
args: [{
selector: 'tip-popover',
template: `
<div class="popover-wrapper" [ngStyle]="style" #popover>
<ng-container *ngIf="dialogRef.component" [ngComponentOutlet]="dialogRef.component"></ng-container>
<div class="hide-arrow"></div>
<div class="arrow"></div>
</div>
`,
animations: [PopOverPopUpAnimation],
styles: [`
.popover-wrapper {
border-radius: 5px;
background-color: var(--tip-background-color);
position: fixed;
transform: translate(-50%, -100%);
box-shadow: 0 1px 3px 1px rgba(60, 64, 67, .15);
padding: 11px;
z-index: 2000;
}
.hide-arrow {
position: absolute;
width: 30px;
height: 10px;
transform: translate(-50%, -100%);
top: 100%;
left: 50%;
background-color: var(--tip-background-color);
z-index: 1;
}
.arrow {
position: absolute;
top: 100%;
left: 50%;
width: 0;
height: 0;
box-shadow: 1px 1px 3px 1px rgba(60, 64, 67, .15);
border: 7px solid var(--tip-background-color);
transform: rotate(45deg) translate(-50%, -50%);
transform-origin: 0 0;
z-index: 0;
}
`],
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [TIP_DIALOG_DATA]
}] }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: i1.DialogRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { popover: [{
type: ViewChild,
args: ['popover']
}], ngAfterViewInit: [{
type: HostBinding,
args: ['@popUp']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZGlhbG9nL3BvcG92ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUEwQixlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUU1RixXQUFXO0FBaURYLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBSW5ELFlBQ21DLElBQVMsRUFDZCxRQUFrQixFQUN2QyxTQUFtQyxFQUNoQyxNQUFjLEVBQ2hCLEVBQXFCLEVBQ3JCLE9BQW1CO1FBRTNCLEtBQUssRUFBRSxDQUFDO1FBUHlCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3ZDLGNBQVMsR0FBVCxTQUFTLENBQTBCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDaEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQVR0QixVQUFLLEdBQTJCLEVBQUUsQ0FBQztRQVl4QyxJQUFJLENBQUMsS0FBSyxHQUFH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QUFROzBCQUE3QyxNQUFNOzJCQUFDLFFBQVE7a0pBSlksT0FBTztzQkFBcEMsU0FBUzt1QkFBQyxTQUFTO2dCQTRCYixlQUFlO3NCQURyQixXQUFXO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgTmdab25lLFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgUG9wT3ZlclBvcFVwQW5pbWF0aW9uIH0gZnJvbSAnLi9kaWFsb2cuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBEaWFsb2dCYXNlQ2xhc3MsIERpYWxvZ1JlZiwgUG9wb3ZlckRhdGEsIFRJUF9ESUFMT0dfREFUQSB9IGZyb20gJy4vZGlhbG9nLmhlbHBlcnMnO1xuXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGlwLXBvcG92ZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLXdyYXBwZXJcIiBbbmdTdHlsZV09XCJzdHlsZVwiICNwb3BvdmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpYWxvZ1JlZi5jb21wb25lbnRcIiBbbmdDb21wb25lbnRPdXRsZXRdPVwiZGlhbG9nUmVmLmNvbXBvbmVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzcz1cImhpZGUtYXJyb3dcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBhbmltYXRpb25zOiBbUG9wT3ZlclBvcFVwQW5pbWF0aW9uXSxcbiAgc3R5bGVzOiBbYFxuICAgIC5wb3BvdmVyLXdyYXBwZXIge1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlwLWJhY2tncm91bmQtY29sb3IpO1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwMCUpO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCByZ2JhKDYwLCA2NCwgNjcsIC4xNSk7XG4gICAgICBwYWRkaW5nOiAxMXB4O1xuICAgICAgei1pbmRleDogMjAwMDtcbiAgICB9XG5cbiAgICAuaGlkZS1hcnJvdyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMzBweDtcbiAgICAgIGhlaWdodDogMTBweDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0xMDAlKTtcbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuXG4gICAgLmFycm93IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgYm94LXNoYWRvdzogMXB4IDFweCAzcHggMXB4IHJnYmEoNjAsIDY0LCA2NywgLjE1KTtcbiAgICAgIGJvcmRlcjogN3B4IHNvbGlkIHZhcigtLXRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gICAgICB6LWluZGV4OiAwO1xuICAgIH1cblxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJDb21wb25lbnQgZXh0ZW5kcyBEaWFsb2dCYXNlQ2xhc3MgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICBwdWJsaWMgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgQFZpZXdDaGlsZCgncG9wb3ZlcicpIHByaXZhdGUgcG9wb3ZlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVElQX0RJQUxPR19EQVRBKSBwcml2YXRlIGRhdGE6IGFueSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IERpYWxvZ1JlZjxhbnksIGFueSwgYW55PixcbiAgICBwcm90ZWN0ZWQgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdHlsZSA9IHRoaXMuY2FsY3VsYXRlU3R5bGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuZG9jdW1lbnQsICdjbGljaycpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICBmaWx0ZXIoZSA9PiAhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuZGlhbG9nUmVmLmNhbmNlbCgpKSk7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ0Bwb3BVcCcpXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvcG92ZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIGlmICghd2luZG93KSByZXR1cm47XG5cbiAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGNvbnN0IG92ZXJmbG93UmlnaHQgPSAocG9zaXRpb24ueCArIHBvc2l0aW9uLndpZHRoKSAtIHdpbmRvd1dpZHRoO1xuXG4gICAgY29uc3QgdXBkYXRlU3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBpZiAocG9zaXRpb24ueCA8IDApIHtcbiAgICAgIHVwZGF0ZVN0eWxlcy50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKGNhbGMoLTUwJSArICR7TWF0aC5hYnMocG9zaXRpb24ueCAtIDUpfXB4KSwgLTEwMCUpYDtcbiAgICB9IGVsc2UgaWYgKG92ZXJmbG93UmlnaHQgPiAwKSB7XG4gICAgICB1cGRhdGVTdHlsZXMudHJhbnNmb3JtID0gYHRyYW5zbGF0ZShjYWxjKC01MCUgLSAke292ZXJmbG93UmlnaHQgKyA1fXB4KSwgLTEwMCUpYDtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXModXBkYXRlU3R5bGVzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0eWxlID0ge1xuICAgICAgICAuLi50aGlzLnN0eWxlLFxuICAgICAgICAuLi51cGRhdGVTdHlsZXNcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlU3R5bGUoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5kaWFsb2dSZWYuZGlhbG9nQ29uZmlnIGFzIFBvcG92ZXJEYXRhPGFueT47XG4gICAgcmV0dXJuIHtcbiAgICAgICd0b3AucHgnOiBjb25maWcucG9zaXRpb24ueSAtIDEwLFxuICAgICAgJ2xlZnQucHgnOiBjb25maWcucG9zaXRpb24ueCxcbiAgICB9O1xuICB9XG59XG4iXX0=