@acorex/components 21.0.1-next.3 → 21.0.1-next.4

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 (49) hide show
  1. package/action-sheet/index.d.ts +41 -19
  2. package/datetime-picker/index.d.ts +1 -1
  3. package/dialog/index.d.ts +18 -14
  4. package/dropdown/index.d.ts +3 -4
  5. package/fesm2022/acorex-components-action-sheet.mjs +141 -93
  6. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  7. package/fesm2022/acorex-components-conversation2.mjs +2 -2
  8. package/fesm2022/acorex-components-conversation2.mjs.map +1 -1
  9. package/fesm2022/acorex-components-datetime-box.mjs +1 -0
  10. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  11. package/fesm2022/acorex-components-datetime-picker.mjs +25 -25
  12. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  13. package/fesm2022/acorex-components-dialog.mjs +66 -45
  14. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  15. package/fesm2022/acorex-components-dropdown.mjs +5 -10
  16. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  17. package/fesm2022/acorex-components-grid-layout-builder.mjs +2 -2
  18. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  19. package/fesm2022/acorex-components-loading-dialog.mjs +73 -36
  20. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  21. package/fesm2022/acorex-components-menu.mjs +26 -5
  22. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  23. package/fesm2022/{acorex-components-modal-acorex-components-modal-CXXcFToK.mjs → acorex-components-modal-acorex-components-modal-Bmoz9DL5.mjs} +27 -3
  24. package/fesm2022/acorex-components-modal-acorex-components-modal-Bmoz9DL5.mjs.map +1 -0
  25. package/fesm2022/{acorex-components-modal-modal-content.component-B4rhHeEz.mjs → acorex-components-modal-modal-content.component-CSJU1vRi.mjs} +2 -2
  26. package/fesm2022/{acorex-components-modal-modal-content.component-B4rhHeEz.mjs.map → acorex-components-modal-modal-content.component-CSJU1vRi.mjs.map} +1 -1
  27. package/fesm2022/acorex-components-modal.mjs +1 -1
  28. package/fesm2022/acorex-components-notification.mjs +374 -257
  29. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  30. package/fesm2022/acorex-components-popover.mjs +136 -175
  31. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  32. package/fesm2022/acorex-components-popup.mjs +308 -105
  33. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  34. package/fesm2022/acorex-components-routing-progress.mjs +2 -2
  35. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  36. package/fesm2022/acorex-components-toast.mjs +231 -123
  37. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  38. package/fesm2022/acorex-components-tooltip.mjs +2 -3
  39. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  40. package/loading-dialog/index.d.ts +31 -15
  41. package/menu/index.d.ts +4 -0
  42. package/modal/index.d.ts +7 -0
  43. package/notification/index.d.ts +47 -32
  44. package/package.json +3 -3
  45. package/popover/index.d.ts +20 -27
  46. package/popup/index.d.ts +103 -27
  47. package/toast/index.d.ts +24 -18
  48. package/tooltip/index.d.ts +1 -2
  49. package/fesm2022/acorex-components-modal-acorex-components-modal-CXXcFToK.mjs.map +0 -1
@@ -1,19 +1,17 @@
1
- import { AXPlatform } from '@acorex/core/platform';
2
- import { TemplatePortal, ComponentPortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';
1
+ import { AXOverlayService } from '@acorex/cdk/overlay';
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, DOCUMENT, input, signal, TemplateRef, ViewContainerRef, HostListener, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, ComponentRef, Injectable, Directive, NgModule } from '@angular/core';
4
+ import { Subject } from 'rxjs';
5
+ import { AXPlatform } from '@acorex/core/platform';
5
6
  import { MXBaseComponent, AXClosableComponent, AXComponent, AXComponentClosedPromise, AXCommonModule } from '@acorex/cdk/common';
6
7
  import { AXDecoratorCloseButtonComponent, AXDecoratorModule } from '@acorex/components/decorators';
7
8
  import { AXLoadingService } from '@acorex/components/loading';
9
+ import { AXComponentService } from '@acorex/core/components';
8
10
  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
11
  import { AsyncPipe, CommonModule } from '@angular/common';
