ngx-kit 8.4.1 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dialog/README.md +212 -73
- package/fesm2022/ngx-kit-core.mjs +29 -73
- package/fesm2022/ngx-kit-core.mjs.map +1 -1
- package/fesm2022/ngx-kit-dialog.mjs +10 -85
- package/fesm2022/ngx-kit-dialog.mjs.map +1 -1
- package/fesm2022/ngx-kit-menu.mjs +19 -26
- package/fesm2022/ngx-kit-menu.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-kit-core.d.ts +1 -7
- package/types/ngx-kit-dialog.d.ts +9 -42
- package/types/ngx-kit-menu.d.ts +9 -9
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, InjectionToken, input, inject, ElementRef, Directive, Injector, EnvironmentInjector, computed, ChangeDetectionStrategy, Component, Injectable, makeEnvironmentProviders,
|
|
3
|
-
import { DOCUMENT, NgComponentOutlet, isPlatformServer } from '@angular/common';
|
|
2
|
+
import { signal, InjectionToken, input, inject, ElementRef, Directive, Injector, EnvironmentInjector, computed, ChangeDetectionStrategy, Component, Injectable, makeEnvironmentProviders, DestroyRef, NgModule } from '@angular/core';
|
|
4
3
|
import { DIALOG_OVERLAY_CLASSNAME, OverlayService } from 'ngx-kit/core';
|
|
5
4
|
import { Subject } from 'rxjs';
|
|
5
|
+
import { DOCUMENT, NgComponentOutlet } from '@angular/common';
|
|
6
6
|
import * as i1 from 'ngx-kit/drag-resize';
|
|
7
7
|
import { NgxDraggable } from 'ngx-kit/drag-resize';
|
|
8
8
|
|
|
@@ -126,8 +126,6 @@ class NgxDialogConfig {
|
|
|
126
126
|
* dialog - return `false` to block it (e.g. unsaved changes). Does not
|
|
127
127
|
* affect a programmatic `dialogRef.close()` call. */
|
|
128
128
|
beforeClose;
|
|
129
|
-
/** Prevent the page behind the dialog from scrolling while it's open. Default: true. */
|
|
130
|
-
lockBodyScroll = true;
|
|
131
129
|
/** Move focus into the dialog on open. Default: true. */
|
|
132
130
|
autoFocus = true;
|
|
133
131
|
/** Restore focus to the previously focused element on close. Default: true. */
|
|
@@ -296,14 +294,14 @@ class NgxDialogComponent {
|
|
|
296
294
|
this.dialogRef._setPanelElement(inject((ElementRef)).nativeElement);
|
|
297
295
|
}
|
|
298
296
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
299
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxDialogComponent, isStandalone: true, selector: "ngx-dialog-panel", host: { properties: { "class": "sizeClass()" }, classAttribute: "ngx-dialog-panel" }, ngImport: i0, template: "@if (config.header?.enable) {\n <div\n ngxDialogHeader\n [showCloseButton]=\"config.header?.showCloseButton ?? true\"\n [showMaximizeButton]=\"config.header?.showMaximizeButton ?? true\">\n {{ config.header?.title }}\n </div>\n}\n\n<ng-container\n *ngComponentOutlet=\"\n content;\n injector: contentInjector;\n environmentInjector: contentEnvironmentInjector\n \" />\n\n@if (config.footer?.enable) {\n <div ngxDialogFooter [align]=\"config.footer?.align ?? 'end'\">\n <button type=\"button\" class=\"ngx-dialog-default-close-btn\" (click)=\"dialogRef.close()\">\n {{ config.footer?.closeText ?? 'Close' }}\n </button>\n </div>\n}\n", styles: [":host{--ngx-dialog-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-fg: light-dark(#000000, #f0f0f5);--ngx-dialog-header-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-header-fg: light-dark(#1c1c22, #ffffff);display:flex;flex-direction:column;box-sizing:border-box;width:100%;height:100%;min-width:var(--ngx-dialog-min-width);min-height:inherit;overflow:hidden;background-color:var(--ngx-dialog-bg);color:var(--ngx-dialog-fg);animation:ngxDialogZoomIn .18s cubic-bezier(.25,.8,.25,1);max-height:100dvh}:host(.ngx-dialog-size-sm){--ngx-dialog-min-width: 30dvw}:host(.ngx-dialog-size-md){--ngx-dialog-min-width: 50dvw}:host(.ngx-dialog-size-lg){--ngx-dialog-min-width: 60dvw}:host(.ngx-dialog-size-xl){--ngx-dialog-min-width: 80dvw}:host(.ngx-dialog-size-full){width:100dvw;height:100dvh;max-width:none;border-radius:0}::ng-deep .dialog-header{display:flex;align-items:center;justify-content:space-between;gap:8px;flex:0 0 auto;padding:0 15px;height:50px;box-sizing:border-box;color:var(--ngx-dialog-header-fg);background:var(--ngx-dialog-header-bg);font-size:.95rem;font-weight:600;border-bottom:1px solid rgba(107,107,107,.2)}::ng-deep .dialog-header .dialog-header-title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:100%;display:flex;align-items:center}::ng-deep .dialog-header:not(.disable-drag) .dialog-header-title{cursor:move}::ng-deep .dialog-header .ngx-dialog-action-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:inherit;padding:1px;border-radius:6px;width:24px;height:24px;background:light-dark(#efeff1,#2b2b33)}::ng-deep .dialog-header .ngx-dialog-action-btn svg{width:100%}::ng-deep .dialog-header .ngx-dialog-action-btn:hover{background:light-dark(#e2e2e6,#34343d)}::ng-deep .dialog-body{display:block;overflow:auto;padding:20px;box-sizing:border-box}::ng-deep .dialog-footer{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px 15px;box-shadow:0 -1px #72727233}::ng-deep .dialog-footer.align-start{justify-content:flex-start}::ng-deep .dialog-footer.align-end{justify-content:flex-end}::ng-deep .dialog-footer.align-center{justify-content:center}::ng-deep .dialog-footer.align-space-between{justify-content:space-between}::ng-deep .dialog-footer.align-space-around{justify-content:space-around}::ng-deep .ngx-dialog-backdrop{background:light-dark(rgba(71,71,71,.5490196078),rgba(39,38,38,.4509803922))!important;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}::ng-deep .ngx-dialog-fullscreen{width:100dvw!important;height:100dvh!important;max-height:unset!important;max-width:unset!important;transform:none!important;inset:0!important}@keyframes ngxDialogZoomIn{0%{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){:host{animation:none}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgxDialogHeader, selector: "ngx-dialog-header,[ngxDialogHeader]", inputs: ["showCloseButton", "showMaximizeButton"], exportAs: ["ngxDialogHeader"] }, { kind: "directive", type: NgxDialogFooter, selector: "ngx-dialog-footer,[ngxDialogFooter]", inputs: ["align"], exportAs: ["ngxDialogFooter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
297
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxDialogComponent, isStandalone: true, selector: "ngx-dialog-panel", host: { properties: { "class": "sizeClass()" }, classAttribute: "ngx-dialog-panel" }, ngImport: i0, template: "@if (config.header?.enable) {\n <div\n ngxDialogHeader\n [showCloseButton]=\"config.header?.showCloseButton ?? true\"\n [showMaximizeButton]=\"config.header?.showMaximizeButton ?? true\">\n {{ config.header?.title }}\n </div>\n}\n\n<ng-container\n *ngComponentOutlet=\"\n content;\n injector: contentInjector;\n environmentInjector: contentEnvironmentInjector\n \" />\n\n@if (config.footer?.enable) {\n <div ngxDialogFooter [align]=\"config.footer?.align ?? 'end'\">\n <button type=\"button\" class=\"ngx-dialog-default-close-btn\" (click)=\"dialogRef.close()\">\n {{ config.footer?.closeText ?? 'Close' }}\n </button>\n </div>\n}\n", styles: [":host{--ngx-dialog-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-fg: light-dark(#000000, #f0f0f5);--ngx-dialog-header-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-header-fg: light-dark(#1c1c22, #ffffff);display:flex;flex-direction:column;box-sizing:border-box;width:100%;height:100%;min-width:var(--ngx-dialog-min-width);min-height:inherit;overflow:hidden;background-color:var(--ngx-dialog-bg);color:var(--ngx-dialog-fg);animation:ngxDialogZoomIn .18s cubic-bezier(.25,.8,.25,1);max-height:100dvh}:host(.ngx-dialog-size-sm){--ngx-dialog-min-width: 30dvw}:host(.ngx-dialog-size-md){--ngx-dialog-min-width: 50dvw}:host(.ngx-dialog-size-lg){--ngx-dialog-min-width: 60dvw}:host(.ngx-dialog-size-xl){--ngx-dialog-min-width: 80dvw}:host(.ngx-dialog-size-full){width:100dvw;height:100dvh;max-width:none;border-radius:0}::ng-deep .ngx-dialog-inner{display:flex;justify-content:center;flex-direction:column;max-height:inherit;height:inherit}::ng-deep .dialog-header{display:flex;align-items:center;justify-content:space-between;gap:8px;flex:0 0 auto;padding:0 15px;height:50px;box-sizing:border-box;color:var(--ngx-dialog-header-fg);background:var(--ngx-dialog-header-bg);font-size:.95rem;font-weight:600;border-bottom:1px solid rgba(107,107,107,.2)}::ng-deep .dialog-header .dialog-header-title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:100%;display:flex;align-items:center}::ng-deep .dialog-header:not(.disable-drag) .dialog-header-title{cursor:move}::ng-deep .dialog-header .ngx-dialog-action-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:inherit;padding:1px;border-radius:6px;width:24px;height:24px;background:light-dark(#efeff1,#2b2b33)}::ng-deep .dialog-header .ngx-dialog-action-btn svg{width:100%}::ng-deep .dialog-header .ngx-dialog-action-btn:hover{background:light-dark(#e2e2e6,#34343d)}::ng-deep .dialog-body{display:block;overflow:auto;padding:20px;box-sizing:border-box;flex:auto}::ng-deep .dialog-footer{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px 15px;box-shadow:0 -1px #72727233}::ng-deep .dialog-footer.align-start{justify-content:flex-start}::ng-deep .dialog-footer.align-end{justify-content:flex-end}::ng-deep .dialog-footer.align-center{justify-content:center}::ng-deep .dialog-footer.align-space-between{justify-content:space-between}::ng-deep .dialog-footer.align-space-around{justify-content:space-around}::ng-deep .ngx-dialog-backdrop{background:light-dark(rgba(71,71,71,.5490196078),rgba(39,38,38,.4509803922))!important;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}::ng-deep .ngx-dialog-fullscreen{width:100dvw!important;height:100dvh!important;max-height:unset!important;max-width:unset!important;transform:none!important;inset:0!important}@keyframes ngxDialogZoomIn{0%{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){:host{animation:none}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgxDialogHeader, selector: "ngx-dialog-header,[ngxDialogHeader]", inputs: ["showCloseButton", "showMaximizeButton"], exportAs: ["ngxDialogHeader"] }, { kind: "directive", type: NgxDialogFooter, selector: "ngx-dialog-footer,[ngxDialogFooter]", inputs: ["align"], exportAs: ["ngxDialogFooter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
300
298
|
}
|
|
301
299
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogComponent, decorators: [{
|
|
302
300
|
type: Component,
|
|
303
301
|
args: [{ selector: 'ngx-dialog-panel', standalone: true, imports: [NgComponentOutlet, NgxDialogHeader, NgxDialogFooter], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
304
302
|
class: 'ngx-dialog-panel',
|
|
305
303
|
'[class]': 'sizeClass()',
|
|
306
|
-
}, template: "@if (config.header?.enable) {\n <div\n ngxDialogHeader\n [showCloseButton]=\"config.header?.showCloseButton ?? true\"\n [showMaximizeButton]=\"config.header?.showMaximizeButton ?? true\">\n {{ config.header?.title }}\n </div>\n}\n\n<ng-container\n *ngComponentOutlet=\"\n content;\n injector: contentInjector;\n environmentInjector: contentEnvironmentInjector\n \" />\n\n@if (config.footer?.enable) {\n <div ngxDialogFooter [align]=\"config.footer?.align ?? 'end'\">\n <button type=\"button\" class=\"ngx-dialog-default-close-btn\" (click)=\"dialogRef.close()\">\n {{ config.footer?.closeText ?? 'Close' }}\n </button>\n </div>\n}\n", styles: [":host{--ngx-dialog-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-fg: light-dark(#000000, #f0f0f5);--ngx-dialog-header-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-header-fg: light-dark(#1c1c22, #ffffff);display:flex;flex-direction:column;box-sizing:border-box;width:100%;height:100%;min-width:var(--ngx-dialog-min-width);min-height:inherit;overflow:hidden;background-color:var(--ngx-dialog-bg);color:var(--ngx-dialog-fg);animation:ngxDialogZoomIn .18s cubic-bezier(.25,.8,.25,1);max-height:100dvh}:host(.ngx-dialog-size-sm){--ngx-dialog-min-width: 30dvw}:host(.ngx-dialog-size-md){--ngx-dialog-min-width: 50dvw}:host(.ngx-dialog-size-lg){--ngx-dialog-min-width: 60dvw}:host(.ngx-dialog-size-xl){--ngx-dialog-min-width: 80dvw}:host(.ngx-dialog-size-full){width:100dvw;height:100dvh;max-width:none;border-radius:0}::ng-deep .dialog-header{display:flex;align-items:center;justify-content:space-between;gap:8px;flex:0 0 auto;padding:0 15px;height:50px;box-sizing:border-box;color:var(--ngx-dialog-header-fg);background:var(--ngx-dialog-header-bg);font-size:.95rem;font-weight:600;border-bottom:1px solid rgba(107,107,107,.2)}::ng-deep .dialog-header .dialog-header-title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:100%;display:flex;align-items:center}::ng-deep .dialog-header:not(.disable-drag) .dialog-header-title{cursor:move}::ng-deep .dialog-header .ngx-dialog-action-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:inherit;padding:1px;border-radius:6px;width:24px;height:24px;background:light-dark(#efeff1,#2b2b33)}::ng-deep .dialog-header .ngx-dialog-action-btn svg{width:100%}::ng-deep .dialog-header .ngx-dialog-action-btn:hover{background:light-dark(#e2e2e6,#34343d)}::ng-deep .dialog-body{display:block;overflow:auto;padding:20px;box-sizing:border-box}::ng-deep .dialog-footer{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px 15px;box-shadow:0 -1px #72727233}::ng-deep .dialog-footer.align-start{justify-content:flex-start}::ng-deep .dialog-footer.align-end{justify-content:flex-end}::ng-deep .dialog-footer.align-center{justify-content:center}::ng-deep .dialog-footer.align-space-between{justify-content:space-between}::ng-deep .dialog-footer.align-space-around{justify-content:space-around}::ng-deep .ngx-dialog-backdrop{background:light-dark(rgba(71,71,71,.5490196078),rgba(39,38,38,.4509803922))!important;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}::ng-deep .ngx-dialog-fullscreen{width:100dvw!important;height:100dvh!important;max-height:unset!important;max-width:unset!important;transform:none!important;inset:0!important}@keyframes ngxDialogZoomIn{0%{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){:host{animation:none}}\n"] }]
|
|
304
|
+
}, template: "@if (config.header?.enable) {\n <div\n ngxDialogHeader\n [showCloseButton]=\"config.header?.showCloseButton ?? true\"\n [showMaximizeButton]=\"config.header?.showMaximizeButton ?? true\">\n {{ config.header?.title }}\n </div>\n}\n\n<ng-container\n *ngComponentOutlet=\"\n content;\n injector: contentInjector;\n environmentInjector: contentEnvironmentInjector\n \" />\n\n@if (config.footer?.enable) {\n <div ngxDialogFooter [align]=\"config.footer?.align ?? 'end'\">\n <button type=\"button\" class=\"ngx-dialog-default-close-btn\" (click)=\"dialogRef.close()\">\n {{ config.footer?.closeText ?? 'Close' }}\n </button>\n </div>\n}\n", styles: [":host{--ngx-dialog-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-fg: light-dark(#000000, #f0f0f5);--ngx-dialog-header-bg: light-dark(#ffffff, #1c1c22);--ngx-dialog-header-fg: light-dark(#1c1c22, #ffffff);display:flex;flex-direction:column;box-sizing:border-box;width:100%;height:100%;min-width:var(--ngx-dialog-min-width);min-height:inherit;overflow:hidden;background-color:var(--ngx-dialog-bg);color:var(--ngx-dialog-fg);animation:ngxDialogZoomIn .18s cubic-bezier(.25,.8,.25,1);max-height:100dvh}:host(.ngx-dialog-size-sm){--ngx-dialog-min-width: 30dvw}:host(.ngx-dialog-size-md){--ngx-dialog-min-width: 50dvw}:host(.ngx-dialog-size-lg){--ngx-dialog-min-width: 60dvw}:host(.ngx-dialog-size-xl){--ngx-dialog-min-width: 80dvw}:host(.ngx-dialog-size-full){width:100dvw;height:100dvh;max-width:none;border-radius:0}::ng-deep .ngx-dialog-inner{display:flex;justify-content:center;flex-direction:column;max-height:inherit;height:inherit}::ng-deep .dialog-header{display:flex;align-items:center;justify-content:space-between;gap:8px;flex:0 0 auto;padding:0 15px;height:50px;box-sizing:border-box;color:var(--ngx-dialog-header-fg);background:var(--ngx-dialog-header-bg);font-size:.95rem;font-weight:600;border-bottom:1px solid rgba(107,107,107,.2)}::ng-deep .dialog-header .dialog-header-title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:100%;display:flex;align-items:center}::ng-deep .dialog-header:not(.disable-drag) .dialog-header-title{cursor:move}::ng-deep .dialog-header .ngx-dialog-action-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:inherit;padding:1px;border-radius:6px;width:24px;height:24px;background:light-dark(#efeff1,#2b2b33)}::ng-deep .dialog-header .ngx-dialog-action-btn svg{width:100%}::ng-deep .dialog-header .ngx-dialog-action-btn:hover{background:light-dark(#e2e2e6,#34343d)}::ng-deep .dialog-body{display:block;overflow:auto;padding:20px;box-sizing:border-box;flex:auto}::ng-deep .dialog-footer{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px 15px;box-shadow:0 -1px #72727233}::ng-deep .dialog-footer.align-start{justify-content:flex-start}::ng-deep .dialog-footer.align-end{justify-content:flex-end}::ng-deep .dialog-footer.align-center{justify-content:center}::ng-deep .dialog-footer.align-space-between{justify-content:space-between}::ng-deep .dialog-footer.align-space-around{justify-content:space-around}::ng-deep .ngx-dialog-backdrop{background:light-dark(rgba(71,71,71,.5490196078),rgba(39,38,38,.4509803922))!important;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}::ng-deep .ngx-dialog-fullscreen{width:100dvw!important;height:100dvh!important;max-height:unset!important;max-width:unset!important;transform:none!important;inset:0!important}@keyframes ngxDialogZoomIn{0%{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){:host{animation:none}}\n"] }]
|
|
307
305
|
}], ctorParameters: () => [] });
|
|
308
306
|
|
|
309
307
|
class NgxDialogService {
|
|
@@ -354,7 +352,6 @@ class NgxDialogService {
|
|
|
354
352
|
canClose: () => dialogRef.beforeClose?.() ?? true,
|
|
355
353
|
restoreFocus: resolvedConfig.restoreFocus ?? true,
|
|
356
354
|
autoFocus: resolvedConfig.autoFocus ?? true,
|
|
357
|
-
lockBodyScroll: resolvedConfig.lockBodyScroll ?? true,
|
|
358
355
|
backdropClass: resolvedConfig.backdropClass,
|
|
359
356
|
panelClass: resolvedConfig.panelClass,
|
|
360
357
|
configure: (_instance, ref) => this.applySizing(ref.nativeElement, resolvedConfig),
|
|
@@ -388,48 +385,13 @@ class NgxDialogService {
|
|
|
388
385
|
el.style.maxHeight = config.maxHeight;
|
|
389
386
|
}
|
|
390
387
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
391
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogService });
|
|
388
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogService, providedIn: 'root' });
|
|
392
389
|
}
|
|
393
390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogService, decorators: [{
|
|
394
|
-
type: Injectable
|
|
391
|
+
type: Injectable,
|
|
392
|
+
args: [{ providedIn: 'root' }]
|
|
395
393
|
}] });
|
|
396
394
|
|
|
397
|
-
const NOT_INITIALIZED_MESSAGE = '[ngx-kit/dialog] Dialog.* was called before provideNgxDialog() ran. ' +
|
|
398
|
-
'Add provideNgxDialog() to your app providers, or inject NgxDialogService directly instead of using the static Dialog API.';
|
|
399
|
-
/**
|
|
400
|
-
* Static convenience API over `NgxDialogService`, so you can call
|
|
401
|
-
* `Dialog.open(...)` from anywhere without injecting the service manually.
|
|
402
|
-
*
|
|
403
|
-
* SSR note: the instance backing this static class is process-wide, not
|
|
404
|
-
* per-request, so it is deliberately left unset on the server (see
|
|
405
|
-
* `provideNgxDialog()`). Inject `NgxDialogService` directly in SSR code paths.
|
|
406
|
-
*/
|
|
407
|
-
class Dialog {
|
|
408
|
-
static serviceInstance = null;
|
|
409
|
-
static openRefs = new Set();
|
|
410
|
-
/** @internal set by `provideNgxDialog()`'s environment initializer. */
|
|
411
|
-
static _setService(svc) {
|
|
412
|
-
this.serviceInstance = svc;
|
|
413
|
-
}
|
|
414
|
-
static get service() {
|
|
415
|
-
if (!this.serviceInstance) {
|
|
416
|
-
throw new Error(NOT_INITIALIZED_MESSAGE);
|
|
417
|
-
}
|
|
418
|
-
return this.serviceInstance;
|
|
419
|
-
}
|
|
420
|
-
static open(component, config) {
|
|
421
|
-
const scopedService = config?.injector?.get(NgxDialogService, null);
|
|
422
|
-
const ref = (scopedService ?? this.service).open(component, config);
|
|
423
|
-
this.openRefs.add(ref);
|
|
424
|
-
ref.afterClosed.subscribe(() => this.openRefs.delete(ref));
|
|
425
|
-
return ref;
|
|
426
|
-
}
|
|
427
|
-
static closeAll() {
|
|
428
|
-
this.openRefs.forEach((ref) => ref.close());
|
|
429
|
-
this.service.closeAll();
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
395
|
function provideNgxDialog(config) {
|
|
434
396
|
return makeEnvironmentProviders([
|
|
435
397
|
{
|
|
@@ -437,54 +399,17 @@ function provideNgxDialog(config) {
|
|
|
437
399
|
useValue: { ...new NgxDialogConfig(), ...(config || {}) },
|
|
438
400
|
},
|
|
439
401
|
NgxDialogService,
|
|
440
|
-
provideEnvironmentInitializer(() => {
|
|
441
|
-
if (isPlatformServer(inject(PLATFORM_ID))) {
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
Dialog._setService(inject(NgxDialogService));
|
|
445
|
-
}),
|
|
446
402
|
]);
|
|
447
403
|
}
|
|
448
404
|
|
|
449
|
-
/**
|
|
450
|
-
* Why this can't be pure CSS flexbox: the header/body/footer elements are
|
|
451
|
-
* *grandchildren* of the dialog panel (panel -> `*ngComponentOutlet`'s host
|
|
452
|
-
* element -> header/body/footer), not direct children, because the content
|
|
453
|
-
* component that hosts them is arbitrary and we don't control its own host
|
|
454
|
-
* styling. `display:flex;flex-direction:column` on the panel therefore can't
|
|
455
|
-
* size the body against the header/footer through that extra layer, so we
|
|
456
|
-
* measure and set an explicit `max-height` instead, driven by a
|
|
457
|
-
* `ResizeObserver` on the panel (not a `window:resize` listener, so it also
|
|
458
|
-
* reacts to the dialog itself changing size, e.g. via `config.size`).
|
|
459
|
-
*/
|
|
460
405
|
class NgxDialogBody {
|
|
461
|
-
el = inject(
|
|
462
|
-
renderer = inject(Renderer2);
|
|
406
|
+
el = inject(ElementRef);
|
|
463
407
|
dialogRef = inject(DIALOG_REF);
|
|
464
408
|
destroyRef = inject(DestroyRef);
|
|
465
409
|
constructor() {
|
|
466
410
|
this.dialogRef._setBodyElement(this.el.nativeElement);
|
|
467
411
|
this.destroyRef.onDestroy(() => this.dialogRef._setBodyElement(null));
|
|
468
|
-
|
|
469
|
-
const panel = this.dialogRef.panelEl();
|
|
470
|
-
if (!panel || typeof ResizeObserver === 'undefined') {
|
|
471
|
-
return;
|
|
472
|
-
}
|
|
473
|
-
const recompute = () => this.recomputeHeight(panel);
|
|
474
|
-
const observer = new ResizeObserver(recompute);
|
|
475
|
-
observer.observe(panel);
|
|
476
|
-
recompute();
|
|
477
|
-
onCleanup(() => observer.disconnect());
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
recomputeHeight(panel) {
|
|
481
|
-
const headerHeight = this.dialogRef.headerEl()?.offsetHeight ?? 0;
|
|
482
|
-
const footerHeight = this.dialogRef.footerEl()?.offsetHeight ?? 0;
|
|
483
|
-
const panelHeight = Math.min(panel.clientHeight, window.innerHeight);
|
|
484
|
-
const available = panelHeight - headerHeight - footerHeight;
|
|
485
|
-
if (available > 0) {
|
|
486
|
-
this.renderer.setStyle(this.el.nativeElement, 'height', `${available}px`);
|
|
487
|
-
}
|
|
412
|
+
this.el.nativeElement.parentElement?.classList.add('ngx-dialog-inner');
|
|
488
413
|
}
|
|
489
414
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogBody, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
490
415
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxDialogBody, isStandalone: true, selector: "ngx-dialog-body,[ngxDialogBody]", host: { classAttribute: "dialog-body" }, exportAs: ["ngxDialogBody"], ngImport: i0 });
|
|
@@ -518,5 +443,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
|
|
|
518
443
|
* Generated bundle index. Do not edit.
|
|
519
444
|
*/
|
|
520
445
|
|
|
521
|
-
export { DIALOG_CONTENT, DIALOG_DATA, DIALOG_REF,
|
|
446
|
+
export { DIALOG_CONTENT, DIALOG_DATA, DIALOG_REF, NGX_DIALOG_CONFIG, NgxDialogBody, NgxDialogComponent, NgxDialogConfig, NgxDialogFooter, NgxDialogHeader, NgxDialogModule, NgxDialogService, provideNgxDialog };
|
|
522
447
|
//# sourceMappingURL=ngx-kit-dialog.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kit-dialog.mjs","sources":["../../../projects/libs/dialog/configs/dialog-ref.ts","../../../projects/libs/dialog/configs/dialog-config.ts","../../../projects/libs/dialog/tokens/dialog.tokens.ts","../../../projects/libs/dialog/directives/footer.directive.ts","../../../projects/libs/dialog/directives/header.directive.ts","../../../projects/libs/dialog/components/ngx-dialog.component.ts","../../../projects/libs/dialog/components/ngx-dialog.component.html","../../../projects/libs/dialog/services/ngx-dialog.service.ts","../../../projects/libs/dialog/dialog.facade.ts","../../../projects/libs/dialog/ngx-dialog.provider.ts","../../../projects/libs/dialog/directives/body.directive.ts","../../../projects/libs/dialog/ngx-dialog.module.ts","../../../projects/libs/dialog/ngx-kit-dialog.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from 'ngx-kit/core';\n\nlet uniqueId = 0;\nfunction nextDialogId(): string {\n uniqueId += 1;\n return `ngx-dialog-${Date.now().toString(36)}-${uniqueId}`;\n}\n\nexport class NgxDialogRef<R = any> {\n readonly id = nextDialogId();\n\n /** true from the moment `close()` is called, even before teardown finishes. */\n readonly closing = signal(false);\n /** true once the dialog has been fully removed from the DOM. */\n readonly closed = signal(false);\n\n private readonly _afterClosed = new Subject<R | undefined>();\n /** Emits the result exactly once, after the dialog has been fully torn down. */\n readonly afterClosed: Observable<R | undefined> = this._afterClosed.asObservable();\n\n /** @internal set by the layout directives; read by NgxDialogBody to size itself. */\n readonly headerEl = signal<HTMLElement | null>(null);\n /** @internal */\n readonly footerEl = signal<HTMLElement | null>(null);\n /** @internal */\n readonly bodyEl = signal<HTMLElement | null>(null);\n /** @internal the dialog panel's own host element. */\n readonly panelEl = signal<HTMLElement | null>(null);\n\n /** Optional synchronous guard - return `false` to prevent Escape/outside-click from closing. */\n beforeClose?: () => boolean;\n\n private overlayRef?: OverlayRef<unknown>;\n private result: R | undefined;\n\n /** @internal used by NgxDialogService right after creating the overlay. */\n _attachOverlayRef(ref: OverlayRef<unknown>): void {\n this.overlayRef = ref;\n }\n\n /** @internal used by the header/footer/body directives and the panel component. */\n _setHeaderElement(el: HTMLElement | null): void {\n this.headerEl.set(el);\n }\n /** @internal */\n _setFooterElement(el: HTMLElement | null): void {\n this.footerEl.set(el);\n }\n /** @internal */\n _setBodyElement(el: HTMLElement | null): void {\n this.bodyEl.set(el);\n }\n /** @internal */\n _setPanelElement(el: HTMLElement | null): void {\n this.panelEl.set(el);\n }\n\n /** Closes the dialog and emits `result` on `afterClosed` once torn down. Idempotent. */\n close(result?: R): void {\n if (this.closing() || this.closed()) {\n return;\n }\n this.closing.set(true);\n this.result = result;\n this.overlayRef?.close();\n }\n\n /** @internal called by NgxDialogService's `onClosed` callback once the overlay is fully torn down. */\n _finalizeClose(): void {\n if (this.closed()) {\n return;\n }\n this.closed.set(true);\n this._afterClosed.next(this.result);\n this._afterClosed.complete();\n }\n}\n","import { Injector } from '@angular/core';\nimport { NgxDialogFooterAlign } from '../directives/footer.directive';\n\nexport type NgxDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nexport interface NgxDialogHeaderConfig {\n enable?: boolean;\n title?: string;\n showCloseButton?: boolean;\n showMaximizeButton?: boolean;\n}\n\nexport interface NgxDialogFooterConfig {\n enable?: boolean;\n /** Text for the auto-generated close button. Default: 'Close'. */\n closeText?: string;\n align?: NgxDialogFooterAlign;\n}\n\n/**\n * BREAKING CHANGE from the previous version of this config:\n * - `allowCloseOnOutsideClick` -> `closeOnOutsideClick` (naming now matches\n * `ngx-kit/overlay`'s options, which this service is built directly on).\n * - `header`/`footer` are now actually wired up (previously declared but\n * unused) - set `enable: true` to get an automatic header/footer without\n * having to place the `ngxDialogHeader`/`ngxDialogFooter` directives\n * yourself inside the content component.\n */\nexport class NgxDialogConfig<DataType = any> {\n /** Data made available to the content component (and to `ngx-dialog-panel`\n * itself) via the `DIALOG_DATA` injection token. */\n data?: DataType = {} as DataType;\n\n /** Named size preset - sets sensible min/max width bounds. Combine with\n * `width`/`maxWidth`/... for full manual control. */\n size?: NgxDialogSize;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n minHeight?: string;\n maxHeight?: string;\n\n /** Extra class(es) on the dialog panel (the `ngx-dialog-panel` host). */\n panelClass?: string | string[] = 'ngx-kit';\n /** Extra class(es) on the backdrop element behind the panel. */\n backdropClass?: string | string[] = 'ngx-dialog-backdrop';\n\n header?: NgxDialogHeaderConfig = {\n enable: false,\n showCloseButton: true,\n showMaximizeButton: true,\n };\n footer?: NgxDialogFooterConfig = { enable: false, align: 'end' };\n\n /** Close when clicking outside the panel.\n * - Default: `true`\n * */\n closeOnOutsideClick?: boolean = true;\n /** Close on Escape.\n * - Default: `true`\n * */\n closeOnEscape?: boolean = true;\n /** Shorthand for `closeOnOutsideClick: false, closeOnEscape: false` - the\n * dialog can then only be closed programmatically (e.g. via its own\n * buttons calling `dialogRef.close()`). */\n disableClose?: boolean = false;\n /** Synchronous guard consulted before Escape/outside-click would close the\n * dialog - return `false` to block it (e.g. unsaved changes). Does not\n * affect a programmatic `dialogRef.close()` call. */\n beforeClose?: () => boolean;\n\n /** Prevent the page behind the dialog from scrolling while it's open. Default: true. */\n lockBodyScroll?: boolean = true;\n /** Move focus into the dialog on open. Default: true. */\n autoFocus?: boolean = true;\n /** Restore focus to the previously focused element on close. Default: true. */\n restoreFocus?: boolean = true;\n /** Render via the native Popover API when supported. Default: true. */\n usePopover?: boolean = true;\n\n role?: 'dialog' | 'alertdialog' = 'dialog';\n ariaLabel?: string;\n ariaLabelledby?: string;\n ariaDescribedby?: string;\n\n /** Entry animation for the panel. Default: 'zoom'. */\n animation?: 'zoom' | 'fade' | 'slide-up' | 'none' = 'zoom';\n\n /** Parent injector for the content component (and `ngx-dialog-panel`\n * itself). Defaults to the dialog service's injector. */\n injector?: Injector;\n\n constructor(init?: Partial<NgxDialogConfig<DataType>>) {\n Object.assign(this, init);\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { NgxDialogConfig } from '../configs/dialog-config';\nimport { NgxDialogRef } from '../configs/dialog-ref';\n\nexport const DIALOG_DATA = new InjectionToken<any>('NGX_DIALOG_DATA');\nexport const DIALOG_REF = new InjectionToken<NgxDialogRef<any>>('NGX_DIALOG_REF');\n/** The resolved config for the dialog currently being rendered. */\n\nexport const NGX_DIALOG_CONFIG = new InjectionToken<NgxDialogConfig<any>>('NGX_DIALOG_CONFIG', {\n factory: () => new NgxDialogConfig(),\n});\n/** The arbitrary content component passed to `open()`, projected via `*ngComponentOutlet`. */\nexport const DIALOG_CONTENT = new InjectionToken<Type<any>>('NGX_DIALOG_CONTENT');\n","import { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { DIALOG_REF } from '../tokens/dialog.tokens';\n\nexport type NgxDialogFooterAlign = 'start' | 'end' | 'center' | 'space-between' | 'space-around';\n\n@Directive({\n selector: 'ngx-dialog-footer,[ngxDialogFooter]',\n standalone: true,\n host: {\n class: 'dialog-footer',\n '[class.align-start]': 'align() === \"start\"',\n '[class.align-end]': 'align() === \"end\"',\n '[class.align-space-between]': 'align() === \"space-between\"',\n '[class.align-center]': 'align() === \"center\"',\n '[class.align-space-around]': 'align() === \"space-around\"',\n },\n exportAs: 'ngxDialogFooter',\n})\nexport class NgxDialogFooter implements OnInit, OnDestroy {\n readonly align = input<NgxDialogFooterAlign>('end');\n\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly dialogRef = inject(DIALOG_REF);\n\n ngOnInit(): void {\n this.dialogRef._setFooterElement(this.el.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.dialogRef._setFooterElement(null);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnInit } from '@angular/core';\nimport { DIALOG_REF, NGX_DIALOG_CONFIG } from '../tokens/dialog.tokens';\nimport { NgxDraggable } from 'ngx-kit/drag-resize';\nimport { DIALOG_OVERLAY_CLASSNAME } from 'ngx-kit/core';\n\nconst CLOSE_ICON_SVG = `<svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 320 512\" aria-hidden=\"true\">\n <path d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/>\n </svg>`;\nconst MAXIMIZE_ICON_SVG = `<svg name=\"maximize\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.4852 16.5149C6.9104 15.9401 7.00595 13.4982 7.00595 13.4982M7.4852 16.5149C8.06001 17.0897 10.5019 16.994 10.5019 16.994M7.4852 16.5149L11 13M16.5149 7.48512C15.9401 6.91031 13.4982 7.00596 13.4982 7.00596M16.5149 7.48512C17.0897 8.05993 16.994 10.5018 16.994 10.5018M16.5149 7.48512L13 11\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n<path d=\"M2.5 12C2.5 7.52166 2.5 5.28249 3.89124 3.89124C5.28249 2.5 7.52166 2.5 12 2.5C16.4783 2.5 18.7175 2.5 20.1088 3.89124C21.5 5.28249 21.5 7.52166 21.5 12C21.5 16.4783 21.5 18.7175 20.1088 20.1088C18.7175 21.5 16.4783 21.5 12 21.5C7.52166 21.5 5.28249 21.5 3.89124 20.1088C2.5 18.7175 2.5 16.4783 2.5 12Z\" stroke-width=\"1.5\"/>\n</svg>`;\nconst RESTORE_ICON_SVG = `<svg name=\"restore\" stroke=\"currentColor\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M2.5 12C2.5 7.52166 2.5 5.28249 3.89124 3.89124C5.28249 2.5 7.52166 2.5 12 2.5C16.4783 2.5 18.7175 2.5 20.1088 3.89124C21.5 5.28249 21.5 7.52166 21.5 12C21.5 16.4783 21.5 18.7175 20.1088 20.1088C18.7175 21.5 16.4783 21.5 12 21.5C7.52166 21.5 5.28249 21.5 3.89124 20.1088C2.5 18.7175 2.5 16.4783 2.5 12Z\" stroke-width=\"1.5\"/>\n<path d=\"M12.9833 11.0167C12.4085 10.4419 12.5041 8 12.5041 8M12.9833 11.0167C13.5581 11.5915 16 11.4958 16 11.4958M12.9833 11.0167L17 7M11.0131 12.9868C10.4383 12.412 7.99641 12.5077 7.99641 12.5077M11.0131 12.9868C11.5879 13.5616 11.4922 16.0035 11.4922 16.0035M11.0131 12.9868L7 16.9999\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>`;\n\n@Directive({\n selector: 'ngx-dialog-header,[ngxDialogHeader]',\n standalone: true,\n hostDirectives: [NgxDraggable],\n host: { class: 'dialog-header' },\n exportAs: 'ngxDialogHeader',\n})\nexport class NgxDialogHeader implements OnInit {\n private config = inject(NGX_DIALOG_CONFIG);\n readonly showCloseButton = input(this.config.header?.showCloseButton ?? true);\n readonly showMaximizeButton = input(this.config.header?.showMaximizeButton ?? true);\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n private readonly document = inject(DOCUMENT);\n private readonly dialogRef = inject(DIALOG_REF);\n\n private readonly drag = inject(NgxDraggable);\n\n private isMaximized = false;\n\n ngOnInit(): void {\n this.drag.dragRootElement.set('.ngx-ui-overlay');\n this.drag.dragHandle.set('.dialog-header-title');\n // Wrap the existing (Angular-rendered) header content in a title span by\n // MOVING the actual DOM nodes, not by re-serializing/re-parsing\n // `innerHTML`. The original implementation did\n // `el.innerHTML = '<span>' + el.innerHTML + '</span>'`, which silently\n // destroys any event listeners or component state living inside the\n // header content (anything beyond static text) because the browser\n // throws away and re-parses the whole subtree.\n const titleWrapper = this.document.createElement('span');\n titleWrapper.className = 'dialog-header-title';\n while (this.el.nativeElement.firstChild) {\n titleWrapper.appendChild(this.el.nativeElement.firstChild);\n }\n this.el.nativeElement.appendChild(titleWrapper);\n if (this.showMaximizeButton()) {\n const fullScreenBtn = this.document.createElement('button');\n fullScreenBtn.type = 'button';\n fullScreenBtn.className = 'ngx-dialog-action-btn';\n fullScreenBtn.setAttribute('aria-label', 'Maximaize');\n fullScreenBtn.setAttribute('title', 'Maximaize');\n fullScreenBtn.innerHTML = MAXIMIZE_ICON_SVG;\n fullScreenBtn.addEventListener('click', (ev: Event) => this.fullScreen(ev));\n this.el.nativeElement.appendChild(fullScreenBtn);\n }\n if (this.showCloseButton()) {\n const closeBtn = this.document.createElement('button');\n closeBtn.type = 'button';\n closeBtn.className = 'ngx-dialog-action-btn close-btn';\n closeBtn.setAttribute('aria-label', 'Close');\n closeBtn.setAttribute('title', 'Close');\n closeBtn.innerHTML = CLOSE_ICON_SVG;\n closeBtn.addEventListener('click', () => this.dialogRef.close());\n this.el.nativeElement.appendChild(closeBtn);\n }\n\n this.dialogRef._setHeaderElement(this.el.nativeElement);\n }\n\n private fullScreen(ev: Event) {\n const overlay = this.el.nativeElement.closest(`.${DIALOG_OVERLAY_CLASSNAME}`);\n this.isMaximized = !this.isMaximized;\n this.drag.disabled.set(this.isMaximized);\n if (overlay) {\n overlay.classList.toggle('ngx-dialog-fullscreen');\n const btn = ev.currentTarget as HTMLButtonElement;\n btn.innerHTML = this.isMaximized ? RESTORE_ICON_SVG : MAXIMIZE_ICON_SVG;\n btn.setAttribute('aria-label', this.isMaximized ? 'Restore' : 'Maximaize');\n btn.setAttribute('title', this.isMaximized ? 'Restore' : 'Maximaize');\n }\n }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EnvironmentInjector,\n Injector,\n computed,\n inject,\n} from '@angular/core';\nimport { NGX_DIALOG_CONFIG, DIALOG_CONTENT, DIALOG_REF } from '../tokens/dialog.tokens';\nimport { NgxDialogFooter } from '../directives/footer.directive';\nimport { NgxDialogHeader } from '../directives/header.directive';\n\n/**\n * The dialog \"panel\" shell. It no longer owns the backdrop, centering,\n * focus trap, Escape handling or outside-click handling - all of that now\n * lives in `OverlayService`, which this component is rendered inside of.\n * This is intentionally a thin, fully signal-driven shell: no\n * `AfterViewInit`, no manual `ChangeDetectorRef.detectChanges()`, no\n * imperative style writes. Angular schedules change detection automatically\n * whenever a signal read from the template changes, including in zoneless\n * apps.\n */\n@Component({\n selector: 'ngx-dialog-panel',\n standalone: true,\n imports: [NgComponentOutlet, NgxDialogHeader, NgxDialogFooter],\n templateUrl: './ngx-dialog.component.html',\n styleUrl: './ngx-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngx-dialog-panel',\n '[class]': 'sizeClass()',\n },\n})\nexport class NgxDialogComponent {\n protected readonly dialogRef = inject(DIALOG_REF);\n protected readonly config = inject(NGX_DIALOG_CONFIG);\n protected readonly content = inject(DIALOG_CONTENT);\n protected readonly contentInjector = inject(Injector);\n protected readonly contentEnvironmentInjector = inject(EnvironmentInjector);\n\n protected readonly sizeClass = computed(() =>\n this.config.size ? `ngx-dialog-size-${this.config.size}` : '',\n );\n\n constructor() {\n this.dialogRef._setPanelElement(inject(ElementRef<HTMLElement>).nativeElement);\n }\n}\n","@if (config.header?.enable) {\n <div\n ngxDialogHeader\n [showCloseButton]=\"config.header?.showCloseButton ?? true\"\n [showMaximizeButton]=\"config.header?.showMaximizeButton ?? true\">\n {{ config.header?.title }}\n </div>\n}\n\n<ng-container\n *ngComponentOutlet=\"\n content;\n injector: contentInjector;\n environmentInjector: contentEnvironmentInjector\n \" />\n\n@if (config.footer?.enable) {\n <div ngxDialogFooter [align]=\"config.footer?.align ?? 'end'\">\n <button type=\"button\" class=\"ngx-dialog-default-close-btn\" (click)=\"dialogRef.close()\">\n {{ config.footer?.closeText ?? 'Close' }}\n </button>\n </div>\n}\n","import {\n EnvironmentInjector,\n Injectable,\n Injector,\n Type,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { OverlayService, OverlayOptions } from 'ngx-kit/core';\nimport { NgxDialogRef } from '../configs/dialog-ref';\nimport { NgxDialogConfig } from '../configs/dialog-config';\nimport {\n NGX_DIALOG_CONFIG,\n DIALOG_CONTENT,\n DIALOG_DATA,\n DIALOG_REF,\n} from '../tokens/dialog.tokens';\nimport { NgxDialogComponent } from '../components/ngx-dialog.component';\n\n@Injectable()\nexport class NgxDialogService {\n private readonly overlay = inject(OverlayService);\n private readonly injector = inject(Injector);\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private readonly _openRefs = signal<NgxDialogRef<any>[]>([]);\n /** Every currently open dialog, oldest first. */\n readonly openDialogs = this._openRefs.asReadonly();\n /** How many dialogs are currently open. */\n readonly openCount = computed(() => this._openRefs().length);\n readonly defaultConfig = inject(NGX_DIALOG_CONFIG);\n /**\n * Opens `content` inside a dialog panel and returns a ref you can use to\n * close it and read the result back (`afterClosed`).\n */\n open<R = any, DataType = any>(\n content: Type<any>,\n config?: Partial<NgxDialogConfig<DataType>>,\n ): NgxDialogRef<R> {\n const resolvedConfig = { ...this.defaultConfig, ...config };\n const dialogRef = new NgxDialogRef<R>();\n dialogRef.beforeClose = resolvedConfig.beforeClose;\n\n const componentInjector = Injector.create({\n providers: [\n { provide: DIALOG_DATA, useValue: resolvedConfig.data },\n { provide: DIALOG_REF, useValue: dialogRef },\n { provide: NGX_DIALOG_CONFIG, useValue: resolvedConfig },\n { provide: DIALOG_CONTENT, useValue: content },\n ],\n parent: resolvedConfig.injector ?? this.injector,\n });\n\n const disableClose = resolvedConfig.disableClose ?? false;\n const overlayRef = this.overlay.open<NgxDialogComponent>({\n component: NgxDialogComponent,\n injector: componentInjector,\n environmentInjector: this.environmentInjector,\n placement: 'center',\n alignment: 'center',\n margin: 0,\n role: resolvedConfig.role ?? 'dialog',\n ariaModal: true,\n ariaLabel: resolvedConfig.ariaLabel,\n ariaLabelledby: resolvedConfig.ariaLabelledby,\n ariaDescribedby: resolvedConfig.ariaDescribedby,\n usePopover: resolvedConfig.usePopover ?? true,\n closeOnEscape: disableClose ? false : (resolvedConfig.closeOnEscape ?? true),\n closeOnOutsideClick: disableClose ? false : (resolvedConfig.closeOnOutsideClick ?? false),\n canClose: () => dialogRef.beforeClose?.() ?? true,\n restoreFocus: resolvedConfig.restoreFocus ?? true,\n autoFocus: resolvedConfig.autoFocus ?? true,\n lockBodyScroll: resolvedConfig.lockBodyScroll ?? true,\n backdropClass: resolvedConfig.backdropClass,\n panelClass: resolvedConfig.panelClass,\n configure: (_instance, ref) => this.applySizing(ref.nativeElement, resolvedConfig),\n onClosed: () => {\n this._openRefs.update((refs) => refs.filter((r) => r !== dialogRef));\n dialogRef._finalizeClose();\n },\n } satisfies OverlayOptions<NgxDialogComponent>);\n\n dialogRef._attachOverlayRef(overlayRef);\n this._openRefs.update((refs) => [...refs, dialogRef]);\n return dialogRef;\n }\n\n /** Closes every currently open dialog (ignores `disableClose`/guards - use sparingly, e.g. on logout). */\n closeAll(): void {\n [...this._openRefs()].forEach((ref) => ref.close());\n }\n\n private applySizing(el: HTMLElement | null, config: NgxDialogConfig): void {\n if (!el) return;\n if (config.width) el.style.width = config.width;\n if (config.minWidth) el.style.minWidth = config.minWidth;\n if (config.maxWidth) el.style.maxWidth = config.maxWidth;\n if (config.height) el.style.height = config.height;\n if (config.minHeight) el.style.minHeight = config.minHeight;\n if (config.maxHeight) el.style.maxHeight = config.maxHeight;\n }\n}\n","import { Type } from '@angular/core';\nimport { NgxDialogConfig } from './configs/dialog-config';\nimport { NgxDialogRef } from './configs/dialog-ref';\nimport { NgxDialogService } from './services/ngx-dialog.service';\n\nconst NOT_INITIALIZED_MESSAGE =\n '[ngx-kit/dialog] Dialog.* was called before provideNgxDialog() ran. ' +\n 'Add provideNgxDialog() to your app providers, or inject NgxDialogService directly instead of using the static Dialog API.';\n\n/**\n * Static convenience API over `NgxDialogService`, so you can call\n * `Dialog.open(...)` from anywhere without injecting the service manually.\n *\n * SSR note: the instance backing this static class is process-wide, not\n * per-request, so it is deliberately left unset on the server (see\n * `provideNgxDialog()`). Inject `NgxDialogService` directly in SSR code paths.\n */\nexport class Dialog {\n private static serviceInstance: NgxDialogService | null = null;\n private static readonly openRefs = new Set<NgxDialogRef<any>>();\n\n /** @internal set by `provideNgxDialog()`'s environment initializer. */\n static _setService(svc: NgxDialogService): void {\n this.serviceInstance = svc;\n }\n\n private static get service(): NgxDialogService {\n if (!this.serviceInstance) {\n throw new Error(NOT_INITIALIZED_MESSAGE);\n }\n return this.serviceInstance;\n }\n\n static open<R = any, DataType = any>(\n component: Type<any>,\n config?: Partial<NgxDialogConfig<DataType>>,\n ): NgxDialogRef<R> {\n const scopedService = config?.injector?.get(NgxDialogService, null);\n const ref = (scopedService ?? this.service).open<R, DataType>(component, config);\n this.openRefs.add(ref);\n ref.afterClosed.subscribe(() => this.openRefs.delete(ref));\n return ref;\n }\n\n static closeAll(): void {\n this.openRefs.forEach((ref) => ref.close());\n this.service.closeAll();\n }\n}\n","import {\n EnvironmentProviders,\n PLATFORM_ID,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { NgxDialogService } from './services/ngx-dialog.service';\nimport { Dialog } from './dialog.facade';\nimport { NgxDialogConfig } from './configs/dialog-config';\nimport { NGX_DIALOG_CONFIG } from './tokens/dialog.tokens';\n\nexport function provideNgxDialog(config?: NgxDialogConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_DIALOG_CONFIG,\n useValue: { ...new NgxDialogConfig(), ...(config || {}) },\n },\n NgxDialogService,\n provideEnvironmentInitializer(() => {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n return;\n }\n\n Dialog._setService(inject(NgxDialogService));\n }),\n ]);\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n Renderer2,\n effect,\n inject,\n} from '@angular/core';\nimport { DIALOG_REF } from '../tokens/dialog.tokens';\n\n/**\n * Why this can't be pure CSS flexbox: the header/body/footer elements are\n * *grandchildren* of the dialog panel (panel -> `*ngComponentOutlet`'s host\n * element -> header/body/footer), not direct children, because the content\n * component that hosts them is arbitrary and we don't control its own host\n * styling. `display:flex;flex-direction:column` on the panel therefore can't\n * size the body against the header/footer through that extra layer, so we\n * measure and set an explicit `max-height` instead, driven by a\n * `ResizeObserver` on the panel (not a `window:resize` listener, so it also\n * reacts to the dialog itself changing size, e.g. via `config.size`).\n */\n@Directive({\n selector: 'ngx-dialog-body,[ngxDialogBody]',\n standalone: true,\n host: { class: 'dialog-body' },\n exportAs: 'ngxDialogBody',\n})\nexport class NgxDialogBody {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly dialogRef = inject(DIALOG_REF);\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.dialogRef._setBodyElement(this.el.nativeElement);\n this.destroyRef.onDestroy(() => this.dialogRef._setBodyElement(null));\n effect((onCleanup) => {\n const panel = this.dialogRef.panelEl();\n if (!panel || typeof ResizeObserver === 'undefined') {\n return;\n }\n const recompute = (): void => this.recomputeHeight(panel);\n\n const observer = new ResizeObserver(recompute);\n observer.observe(panel);\n recompute();\n onCleanup(() => observer.disconnect());\n });\n }\n\n private recomputeHeight(panel: HTMLElement): void {\n const headerHeight = this.dialogRef.headerEl()?.offsetHeight ?? 0;\n const footerHeight = this.dialogRef.footerEl()?.offsetHeight ?? 0;\n const panelHeight = Math.min(panel.clientHeight, window.innerHeight);\n const available = panelHeight - headerHeight - footerHeight;\n if (available > 0) {\n this.renderer.setStyle(this.el.nativeElement, 'height', `${available}px`);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NgxDialogBody } from './directives/body.directive';\nimport { NgxDialogFooter } from './directives/footer.directive';\nimport { NgxDialogHeader } from './directives/header.directive';\nimport { NgxDialogComponent } from './components/ngx-dialog.component';\nimport { NgxDialogService } from './services/ngx-dialog.service';\n\n@NgModule({\n declarations: [],\n imports: [NgxDialogComponent, NgxDialogHeader, NgxDialogFooter, NgxDialogBody],\n exports: [NgxDialogComponent, NgxDialogHeader, NgxDialogFooter, NgxDialogBody],\n providers: [NgxDialogService],\n})\nexport class NgxDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kit-dialog.mjs","sources":["../../../projects/libs/dialog/configs/dialog-ref.ts","../../../projects/libs/dialog/configs/dialog-config.ts","../../../projects/libs/dialog/tokens/dialog.tokens.ts","../../../projects/libs/dialog/directives/footer.directive.ts","../../../projects/libs/dialog/directives/header.directive.ts","../../../projects/libs/dialog/components/ngx-dialog.component.ts","../../../projects/libs/dialog/components/ngx-dialog.component.html","../../../projects/libs/dialog/services/ngx-dialog.service.ts","../../../projects/libs/dialog/ngx-dialog.provider.ts","../../../projects/libs/dialog/directives/body.directive.ts","../../../projects/libs/dialog/ngx-dialog.module.ts","../../../projects/libs/dialog/ngx-kit-dialog.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from 'ngx-kit/core';\n\nlet uniqueId = 0;\nfunction nextDialogId(): string {\n uniqueId += 1;\n return `ngx-dialog-${Date.now().toString(36)}-${uniqueId}`;\n}\n\nexport class NgxDialogRef<R = any> {\n readonly id = nextDialogId();\n\n /** true from the moment `close()` is called, even before teardown finishes. */\n readonly closing = signal(false);\n /** true once the dialog has been fully removed from the DOM. */\n readonly closed = signal(false);\n\n private readonly _afterClosed = new Subject<R | undefined>();\n /** Emits the result exactly once, after the dialog has been fully torn down. */\n readonly afterClosed: Observable<R | undefined> = this._afterClosed.asObservable();\n\n /** @internal set by the layout directives; read by NgxDialogBody to size itself. */\n readonly headerEl = signal<HTMLElement | null>(null);\n /** @internal */\n readonly footerEl = signal<HTMLElement | null>(null);\n /** @internal */\n readonly bodyEl = signal<HTMLElement | null>(null);\n /** @internal the dialog panel's own host element. */\n readonly panelEl = signal<HTMLElement | null>(null);\n\n /** Optional synchronous guard - return `false` to prevent Escape/outside-click from closing. */\n beforeClose?: () => boolean;\n\n private overlayRef?: OverlayRef<unknown>;\n private result: R | undefined;\n\n /** @internal used by NgxDialogService right after creating the overlay. */\n _attachOverlayRef(ref: OverlayRef<unknown>): void {\n this.overlayRef = ref;\n }\n\n /** @internal used by the header/footer/body directives and the panel component. */\n _setHeaderElement(el: HTMLElement | null): void {\n this.headerEl.set(el);\n }\n /** @internal */\n _setFooterElement(el: HTMLElement | null): void {\n this.footerEl.set(el);\n }\n /** @internal */\n _setBodyElement(el: HTMLElement | null): void {\n this.bodyEl.set(el);\n }\n /** @internal */\n _setPanelElement(el: HTMLElement | null): void {\n this.panelEl.set(el);\n }\n\n /** Closes the dialog and emits `result` on `afterClosed` once torn down. Idempotent. */\n close(result?: R): void {\n if (this.closing() || this.closed()) {\n return;\n }\n this.closing.set(true);\n this.result = result;\n this.overlayRef?.close();\n }\n\n /** @internal called by NgxDialogService's `onClosed` callback once the overlay is fully torn down. */\n _finalizeClose(): void {\n if (this.closed()) {\n return;\n }\n this.closed.set(true);\n this._afterClosed.next(this.result);\n this._afterClosed.complete();\n }\n}\n","import { Injector } from '@angular/core';\nimport { NgxDialogFooterAlign } from '../directives/footer.directive';\n\nexport type NgxDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nexport interface NgxDialogHeaderConfig {\n enable?: boolean;\n title?: string;\n showCloseButton?: boolean;\n showMaximizeButton?: boolean;\n}\n\nexport interface NgxDialogFooterConfig {\n enable?: boolean;\n /** Text for the auto-generated close button. Default: 'Close'. */\n closeText?: string;\n align?: NgxDialogFooterAlign;\n}\n\n/**\n * BREAKING CHANGE from the previous version of this config:\n * - `allowCloseOnOutsideClick` -> `closeOnOutsideClick` (naming now matches\n * `ngx-kit/overlay`'s options, which this service is built directly on).\n * - `header`/`footer` are now actually wired up (previously declared but\n * unused) - set `enable: true` to get an automatic header/footer without\n * having to place the `ngxDialogHeader`/`ngxDialogFooter` directives\n * yourself inside the content component.\n */\nexport class NgxDialogConfig<DataType = any> {\n /** Data made available to the content component (and to `ngx-dialog-panel`\n * itself) via the `DIALOG_DATA` injection token. */\n data?: DataType = {} as DataType;\n\n /** Named size preset - sets sensible min/max width bounds. Combine with\n * `width`/`maxWidth`/... for full manual control. */\n size?: NgxDialogSize;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n minHeight?: string;\n maxHeight?: string;\n\n /** Extra class(es) on the dialog panel (the `ngx-dialog-panel` host). */\n panelClass?: string | string[] = 'ngx-kit';\n /** Extra class(es) on the backdrop element behind the panel. */\n backdropClass?: string | string[] = 'ngx-dialog-backdrop';\n\n header?: NgxDialogHeaderConfig = {\n enable: false,\n showCloseButton: true,\n showMaximizeButton: true,\n };\n footer?: NgxDialogFooterConfig = { enable: false, align: 'end' };\n\n /** Close when clicking outside the panel.\n * - Default: `true`\n * */\n closeOnOutsideClick?: boolean = true;\n /** Close on Escape.\n * - Default: `true`\n * */\n closeOnEscape?: boolean = true;\n /** Shorthand for `closeOnOutsideClick: false, closeOnEscape: false` - the\n * dialog can then only be closed programmatically (e.g. via its own\n * buttons calling `dialogRef.close()`). */\n disableClose?: boolean = false;\n /** Synchronous guard consulted before Escape/outside-click would close the\n * dialog - return `false` to block it (e.g. unsaved changes). Does not\n * affect a programmatic `dialogRef.close()` call. */\n beforeClose?: () => boolean;\n /** Move focus into the dialog on open. Default: true. */\n autoFocus?: boolean = true;\n /** Restore focus to the previously focused element on close. Default: true. */\n restoreFocus?: boolean = true;\n /** Render via the native Popover API when supported. Default: true. */\n usePopover?: boolean = true;\n\n role?: 'dialog' | 'alertdialog' = 'dialog';\n ariaLabel?: string;\n ariaLabelledby?: string;\n ariaDescribedby?: string;\n\n /** Entry animation for the panel. Default: 'zoom'. */\n animation?: 'zoom' | 'fade' | 'slide-up' | 'none' = 'zoom';\n\n /** Parent injector for the content component (and `ngx-dialog-panel`\n * itself). Defaults to the dialog service's injector. */\n injector?: Injector;\n\n constructor(init?: Partial<NgxDialogConfig<DataType>>) {\n Object.assign(this, init);\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { NgxDialogConfig } from '../configs/dialog-config';\nimport { NgxDialogRef } from '../configs/dialog-ref';\n\nexport const DIALOG_DATA = new InjectionToken<any>('NGX_DIALOG_DATA');\nexport const DIALOG_REF = new InjectionToken<NgxDialogRef<any>>('NGX_DIALOG_REF');\n/** The resolved config for the dialog currently being rendered. */\n\nexport const NGX_DIALOG_CONFIG = new InjectionToken<NgxDialogConfig<any>>('NGX_DIALOG_CONFIG', {\n factory: () => new NgxDialogConfig(),\n});\n/** The arbitrary content component passed to `open()`, projected via `*ngComponentOutlet`. */\nexport const DIALOG_CONTENT = new InjectionToken<Type<any>>('NGX_DIALOG_CONTENT');\n","import { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { DIALOG_REF } from '../tokens/dialog.tokens';\n\nexport type NgxDialogFooterAlign = 'start' | 'end' | 'center' | 'space-between' | 'space-around';\n\n@Directive({\n selector: 'ngx-dialog-footer,[ngxDialogFooter]',\n standalone: true,\n host: {\n class: 'dialog-footer',\n '[class.align-start]': 'align() === \"start\"',\n '[class.align-end]': 'align() === \"end\"',\n '[class.align-space-between]': 'align() === \"space-between\"',\n '[class.align-center]': 'align() === \"center\"',\n '[class.align-space-around]': 'align() === \"space-around\"',\n },\n exportAs: 'ngxDialogFooter',\n})\nexport class NgxDialogFooter implements OnInit, OnDestroy {\n readonly align = input<NgxDialogFooterAlign>('end');\n\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly dialogRef = inject(DIALOG_REF);\n\n ngOnInit(): void {\n this.dialogRef._setFooterElement(this.el.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.dialogRef._setFooterElement(null);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject, input, OnInit } from '@angular/core';\nimport { DIALOG_REF, NGX_DIALOG_CONFIG } from '../tokens/dialog.tokens';\nimport { NgxDraggable } from 'ngx-kit/drag-resize';\nimport { DIALOG_OVERLAY_CLASSNAME } from 'ngx-kit/core';\n\nconst CLOSE_ICON_SVG = `<svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 320 512\" aria-hidden=\"true\">\n <path d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/>\n </svg>`;\nconst MAXIMIZE_ICON_SVG = `<svg name=\"maximize\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.4852 16.5149C6.9104 15.9401 7.00595 13.4982 7.00595 13.4982M7.4852 16.5149C8.06001 17.0897 10.5019 16.994 10.5019 16.994M7.4852 16.5149L11 13M16.5149 7.48512C15.9401 6.91031 13.4982 7.00596 13.4982 7.00596M16.5149 7.48512C17.0897 8.05993 16.994 10.5018 16.994 10.5018M16.5149 7.48512L13 11\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n<path d=\"M2.5 12C2.5 7.52166 2.5 5.28249 3.89124 3.89124C5.28249 2.5 7.52166 2.5 12 2.5C16.4783 2.5 18.7175 2.5 20.1088 3.89124C21.5 5.28249 21.5 7.52166 21.5 12C21.5 16.4783 21.5 18.7175 20.1088 20.1088C18.7175 21.5 16.4783 21.5 12 21.5C7.52166 21.5 5.28249 21.5 3.89124 20.1088C2.5 18.7175 2.5 16.4783 2.5 12Z\" stroke-width=\"1.5\"/>\n</svg>`;\nconst RESTORE_ICON_SVG = `<svg name=\"restore\" stroke=\"currentColor\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M2.5 12C2.5 7.52166 2.5 5.28249 3.89124 3.89124C5.28249 2.5 7.52166 2.5 12 2.5C16.4783 2.5 18.7175 2.5 20.1088 3.89124C21.5 5.28249 21.5 7.52166 21.5 12C21.5 16.4783 21.5 18.7175 20.1088 20.1088C18.7175 21.5 16.4783 21.5 12 21.5C7.52166 21.5 5.28249 21.5 3.89124 20.1088C2.5 18.7175 2.5 16.4783 2.5 12Z\" stroke-width=\"1.5\"/>\n<path d=\"M12.9833 11.0167C12.4085 10.4419 12.5041 8 12.5041 8M12.9833 11.0167C13.5581 11.5915 16 11.4958 16 11.4958M12.9833 11.0167L17 7M11.0131 12.9868C10.4383 12.412 7.99641 12.5077 7.99641 12.5077M11.0131 12.9868C11.5879 13.5616 11.4922 16.0035 11.4922 16.0035M11.0131 12.9868L7 16.9999\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>`;\n\n@Directive({\n selector: 'ngx-dialog-header,[ngxDialogHeader]',\n standalone: true,\n hostDirectives: [NgxDraggable],\n host: { class: 'dialog-header' },\n exportAs: 'ngxDialogHeader',\n})\nexport class NgxDialogHeader implements OnInit {\n private config = inject(NGX_DIALOG_CONFIG);\n readonly showCloseButton = input(this.config.header?.showCloseButton ?? true);\n readonly showMaximizeButton = input(this.config.header?.showMaximizeButton ?? true);\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n private readonly document = inject(DOCUMENT);\n private readonly dialogRef = inject(DIALOG_REF);\n\n private readonly drag = inject(NgxDraggable);\n\n private isMaximized = false;\n\n ngOnInit(): void {\n this.drag.dragRootElement.set('.ngx-ui-overlay');\n this.drag.dragHandle.set('.dialog-header-title');\n // Wrap the existing (Angular-rendered) header content in a title span by\n // MOVING the actual DOM nodes, not by re-serializing/re-parsing\n // `innerHTML`. The original implementation did\n // `el.innerHTML = '<span>' + el.innerHTML + '</span>'`, which silently\n // destroys any event listeners or component state living inside the\n // header content (anything beyond static text) because the browser\n // throws away and re-parses the whole subtree.\n const titleWrapper = this.document.createElement('span');\n titleWrapper.className = 'dialog-header-title';\n while (this.el.nativeElement.firstChild) {\n titleWrapper.appendChild(this.el.nativeElement.firstChild);\n }\n this.el.nativeElement.appendChild(titleWrapper);\n if (this.showMaximizeButton()) {\n const fullScreenBtn = this.document.createElement('button');\n fullScreenBtn.type = 'button';\n fullScreenBtn.className = 'ngx-dialog-action-btn';\n fullScreenBtn.setAttribute('aria-label', 'Maximaize');\n fullScreenBtn.setAttribute('title', 'Maximaize');\n fullScreenBtn.innerHTML = MAXIMIZE_ICON_SVG;\n fullScreenBtn.addEventListener('click', (ev: Event) => this.fullScreen(ev));\n this.el.nativeElement.appendChild(fullScreenBtn);\n }\n if (this.showCloseButton()) {\n const closeBtn = this.document.createElement('button');\n closeBtn.type = 'button';\n closeBtn.className = 'ngx-dialog-action-btn close-btn';\n closeBtn.setAttribute('aria-label', 'Close');\n closeBtn.setAttribute('title', 'Close');\n closeBtn.innerHTML = CLOSE_ICON_SVG;\n closeBtn.addEventListener('click', () => this.dialogRef.close());\n this.el.nativeElement.appendChild(closeBtn);\n }\n\n this.dialogRef._setHeaderElement(this.el.nativeElement);\n }\n\n private fullScreen(ev: Event) {\n const overlay = this.el.nativeElement.closest(`.${DIALOG_OVERLAY_CLASSNAME}`);\n this.isMaximized = !this.isMaximized;\n this.drag.disabled.set(this.isMaximized);\n if (overlay) {\n overlay.classList.toggle('ngx-dialog-fullscreen');\n const btn = ev.currentTarget as HTMLButtonElement;\n btn.innerHTML = this.isMaximized ? RESTORE_ICON_SVG : MAXIMIZE_ICON_SVG;\n btn.setAttribute('aria-label', this.isMaximized ? 'Restore' : 'Maximaize');\n btn.setAttribute('title', this.isMaximized ? 'Restore' : 'Maximaize');\n }\n }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EnvironmentInjector,\n Injector,\n computed,\n inject,\n} from '@angular/core';\nimport { NGX_DIALOG_CONFIG, DIALOG_CONTENT, DIALOG_REF } from '../tokens/dialog.tokens';\nimport { NgxDialogFooter } from '../directives/footer.directive';\nimport { NgxDialogHeader } from '../directives/header.directive';\n\n/**\n * The dialog \"panel\" shell. It no longer owns the backdrop, centering,\n * focus trap, Escape handling or outside-click handling - all of that now\n * lives in `OverlayService`, which this component is rendered inside of.\n * This is intentionally a thin, fully signal-driven shell: no\n * `AfterViewInit`, no manual `ChangeDetectorRef.detectChanges()`, no\n * imperative style writes. Angular schedules change detection automatically\n * whenever a signal read from the template changes, including in zoneless\n * apps.\n */\n@Component({\n selector: 'ngx-dialog-panel',\n standalone: true,\n imports: [NgComponentOutlet, NgxDialogHeader, NgxDialogFooter],\n templateUrl: './ngx-dialog.component.html',\n styleUrl: './ngx-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngx-dialog-panel',\n '[class]': 'sizeClass()',\n },\n})\nexport class NgxDialogComponent {\n protected readonly dialogRef = inject(DIALOG_REF);\n protected readonly config = inject(NGX_DIALOG_CONFIG);\n protected readonly content = inject(DIALOG_CONTENT);\n protected readonly contentInjector = inject(Injector);\n protected readonly contentEnvironmentInjector = inject(EnvironmentInjector);\n\n protected readonly sizeClass = computed(() =>\n this.config.size ? `ngx-dialog-size-${this.config.size}` : '',\n );\n\n constructor() {\n this.dialogRef._setPanelElement(inject(ElementRef<HTMLElement>).nativeElement);\n }\n}\n","@if (config.header?.enable) {\n <div\n ngxDialogHeader\n [showCloseButton]=\"config.header?.showCloseButton ?? true\"\n [showMaximizeButton]=\"config.header?.showMaximizeButton ?? true\">\n {{ config.header?.title }}\n </div>\n}\n\n<ng-container\n *ngComponentOutlet=\"\n content;\n injector: contentInjector;\n environmentInjector: contentEnvironmentInjector\n \" />\n\n@if (config.footer?.enable) {\n <div ngxDialogFooter [align]=\"config.footer?.align ?? 'end'\">\n <button type=\"button\" class=\"ngx-dialog-default-close-btn\" (click)=\"dialogRef.close()\">\n {{ config.footer?.closeText ?? 'Close' }}\n </button>\n </div>\n}\n","import {\n EnvironmentInjector,\n Injectable,\n Injector,\n Type,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { OverlayService, OverlayOptions } from 'ngx-kit/core';\nimport { NgxDialogRef } from '../configs/dialog-ref';\nimport { NgxDialogConfig } from '../configs/dialog-config';\nimport {\n NGX_DIALOG_CONFIG,\n DIALOG_CONTENT,\n DIALOG_DATA,\n DIALOG_REF,\n} from '../tokens/dialog.tokens';\nimport { NgxDialogComponent } from '../components/ngx-dialog.component';\n\n@Injectable({providedIn:'root'})\nexport class NgxDialogService {\n private readonly overlay = inject(OverlayService);\n private readonly injector = inject(Injector);\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private readonly _openRefs = signal<NgxDialogRef<any>[]>([]);\n /** Every currently open dialog, oldest first. */\n readonly openDialogs = this._openRefs.asReadonly();\n /** How many dialogs are currently open. */\n readonly openCount = computed(() => this._openRefs().length);\n readonly defaultConfig = inject(NGX_DIALOG_CONFIG);\n /**\n * Opens `content` inside a dialog panel and returns a ref you can use to\n * close it and read the result back (`afterClosed`).\n */\n open<R = any, DataType = any>(\n content: Type<any>,\n config?: Partial<NgxDialogConfig<DataType>>,\n ): NgxDialogRef<R> {\n const resolvedConfig = { ...this.defaultConfig, ...config };\n const dialogRef = new NgxDialogRef<R>();\n dialogRef.beforeClose = resolvedConfig.beforeClose;\n\n const componentInjector = Injector.create({\n providers: [\n { provide: DIALOG_DATA, useValue: resolvedConfig.data },\n { provide: DIALOG_REF, useValue: dialogRef },\n { provide: NGX_DIALOG_CONFIG, useValue: resolvedConfig },\n { provide: DIALOG_CONTENT, useValue: content },\n ],\n parent: resolvedConfig.injector ?? this.injector,\n });\n\n const disableClose = resolvedConfig.disableClose ?? false;\n const overlayRef = this.overlay.open<NgxDialogComponent>({\n component: NgxDialogComponent,\n injector: componentInjector,\n environmentInjector: this.environmentInjector,\n placement: 'center',\n alignment: 'center',\n margin: 0,\n role: resolvedConfig.role ?? 'dialog',\n ariaModal: true,\n ariaLabel: resolvedConfig.ariaLabel,\n ariaLabelledby: resolvedConfig.ariaLabelledby,\n ariaDescribedby: resolvedConfig.ariaDescribedby,\n usePopover: resolvedConfig.usePopover ?? true,\n closeOnEscape: disableClose ? false : (resolvedConfig.closeOnEscape ?? true),\n closeOnOutsideClick: disableClose ? false : (resolvedConfig.closeOnOutsideClick ?? false),\n canClose: () => dialogRef.beforeClose?.() ?? true,\n restoreFocus: resolvedConfig.restoreFocus ?? true,\n autoFocus: resolvedConfig.autoFocus ?? true,\n backdropClass: resolvedConfig.backdropClass,\n panelClass: resolvedConfig.panelClass,\n configure: (_instance, ref) => this.applySizing(ref.nativeElement, resolvedConfig),\n onClosed: () => {\n this._openRefs.update((refs) => refs.filter((r) => r !== dialogRef));\n dialogRef._finalizeClose();\n },\n } satisfies OverlayOptions<NgxDialogComponent>);\n\n dialogRef._attachOverlayRef(overlayRef);\n this._openRefs.update((refs) => [...refs, dialogRef]);\n return dialogRef;\n }\n\n /** Closes every currently open dialog (ignores `disableClose`/guards - use sparingly, e.g. on logout). */\n closeAll(): void {\n [...this._openRefs()].forEach((ref) => ref.close());\n }\n\n private applySizing(el: HTMLElement | null, config: NgxDialogConfig): void {\n if (!el) return;\n if (config.width) el.style.width = config.width;\n if (config.minWidth) el.style.minWidth = config.minWidth;\n if (config.maxWidth) el.style.maxWidth = config.maxWidth;\n if (config.height) el.style.height = config.height;\n if (config.minHeight) el.style.minHeight = config.minHeight;\n if (config.maxHeight) el.style.maxHeight = config.maxHeight;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { NgxDialogService } from './services/ngx-dialog.service';\nimport { NgxDialogConfig } from './configs/dialog-config';\nimport { NGX_DIALOG_CONFIG } from './tokens/dialog.tokens';\n\nexport function provideNgxDialog(config?: NgxDialogConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_DIALOG_CONFIG,\n useValue: { ...new NgxDialogConfig(), ...(config || {}) },\n },\n NgxDialogService,\n ]);\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { DIALOG_REF } from '../tokens/dialog.tokens';\n\n@Directive({\n selector: 'ngx-dialog-body,[ngxDialogBody]',\n standalone: true,\n host: { class: 'dialog-body' },\n exportAs: 'ngxDialogBody',\n})\nexport class NgxDialogBody {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly dialogRef = inject(DIALOG_REF);\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.dialogRef._setBodyElement(this.el.nativeElement);\n this.destroyRef.onDestroy(() => this.dialogRef._setBodyElement(null));\n this.el.nativeElement.parentElement?.classList.add('ngx-dialog-inner');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NgxDialogBody } from './directives/body.directive';\nimport { NgxDialogFooter } from './directives/footer.directive';\nimport { NgxDialogHeader } from './directives/header.directive';\nimport { NgxDialogComponent } from './components/ngx-dialog.component';\nimport { NgxDialogService } from './services/ngx-dialog.service';\n\n@NgModule({\n declarations: [],\n imports: [NgxDialogComponent, NgxDialogHeader, NgxDialogFooter, NgxDialogBody],\n exports: [NgxDialogComponent, NgxDialogHeader, NgxDialogFooter, NgxDialogBody],\n providers: [NgxDialogService],\n})\nexport class NgxDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, HostListener, Directive, InjectionToken, viewChild, TemplateRef, Component,
|
|
3
|
-
import
|
|
2
|
+
import { input, inject, ApplicationRef, ElementRef, HostListener, Directive, InjectionToken, viewChild, TemplateRef, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { OverlayService } from 'ngx-kit/core';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
|
|
6
6
|
class NgxMenu {
|
|
7
|
-
el;
|
|
8
|
-
appRef;
|
|
9
|
-
overlayService;
|
|
10
7
|
ngxMenu = input.required(/* @ts-ignore */
|
|
11
8
|
...(ngDevMode ? [{ debugName: "ngxMenu" }] : /* istanbul ignore next */ []));
|
|
12
9
|
placement = input(/* @ts-ignore */
|
|
@@ -14,11 +11,10 @@ class NgxMenu {
|
|
|
14
11
|
alignment = input(/* @ts-ignore */
|
|
15
12
|
...(ngDevMode ? [undefined, { debugName: "alignment" }] : /* istanbul ignore next */ []));
|
|
16
13
|
containerRef;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
14
|
+
overlay = inject(OverlayService);
|
|
15
|
+
appRef = inject(ApplicationRef);
|
|
16
|
+
el = inject(ElementRef);
|
|
17
|
+
constructor() { }
|
|
22
18
|
ngOnDestroy() {
|
|
23
19
|
this.destroyContainer();
|
|
24
20
|
}
|
|
@@ -35,7 +31,7 @@ class NgxMenu {
|
|
|
35
31
|
const t = this.ngxMenu().template();
|
|
36
32
|
if (!t)
|
|
37
33
|
return;
|
|
38
|
-
this.containerRef = this.
|
|
34
|
+
this.containerRef = this.overlay.openTemplate({
|
|
39
35
|
anchor: this.el.nativeElement,
|
|
40
36
|
template: t,
|
|
41
37
|
appRef: this.appRef,
|
|
@@ -44,7 +40,7 @@ class NgxMenu {
|
|
|
44
40
|
panelClass: 'ngx-menu-overlay',
|
|
45
41
|
onClosed: () => {
|
|
46
42
|
this.containerRef = undefined;
|
|
47
|
-
this.
|
|
43
|
+
this.overlay.closeAll();
|
|
48
44
|
},
|
|
49
45
|
configure: (instance, ref) => {
|
|
50
46
|
this.ngxMenu().containerRef = ref;
|
|
@@ -55,7 +51,7 @@ class NgxMenu {
|
|
|
55
51
|
this.containerRef?.close();
|
|
56
52
|
this.containerRef = undefined;
|
|
57
53
|
}
|
|
58
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxMenu, deps: [
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
59
55
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.4", type: NgxMenu, isStandalone: true, selector: "[ngxMenu]", inputs: { ngxMenu: { classPropertyName: "ngxMenu", publicName: "ngxMenu", isSignal: true, isRequired: true, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" } }, exportAs: ["ngxMenu"], ngImport: i0 });
|
|
60
56
|
}
|
|
61
57
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxMenu, decorators: [{
|
|
@@ -64,15 +60,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
|
|
|
64
60
|
selector: '[ngxMenu]',
|
|
65
61
|
exportAs: 'ngxMenu',
|
|
66
62
|
}]
|
|
67
|
-
}], ctorParameters: () => [
|
|
63
|
+
}], ctorParameters: () => [], propDecorators: { ngxMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngxMenu", required: true }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], onClick: [{
|
|
68
64
|
type: HostListener,
|
|
69
65
|
args: ['click', ['$event']]
|
|
70
66
|
}] } });
|
|
71
67
|
|
|
72
68
|
class NgxContextMenu {
|
|
73
|
-
el;
|
|
74
|
-
appRef;
|
|
75
|
-
overlayService;
|
|
76
69
|
ngxContextMenu = input.required(/* @ts-ignore */
|
|
77
70
|
...(ngDevMode ? [{ debugName: "ngxContextMenu" }] : /* istanbul ignore next */ []));
|
|
78
71
|
containerRef;
|
|
@@ -81,11 +74,11 @@ class NgxContextMenu {
|
|
|
81
74
|
// که removeEventListener اصلاً نمیتونست تشخیص بده مال همون listener قبلیه،
|
|
82
75
|
// پس listener هیچوقت واقعاً حذف نمیشد (نشتی حافظهی کامل directive + المنت).
|
|
83
76
|
boundOnClick = (ev) => this.onClick(ev);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
el.nativeElement.addEventListener('contextmenu', this.boundOnClick);
|
|
77
|
+
overlay = inject(OverlayService);
|
|
78
|
+
appRef = inject(ApplicationRef);
|
|
79
|
+
el = inject(ElementRef);
|
|
80
|
+
constructor() {
|
|
81
|
+
this.el.nativeElement.addEventListener('contextmenu', this.boundOnClick);
|
|
89
82
|
}
|
|
90
83
|
ngOnDestroy() {
|
|
91
84
|
this.destroyContainer();
|
|
@@ -106,7 +99,7 @@ class NgxContextMenu {
|
|
|
106
99
|
const t = this.ngxContextMenu().template();
|
|
107
100
|
if (!t)
|
|
108
101
|
return;
|
|
109
|
-
this.containerRef = this.
|
|
102
|
+
this.containerRef = this.overlay.openTemplate({
|
|
110
103
|
anchor: this.el.nativeElement,
|
|
111
104
|
point: { x, y },
|
|
112
105
|
template: t,
|
|
@@ -115,7 +108,7 @@ class NgxContextMenu {
|
|
|
115
108
|
placement: 'auto',
|
|
116
109
|
onClosed: () => {
|
|
117
110
|
this.containerRef = undefined;
|
|
118
|
-
this.
|
|
111
|
+
this.overlay.closeAll();
|
|
119
112
|
},
|
|
120
113
|
configure: (instance, ref) => {
|
|
121
114
|
this.ngxContextMenu().containerRef = ref;
|
|
@@ -126,7 +119,7 @@ class NgxContextMenu {
|
|
|
126
119
|
this.containerRef?.close();
|
|
127
120
|
this.containerRef = undefined;
|
|
128
121
|
}
|
|
129
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxContextMenu, deps: [
|
|
122
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxContextMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
130
123
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.4", type: NgxContextMenu, isStandalone: true, selector: "[ngxContextMenu]", inputs: { ngxContextMenu: { classPropertyName: "ngxContextMenu", publicName: "ngxContextMenu", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["ngxContextMenu"], ngImport: i0 });
|
|
131
124
|
}
|
|
132
125
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxContextMenu, decorators: [{
|
|
@@ -135,7 +128,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
|
|
|
135
128
|
selector: '[ngxContextMenu]',
|
|
136
129
|
exportAs: 'ngxContextMenu',
|
|
137
130
|
}]
|
|
138
|
-
}], ctorParameters: () => [
|
|
131
|
+
}], ctorParameters: () => [], propDecorators: { ngxContextMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngxContextMenu", required: true }] }] } });
|
|
139
132
|
|
|
140
133
|
const NGX_MENU_CONTEXT = new InjectionToken('ngx-menu-context');
|
|
141
134
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kit-menu.mjs","sources":["../../../projects/libs/menu/directives/ngx-menu.directive.ts","../../../projects/libs/menu/directives/ngx-context-menu.directive.ts","../../../projects/libs/menu/tokens/menu-context.token.ts","../../../projects/libs/menu/components/ngx-menu/menu.component.ts","../../../projects/libs/menu/components/ngx-menu-item/menu-item.component.ts","../../../projects/libs/menu/components/ngx-menu-divider/menu-divider.component.ts","../../../projects/libs/menu/ngx-menu.module.ts","../../../projects/libs/menu/ngx-kit-menu.ts"],"sourcesContent":["import {\n Directive,\n OnDestroy,\n ElementRef,\n HostListener,\n input,\n ApplicationRef,\n} from '@angular/core';\nimport { OverlayRef, OverlayService, OverlayInstance, Alignment, Placement } from 'ngx-kit/core';\nimport { NgxMenuPanel } from '../components/ngx-menu/menu.component';\n\n@Directive({\n selector: '[ngxMenu]',\n exportAs: 'ngxMenu',\n})\nexport class NgxMenu implements OnDestroy {\n ngxMenu = input.required<NgxMenuPanel>();\n placement = input<Placement>();\n alignment = input<Alignment>();\n\n private containerRef?: OverlayRef<NgxMenuPanel>;\n\n constructor(\n private el: ElementRef,\n private appRef: ApplicationRef,\n private overlayService: OverlayService,\n ) {}\n\n ngOnDestroy(): void {\n this.destroyContainer();\n }\n\n @HostListener('click', ['$event'])\n onClick(ev: Event) {\n ev.stopPropagation();\n ev.preventDefault();\n this.toggleContainer();\n }\n\n private toggleContainer() {\n if (this.containerRef) {\n this.destroyContainer();\n return;\n }\n const t = this.ngxMenu().template();\n if (!t) return;\n this.containerRef = this.overlayService.openTemplate({\n anchor: this.el.nativeElement,\n template: t,\n appRef: this.appRef,\n alignment: this.alignment() ?? 'start',\n placement: this.placement() ?? 'auto',\n panelClass: 'ngx-menu-overlay',\n onClosed: () => {\n this.containerRef = undefined;\n this.overlayService.closeAll();\n },\n configure: (instance: OverlayInstance, ref: OverlayRef<NgxMenuPanel>) => {\n this.ngxMenu().containerRef = ref;\n },\n });\n }\n\n private destroyContainer() {\n this.containerRef?.close();\n this.containerRef = undefined;\n }\n}\n","import { Directive, OnDestroy, input, ApplicationRef, ElementRef } from '@angular/core';\nimport { OverlayRef, OverlayService, OverlayInstance } from 'ngx-kit/core';\nimport { NgxMenuPanel } from '../components/ngx-menu/menu.component';\n\n@Directive({\n selector: '[ngxContextMenu]',\n exportAs: 'ngxContextMenu',\n})\nexport class NgxContextMenu implements OnDestroy {\n ngxContextMenu = input.required<NgxMenuPanel>();\n\n private containerRef?: OverlayRef<NgxMenuPanel>;\n\n // باید همون رفرنس تابعی که به addEventListener داده میشه رو نگه داریم و به\n // removeEventListener هم بدیم؛ قبلاً هر بار یک آرو فانکشن جدید ساخته میشد\n // که removeEventListener اصلاً نمیتونست تشخیص بده مال همون listener قبلیه،\n // پس listener هیچوقت واقعاً حذف نمیشد (نشتی حافظهی کامل directive + المنت).\n private readonly boundOnClick = (ev: PointerEvent) => this.onClick(ev);\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private appRef: ApplicationRef,\n private overlayService: OverlayService,\n ) {\n el.nativeElement.addEventListener('contextmenu', this.boundOnClick);\n }\n\n ngOnDestroy(): void {\n this.destroyContainer();\n this.el.nativeElement.removeEventListener('contextmenu', this.boundOnClick);\n }\n\n onClick(ev: PointerEvent) {\n if (ev.currentTarget == this.el.nativeElement) {\n ev.stopPropagation();\n ev.preventDefault();\n this.toggleContainer(ev.clientX, ev.clientY);\n }\n }\n\n private toggleContainer(x: number, y: number) {\n if (this.containerRef) {\n this.destroyContainer();\n return;\n }\n const t = this.ngxContextMenu().template();\n if (!t) return;\n this.containerRef = this.overlayService.openTemplate({\n anchor: this.el.nativeElement,\n point: { x, y },\n template: t,\n appRef: this.appRef,\n alignment: 'start',\n placement: 'auto',\n onClosed: () => {\n this.containerRef = undefined;\n this.overlayService.closeAll();\n },\n configure: (instance: OverlayInstance, ref: OverlayRef<NgxMenuPanel>) => {\n this.ngxContextMenu().containerRef = ref;\n },\n });\n }\n\n private destroyContainer() {\n this.containerRef?.close();\n this.containerRef = undefined;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface MenuContext {\n close(): void;\n}\n\nexport const NGX_MENU_CONTEXT = new InjectionToken<MenuContext>('ngx-menu-context');\n","import { CommonModule } from '@angular/common';\nimport { Component, input, TemplateRef, viewChild } from '@angular/core';\nimport { OverlayRef } from 'ngx-kit/core';\nimport { MenuContext, NGX_MENU_CONTEXT } from '../../tokens/menu-context.token';\n\n@Component({\n selector: 'ngx-menu,[ngx-menu]',\n template: `\n <ng-template>\n <div class=\"ngx-menu-panel\" [class]=\"class()\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n `,\n exportAs: 'NgxMenu',\n styles: `\n .ngx-menu-panel {\n --ngx-menu-bg: light-dark(#ffffff, #252425);\n --ngx-menu-fg: light-dark(#000000, #ffffff);\n }\n .ngx-menu-panel {\n overflow: auto;\n box-sizing: border-box;\n outline: 0;\n background-color: var(--ngx-menu-bg);\n color: var(--ngx-menu-fg);\n box-shadow: var(--ngx-menu-shadow, 0px 0px 4px rgb(0 0 0 / 30%));\n border-radius: var(--ngx-menu-radius, 10px);\n padding: var(--ngx-menu-padding, 5px);\n min-width: var(--ngx-menu-min-width, 20px);\n min-height: var(--ngx-menu-min-height, 40px);\n will-change: transform, opacity;\n width: 100%;\n height: 100%;\n }\n .ngx-menu-panel.ngx-menu-panel-exit {\n animation: menu-exit 100ms 25ms linear forwards;\n }\n `,\n imports: [CommonModule],\n providers: [{ provide: NGX_MENU_CONTEXT, useExisting: NgxMenuPanel }],\n})\nexport class NgxMenuPanel implements MenuContext {\n template = viewChild<TemplateRef<any>>(TemplateRef);\n class = input<string>();\n\n containerRef?: OverlayRef<NgxMenuPanel>;\n\n close(): void {\n this.containerRef?.close();\n }\n}\n","import { Component, HostListener, inject } from '@angular/core';\nimport { NGX_MENU_CONTEXT } from '../../tokens/menu-context.token';\nimport { NgxMenu } from '../../directives/ngx-menu.directive';\n\n@Component({\n selector: 'ngx-menu-item,[ngx-menu-item]',\n template: `\n <div class=\"ngx-menu-item\">\n <ng-content></ng-content>\n </div>\n `,\n exportAs: 'NgxMenuItem',\n styles: `\n .ngx-menu-item {\n box-sizing: border-box;\n outline: 0;\n padding: var(--ngx-menu-item-padding, 6px 12px);\n transition: all 300ms;\n &:hover {\n cursor: pointer;\n background-color: var(--ngx-menu-item-hover-bg, #9bc6ff68);\n }\n }\n `,\n})\nexport class NgxMenuItem {\n menuContext = inject(NGX_MENU_CONTEXT);\n childMenu = inject(NgxMenu, {\n self: true,\n optional: true,\n });\n\n @HostListener('click')\n onClick() {\n if (this.childMenu?.ngxMenu) {\n return;\n }\n this.menuContext?.close();\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-menu-divider,[ngx-menu-divider]',\n template: ``,\n styles: `\n :host {\n display: block;\n border-bottom: var(--ngx-menu-item-border, 1px #43434d3d solid);\n border-bottom-color: var(--ngx-menu-divider-border-color, #43434d3d);\n margin: var(--ngx-menu-divider-margin, 10px calc(var(--ngx-menu-padding, 5px) * -1));\n }\n `,\n})\nexport class NgxMenuDivider {}\n","import { NgModule } from '@angular/core';\nimport { NgxMenuDivider } from './components/ngx-menu-divider/menu-divider.component';\nimport { NgxMenuItem } from './components/ngx-menu-item/menu-item.component';\nimport { NgxMenuPanel } from './components/ngx-menu/menu.component';\nimport { NgxMenu } from './directives/ngx-menu.directive';\nimport { NgxContextMenu } from './directives/ngx-context-menu.directive';\n\nconst d = [NgxMenu, NgxContextMenu, NgxMenuPanel, NgxMenuItem, NgxMenuDivider];\n@NgModule({\n imports: d,\n exports: d,\n})\nexport class NgxMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kit-menu.mjs","sources":["../../../projects/libs/menu/directives/ngx-menu.directive.ts","../../../projects/libs/menu/directives/ngx-context-menu.directive.ts","../../../projects/libs/menu/tokens/menu-context.token.ts","../../../projects/libs/menu/components/ngx-menu/menu.component.ts","../../../projects/libs/menu/components/ngx-menu-item/menu-item.component.ts","../../../projects/libs/menu/components/ngx-menu-divider/menu-divider.component.ts","../../../projects/libs/menu/ngx-menu.module.ts","../../../projects/libs/menu/ngx-kit-menu.ts"],"sourcesContent":["import {\n Directive,\n OnDestroy,\n ElementRef,\n HostListener,\n input,\n ApplicationRef,\n inject,\n} from '@angular/core';\nimport { OverlayRef, OverlayService, OverlayInstance, Alignment, Placement } from 'ngx-kit/core';\nimport { NgxMenuPanel } from '../components/ngx-menu/menu.component';\n\n@Directive({\n selector: '[ngxMenu]',\n exportAs: 'ngxMenu',\n})\nexport class NgxMenu implements OnDestroy {\n ngxMenu = input.required<NgxMenuPanel>();\n placement = input<Placement>();\n alignment = input<Alignment>();\n\n private containerRef?: OverlayRef<NgxMenuPanel>;\n\n protected readonly overlay = inject(OverlayService);\n protected readonly appRef = inject(ApplicationRef);\n protected readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {}\n\n ngOnDestroy(): void {\n this.destroyContainer();\n }\n\n @HostListener('click', ['$event'])\n onClick(ev: Event) {\n ev.stopPropagation();\n ev.preventDefault();\n this.toggleContainer();\n }\n\n private toggleContainer() {\n if (this.containerRef) {\n this.destroyContainer();\n return;\n }\n const t = this.ngxMenu().template();\n if (!t) return;\n this.containerRef = this.overlay.openTemplate({\n anchor: this.el.nativeElement,\n template: t,\n appRef: this.appRef,\n alignment: this.alignment() ?? 'start',\n placement: this.placement() ?? 'auto',\n panelClass: 'ngx-menu-overlay',\n onClosed: () => {\n this.containerRef = undefined;\n this.overlay.closeAll();\n },\n configure: (instance: OverlayInstance, ref: OverlayRef<NgxMenuPanel>) => {\n this.ngxMenu().containerRef = ref;\n },\n });\n }\n\n private destroyContainer() {\n this.containerRef?.close();\n this.containerRef = undefined;\n }\n}\n","import { Directive, OnDestroy, input, ApplicationRef, ElementRef, inject } from '@angular/core';\nimport { OverlayRef, OverlayService, OverlayInstance } from 'ngx-kit/core';\nimport { NgxMenuPanel } from '../components/ngx-menu/menu.component';\n\n@Directive({\n selector: '[ngxContextMenu]',\n exportAs: 'ngxContextMenu',\n})\nexport class NgxContextMenu implements OnDestroy {\n ngxContextMenu = input.required<NgxMenuPanel>();\n\n private containerRef?: OverlayRef<NgxMenuPanel>;\n\n // باید همون رفرنس تابعی که به addEventListener داده میشه رو نگه داریم و به\n // removeEventListener هم بدیم؛ قبلاً هر بار یک آرو فانکشن جدید ساخته میشد\n // که removeEventListener اصلاً نمیتونست تشخیص بده مال همون listener قبلیه،\n // پس listener هیچوقت واقعاً حذف نمیشد (نشتی حافظهی کامل directive + المنت).\n private readonly boundOnClick = (ev: PointerEvent) => this.onClick(ev);\n\n\n protected readonly overlay = inject(OverlayService);\n protected readonly appRef = inject(ApplicationRef);\n protected readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n \n constructor(\n ) {\n this.el.nativeElement.addEventListener('contextmenu', this.boundOnClick);\n }\n\n ngOnDestroy(): void {\n this.destroyContainer();\n this.el.nativeElement.removeEventListener('contextmenu', this.boundOnClick);\n }\n\n onClick(ev: PointerEvent) {\n if (ev.currentTarget == this.el.nativeElement) {\n ev.stopPropagation();\n ev.preventDefault();\n this.toggleContainer(ev.clientX, ev.clientY);\n }\n }\n\n private toggleContainer(x: number, y: number) {\n if (this.containerRef) {\n this.destroyContainer();\n return;\n }\n const t = this.ngxContextMenu().template();\n if (!t) return;\n this.containerRef = this.overlay.openTemplate({\n anchor: this.el.nativeElement,\n point: { x, y },\n template: t,\n appRef: this.appRef,\n alignment: 'start',\n placement: 'auto',\n onClosed: () => {\n this.containerRef = undefined;\n this.overlay.closeAll();\n },\n configure: (instance: OverlayInstance, ref: OverlayRef<NgxMenuPanel>) => {\n this.ngxContextMenu().containerRef = ref;\n },\n });\n }\n\n private destroyContainer() {\n this.containerRef?.close();\n this.containerRef = undefined;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface MenuContext {\n close(): void;\n}\n\nexport const NGX_MENU_CONTEXT = new InjectionToken<MenuContext>('ngx-menu-context');\n","import { CommonModule } from '@angular/common';\nimport { Component, input, TemplateRef, viewChild } from '@angular/core';\nimport { OverlayRef } from 'ngx-kit/core';\nimport { MenuContext, NGX_MENU_CONTEXT } from '../../tokens/menu-context.token';\n\n@Component({\n selector: 'ngx-menu,[ngx-menu]',\n template: `\n <ng-template>\n <div class=\"ngx-menu-panel\" [class]=\"class()\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n `,\n exportAs: 'NgxMenu',\n styles: `\n .ngx-menu-panel {\n --ngx-menu-bg: light-dark(#ffffff, #252425);\n --ngx-menu-fg: light-dark(#000000, #ffffff);\n }\n .ngx-menu-panel {\n overflow: auto;\n box-sizing: border-box;\n outline: 0;\n background-color: var(--ngx-menu-bg);\n color: var(--ngx-menu-fg);\n box-shadow: var(--ngx-menu-shadow, 0px 0px 4px rgb(0 0 0 / 30%));\n border-radius: var(--ngx-menu-radius, 10px);\n padding: var(--ngx-menu-padding, 5px);\n min-width: var(--ngx-menu-min-width, 20px);\n min-height: var(--ngx-menu-min-height, 40px);\n will-change: transform, opacity;\n width: 100%;\n height: 100%;\n }\n .ngx-menu-panel.ngx-menu-panel-exit {\n animation: menu-exit 100ms 25ms linear forwards;\n }\n `,\n imports: [CommonModule],\n providers: [{ provide: NGX_MENU_CONTEXT, useExisting: NgxMenuPanel }],\n})\nexport class NgxMenuPanel implements MenuContext {\n template = viewChild<TemplateRef<any>>(TemplateRef);\n class = input<string>();\n\n containerRef?: OverlayRef<NgxMenuPanel>;\n\n close(): void {\n this.containerRef?.close();\n }\n}\n","import { Component, HostListener, inject } from '@angular/core';\nimport { NGX_MENU_CONTEXT } from '../../tokens/menu-context.token';\nimport { NgxMenu } from '../../directives/ngx-menu.directive';\n\n@Component({\n selector: 'ngx-menu-item,[ngx-menu-item]',\n template: `\n <div class=\"ngx-menu-item\">\n <ng-content></ng-content>\n </div>\n `,\n exportAs: 'NgxMenuItem',\n styles: `\n .ngx-menu-item {\n box-sizing: border-box;\n outline: 0;\n padding: var(--ngx-menu-item-padding, 6px 12px);\n transition: all 300ms;\n &:hover {\n cursor: pointer;\n background-color: var(--ngx-menu-item-hover-bg, #9bc6ff68);\n }\n }\n `,\n})\nexport class NgxMenuItem {\n menuContext = inject(NGX_MENU_CONTEXT);\n childMenu = inject(NgxMenu, {\n self: true,\n optional: true,\n });\n\n @HostListener('click')\n onClick() {\n if (this.childMenu?.ngxMenu) {\n return;\n }\n this.menuContext?.close();\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-menu-divider,[ngx-menu-divider]',\n template: ``,\n styles: `\n :host {\n display: block;\n border-bottom: var(--ngx-menu-item-border, 1px #43434d3d solid);\n border-bottom-color: var(--ngx-menu-divider-border-color, #43434d3d);\n margin: var(--ngx-menu-divider-margin, 10px calc(var(--ngx-menu-padding, 5px) * -1));\n }\n `,\n})\nexport class NgxMenuDivider {}\n","import { NgModule } from '@angular/core';\nimport { NgxMenuDivider } from './components/ngx-menu-divider/menu-divider.component';\nimport { NgxMenuItem } from './components/ngx-menu-item/menu-item.component';\nimport { NgxMenuPanel } from './components/ngx-menu/menu.component';\nimport { NgxMenu } from './directives/ngx-menu.directive';\nimport { NgxContextMenu } from './directives/ngx-context-menu.directive';\n\nconst d = [NgxMenu, NgxContextMenu, NgxMenuPanel, NgxMenuItem, NgxMenuDivider];\n@NgModule({\n imports: d,\n exports: d,\n})\nexport class NgxMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|