@js-sugar/angular
Version:
JS-Sugar core package (Angular)
83 lines • 10.7 kB
JavaScript
import { Directive, Input, EventEmitter, Output } from '@angular/core';
import { TemplatePortal } from '@angular/cdk/portal';
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/overlay";
export class OverlayDirective {
constructor(_overlayService, _viewRef, _elementRef) {
this._overlayService = _overlayService;
this._viewRef = _viewRef;
this._elementRef = _elementRef;
this.hasBackdrop = false;
this.positions = [{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }];
this.showChange = new EventEmitter();
this.backdropClick = new EventEmitter();
this._show = false;
}
set show(value) {
if ((value && !this._show) || (!value && this._show)) {
if (value) {
this._createOverlay();
}
else {
this._dispose();
}
this._show = value;
}
}
get show() { return this._show; }
ngOnInit() {
}
toggle() {
this.show = !this.show;
this.showChange.emit(this.show);
}
_createOverlay() {
var portal = new TemplatePortal(this.overlay, this._viewRef);
const scrollStrategy = this._overlayService.scrollStrategies.reposition();
const positionStrategy = this._overlayService.position().flexibleConnectedTo(this._elementRef.nativeElement)
.withPositions(this.positions);
this._overlayRef = this._overlayService.create({
scrollStrategy,
positionStrategy,
hasBackdrop: this.hasBackdrop,
backdropClass: 'jss-transparent-overlay'
});
this._overlayRef.attach(portal);
if (this.hasBackdrop) {
this._backdropClickSubscription = this._overlayRef.backdropClick().subscribe(x => {
this.backdropClick.emit(x);
});
}
}
_dispose() {
this._backdropClickSubscription?.unsubscribe();
this._overlayRef?.dispose();
this._overlayRef = undefined;
}
ngOnDestroy() {
this._dispose();
}
}
OverlayDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: OverlayDirective, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
OverlayDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: OverlayDirective, selector: "[jssOverlay]", inputs: { hasBackdrop: "hasBackdrop", overlay: ["jssOverlay", "overlay"], positions: "positions", show: "show" }, outputs: { showChange: "showChange", backdropClick: "backdropClick" }, exportAs: ["jssOverlay"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: OverlayDirective, decorators: [{
type: Directive,
args: [{
selector: '[jssOverlay]',
exportAs: 'jssOverlay',
}]
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }]; }, propDecorators: { hasBackdrop: [{
type: Input
}], overlay: [{
type: Input,
args: ['jssOverlay']
}], positions: [{
type: Input
}], showChange: [{
type: Output
}], backdropClick: [{
type: Output
}], show: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9vdmVybGF5L292ZXJsYXkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQWUsS0FBSyxFQUErQixZQUFZLEVBQUUsTUFBTSxFQUNuRixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQVFyRCxNQUFNLE9BQU8sZ0JBQWdCO0lBeUJ6QixZQUNZLGVBQXdCLEVBQ3hCLFFBQTBCLEVBQzFCLFdBQXVCO1FBRnZCLG9CQUFlLEdBQWYsZUFBZSxDQUFTO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBM0IxQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixjQUFTLEdBQXNCLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFpQmpELFVBQUssR0FBRyxLQUFLLENBQUM7SUFRdEIsQ0FBQztJQXRCRCxJQUFhLElBQUksQ0FBQyxLQUFjO1FBQzVCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNuQjtZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxLQUFjLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFhMUMsUUFBUTtJQUNSLENBQUM7SUFFTSxNQUFNO1FBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO2FBQ3ZHLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUMzQyxjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixhQUFhLEVBQUUseUJBQXlCO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8sUUFBUTtRQUNaLElBQUksQ0FBQywwQkFBMEIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7OzZHQXJFUSxnQkFBZ0I7aUdBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUo1QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsWUFBWTtpQkFDekI7c0pBRVksV0FBVztzQkFBbkIsS0FBSztnQkFDZSxPQUFPO3NCQUEzQixLQUFLO3VCQUFDLFlBQVk7Z0JBQ1YsU0FBUztzQkFBakIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR00sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBJbnB1dCwgVmlld0NvbnRhaW5lclJlZiwgT25EZXN0cm95LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgT3ZlcmxheVBvc2l0aW9uIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tqc3NPdmVybGF5XScsXHJcbiAgICBleHBvcnRBczogJ2pzc092ZXJsYXknLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3ZlcmxheURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIGhhc0JhY2tkcm9wID0gZmFsc2U7XHJcbiAgICBASW5wdXQoJ2pzc092ZXJsYXknKSBvdmVybGF5ITogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIHBvc2l0aW9uczogT3ZlcmxheVBvc2l0aW9uW10gPSBbeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAndG9wJyB9XTtcclxuICAgIEBPdXRwdXQoKSBzaG93Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQE91dHB1dCgpIGJhY2tkcm9wQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqIE92ZXJsYXkgc3RhdGUgICovXHJcbiAgICBASW5wdXQoKSBzZXQgc2hvdyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICgodmFsdWUgJiYgIXRoaXMuX3Nob3cpIHx8ICghdmFsdWUgJiYgdGhpcy5fc2hvdykpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fc2hvdyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2hvdygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3Nob3c7IH1cclxuXHJcbiAgICBwcml2YXRlIF9vdmVybGF5UmVmPzogT3ZlcmxheVJlZjtcclxuICAgIHByaXZhdGUgX3Nob3cgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2JhY2tkcm9wQ2xpY2tTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXksXHJcbiAgICAgICAgcHJpdmF0ZSBfdmlld1JlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3cgPSAhdGhpcy5zaG93O1xyXG4gICAgICAgIHRoaXMuc2hvd0NoYW5nZS5lbWl0KHRoaXMuc2hvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheSgpOiB2b2lkIHtcclxuICAgICAgICB2YXIgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMub3ZlcmxheSwgdGhpcy5fdmlld1JlZik7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcclxuICAgICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheVNlcnZpY2UucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5wb3NpdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheVNlcnZpY2UuY3JlYXRlKHtcclxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXHJcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmhhc0JhY2tkcm9wLFxyXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiAnanNzLXRyYW5zcGFyZW50LW92ZXJsYXknXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQmFja2Ryb3ApIHtcclxuICAgICAgICAgICAgdGhpcy5fYmFja2Ryb3BDbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja2Ryb3BDbGljay5lbWl0KHgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZGlzcG9zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9iYWNrZHJvcENsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Rpc3Bvc2UoKTtcclxuICAgIH1cclxufVxyXG4iXX0=