13
- import { AXHtmlUtil } from '@acorex/core/utils';
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,119 @@ class AXPopupComponent extends MXBaseComponent {
21
19
  constructor() {
22
20
  super(...arguments);
23
21
  this._zone = inject(NgZone);
24
- this._viewContainerRef = inject(ViewContainerRef);
22
+ this._document = inject(DOCUMENT);
25
23
  this.loadingService = inject(AXLoadingService);
26
24
  this._platform = inject(AXPlatform);
27
- this.data = inject(DIALOG_DATA);
28
- this.dialogRef = inject(DialogRef);
25
+ this.componentService = inject(AXComponentService);
26
+ // Inputs from overlay service
27
+ this.__content__ = input(...(ngDevMode ? [undefined, { debugName: "__content__" }] : []));
28
+ this.__config__ = input(...(ngDevMode ? [undefined, { debugName: "__config__" }] : []));
29
+ this.__popupRef__ = input(...(ngDevMode ? [undefined, { debugName: "__popupRef__" }] : []));
30
+ this.__id__ = input(...(ngDevMode ? [undefined, { debugName: "__id__" }] : []));
29
31
  /**
30
32
  * Indicates whether the component is loading.
31
33
  * @defaultValue true
32
34
  */
33
35
  this.isLoading = true;
36
+ /** @ignore */
37
+ this._componentRef = null;
38
+ /** Current title */
39
+ this.title = signal('', ...(ngDevMode ? [{ debugName: "title" }] : []));
40
+ /** @ignore */
41
+ this.isDragging = signal(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
42
+ /** @ignore */
43
+ this.dragOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "dragOffset" }] : []));
44
+ /** @ignore */
45
+ this.dragStartPos = { x: 0, y: 0 };
46
+ /** @ignore */
47
+ this.elementStartPos = { x: 0, y: 0 };
34
48
  }
35
49
  /** @ignore */
36
50
  ngOnInit() {
37
51
  super.ngOnInit();
52
+ const config = this.__config__();
38
53
  if (this._platform.is('SM')) {
39
- this.data.draggable = false;
54
+ // Disable dragging on small screens
55
+ if (config) {
56
+ config.draggable = false;
57
+ }
40
58
  }
59
+ this.title.set(config?.title ?? '');
41
60
  this._loadingId = this.loadingService.show({
42
61
  location: this.getHostElement(),
43
62
  });
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
- }
63
+ this.renderContent();
56
64
  }
57
65
  /** @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
- },
66
+ async renderContent() {
67
+ const content = this.__content__();
68
+ const config = this.__config__();
69
+ if (!content) {
70
+ this.loadingService.hide(this._loadingId);
71
+ return;
72
+ }
73
+ if (content instanceof TemplateRef) {
74
+ // Render template using ViewContainerRef (supports context)
75
+ this.contentContainerRef.createEmbeddedView(content, {
76
+ $implicit: config?.data,
77
+ ref: this,
68
78
  });
69
- if (ref.instance.onClosed) {
70
- ref.instance.onClosed.subscribe((e) => {
79
+ this.handleContentRendered();
80
+ }
81
+ else if (typeof content === 'function') {
82
+ // Render component
83
+ const componentRef = await this.componentService.createFromComponent(content);
84
+ this._componentRef = componentRef;
85
+ // Get component input definitions to check before setting inputs
86
+ const inputDefs = componentRef.componentType?.ɵcmp
87
+ ?.inputs;
88
+ // Set data inputs (only if the component has the input defined)
89
+ if (config?.data && typeof config.data === 'object') {
90
+ Object.entries(config.data).forEach(([key, value]) => {
91
+ if (inputDefs && key in inputDefs) {
92
+ componentRef.setInput(key, value);
93
+ }
94
+ else {
95
+ // Fallback: set as property directly on the instance
96
+ componentRef.instance[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');
122
+ if (!body)
123
+ return;
78
124
  const content = body.children[0];
125
+ if (!content)
126
+ return;
79
127
  const popHeader = this.getHostElement().querySelector('.ax-popup-header-container');
80
128
  const popFooter = this.getHostElement().querySelector('.ax-popup-footer-container');
81
129
  const footer = content.querySelector(':scope > ax-footer');
82
130
  const header = content.querySelector(':scope > ax-header');
83
- if (footer) {
84
- popFooter?.append(footer);
131
+ if (footer && popFooter) {
132
+ popFooter.append(footer);
85
133
  }
86
- if (header) {
134
+ if (header && popHeader) {
87
135
  popHeader.innerHTML = '';
88
136
  popHeader.append(header);
89
137
  }
@@ -94,9 +142,9 @@ class AXPopupComponent extends MXBaseComponent {
94
142
  this.cdr.markForCheck();
95
143
  }
96
144
  /** @ignore */
