@acorex/components 20.3.9 → 20.3.10

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.
Files changed (51) hide show
  1. package/action-sheet/index.d.ts +41 -19
  2. package/dialog/index.d.ts +18 -14
  3. package/dropdown/index.d.ts +3 -4
  4. package/fesm2022/acorex-components-action-sheet.mjs +141 -93
  5. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  6. package/fesm2022/acorex-components-conversation2.mjs +2 -2
  7. package/fesm2022/acorex-components-conversation2.mjs.map +1 -1
  8. package/fesm2022/acorex-components-dialog.mjs +66 -45
  9. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  10. package/fesm2022/acorex-components-drawer.mjs +2 -2
  11. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  12. package/fesm2022/acorex-components-dropdown.mjs +0 -4
  13. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  14. package/fesm2022/acorex-components-grid-layout-builder.mjs +2 -2
  15. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  16. package/fesm2022/acorex-components-loading-dialog.mjs +73 -36
  17. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  18. package/fesm2022/acorex-components-menu.mjs +26 -5
  19. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  20. package/fesm2022/{acorex-components-modal-acorex-components-modal-CXXcFToK.mjs → acorex-components-modal-acorex-components-modal-Bmoz9DL5.mjs} +27 -3
  21. package/fesm2022/acorex-components-modal-acorex-components-modal-Bmoz9DL5.mjs.map +1 -0
  22. package/fesm2022/{acorex-components-modal-modal-content.component-B4rhHeEz.mjs → acorex-components-modal-modal-content.component-CSJU1vRi.mjs} +2 -2
  23. package/fesm2022/{acorex-components-modal-modal-content.component-B4rhHeEz.mjs.map → acorex-components-modal-modal-content.component-CSJU1vRi.mjs.map} +1 -1
  24. package/fesm2022/acorex-components-modal.mjs +1 -1
  25. package/fesm2022/acorex-components-notification.mjs +378 -257
  26. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  27. package/fesm2022/acorex-components-popover.mjs +136 -175
  28. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  29. package/fesm2022/acorex-components-popup.mjs +296 -106
  30. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  31. package/fesm2022/acorex-components-qrcode.mjs +2 -2
  32. package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
  33. package/fesm2022/acorex-components-routing-progress.mjs +2 -2
  34. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  35. package/fesm2022/acorex-components-toast.mjs +231 -123
  36. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  37. package/fesm2022/acorex-components-tooltip.mjs +16 -12
  38. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  39. package/fesm2022/acorex-components-tree-view-legacy.mjs +7 -3
  40. package/fesm2022/acorex-components-tree-view-legacy.mjs.map +1 -1
  41. package/loading-dialog/index.d.ts +31 -15
  42. package/menu/index.d.ts +4 -0
  43. package/modal/index.d.ts +7 -0
  44. package/notification/index.d.ts +47 -32
  45. package/package.json +19 -19
  46. package/popover/index.d.ts +20 -27
  47. package/popup/index.d.ts +98 -27
  48. package/toast/index.d.ts +24 -18
  49. package/tooltip/index.d.ts +3 -5
  50. package/tree-view-legacy/index.d.ts +1 -0
  51. package/fesm2022/acorex-components-modal-acorex-components-modal-CXXcFToK.mjs.map +0 -1
@@ -1,19 +1,17 @@
1
1
  import { AXPlatform } from '@acorex/core/platform';
2
- import { TemplatePortal, ComponentPortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';
3
2
  import * as i0 from '@angular/core';
4
- import { inject, NgZone, ViewContainerRef, TemplateRef, HostListener, ViewEncapsulation, ChangeDetectionStrategy, Component, Injectable, NgModule } from '@angular/core';
3
+ import { inject, NgZone, input, signal, TemplateRef, ViewContainerRef, HostListener, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive, ComponentRef, Injectable, NgModule } from '@angular/core';
5
4
  import { MXBaseComponent, AXClosableComponent, AXComponent, AXComponentClosedPromise, AXCommonModule } from '@acorex/cdk/common';
6
5
  import { AXDecoratorCloseButtonComponent, AXDecoratorModule } from '@acorex/components/decorators';
7
6
  import { AXLoadingService } from '@acorex/components/loading';
7
+ import { AXComponentService } from '@acorex/core/components';
8
8
  import { AXTranslatorPipe, AXTranslationModule } from '@acorex/core/translation';
9
- import { CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
10
- import { DIALOG_DATA, DialogRef, Dialog, DialogModule } from '@angular/cdk/dialog';
11
- import { CdkDrag, CdkDragHandle, DragDropModule } from '@angular/cdk/drag-drop';
12
9
  import { AsyncPipe, CommonModule } from '@angular/common';
13
- import { AXHtmlUtil } from '@acorex/core/utils';
10
+ import { AXOverlayService } from '@acorex/cdk/overlay';
11
+ import { Subject } from 'rxjs';
14
12
 
15
13
  /**
16
- * The Button is a component which detects user interaction and triggers a corresponding event
14
+ * The Popup is a component which displays content in a dialog overlay
17
15
  *
18
16
  * @category Components
19
17
  */
@@ -21,69 +19,117 @@ class AXPopupComponent extends MXBaseComponent {
21
19
  constructor() {
22
20
  super(...arguments);
23
21
  this._zone = inject(NgZone);
24
- this._viewContainerRef = inject(ViewContainerRef);
25
22
  this.loadingService = inject(AXLoadingService);
26
23
  this._platform = inject(AXPlatform);
27
- this.data = inject(DIALOG_DATA);
28
- this.dialogRef = inject(DialogRef);
24
+ this.componentService = inject(AXComponentService);
25
+ // Inputs from overlay service
26
+ this.__content__ = input(...(ngDevMode ? [undefined, { debugName: "__content__" }] : []));
27
+ this.__config__ = input(...(ngDevMode ? [undefined, { debugName: "__config__" }] : []));
28
+ this.__popupRef__ = input(...(ngDevMode ? [undefined, { debugName: "__popupRef__" }] : []));
29
+ this.__id__ = input(...(ngDevMode ? [undefined, { debugName: "__id__" }] : []));
29
30
  /**
30
31
  * Indicates whether the component is loading.
31
32
  * @defaultValue true
32
33
  */
33
34
  this.isLoading = true;
35
+ /** @ignore */
36
+ this._componentRef = null;
37
+ /** Current title */
38
+ this.title = signal('', ...(ngDevMode ? [{ debugName: "title" }] : []));
39
+ /** @ignore */
40
+ this.isDragging = signal(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
41
+ /** @ignore */
42
+ this.dragOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "dragOffset" }] : []));
43
+ /** @ignore */
44
+ this.dragStartPos = { x: 0, y: 0 };
45
+ /** @ignore */
46
+ this.elementStartPos = { x: 0, y: 0 };
34
47
  }