97
- onKeydownHandler(event) {
145
+ onKeydownHandler() {
98
146
  const focusedOrHasFocused = this.getHostElement().matches(':focus-within');
99
- if (this.data.closeButton && focusedOrHasFocused) {
147
+ if (this.__config__()?.closeButton && focusedOrHasFocused) {
100
148
  this.close();
101
149
  }
102
150
  }
@@ -107,6 +155,10 @@ class AXPopupComponent extends MXBaseComponent {
107
155
  /** @ignore */
108
156
  ngOnDestroy() {
109
157
  this.loadingService.hide(this._loadingId);
158
+ if (this._componentRef) {
159
+ this._componentRef.destroy();
160
+ this._componentRef = null;
161
+ }
110
162
  }
111
163
  /**
112
164
  * Sets focus on the `.ax-popup` element within the host element after a short delay.
@@ -115,23 +167,20 @@ class AXPopupComponent extends MXBaseComponent {
115
167
  setTimeout(() => this.getHostElement().querySelector('.ax-popup')?.focus());
116
168
  }
117
169
  /**
118
- * Closes the dialog, emitting component reference, host element, and optional data.
170
+ * Closes the popup, emitting component reference, host element, and optional data.
119
171
  * @param {unknown} [data]
120
172
  */
121
173
  close(data) {
122
174
  const closeFn = () => {
123
- this.dialogRef.close({
124
- component: this._componentRef,
125
- htmlElement: this.getHostElement(),
126
- data: data,
127
- });
175
+ this.__popupRef__()?.close(data);
128
176
  };
129
- if (typeof this._componentRef?.onClosing === 'function') {
177
+ const componentInstance = this._componentRef?.instance;
178
+ if (typeof componentInstance?.onClosing === 'function') {
130
179
  const ee = {
131
180
  cancel: false,
132
181
  data,
133
182
  };
134
- const closingResult = this._componentRef?.onClosing(ee);
183
+ const closingResult = componentInstance.onClosing(ee);
135
184
  if (closingResult instanceof Promise) {
136
185
  closingResult.then(() => {
137
186
  if (!ee.cancel) {
@@ -149,31 +198,215 @@ class AXPopupComponent extends MXBaseComponent {
149
198
  closeFn();
150
199
  }
151
200
  }
201
+ /**
202
+ * Sets inputs on the content component.
203
+ * @param values - Object containing input values to set
204
+ */
205
+ setContentInputs(values) {
206
+ const componentRef = this._componentRef;
207
+ if (componentRef) {
208
+ Object.entries(values).forEach(([key, value]) => {
209
+ componentRef.setInput(key, value);
210
+ });
211
+ }
212
+ }
213
+ /**
214
+ * Sets the popup title.
215
+ * @param title - The new title
216
+ */
217
+ setTitle(title) {
218
+ this.title.set(title);
219
+ this.cdr.markForCheck();
220
+ }
221
+ // Drag functionality
222
+ onDragStart(event) {
223
+ const config = this.__config__();
224
+ if (!config?.draggable)
225
+ return;
226
+ this.isDragging.set(true);
227
+ this.dragStartPos = { x: event.clientX, y: event.clientY };
228
+ const popup = this.getHostElement().querySelector('.ax-popup');
229
+ if (popup) {
230
+ const rect = popup.getBoundingClientRect();
231
+ this.elementStartPos = { x: rect.left, y: rect.top };
232
+ }
233
+ event.preventDefault();
234
+ }
235
+ onDragMove(event) {
236
+ if (!this.isDragging())
237
+ return;
238
+ const deltaX = event.clientX - this.dragStartPos.x;
239
+ const deltaY = event.clientY - this.dragStartPos.y;
240
+ this.dragOffset.set({
241
+ x: this.elementStartPos.x + deltaX,
242
+ y: this.elementStartPos.y + deltaY,
243
+ });
244
+ }
245
+ onDragEnd() {
246
+ this.isDragging.set(false);
247
+ }
152
248
  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: [
249
+ 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
250
  { provide: AXClosableComponent, useExisting: AXPopupComponent },
155
251
  { 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 }); }
252
+ ], 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
253
  }
158
254
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupComponent, decorators: [{
159
255
  type: Component,
160
256
  args: [{ selector: 'ax-popup', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
161
257
  { provide: AXClosableComponent, useExisting: AXPopupComponent },
162
258
  { 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: [{
259
+ ], 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"] }]
260
+ }], propDecorators: { contentContainerRef: [{
261
+ type: ViewChild,
262
+ args: ['contentContainer', { read: ViewContainerRef, static: true }]
263
+ }], contentContainerEl: [{
264
+ type: ViewChild,
265
+ args: ['contentContainer', { static: true }]
266
+ }], __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: [{
173
267
  type: HostListener,
174
- args: ['keydown.escape', ['$event']]
268
+ args: ['keydown.escape']
269
+ }], onDragMove: [{
270
+ type: HostListener,
271
+ args: ['document:mousemove', ['$event']]
272
+ }], onDragEnd: [{
273
+ type: HostListener,
274
+ args: ['document:mouseup']
175
275
  }] } });
176
276
 
277
+ class AXPopupStateService {
278
+ constructor() {
279
+ this.popupList = new Map();
280
+ this.overlayService = inject(AXOverlayService);
281
+ }
282
+ /**
283
+ * Opens a popup with the specified content and configuration.
284
+ * @param content - Component or template to display
285
+ * @param config - Configuration options for the popup
286
+ * @returns Promise<AXPopupRef> - Reference to the opened popup
287
+ */
288
+ async open(content, config) {
289
+ const randomId = Math.floor(Math.random() * 100000000000);
290
+ const onClose = new Subject();
291
+ const returnRef = {
292
+ close: (data) => {
293
+ this.close(randomId, data);
294
+ },
295
+ setInputs: (values) => {
296
+ this.setInputs(randomId, values);
297
+ },
298
+ setTitle: (title) => {
299
+ this.setTitle(randomId, title);
300
+ },
301
+ bringToFront: () => {
302
+ this.bringToFront(randomId);
303
+ },
304
+ onClose,
305
+ };
306
+ // Build panel classes
307
+ const panelClasses = ['ax-popup-overlay'];
308
+ if (config.panelClass) {
309
+ panelClasses.push(...config.panelClass);
310
+ }
311
+ const ref = await this.overlayService.create(AXPopupComponent, {
312
+ backdrop: {
313
+ enabled: config.hasBackdrop ?? true,
314
+ background: true,
315
+ closeOnClick: config.closeOnBackdropClick ?? false,
316
+ },
317
+ panelClass: panelClasses,
318
+ inputs: {
319
+ __content__: content,
320
+ __config__: config,
321
+ __popupRef__: returnRef,
322
+ __id__: randomId,
323
+ },
324
+ });
325
+ this.popupList.set(randomId, { overlay: ref, popup: returnRef });
326
+ return returnRef;
327
+ }
328
+ /**
329
+ * Closes a popup by its ID.
330
+ * @param id - The popup ID to close
331
+ * @param data - Optional data to pass to the close event
332
+ */
333
+ async close(id, data) {
334
+ const ref = this.popupList.get(id);
335
+ if (!ref)
336
+ return;
337
+ ref.popup.onClose.next(data);
338
+ ref.popup.onClose.complete();
339
+ ref.overlay.dispose();
340
+ this.popupList.delete(id);
341
+ }
342
+ /**
343
+ * Sets input values for a popup by its ID.
344
+ * @param id - The popup ID
345
+ * @param values - Object containing input values to set
346
+ */
347
+ async setInputs(id, values) {
348
+ const ref = this.popupList.get(id)?.overlay.instance;
349
+ if (!ref)
350
+ return;
351
+ if (ref instanceof ComponentRef) {
352
+ const componentInstance = ref.instance;
353
+ componentInstance.setContentInputs(values);
354
+ }
355
+ }
356
+ /**
357
+ * Sets the title for a popup by its ID.
358
+ * @param id - The popup ID
359
+ * @param title - The new title
360
+ */
361
+ async setTitle(id, title) {
362
+ const ref = this.popupList.get(id)?.overlay.instance;
363
+ if (!ref)
364
+ return;
365
+ if (ref instanceof ComponentRef) {
366
+ const componentInstance = ref.instance;
367
+ componentInstance.setTitle(title);
368
+ }
369
+ }
370
+ /**
371
+ * Brings a popup to the front of all other overlays.
372
+ * @param id - The popup ID to bring to front
373
+ */
374
+ bringToFront(id) {
375
+ const ref = this.popupList.get(id);
376
+ if (!ref)
377
+ return;
378
+ ref.overlay.bringToFront();
379
+ }
380
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
381
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupStateService, providedIn: 'root' }); }
382
+ }
383
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupStateService, decorators: [{
384
+ type: Injectable,
385
+ args: [{
386
+ providedIn: 'root',
387
+ }]
388
+ }] });
389
+
390
+ class AXPopupComponentBase {
391
+ constructor() {
392
+ this.__popup__ = input(...(ngDevMode ? [undefined, { debugName: "__popup__" }] : []));
393
+ }
394
+ close(data = null) {
395
+ this.__popup__().close(data);
396
+ }
397
+ setTitle(title) {
398
+ this.__popup__().setTitle(title);
399
+ }
400
+ bringToFront() {
401
+ this.__popup__().bringToFront();
402
+ }
403
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupComponentBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
404
+ 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 }); }
405
+ }
406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupComponentBase, decorators: [{
407
+ type: Directive
408
+ }], propDecorators: { __popup__: [{ type: i0.Input, args: [{ isSignal: true, alias: "__popup__", required: false }] }] } });
409
+
177
410
  /**
178
411
  * This is a service which you can create popup with it
179
412
  *
@@ -181,10 +414,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
181
414
  */