35
48
  /** @ignore */
36
49
  ngOnInit() {
37
50
  super.ngOnInit();
51
+ const config = this.__config__();
38
52
  if (this._platform.is('SM')) {
39
- this.data.draggable = false;
53
+ // Disable dragging on small screens
54
+ if (config) {
55
+ config.draggable = false;
56
+ }
40
57
  }
58
+ this.title.set(config?.title ?? '');
41
59
  this._loadingId = this.loadingService.show({
42
60
  location: this.getHostElement(),
43
61
  });
44
- //
45
- if (this.data.content instanceof TemplateRef) {
46
- this._selectedPortal = new TemplatePortal(this.data.content, this._viewContainerRef, {
47
- $implicit: this.data,
48
- ref: this,
49
- });
50
- this.cdr.markForCheck();
51
- }
52
- else if (typeof this.data.content === 'function') {
53
- this._selectedPortal = new ComponentPortal(this.data.content);
54
- this.cdr.markForCheck();
55
- }
62
+ this.renderContent();
56
63
  }
57
64
  /** @ignore */
58
- _handleAttched(ref) {
59
- ref = ref;
60
- if (ref.instance) {
61
- this._componentRef = ref.instance;
62
- Object.assign(this._componentRef, this.data.data);
63
- Object.assign(this._componentRef, { _isPopup: true });
64
- Object.assign(this._componentRef, {
65
- setTitle: (title) => {
66
- this.data.title = title;
67
- },
65
+ async renderContent() {
66
+ const content = this.__content__();
67
+ const config = this.__config__();
68
+ if (!content) {
69
+ this.loadingService.hide(this._loadingId);
70
+ return;
71
+ }
72
+ if (content instanceof TemplateRef) {
73
+ // Render template using ViewContainerRef (supports context)
74
+ this.contentContainerRef.createEmbeddedView(content, {
75
+ $implicit: config?.data,
76
+ ref: this,
68
77
  });
69
- if (ref.instance.onClosed) {
70
- ref.instance.onClosed.subscribe((e) => {
78
+ this.handleContentRendered();
79
+ }
80
+ else if (typeof content === 'function') {
81
+ // Render component
82
+ const componentRef = this.componentService.createFromComponent(content);
83
+ this._componentRef = componentRef;
84
+ // Get component input definitions to check before setting inputs
85
+ const inputDefs = componentRef.componentType?.ɵcmp
86
+ ?.inputs;
87
+ // Set data inputs (only if the component has the input defined)
88
+ if (config?.data && typeof config.data === 'object') {
89
+ Object.entries(config.data).forEach(([key, value]) => {
90
+ componentRef.instance[key] = value;
91
+ });
92
+ }
93
+ if (config?.inputs && typeof config.inputs === 'object') {
94
+ Object.entries(config.inputs).forEach(([key, value]) => {
95
+ if (inputDefs && key in inputDefs) {
96
+ componentRef.setInput(key, value);
97
+ }
98
+ });
99
+ }
100
+ // Set popup reference (only if the component has this input)
101
+ if (inputDefs && '__popup__' in inputDefs) {
102
+ componentRef.setInput('__popup__', this.__popupRef__());
103
+ }
104
+ // Move component to container
105
+ const hostElement = componentRef.location.nativeElement;
106
+ this.contentContainerEl.nativeElement.appendChild(hostElement);
107
+ // Subscribe to close event if available
108
+ const instance = componentRef.instance;
109
+ if (instance.onClosed) {
110
+ instance.onClosed.subscribe((e) => {
71
111
  this.close(e.data);
72
112
  });
73
113
  }
114
+ this.handleContentRendered();
74
115
  }
116
+ }
117
+ /** @ignore */
118
+ handleContentRendered() {
75
119
  this._zone.runOutsideAngular(() => {
76
120
  setTimeout(() => {
77
121
  const body = this.getHostElement().querySelector('.ax-popup-body-container');
78
122
  const content = body.children[0];
123
+ if (!content || !body)
124
+ return;
79
125
  const popHeader = this.getHostElement().querySelector('.ax-popup-header-container');
80
126
  const popFooter = this.getHostElement().querySelector('.ax-popup-footer-container');
81
127
  const footer = content.querySelector(':scope > ax-footer');
82
128
  const header = content.querySelector(':scope > ax-header');
83
- if (footer) {
84
- popFooter?.append(footer);
129
+ if (footer && popFooter) {
130
+ popFooter.append(footer);
85
131
  }
86
- if (header) {
132
+ if (header && popHeader) {
87
133
  popHeader.innerHTML = '';
88
134
  popHeader.append(header);
89
135
  }
@@ -94,9 +140,9 @@ class AXPopupComponent extends MXBaseComponent {
94
140
  this.cdr.markForCheck();
95
141
  }
96
142
  /** @ignore */
97
- onKeydownHandler(event) {
143
+ onKeydownHandler() {
98
144
  const focusedOrHasFocused = this.getHostElement().matches(':focus-within');
99
- if (this.data.closeButton && focusedOrHasFocused) {
145
+ if (this.__config__()?.closeButton && focusedOrHasFocused) {
100
146
  this.close();
101
147
  }
102
148
  }
@@ -107,6 +153,10 @@ class AXPopupComponent extends MXBaseComponent {
107
153
  /** @ignore */
108
154
  ngOnDestroy() {
109
155
  this.loadingService.hide(this._loadingId);
156
+ if (this._componentRef) {
157
+ this._componentRef.destroy();
158
+ this._componentRef = null;
159
+ }
110
160
  }
111
161
  /**
112
162
  * Sets focus on the `.ax-popup` element within the host element after a short delay.
@@ -115,23 +165,20 @@ class AXPopupComponent extends MXBaseComponent {
115
165
  setTimeout(() => this.getHostElement().querySelector('.ax-popup')?.focus());
116
166
  }
117
167
  /**
118
- * Closes the dialog, emitting component reference, host element, and optional data.
168
+ * Closes the popup, emitting component reference, host element, and optional data.
119
169
  * @param {unknown} [data]
120
170
  */
121
171
  close(data) {
122
172
  const closeFn = () => {
123
- this.dialogRef.close({
124
- component: this._componentRef,
125
- htmlElement: this.getHostElement(),
126
- data: data,
127
- });
173
+ this.__popupRef__()?.close(data);
128
174
  };
129
- if (typeof this._componentRef?.onClosing === 'function') {
175
+ const componentInstance = this._componentRef?.instance;
176
+ if (typeof componentInstance?.onClosing === 'function') {
130
177
  const ee = {
131
178
  cancel: false,
132
179
  data,
133
180
  };
134
- const closingResult = this._componentRef?.onClosing(ee);
181
+ const closingResult = componentInstance.onClosing(ee);
135
182
  if (closingResult instanceof Promise) {
136
183
  closingResult.then(() => {
137
184
  if (!ee.cancel) {
@@ -149,31 +196,102 @@ class AXPopupComponent extends MXBaseComponent {
149
196
  closeFn();
150
197
  }
151
198
  }
199
+ /**
200
+ * Sets inputs on the content component.
201
+ * @param values - Object containing input values to set
202
+ */
203
+ setContentInputs(values) {
204
+ const componentRef = this._componentRef;
205
+ if (componentRef) {
206
+ Object.entries(values).forEach(([key, value]) => {
207
+ componentRef.setInput(key, value);
208
+ });
209
+ }
210
+ }
211
+ /**
212
+ * Sets the popup title.
213
+ * @param title - The new title
214
+ */
215
+ setTitle(title) {
216
+ this.title.set(title);
217
+ this.cdr.markForCheck();
218
+ }
219
+ // Drag functionality
220
+ onDragStart(event) {
221
+ const config = this.__config__();
222
+ if (!config?.draggable)
223
+ return;
224
+ this.isDragging.set(true);
225
+ this.dragStartPos = { x: event.clientX, y: event.clientY };
226
+ const popup = this.getHostElement().querySelector('.ax-popup');
227
+ if (popup) {
228
+ const rect = popup.getBoundingClientRect();
229
+ this.elementStartPos = { x: rect.left, y: rect.top };
230
+ }
231
+ event.preventDefault();
232
+ }
233
+ onDragMove(event) {
234
+ if (!this.isDragging())
235
+ return;
236
+ const deltaX = event.clientX - this.dragStartPos.x;
237
+ const deltaY = event.clientY - this.dragStartPos.y;
238
+ this.dragOffset.set({
239
+ x: this.elementStartPos.x + deltaX,
240
+ y: this.elementStartPos.y + deltaY,
241
+ });
242
+ }
243
+ onDragEnd() {
244
+ this.isDragging.set(false);
245
+ }
152
246
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXPopupComponent, isStandalone: true, selector: "ax-popup", host: { listeners: { "keydown.escape": "onKeydownHandler($event)" } }, providers: [
247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXPopupComponent, isStandalone: true, selector: "ax-popup", inputs: { __content__: { classPropertyName: "__content__", publicName: "__content__", isSignal: true, isRequired: false, transformFunction: null }, __config__: { classPropertyName: "__config__", publicName: "__config__", isSignal: true, isRequired: false, transformFunction: null }, __popupRef__: { classPropertyName: "__popupRef__", publicName: "__popupRef__", isSignal: true, isRequired: false, transformFunction: null }, __id__: { classPropertyName: "__id__", publicName: "__id__", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown.escape": "onKeydownHandler()", "document:mousemove": "onDragMove($event)", "document:mouseup": "onDragEnd()" } }, providers: [
154
248
  { provide: AXClosableComponent, useExisting: AXPopupComponent },
155
249
  { provide: AXComponent, useExisting: AXPopupComponent },
156
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-popup-wrapper\" aria-modal=\"true\" [cdkTrapFocus]=\"true\">\n <div class=\"ax-popup ax-popup-{{ data.size }}\" tabindex=\"0\" cdkDrag [cdkDragDisabled]=\"!data.draggable\">\n <div cdkDragHandle class=\"ax-popup-header-container\">\n @if (data.header) {\n <div class=\"ax-popup-header\">\n <span class=\"ax-popup-title\">{{ data.title | translate | async }}</span>\n @if (data.closeButton) {\n <ax-close-button tabindex=\"1\"></ax-close-button>\n }\n </div>\n }\n </div>\n <div class=\"ax-popup-main-container ax-loading-container\">\n <div class=\"ax-popup-body-container\">\n <ng-template [cdkPortalOutlet]=\"_selectedPortal\" (attached)=\"_handleAttched($event)\"></ng-template>\n </div>\n <div class=\"ax-popup-footer-container\"></div>\n </div>\n </div>\n</div>\n", styles: [":root{--ax-comp-popup-border-radius: var(--ax-sys-border-radius);--ax-comp-popup-border-color: var(--ax-sys-color-border-lightest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-lighter-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-lighter-surface)}.ax-popup{max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh));margin-left:auto;margin-right:auto;display:flex;width:auto;flex-direction:column;overflow:hidden;border-radius:var(--ax-comp-popup-border-radius);border-width:1px;border-color:rgba(var(--ax-comp-popup-border-color));background-color:rgba(var(--ax-comp-popup-body-bg-color));padding:0;--ax-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--ax-shadow-colored: 0 10px 15px -3px var(--ax-shadow-color), 0 4px 6px -4px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);outline:2px solid transparent;outline-offset:2px;color:rgba(var(--ax-comp-popup-body-text-color))}.ax-popup .ax-popup-header-container{background-color:rgba(var(--ax-comp-popup-header-bg-color))}.ax-popup .ax-popup-header-container .ax-popup-header{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-comp-popup-header-border-color));padding:.75rem}.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1rem;font-weight:500}@media (min-width: 768px){.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1.125rem;line-height:1.75rem}}.ax-popup ax-footer{box-shadow:0 2px 10px #0000004d;display:flex;align-items:center;justify-content:space-between;border-top-width:1px;border-color:rgba(var(--ax-comp-popup-footer-border-color));background-color:rgba(var(--ax-comp-popup-footer-bg-color));padding:.75rem}.ax-popup:focus{outline:2px solid transparent;outline-offset:2px}.ax-popup:focus-visible{border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-popup .ax-popup-main-container{display:flex;flex:1 1 0%;flex-direction:column;overflow:hidden}.ax-popup .ax-popup-main-container .ax-popup-body-container{flex:1 1 0%;overflow:auto;background-color:rgba(var(--ax-comp-popup-body-bg-color))}.ax-popup .ax-popup-main-container .ax-popup-footer-container{background-color:rgba(var(--ax-comp-popup-footer-bg-color))}.ax-popup.ax-popup-full{width:100vw;max-height:calc(100 * var(--ax-vh));height:calc(100 * var(--ax-vh));border-radius:0!important}.ax-popup.ax-fit{width:fit-content!important}.ax-popup.ax-fit .ax-popup-body-container{max-height:100vh}.ax-popup.ax-fit .ax-popup-body-container>ng-component>div{width:fit-content!important}@media (min-width: 320px) and (max-width: 640px){.ax-popup.ax-popup-sm,.ax-popup.ax-popup-md,.ax-popup.ax-popup-lg{width:93vw!important;height:fit-content;max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh))!important}.ax-popup.ax-popup-sm .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-md .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-lg .ax-popup-body-container>ng-component>div{width:100%}}@media (min-width: 768px){.ax-popup.ax-popup-sm{width:55vw!important}.ax-popup.ax-popup-md{width:65vw!important}.ax-popup.ax-popup-lg{width:75vw!important}}@media (min-width: 1280px){.ax-popup.ax-popup-sm{width:30vw!important}.ax-popup.ax-popup-md{width:50vw!important}.ax-popup.ax-popup-lg{width:85vw!important}}@media (min-width: 1536px){.ax-popup.ax-popup-sm{width:25vw!important}.ax-popup.ax-popup-md{width:40vw!important}.ax-popup.ax-popup-lg{width:65vw!important}}.ax-dark .ax-popup{--ax-comp-popup-border-color: var(--ax-sys-color-border-darkest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-darker-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-darker-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-dark-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-dark-surface)}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
250
+ ], viewQueries: [{ propertyName: "contentContainerRef", first: true, predicate: ["contentContainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "contentContainerEl", first: true, predicate: ["contentContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-popup-wrapper\" aria-modal=\"true\">\n <div\n class=\"ax-popup ax-popup-{{ __config__()?.size || 'md' }}\"\n tabindex=\"0\"\n [class.ax-popup-dragging]=\"isDragging()\"\n [style.position]=\"dragOffset().x || dragOffset().y ? 'fixed' : null\"\n [style.left.px]=\"dragOffset().x || null\"\n [style.top.px]=\"dragOffset().y || null\"\n [style.transform]=\"dragOffset().x || dragOffset().y ? 'none' : null\"\n >\n <div\n class=\"ax-popup-header-container\"\n [class.ax-popup-draggable]=\"__config__()?.draggable\"\n (mousedown)=\"onDragStart($event)\"\n >\n @if (__config__()?.header) {\n <div class=\"ax-popup-header\">\n <span class=\"ax-popup-title\">{{ title() | translate | async }}</span>\n @if (__config__()?.closeButton) {\n <ax-close-button tabindex=\"1\" (click)=\"_handleCloseClick()\"></ax-close-button>\n }\n </div>\n }\n </div>\n <div class=\"ax-popup-main-container ax-loading-container\">\n <div class=\"ax-popup-body-container\" #contentContainer></div>\n <div class=\"ax-popup-footer-container\"></div>\n </div>\n </div>\n</div>\n", styles: [":root{--ax-comp-popup-border-radius: var(--ax-sys-border-radius);--ax-comp-popup-border-color: var(--ax-sys-color-border-lightest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-lighter-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-lighter-surface)}.ax-popup-wrapper{display:contents}.ax-popup-header-container.ax-popup-draggable{cursor:move}.ax-popup.ax-popup-dragging{-webkit-user-select:none;user-select:none}.ax-popup{max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh));margin-left:auto;margin-right:auto;display:flex;width:auto;flex-direction:column;overflow:hidden;border-radius:var(--ax-comp-popup-border-radius);border-width:1px;border-color:rgba(var(--ax-comp-popup-border-color));background-color:rgba(var(--ax-comp-popup-body-bg-color));padding:0;--ax-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--ax-shadow-colored: 0 10px 15px -3px var(--ax-shadow-color), 0 4px 6px -4px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);outline:2px solid transparent;outline-offset:2px;color:rgba(var(--ax-comp-popup-body-text-color))}.ax-popup .ax-popup-header-container{background-color:rgba(var(--ax-comp-popup-header-bg-color))}.ax-popup .ax-popup-header-container .ax-popup-header{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-comp-popup-header-border-color));padding:.75rem}.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1rem;font-weight:500}@media (min-width: 768px){.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1.125rem;line-height:1.75rem}}.ax-popup ax-footer{box-shadow:0 2px 10px #0000004d;display:flex;align-items:center;justify-content:space-between;border-top-width:1px;border-color:rgba(var(--ax-comp-popup-footer-border-color));background-color:rgba(var(--ax-comp-popup-footer-bg-color));padding:.75rem}.ax-popup:focus{outline:2px solid transparent;outline-offset:2px}.ax-popup:focus-visible{border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-popup .ax-popup-main-container{display:flex;flex:1 1 0%;flex-direction:column;overflow:hidden}.ax-popup .ax-popup-main-container .ax-popup-body-container{flex:1 1 0%;overflow:auto;background-color:rgba(var(--ax-comp-popup-body-bg-color))}.ax-popup .ax-popup-main-container .ax-popup-footer-container{background-color:rgba(var(--ax-comp-popup-footer-bg-color))}.ax-popup.ax-popup-full{width:100vw;max-height:calc(100 * var(--ax-vh));height:calc(100 * var(--ax-vh));border-radius:0!important}.ax-popup.ax-fit{width:fit-content!important}.ax-popup.ax-fit .ax-popup-body-container{max-height:100vh}.ax-popup.ax-fit .ax-popup-body-container>ng-component>div{width:fit-content!important}@media (min-width: 320px) and (max-width: 640px){.ax-popup.ax-popup-sm,.ax-popup.ax-popup-md,.ax-popup.ax-popup-lg{width:93vw!important;height:fit-content;max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh))!important}.ax-popup.ax-popup-sm .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-md .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-lg .ax-popup-body-container>ng-component>div{width:100%}}@media (min-width: 768px){.ax-popup.ax-popup-sm{width:55vw!important}.ax-popup.ax-popup-md{width:65vw!important}.ax-popup.ax-popup-lg{width:75vw!important}}@media (min-width: 1280px){.ax-popup.ax-popup-sm{width:30vw!important}.ax-popup.ax-popup-md{width:50vw!important}.ax-popup.ax-popup-lg{width:85vw!important}}@media (min-width: 1536px){.ax-popup.ax-popup-sm{width:25vw!important}.ax-popup.ax-popup-md{width:40vw!important}.ax-popup.ax-popup-lg{width:65vw!important}}.ax-dark .ax-popup{--ax-comp-popup-border-color: var(--ax-sys-color-border-darkest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-darker-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-darker-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-dark-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-dark-surface)}\n"], dependencies: [{ kind: "component", type: AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
157
251
  }
158
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupComponent, decorators: [{
159
253
  type: Component,
160
254
  args: [{ selector: 'ax-popup', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
161
255
  { provide: AXClosableComponent, useExisting: AXPopupComponent },
162
256
  { provide: AXComponent, useExisting: AXPopupComponent },
163
- ], imports: [
164
- CdkTrapFocus,
165
- CdkDrag,
166
- CdkDragHandle,
167
- AXDecoratorCloseButtonComponent,
168
- CdkPortalOutlet,
169
- AsyncPipe,
170
- AXTranslatorPipe,
171
- ], template: "<div class=\"ax-popup-wrapper\" aria-modal=\"true\" [cdkTrapFocus]=\"true\">\n <div class=\"ax-popup ax-popup-{{ data.size }}\" tabindex=\"0\" cdkDrag [cdkDragDisabled]=\"!data.draggable\">\n <div cdkDragHandle class=\"ax-popup-header-container\">\n @if (data.header) {\n <div class=\"ax-popup-header\">\n <span class=\"ax-popup-title\">{{ data.title | translate | async }}</span>\n @if (data.closeButton) {\n <ax-close-button tabindex=\"1\"></ax-close-button>\n }\n </div>\n }\n </div>\n <div class=\"ax-popup-main-container ax-loading-container\">\n <div class=\"ax-popup-body-container\">\n <ng-template [cdkPortalOutlet]=\"_selectedPortal\" (attached)=\"_handleAttched($event)\"></ng-template>\n </div>\n <div class=\"ax-popup-footer-container\"></div>\n </div>\n </div>\n</div>\n", styles: [":root{--ax-comp-popup-border-radius: var(--ax-sys-border-radius);--ax-comp-popup-border-color: var(--ax-sys-color-border-lightest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-lighter-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-lighter-surface)}.ax-popup{max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh));margin-left:auto;margin-right:auto;display:flex;width:auto;flex-direction:column;overflow:hidden;border-radius:var(--ax-comp-popup-border-radius);border-width:1px;border-color:rgba(var(--ax-comp-popup-border-color));background-color:rgba(var(--ax-comp-popup-body-bg-color));padding:0;--ax-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--ax-shadow-colored: 0 10px 15px -3px var(--ax-shadow-color), 0 4px 6px -4px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);outline:2px solid transparent;outline-offset:2px;color:rgba(var(--ax-comp-popup-body-text-color))}.ax-popup .ax-popup-header-container{background-color:rgba(var(--ax-comp-popup-header-bg-color))}.ax-popup .ax-popup-header-container .ax-popup-header{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-comp-popup-header-border-color));padding:.75rem}.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1rem;font-weight:500}@media (min-width: 768px){.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1.125rem;line-height:1.75rem}}.ax-popup ax-footer{box-shadow:0 2px 10px #0000004d;display:flex;align-items:center;justify-content:space-between;border-top-width:1px;border-color:rgba(var(--ax-comp-popup-footer-border-color));background-color:rgba(var(--ax-comp-popup-footer-bg-color));padding:.75rem}.ax-popup:focus{outline:2px solid transparent;outline-offset:2px}.ax-popup:focus-visible{border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-popup .ax-popup-main-container{display:flex;flex:1 1 0%;flex-direction:column;overflow:hidden}.ax-popup .ax-popup-main-container .ax-popup-body-container{flex:1 1 0%;overflow:auto;background-color:rgba(var(--ax-comp-popup-body-bg-color))}.ax-popup .ax-popup-main-container .ax-popup-footer-container{background-color:rgba(var(--ax-comp-popup-footer-bg-color))}.ax-popup.ax-popup-full{width:100vw;max-height:calc(100 * var(--ax-vh));height:calc(100 * var(--ax-vh));border-radius:0!important}.ax-popup.ax-fit{width:fit-content!important}.ax-popup.ax-fit .ax-popup-body-container{max-height:100vh}.ax-popup.ax-fit .ax-popup-body-container>ng-component>div{width:fit-content!important}@media (min-width: 320px) and (max-width: 640px){.ax-popup.ax-popup-sm,.ax-popup.ax-popup-md,.ax-popup.ax-popup-lg{width:93vw!important;height:fit-content;max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh))!important}.ax-popup.ax-popup-sm .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-md .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-lg .ax-popup-body-container>ng-component>div{width:100%}}@media (min-width: 768px){.ax-popup.ax-popup-sm{width:55vw!important}.ax-popup.ax-popup-md{width:65vw!important}.ax-popup.ax-popup-lg{width:75vw!important}}@media (min-width: 1280px){.ax-popup.ax-popup-sm{width:30vw!important}.ax-popup.ax-popup-md{width:50vw!important}.ax-popup.ax-popup-lg{width:85vw!important}}@media (min-width: 1536px){.ax-popup.ax-popup-sm{width:25vw!important}.ax-popup.ax-popup-md{width:40vw!important}.ax-popup.ax-popup-lg{width:65vw!important}}.ax-dark .ax-popup{--ax-comp-popup-border-color: var(--ax-sys-color-border-darkest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-darker-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-darker-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-dark-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-dark-surface)}\n"] }]
172
- }], propDecorators: { onKeydownHandler: [{
257
+ ], imports: [AXDecoratorCloseButtonComponent, AsyncPipe, AXTranslatorPipe], template: "<div class=\"ax-popup-wrapper\" aria-modal=\"true\">\n <div\n class=\"ax-popup ax-popup-{{ __config__()?.size || 'md' }}\"\n tabindex=\"0\"\n [class.ax-popup-dragging]=\"isDragging()\"\n [style.position]=\"dragOffset().x || dragOffset().y ? 'fixed' : null\"\n [style.left.px]=\"dragOffset().x || null\"\n [style.top.px]=\"dragOffset().y || null\"\n [style.transform]=\"dragOffset().x || dragOffset().y ? 'none' : null\"\n >\n <div\n class=\"ax-popup-header-container\"\n [class.ax-popup-draggable]=\"__config__()?.draggable\"\n (mousedown)=\"onDragStart($event)\"\n >\n @if (__config__()?.header) {\n <div class=\"ax-popup-header\">\n <span class=\"ax-popup-title\">{{ title() | translate | async }}</span>\n @if (__config__()?.closeButton) {\n <ax-close-button tabindex=\"1\" (click)=\"_handleCloseClick()\"></ax-close-button>\n }\n </div>\n }\n </div>\n <div class=\"ax-popup-main-container ax-loading-container\">\n <div class=\"ax-popup-body-container\" #contentContainer></div>\n <div class=\"ax-popup-footer-container\"></div>\n </div>\n </div>\n</div>\n", styles: [":root{--ax-comp-popup-border-radius: var(--ax-sys-border-radius);--ax-comp-popup-border-color: var(--ax-sys-color-border-lightest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-lighter-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-lighter-surface)}.ax-popup-wrapper{display:contents}.ax-popup-header-container.ax-popup-draggable{cursor:move}.ax-popup.ax-popup-dragging{-webkit-user-select:none;user-select:none}.ax-popup{max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh));margin-left:auto;margin-right:auto;display:flex;width:auto;flex-direction:column;overflow:hidden;border-radius:var(--ax-comp-popup-border-radius);border-width:1px;border-color:rgba(var(--ax-comp-popup-border-color));background-color:rgba(var(--ax-comp-popup-body-bg-color));padding:0;--ax-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--ax-shadow-colored: 0 10px 15px -3px var(--ax-shadow-color), 0 4px 6px -4px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);outline:2px solid transparent;outline-offset:2px;color:rgba(var(--ax-comp-popup-body-text-color))}.ax-popup .ax-popup-header-container{background-color:rgba(var(--ax-comp-popup-header-bg-color))}.ax-popup .ax-popup-header-container .ax-popup-header{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-comp-popup-header-border-color));padding:.75rem}.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1rem;font-weight:500}@media (min-width: 768px){.ax-popup .ax-popup-header-container .ax-popup-header .ax-popup-title{font-size:1.125rem;line-height:1.75rem}}.ax-popup ax-footer{box-shadow:0 2px 10px #0000004d;display:flex;align-items:center;justify-content:space-between;border-top-width:1px;border-color:rgba(var(--ax-comp-popup-footer-border-color));background-color:rgba(var(--ax-comp-popup-footer-bg-color));padding:.75rem}.ax-popup:focus{outline:2px solid transparent;outline-offset:2px}.ax-popup:focus-visible{border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-popup .ax-popup-main-container{display:flex;flex:1 1 0%;flex-direction:column;overflow:hidden}.ax-popup .ax-popup-main-container .ax-popup-body-container{flex:1 1 0%;overflow:auto;background-color:rgba(var(--ax-comp-popup-body-bg-color))}.ax-popup .ax-popup-main-container .ax-popup-footer-container{background-color:rgba(var(--ax-comp-popup-footer-bg-color))}.ax-popup.ax-popup-full{width:100vw;max-height:calc(100 * var(--ax-vh));height:calc(100 * var(--ax-vh));border-radius:0!important}.ax-popup.ax-fit{width:fit-content!important}.ax-popup.ax-fit .ax-popup-body-container{max-height:100vh}.ax-popup.ax-fit .ax-popup-body-container>ng-component>div{width:fit-content!important}@media (min-width: 320px) and (max-width: 640px){.ax-popup.ax-popup-sm,.ax-popup.ax-popup-md,.ax-popup.ax-popup-lg{width:93vw!important;height:fit-content;max-height:calc(var(--ax-overlay-full-width) * var(--ax-vh))!important}.ax-popup.ax-popup-sm .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-md .ax-popup-body-container>ng-component>div,.ax-popup.ax-popup-lg .ax-popup-body-container>ng-component>div{width:100%}}@media (min-width: 768px){.ax-popup.ax-popup-sm{width:55vw!important}.ax-popup.ax-popup-md{width:65vw!important}.ax-popup.ax-popup-lg{width:75vw!important}}@media (min-width: 1280px){.ax-popup.ax-popup-sm{width:30vw!important}.ax-popup.ax-popup-md{width:50vw!important}.ax-popup.ax-popup-lg{width:85vw!important}}@media (min-width: 1536px){.ax-popup.ax-popup-sm{width:25vw!important}.ax-popup.ax-popup-md{width:40vw!important}.ax-popup.ax-popup-lg{width:65vw!important}}.ax-dark .ax-popup{--ax-comp-popup-border-color: var(--ax-sys-color-border-darkest-surface);--ax-comp-popup-body-bg-color: var(--ax-sys-color-darker-surface);--ax-comp-popup-body-text-color: var(--ax-sys-color-on-darker-surface);--ax-comp-popup-header-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-header-border-color: var(--ax-sys-color-border-dark-surface);--ax-comp-popup-footer-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-popup-footer-border-color: var(--ax-sys-color-border-dark-surface)}\n"] }]
258
+ }], propDecorators: { contentContainerRef: [{
259
+ type: ViewChild,
260
+ args: ['contentContainer', { read: ViewContainerRef, static: true }]
261
+ }], contentContainerEl: [{
262
+ type: ViewChild,
263
+ args: ['contentContainer', { static: true }]
264
+ }], __content__: [{ type: i0.Input, args: [{ isSignal: true, alias: "__content__", required: false }] }], __config__: [{ type: i0.Input, args: [{ isSignal: true, alias: "__config__", required: false }] }], __popupRef__: [{ type: i0.Input, args: [{ isSignal: true, alias: "__popupRef__", required: false }] }], __id__: [{ type: i0.Input, args: [{ isSignal: true, alias: "__id__", required: false }] }], onKeydownHandler: [{
265
+ type: HostListener,
266
+ args: ['keydown.escape']
267
+ }], onDragMove: [{
268
+ type: HostListener,
269
+ args: ['document:mousemove', ['$event']]
270
+ }], onDragEnd: [{
173
271
  type: HostListener,
174
- args: ['keydown.escape', ['$event']]
272
+ args: ['document:mouseup']
175
273
  }] } });
176
274
 
275
+ class AXPopupComponentBase {
276
+ constructor() {
277
+ this.__popup__ = input(...(ngDevMode ? [undefined, { debugName: "__popup__" }] : []));
278
+ }
279
+ close(data = null) {
280
+ this.__popup__().close(data);
281
+ }
282
+ setTitle(title) {
283
+ this.__popup__().setTitle(title);
284
+ }
285
+ bringToFront() {
286
+ this.__popup__().bringToFront();
287
+ }
288
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupComponentBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
289
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: AXPopupComponentBase, isStandalone: true, inputs: { __popup__: { classPropertyName: "__popup__", publicName: "__popup__", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
290
+ }
291
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupComponentBase, decorators: [{
292
+ type: Directive
293
+ }], propDecorators: { __popup__: [{ type: i0.Input, args: [{ isSignal: true, alias: "__popup__", required: false }] }] } });
294
+
177
295
  /**
178
296
  * This is a service which you can create popup with it
179
297
  *
@@ -181,10 +299,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
181
299
  */
182
300
  class AXPopupService {
183
301
  constructor() {
184
- this.dialog = inject(Dialog);
185
- this.#platform = inject(AXPlatform);
302
+ this.popupList = new Map();
303
+ this.overlayService = inject(AXOverlayService);
186
304
  }
187
- #platform;
188
305
  /**
189
306
  * @ignore
190
307
  */
@@ -205,60 +322,133 @@ class AXPopupService {
205
322
  else {
206
323
  config = Object.assign(config, arg2);
207
324
  }
208
- const dialogRef = this.dialog.open(AXPopupComponent, {
209
- data: Object.assign(config, { content: arg1 }),
210
- autoFocus: true,
211
- restoreFocus: true,
212
- closeOnNavigation: true,
213
- closeOnDestroy: true,
214
- hasBackdrop: config.hasBackdrop,
215
- backdropClass: config.backdropClass,
216
- disableClose: config.closeOnBackdropClick ? false : true,
217
- viewContainerRef: config.viewContainerRef,
218
- providers: config.providers,
219
- panelClass: config.panelClass ? config.panelClass : [this.#platform.isDark() ? 'ax-dark' : ''],
220
- direction: config.direction ? config.direction : AXHtmlUtil.isRtl() ? 'rtl' : 'ltr',
221
- });
222
325
  const promise = new AXComponentClosedPromise((resolve) => {
223
- dialogRef.closed.subscribe((d) => {
224
- if (resolve) {
225
- resolve({
226
- sender: d?.component,
227
- data: d?.data,
228
- });
229
- }
326
+ this.openInternal(arg1, config).then((ref) => {
327
+ ref.onClose.subscribe((data) => {
328
+ if (resolve) {
329
+ resolve({
330
+ sender: null,
331
+ data: data,
332
+ });
333
+ }
334
+ });
230
335
  });
231
336
  });
232
337
  return promise;
233
338
  }
339
+ /**
340
+ * Opens a popup with the specified content and configuration.
341
+ * @param content - Component or template to display
342
+ * @param config - Configuration options for the popup
343
+ * @returns Promise<AXPopupRef> - Reference to the opened popup
344
+ */
345
+ async openInternal(content, config) {
346
+ const randomId = Math.floor(Math.random() * 100000000000);
347
+ const onClose = new Subject();
348
+ const returnRef = {
349
+ close: (data) => {
350
+ this.close(randomId, data);
351
+ },
352
+ setInputs: (values) => {
353
+ this.setInputs(randomId, values);
354
+ },
355
+ setTitle: (title) => {
356
+ this.setTitle(randomId, title);
357
+ },
358
+ bringToFront: () => {
359
+ this.bringToFront(randomId);
360
+ },
361
+ onClose,
362
+ };
363
+ // Build panel classes
364
+ const panelClasses = ['ax-popup-overlay'];
365
+ if (config.panelClass) {
366
+ panelClasses.push(...config.panelClass);
367
+ }
368
+ const ref = await this.overlayService.create(AXPopupComponent, {
369
+ backdrop: {
370
+ enabled: config.hasBackdrop ?? true,
371
+ background: true,
372
+ closeOnClick: config.closeOnBackdropClick ?? false,
373
+ },
374
+ panelClass: panelClasses,
375
+ inputs: {
376
+ __content__: content,
377
+ __config__: config,
378
+ __popupRef__: returnRef,
379
+ __id__: randomId,
380
+ },
381
+ });
382
+ this.popupList.set(randomId, { overlay: ref, popup: returnRef });
383
+ return returnRef;
384
+ }
385
+ /**
386
+ * Closes a popup by its ID.
387
+ * @param id - The popup ID to close
388
+ * @param data - Optional data to pass to the close event
389
+ */
390
+ close(id, data) {
391
+ const ref = this.popupList.get(id);
392
+ if (!ref)
393
+ return;
394
+ ref.popup.onClose.next(data);
395
+ ref.popup.onClose.complete();
396
+ ref.overlay.dispose();
397
+ this.popupList.delete(id);
398
+ }
399
+ /**
400
+ * Sets input values for a popup by its ID.
401
+ * @param id - The popup ID
402
+ * @param values - Object containing input values to set
403
+ */
404
+ setInputs(id, values) {
405
+ const ref = this.popupList.get(id)?.overlay.instance;
406
+ if (!ref)
407
+ return;
408
+ if (ref instanceof ComponentRef) {
409
+ const componentInstance = ref.instance;
410
+ componentInstance.setContentInputs(values);
411
+ }
412
+ }
413
+ /**
414
+ * Sets the title for a popup by its ID.
415
+ * @param id - The popup ID
416
+ * @param title - The new title
417
+ */
418
+ setTitle(id, title) {
419
+ const ref = this.popupList.get(id)?.overlay.instance;
420
+ if (!ref)
421
+ return;
422
+ if (ref instanceof ComponentRef) {
423
+ const componentInstance = ref.instance;
424
+ componentInstance.setTitle(title);
425
+ }
426
+ }
427
+ /**
428
+ * Brings a popup to the front of all other overlays.
429
+ * @param id - The popup ID to bring to front
430
+ */
431
+ bringToFront(id) {
432
+ const ref = this.popupList.get(id);
433
+ if (!ref)
434
+ return;
435
+ ref.overlay.bringToFront();
436
+ }
234
437
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
235
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupService }); }
438
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupService, providedIn: 'root' }); }
236
439
  }
237
440
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupService, decorators: [{
238
- type: Injectable
441
+ type: Injectable,
442
+ args: [{
443
+ providedIn: 'root',
444
+ }]
239
445
  }] });
240
446
 
241
447
  const COMPONENT = [AXPopupComponent];
242
- const MODULES = [
243
- CommonModule,
244
- AXCommonModule,
245
- DragDropModule,
246
- A11yModule,
247
- PortalModule,
248
- AXDecoratorModule,
249
- DialogModule,
250
- AXTranslationModule,
251
- ];
448
+ const MODULES = [CommonModule, AXCommonModule, AXDecoratorModule, AXTranslationModule];
252
449
  class AXPopupModule {
253
450
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
254
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXPopupModule, imports: [CommonModule,
255
- AXCommonModule,
256
- DragDropModule,
257
- A11yModule,
258
- PortalModule,
259
- AXDecoratorModule,
260
- DialogModule,
261
- AXTranslationModule, AXPopupComponent], exports: [AXPopupComponent] }); }
451
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXPopupModule, imports: [CommonModule, AXCommonModule, AXDecoratorModule, AXTranslationModule, AXPopupComponent], exports: [AXPopupComponent] }); }
262
452
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupModule, providers: [AXPopupService], imports: [MODULES, COMPONENT] }); }
263
453
  }
264
454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupModule, decorators: [{
@@ -274,5 +464,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
274
464
  * Generated bundle index. Do not edit.
275
465
  */
276
466
 
277
- export { AXPopupComponent, AXPopupModule, AXPopupService };
467
+ export { AXPopupComponent, AXPopupComponentBase, AXPopupModule, AXPopupService };
278
468
  //# sourceMappingURL=acorex-components-popup.mjs.map