182
415
  class AXPopupService {
183
416
  constructor() {
184
- this.dialog = inject(Dialog);
185
- this.#platform = inject(AXPlatform);
417
+ this.stateService = inject(AXPopupStateService);
186
418
  }
187
- #platform;
188
419
  /**
189
420
  * @ignore
190
421
  */
@@ -205,28 +436,16 @@ class AXPopupService {
205
436
  else {
206
437
  config = Object.assign(config, arg2);
207
438
  }
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
439
  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
- }
440
+ this.stateService.open(arg1, config).then((ref) => {
441
+ ref.onClose.subscribe((data) => {
442
+ if (resolve) {
443
+ resolve({
444
+ sender: null,
445
+ data: data,
446
+ });
447
+ }
448
+ });
230
449
  });
231
450
  });
232
451
  return promise;
@@ -239,26 +458,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
239
458
  }] });
240
459
 
241
460
  const COMPONENT = [AXPopupComponent];
242
- const MODULES = [
243
- CommonModule,
244
- AXCommonModule,
245
- DragDropModule,
246
- A11yModule,
247
- PortalModule,
248
- AXDecoratorModule,
249
- DialogModule,
250
- AXTranslationModule,
251
- ];
461
+ const MODULES = [CommonModule, AXCommonModule, AXDecoratorModule, AXTranslationModule];
252
462
  class AXPopupModule {
253
463
  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] }); }
464
+ 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
465
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupModule, providers: [AXPopupService], imports: [MODULES, COMPONENT] }); }
263
466
  }
264
467
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXPopupModule, decorators: [{
@@ -274,5 +477,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
274
477
  * Generated bundle index. Do not edit.
275
478
  */
276
479
 
277
- export { AXPopupComponent, AXPopupModule, AXPopupService };
480
+ export { AXPopupComponent, AXPopupComponentBase, AXPopupModule, AXPopupService, AXPopupStateService };
278
481
  //# sourceMappingURL=acorex-components-popup.mjs.map