@acontplus/ng-components 2.1.13 → 2.1.15
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, booleanAttribute, output, ViewEncapsulation, Component, inject, viewChild, ViewContainerRef, ChangeDetectionStrategy, effect,
|
|
2
|
+
import { input, booleanAttribute, output, ViewEncapsulation, Component, Injectable, inject, viewChild, ViewContainerRef, ChangeDetectionStrategy, effect, computed, PLATFORM_ID, signal, Input, TemplateRef, Pipe, Directive, ViewChild, KeyValueDiffers, ChangeDetectorRef, InjectionToken, ANIMATION_MODULE_TYPE, HostListener, ContentChildren, model, forwardRef, EventEmitter, ApplicationRef, Injector, DOCUMENT, ElementRef, NgZone, ContentChild, Output, Renderer2, createComponent, EnvironmentInjector } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/material/card';
|
|
4
4
|
import { MatCardModule } from '@angular/material/card';
|
|
5
5
|
import * as i2 from '@angular/material/button';
|
|
@@ -341,6 +341,175 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
341
341
|
], encapsulation: ViewEncapsulation.None, template: "@switch (matStyle()) { @case ('text') {\n<button\n matButton\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('elevated') {\n<button\n matButton=\"elevated\"\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('outlined') {\n<button\n matButton=\"outlined\"\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('tonal') {\n<button\n matButton=\"tonal\"\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('icon') {\n<button\n matIconButton\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('fab') {\n<button\n matFab\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('mini-fab') {\n<button\n matMiniFab\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('extended-fab') {\n<button\n matFab\n extended\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @default {\n<button\n matButton=\"filled\"\n [ngClass]=\"getButtonClasses()\"\n [disabled]=\"disabled()\"\n [type]=\"type()\"\n [title]=\"getTitle()\"\n [attr.aria-label]=\"ariaLabel() || getTitle()\"\n [attr.name]=\"name()\"\n [attr.id]=\"id()\"\n [attr.form]=\"form()\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.data-testid]=\"testId()\"\n (click)=\"handleClick.emit($event)\"\n>\n <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} }\n\n<ng-template #buttonContent>\n @if (getIcon()) {\n <mat-icon>{{ getIcon() }}</mat-icon>\n } @if (getDisplayText()) { {{ getDisplayText() }} }\n\n <ng-content />\n</ng-template>\n", styles: [":root{--acp-secondary: #e0e0e0;--acp-secondary-on: #000000;--acp-success: #4caf50;--acp-success-on: #ffffff;--acp-danger: #ba1a1a;--acp-danger-on: #ffffff;--acp-warning: #ff9800;--acp-warning-on: #000000;--acp-info: #2196f3;--acp-info-on: #ffffff;--acp-dark: #212121;--acp-dark-on: #ffffff}.dark-theme{--acp-secondary: #424242;--acp-secondary-on: #ffffff;--acp-success: #81c784;--acp-success-on: #1b5e20;--acp-danger: #ef5350;--acp-danger-on: #b71c1c;--acp-warning: #ffb74d;--acp-warning-on: #e65100;--acp-info: #64b5f6;--acp-info-on: #0d47a1;--acp-dark: #616161;--acp-dark-on: #ffffff}acp-button{display:inline-block}.mat-mdc-button .mdc-button__label,.mat-mdc-unelevated-button .mdc-button__label,.mat-mdc-raised-button .mdc-button__label,.mat-mdc-outlined-button .mdc-button__label,button[matbutton=tonal] .mdc-button__label,.mat-mdc-fab.mdc-fab--extended .mdc-button__label{display:flex;align-items:center;gap:8px}.mat-mdc-button.mat-btn-secondary,.mat-mdc-unelevated-button.mat-btn-secondary{background-color:var(--acp-secondary)!important;color:var(--acp-secondary-on)!important}.mat-mdc-button.mat-btn-secondary:hover,.mat-mdc-unelevated-button.mat-btn-secondary:hover{background-color:color-mix(in srgb,var(--acp-secondary) 80%,black)!important}.mat-mdc-button.mat-btn-success,.mat-mdc-unelevated-button.mat-btn-success{background-color:var(--acp-success)!important;color:var(--acp-success-on)!important}.mat-mdc-button.mat-btn-danger,.mat-mdc-unelevated-button.mat-btn-danger{background-color:var(--acp-danger)!important;color:var(--acp-danger-on)!important}.mat-mdc-button.mat-btn-warning,.mat-mdc-unelevated-button.mat-btn-warning{background-color:var(--acp-warning)!important;color:var(--acp-warning-on)!important}.mat-mdc-button.mat-btn-info,.mat-mdc-unelevated-button.mat-btn-info{background-color:var(--acp-info)!important;color:var(--acp-info-on)!important}.mat-mdc-button.mat-btn-dark,.mat-mdc-unelevated-button.mat-btn-dark{background-color:var(--acp-dark)!important;color:var(--acp-dark-on)!important}button[matbutton=tonal].mat-btn-success{background-color:color-mix(in srgb,var(--acp-success) 12%,transparent)!important;color:var(--acp-success)!important}button[matbutton=tonal].mat-btn-danger{background-color:color-mix(in srgb,var(--acp-danger) 12%,transparent)!important;color:var(--acp-danger)!important}button[matbutton=tonal].mat-btn-warning{background-color:color-mix(in srgb,var(--acp-warning) 12%,transparent)!important;color:var(--acp-warning)!important}button[matbutton=tonal].mat-btn-info{background-color:color-mix(in srgb,var(--acp-info) 12%,transparent)!important;color:var(--acp-info)!important}button[matbutton=tonal].mat-btn-dark{background-color:color-mix(in srgb,var(--acp-dark) 12%,transparent)!important;color:var(--acp-dark)!important}.mat-mdc-button:not(.mat-mdc-unelevated-button):not(.mat-mdc-raised-button):not(.mat-mdc-outlined-button).mat-btn-secondary{color:var(--mat-sys-on-surface)!important}.mat-mdc-button:not(.mat-mdc-unelevated-button):not(.mat-mdc-raised-button):not(.mat-mdc-outlined-button).mat-btn-success{color:var(--acp-success)!important}.mat-mdc-button:not(.mat-mdc-unelevated-button):not(.mat-mdc-raised-button):not(.mat-mdc-outlined-button).mat-btn-danger{color:var(--acp-danger)!important}.mat-mdc-button:not(.mat-mdc-unelevated-button):not(.mat-mdc-raised-button):not(.mat-mdc-outlined-button).mat-btn-warning{color:var(--acp-warning)!important}.mat-mdc-button:not(.mat-mdc-unelevated-button):not(.mat-mdc-raised-button):not(.mat-mdc-outlined-button).mat-btn-info{color:var(--acp-info)!important}.mat-mdc-button:not(.mat-mdc-unelevated-button):not(.mat-mdc-raised-button):not(.mat-mdc-outlined-button).mat-btn-dark{color:var(--acp-dark)!important}.mat-mdc-raised-button.mat-btn-secondary{background-color:var(--mat-sys-surface-container-low)!important;color:var(--mat-sys-on-surface)!important}.mat-mdc-raised-button.mat-btn-success{background-color:var(--mat-sys-surface-container-low)!important;color:var(--acp-success)!important}.mat-mdc-raised-button.mat-btn-success:hover{background-color:color-mix(in srgb,var(--acp-success) 12%,transparent)!important}.mat-mdc-raised-button.mat-btn-danger{background-color:var(--mat-sys-surface-container-low)!important;color:var(--acp-danger)!important}.mat-mdc-raised-button.mat-btn-danger:hover{background-color:color-mix(in srgb,var(--acp-danger) 12%,transparent)!important}.mat-mdc-raised-button.mat-btn-warning{background-color:var(--mat-sys-surface-container-low)!important;color:var(--acp-warning)!important}.mat-mdc-raised-button.mat-btn-warning:hover{background-color:color-mix(in srgb,var(--acp-warning) 12%,transparent)!important}.mat-mdc-raised-button.mat-btn-info{background-color:var(--mat-sys-surface-container-low)!important;color:var(--acp-info)!important}.mat-mdc-raised-button.mat-btn-info:hover{background-color:color-mix(in srgb,var(--acp-info) 12%,transparent)!important}.mat-mdc-raised-button.mat-btn-dark{background-color:var(--mat-sys-surface-container-low)!important;color:var(--acp-dark)!important}.mat-mdc-raised-button.mat-btn-dark:hover{background-color:color-mix(in srgb,var(--acp-dark) 12%,transparent)!important}.mat-mdc-outlined-button.mat-btn-secondary{border-color:var(--mat-sys-outline)!important;color:var(--mat-sys-on-surface)!important}.mat-mdc-outlined-button.mat-btn-success{border-color:var(--acp-success)!important;color:var(--acp-success)!important}.mat-mdc-outlined-button.mat-btn-danger{border-color:var(--acp-danger)!important;color:var(--acp-danger)!important}.mat-mdc-outlined-button.mat-btn-warning{border-color:var(--acp-warning)!important;color:var(--acp-warning)!important}.mat-mdc-outlined-button.mat-btn-info{border-color:var(--acp-info)!important;color:var(--acp-info)!important}.mat-mdc-outlined-button.mat-btn-dark{border-color:var(--acp-dark)!important;color:var(--acp-dark)!important}.mat-mdc-fab.mat-btn-secondary,.mat-mdc-mini-fab.mat-btn-secondary{background-color:var(--acp-secondary)!important;color:var(--acp-secondary-on)!important}.mat-mdc-fab.mat-btn-success,.mat-mdc-mini-fab.mat-btn-success{background-color:var(--acp-success)!important;color:var(--acp-success-on)!important}.mat-mdc-fab.mat-btn-danger,.mat-mdc-mini-fab.mat-btn-danger{background-color:var(--acp-danger)!important;color:var(--acp-danger-on)!important}.mat-mdc-fab.mat-btn-warning,.mat-mdc-mini-fab.mat-btn-warning{background-color:var(--acp-warning)!important;color:var(--acp-warning-on)!important}.mat-mdc-fab.mat-btn-info,.mat-mdc-mini-fab.mat-btn-info{background-color:var(--acp-info)!important;color:var(--acp-info-on)!important}.mat-mdc-fab.mat-btn-dark,.mat-mdc-mini-fab.mat-btn-dark{background-color:var(--acp-dark)!important;color:var(--acp-dark-on)!important}.mat-mdc-icon-button.mat-btn-secondary{color:var(--mat-sys-on-surface)!important}.mat-mdc-icon-button.mat-btn-success{color:var(--acp-success)!important}.mat-mdc-icon-button.mat-btn-danger{color:var(--acp-danger)!important}.mat-mdc-icon-button.mat-btn-warning{color:var(--acp-warning)!important}.mat-mdc-icon-button.mat-btn-info{color:var(--acp-info)!important}.mat-mdc-icon-button.mat-btn-dark{color:var(--acp-dark)!important}\n"] }]
|
|
342
342
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], matStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "matStyle", required: false }] }], customClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "customClass", required: false }] }], reportFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "reportFormat", required: false }] }], extended: [{ type: i0.Input, args: [{ isSignal: true, alias: "extended", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], testId: [{ type: i0.Input, args: [{ isSignal: true, alias: "testId", required: false }] }], handleClick: [{ type: i0.Output, args: ["handleClick"] }] } });
|
|
343
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Servicio centralizado para manejar z-index de todos los diálogos
|
|
346
|
+
* Asegura que los diálogos siempre aparezcan en el orden correcto
|
|
347
|
+
* Los AlertDialogs siempre tienen prioridad sobre otros diálogos
|
|
348
|
+
*/
|
|
349
|
+
class DialogZIndexService {
|
|
350
|
+
// Rangos de z-index por tipo de diálogo
|
|
351
|
+
static Z_INDEX_RANGES = {
|
|
352
|
+
normal: { base: 1000, current: 1000 }, // Diálogos normales: 1000-1999
|
|
353
|
+
alert: { base: 2000, current: 2000 }, // AlertDialogs: 2000-2999 (siempre encima)
|
|
354
|
+
toast: { base: 3000, current: 3000 }, // Toasts: 3000-3999 (máxima prioridad)
|
|
355
|
+
};
|
|
356
|
+
static Z_INDEX_INCREMENT = 10;
|
|
357
|
+
/**
|
|
358
|
+
* Obtiene el siguiente z-index disponible para un tipo específico de diálogo
|
|
359
|
+
* @param type Tipo de diálogo (normal, alert, toast)
|
|
360
|
+
* @returns El próximo z-index a usar
|
|
361
|
+
*/
|
|
362
|
+
getNextZIndex(type = 'normal') {
|
|
363
|
+
const range = DialogZIndexService.Z_INDEX_RANGES[type];
|
|
364
|
+
range.current += DialogZIndexService.Z_INDEX_INCREMENT;
|
|
365
|
+
return range.current;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Obtiene el z-index actual más alto para un tipo específico
|
|
369
|
+
* @param type Tipo de diálogo
|
|
370
|
+
* @returns El z-index más alto actualmente en uso para ese tipo
|
|
371
|
+
*/
|
|
372
|
+
getCurrentZIndex(type = 'normal') {
|
|
373
|
+
return DialogZIndexService.Z_INDEX_RANGES[type].current;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Obtiene el z-index más alto de todos los tipos
|
|
377
|
+
* @returns El z-index más alto de todos los diálogos
|
|
378
|
+
*/
|
|
379
|
+
getHighestZIndex() {
|
|
380
|
+
return Math.max(...Object.values(DialogZIndexService.Z_INDEX_RANGES).map(range => range.current));
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Resetea el contador de z-index (útil para testing)
|
|
384
|
+
* @param type Tipo específico a resetear, o undefined para resetear todos
|
|
385
|
+
*/
|
|
386
|
+
reset(type) {
|
|
387
|
+
if (type) {
|
|
388
|
+
const range = DialogZIndexService.Z_INDEX_RANGES[type];
|
|
389
|
+
range.current = range.base;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
// Resetear todos los tipos
|
|
393
|
+
Object.entries(DialogZIndexService.Z_INDEX_RANGES).forEach(([_, range]) => {
|
|
394
|
+
range.current = range.base;
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Aplica z-index a un diálogo específico
|
|
400
|
+
* @param dialogRef Referencia al diálogo
|
|
401
|
+
* @param type Tipo de diálogo (determina el rango de z-index)
|
|
402
|
+
* @param zIndex Z-index específico a aplicar (opcional)
|
|
403
|
+
*/
|
|
404
|
+
applyZIndex(dialogRef, type = 'normal', zIndex) {
|
|
405
|
+
const targetZIndex = zIndex || this.getNextZIndex(type);
|
|
406
|
+
setTimeout(() => {
|
|
407
|
+
const overlayRef = dialogRef._overlayRef;
|
|
408
|
+
if (overlayRef) {
|
|
409
|
+
const pane = overlayRef.overlayElement;
|
|
410
|
+
const backdrop = overlayRef.backdropElement;
|
|
411
|
+
if (pane) {
|
|
412
|
+
pane.style.zIndex = (targetZIndex + 2).toString();
|
|
413
|
+
// Agregar atributo data para debugging
|
|
414
|
+
pane.setAttribute('data-dialog-type', type);
|
|
415
|
+
pane.setAttribute('data-z-index', targetZIndex.toString());
|
|
416
|
+
// Para toasts, agregar clase especial para styling
|
|
417
|
+
if (type === 'toast') {
|
|
418
|
+
pane.classList.add('toast-overlay');
|
|
419
|
+
// Los toasts no deben bloquear interacciones
|
|
420
|
+
pane.style.pointerEvents = 'none';
|
|
421
|
+
// Pero el contenido del toast sí debe ser clickeable
|
|
422
|
+
const dialogContainer = pane.querySelector('.mat-mdc-dialog-container, .mat-dialog-container');
|
|
423
|
+
if (dialogContainer) {
|
|
424
|
+
dialogContainer.style.pointerEvents = 'auto';
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// Los toasts no tienen backdrop, pero si existe, configurarlo
|
|
429
|
+
if (backdrop && type !== 'toast') {
|
|
430
|
+
backdrop.style.zIndex = (targetZIndex + 1).toString();
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}, 0);
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Trae un diálogo al frente (usado por drag functionality)
|
|
437
|
+
* @param element Elemento del diálogo a traer al frente
|
|
438
|
+
* @param type Tipo de diálogo
|
|
439
|
+
*/
|
|
440
|
+
bringToFront(element, type = 'normal') {
|
|
441
|
+
const pane = element.closest('.cdk-overlay-pane');
|
|
442
|
+
if (pane) {
|
|
443
|
+
const newZIndex = this.getNextZIndex(type);
|
|
444
|
+
pane.style.zIndex = (newZIndex + 2).toString();
|
|
445
|
+
pane.setAttribute('data-z-index', newZIndex.toString());
|
|
446
|
+
// También actualizar el backdrop si existe
|
|
447
|
+
const backdrop = pane.parentElement?.querySelector('.cdk-overlay-backdrop');
|
|
448
|
+
if (backdrop) {
|
|
449
|
+
backdrop.style.zIndex = (newZIndex + 1).toString();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Fuerza un diálogo a estar siempre encima de todos los demás
|
|
455
|
+
* Útil para alertas críticas que deben tener máxima prioridad
|
|
456
|
+
* @param dialogRef Referencia al diálogo
|
|
457
|
+
*/
|
|
458
|
+
forceToTop(dialogRef) {
|
|
459
|
+
const highestZIndex = this.getHighestZIndex();
|
|
460
|
+
const topZIndex = highestZIndex + DialogZIndexService.Z_INDEX_INCREMENT;
|
|
461
|
+
setTimeout(() => {
|
|
462
|
+
const overlayRef = dialogRef._overlayRef;
|
|
463
|
+
if (overlayRef) {
|
|
464
|
+
const pane = overlayRef.overlayElement;
|
|
465
|
+
const backdrop = overlayRef.backdropElement;
|
|
466
|
+
if (pane) {
|
|
467
|
+
pane.style.zIndex = (topZIndex + 2).toString();
|
|
468
|
+
pane.setAttribute('data-z-index', topZIndex.toString());
|
|
469
|
+
pane.setAttribute('data-forced-top', 'true');
|
|
470
|
+
}
|
|
471
|
+
if (backdrop) {
|
|
472
|
+
backdrop.style.zIndex = (topZIndex + 1).toString();
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}, 0);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Obtiene todos los toasts activos
|
|
479
|
+
* @returns Array de elementos de toast activos
|
|
480
|
+
*/
|
|
481
|
+
getActiveToasts() {
|
|
482
|
+
return Array.from(document.querySelectorAll('.cdk-overlay-pane[data-dialog-type="toast"]'));
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Cierra todos los toasts activos
|
|
486
|
+
*/
|
|
487
|
+
closeAllToasts() {
|
|
488
|
+
const toasts = this.getActiveToasts();
|
|
489
|
+
toasts.forEach(toast => {
|
|
490
|
+
const closeButton = toast.querySelector('[mat-dialog-close], .toast-close-button');
|
|
491
|
+
if (closeButton) {
|
|
492
|
+
closeButton.click();
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Obtiene el número de toasts activos
|
|
498
|
+
* @returns Número de toasts actualmente visibles
|
|
499
|
+
*/
|
|
500
|
+
getActiveToastCount() {
|
|
501
|
+
return this.getActiveToasts().length;
|
|
502
|
+
}
|
|
503
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DialogZIndexService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
504
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DialogZIndexService, providedIn: 'root' });
|
|
505
|
+
}
|
|
506
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DialogZIndexService, decorators: [{
|
|
507
|
+
type: Injectable,
|
|
508
|
+
args: [{
|
|
509
|
+
providedIn: 'root',
|
|
510
|
+
}]
|
|
511
|
+
}] });
|
|
512
|
+
|
|
344
513
|
/**
|
|
345
514
|
* A wrapper component for Angular Material dialogs that provides a consistent look and feel,
|
|
346
515
|
* including a draggable header and the ability to dynamically create components inside the dialog.
|
|
@@ -350,21 +519,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
350
519
|
class DialogWrapper {
|
|
351
520
|
dialogRef = inject(MatDialogRef);
|
|
352
521
|
config = inject(MAT_DIALOG_DATA);
|
|
522
|
+
zIndexService = inject(DialogZIndexService);
|
|
353
523
|
/**
|
|
354
524
|
* A template reference that acts as an anchor for dynamic content.
|
|
355
525
|
* This is where the component specified in the config will be rendered.
|
|
356
526
|
*/
|
|
357
|
-
contentHost = viewChild.required('contentHost', {
|
|
527
|
+
contentHost = viewChild.required('contentHost', {
|
|
528
|
+
read: ViewContainerRef,
|
|
529
|
+
});
|
|
358
530
|
/**
|
|
359
531
|
* A reference to the header element for the z-index focus logic.
|
|
360
532
|
* Used to bring the dialog to the front when clicked.
|
|
361
533
|
*/
|
|
362
534
|
header = viewChild('dialogHeader', ...(ngDevMode ? [{ debugName: "header" }] : []));
|
|
363
|
-
/**
|
|
364
|
-
* Static counter to track the highest z-index for multiple dialogs.
|
|
365
|
-
* Ensures that the most recently clicked dialog appears on top.
|
|
366
|
-
*/
|
|
367
|
-
static lastZIndex = 1000;
|
|
368
535
|
/**
|
|
369
536
|
* Timeout ID for debouncing z-index updates to prevent excessive DOM manipulations.
|
|
370
537
|
*/
|
|
@@ -410,22 +577,14 @@ class DialogWrapper {
|
|
|
410
577
|
}
|
|
411
578
|
/**
|
|
412
579
|
* Brings the dialog to the front by adjusting its z-index.
|
|
413
|
-
* Uses
|
|
580
|
+
* Uses the centralized DialogZIndexService for consistent z-index management.
|
|
414
581
|
* Called when the dialog header is clicked.
|
|
415
582
|
*/
|
|
416
583
|
bringToFront() {
|
|
417
|
-
|
|
418
|
-
if (
|
|
419
|
-
|
|
584
|
+
const headerElement = this.header()?.nativeElement;
|
|
585
|
+
if (headerElement) {
|
|
586
|
+
this.zIndexService.bringToFront(headerElement);
|
|
420
587
|
}
|
|
421
|
-
// Schedule the z-index update for the next animation frame
|
|
422
|
-
this.bringToFrontTimeoutId = requestAnimationFrame(() => {
|
|
423
|
-
const pane = this.header()?.nativeElement.closest('.cdk-overlay-pane');
|
|
424
|
-
if (pane) {
|
|
425
|
-
pane.style.zIndex = (++DialogWrapper.lastZIndex).toString();
|
|
426
|
-
}
|
|
427
|
-
this.bringToFrontTimeoutId = null;
|
|
428
|
-
});
|
|
429
588
|
}
|
|
430
589
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DialogWrapper, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
431
590
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DialogWrapper, isStandalone: true, selector: "acp-dialog-wrapper", viewQueries: [{ propertyName: "contentHost", first: true, predicate: ["contentHost"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "header", first: true, predicate: ["dialogHeader"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (!config.hideHeader) {\n<div\n class=\"acp-dialog-header\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragHandle\n #dialogHeader\n (mousedown)=\"bringToFront()\"\n>\n <h6 mat-dialog-title class=\"acp-dialog-title\">\n @if (config.icon) {\n <mat-icon class=\"acp-dialog-title-icon\" aria-hidden=\"true\">{{ config.icon }}</mat-icon>\n }\n <span>{{ config.title }}</span>\n @if (config.showCloseButton !== false) {\n <acp-button\n [customClass]=\"'acp-dialog-close-btn'\"\n matStyle=\"icon\"\n icon=\"close\"\n (handleClick)=\"onClose()\"\n ariaLabel=\"Close Dialog\"\n />\n }\n </h6>\n</div>\n}\n\n<ng-template #contentHost />\n", styles: [".acp-dialog-header{cursor:move;border-bottom:1px solid var(--mat-sys-outline-variant, #dee2e6);color:var(--mat-sys-on-surface, #212529);position:relative}h6[mat-dialog-title].acp-dialog-title{display:flex;align-items:center;font-size:1.2rem;font-weight:500;margin:0;width:100%;padding-right:48px}.acp-dialog-title-icon{margin-right:12px;vertical-align:middle}h6[mat-dialog-title].acp-dialog-title span{flex-grow:1}mat-dialog-content{padding:24px}.acp-dialog-close-btn{position:absolute;top:8px;right:16px}\n"], dependencies: [{ 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: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: Button, selector: "acp-button", inputs: ["variant", "text", "icon", "disabled", "type", "matStyle", "customClass", "reportFormat", "extended", "title", "ariaLabel", "name", "id", "form", "tabIndex", "testId"], outputs: ["handleClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
@@ -433,7 +592,9 @@ class DialogWrapper {
|
|
|
433
592
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DialogWrapper, decorators: [{
|
|
434
593
|
type: Component,
|
|
435
594
|
args: [{ selector: 'acp-dialog-wrapper', standalone: true, imports: [CdkDrag, CdkDragHandle, MatDialogModule, MatIconModule, Button], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if (!config.hideHeader) {\n<div\n class=\"acp-dialog-header\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragHandle\n #dialogHeader\n (mousedown)=\"bringToFront()\"\n>\n <h6 mat-dialog-title class=\"acp-dialog-title\">\n @if (config.icon) {\n <mat-icon class=\"acp-dialog-title-icon\" aria-hidden=\"true\">{{ config.icon }}</mat-icon>\n }\n <span>{{ config.title }}</span>\n @if (config.showCloseButton !== false) {\n <acp-button\n [customClass]=\"'acp-dialog-close-btn'\"\n matStyle=\"icon\"\n icon=\"close\"\n (handleClick)=\"onClose()\"\n ariaLabel=\"Close Dialog\"\n />\n }\n </h6>\n</div>\n}\n\n<ng-template #contentHost />\n", styles: [".acp-dialog-header{cursor:move;border-bottom:1px solid var(--mat-sys-outline-variant, #dee2e6);color:var(--mat-sys-on-surface, #212529);position:relative}h6[mat-dialog-title].acp-dialog-title{display:flex;align-items:center;font-size:1.2rem;font-weight:500;margin:0;width:100%;padding-right:48px}.acp-dialog-title-icon{margin-right:12px;vertical-align:middle}h6[mat-dialog-title].acp-dialog-title span{flex-grow:1}mat-dialog-content{padding:24px}.acp-dialog-close-btn{position:absolute;top:8px;right:16px}\n"] }]
|
|
436
|
-
}], ctorParameters: () => [], propDecorators: { contentHost: [{ type: i0.ViewChild, args: ['contentHost', { ...{
|
|
595
|
+
}], ctorParameters: () => [], propDecorators: { contentHost: [{ type: i0.ViewChild, args: ['contentHost', { ...{
|
|
596
|
+
read: ViewContainerRef,
|
|
597
|
+
}, isSignal: true }] }], header: [{ type: i0.ViewChild, args: ['dialogHeader', { isSignal: true }] }] } });
|
|
437
598
|
|
|
438
599
|
class DynamicSelect {
|
|
439
600
|
// Basic inputs
|
|
@@ -998,6 +1159,7 @@ class AdvancedDialogService {
|
|
|
998
1159
|
dialog = inject(MatDialog);
|
|
999
1160
|
overlay = inject(Overlay);
|
|
1000
1161
|
breakpointObserver = inject(BreakpointObserver);
|
|
1162
|
+
zIndexService = inject(DialogZIndexService);
|
|
1001
1163
|
// An observable that emits true if the viewport matches mobile dimensions.
|
|
1002
1164
|
isMobile$ = this.breakpointObserver
|
|
1003
1165
|
.observe([Breakpoints.HandsetPortrait, Breakpoints.HandsetLandscape])
|
|
@@ -1011,7 +1173,10 @@ class AdvancedDialogService {
|
|
|
1011
1173
|
*/
|
|
1012
1174
|
async open(component, config = {}) {
|
|
1013
1175
|
const dialogConfig = await this.buildDialogConfig(config);
|
|
1014
|
-
|
|
1176
|
+
const dialogRef = this.dialog.open(component, dialogConfig);
|
|
1177
|
+
// Aplicar z-index centralizado
|
|
1178
|
+
this.zIndexService.applyZIndex(dialogRef);
|
|
1179
|
+
return dialogRef;
|
|
1015
1180
|
}
|
|
1016
1181
|
/**
|
|
1017
1182
|
* A powerful helper to open a component inside our standard, branded "wrapper".
|
|
@@ -1027,7 +1192,10 @@ class AdvancedDialogService {
|
|
|
1027
1192
|
data: wrapperConfig,
|
|
1028
1193
|
};
|
|
1029
1194
|
const dialogConfig = await this.buildDialogConfig(configWithWrapperData);
|
|
1030
|
-
|
|
1195
|
+
const dialogRef = this.dialog.open(DialogWrapper, dialogConfig);
|
|
1196
|
+
// Aplicar z-index centralizado
|
|
1197
|
+
this.zIndexService.applyZIndex(dialogRef);
|
|
1198
|
+
return dialogRef;
|
|
1031
1199
|
}
|
|
1032
1200
|
/**
|
|
1033
1201
|
* Helper to open a dialog and only get an observable of the result.
|
|
@@ -1624,6 +1792,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1624
1792
|
|
|
1625
1793
|
class AlertDialogService {
|
|
1626
1794
|
dialog = inject(MatDialog);
|
|
1795
|
+
zIndexService = inject(DialogZIndexService);
|
|
1627
1796
|
defaultOptions = {
|
|
1628
1797
|
width: '400px',
|
|
1629
1798
|
showConfirmButton: true,
|
|
@@ -1642,6 +1811,9 @@ class AlertDialogService {
|
|
|
1642
1811
|
scrollbarPadding: true,
|
|
1643
1812
|
position: 'center',
|
|
1644
1813
|
draggable: false,
|
|
1814
|
+
allowMultiple: false, // Por defecto no permitir múltiples alerts
|
|
1815
|
+
forceToTop: true, // Por defecto los alerts siempre van encima
|
|
1816
|
+
dialogType: 'alert', // Por defecto usar el tipo alert (z-index alto)
|
|
1645
1817
|
// Nuevas opciones por defecto
|
|
1646
1818
|
layout: 'modern',
|
|
1647
1819
|
iconPosition: 'left',
|
|
@@ -1689,6 +1861,9 @@ class AlertDialogService {
|
|
|
1689
1861
|
scrollbarPadding: true,
|
|
1690
1862
|
position: 'center',
|
|
1691
1863
|
draggable: false,
|
|
1864
|
+
allowMultiple: false,
|
|
1865
|
+
forceToTop: true,
|
|
1866
|
+
dialogType: 'alert',
|
|
1692
1867
|
};
|
|
1693
1868
|
}
|
|
1694
1869
|
/**
|
|
@@ -1696,6 +1871,10 @@ class AlertDialogService {
|
|
|
1696
1871
|
*/
|
|
1697
1872
|
fire(options) {
|
|
1698
1873
|
const mergedOptions = { ...this.defaultOptions, ...options };
|
|
1874
|
+
// Si allowMultiple es false (por defecto), cerrar todos los diálogos existentes
|
|
1875
|
+
if (!mergedOptions.allowMultiple) {
|
|
1876
|
+
this.closeAll();
|
|
1877
|
+
}
|
|
1699
1878
|
// Configuración especial para modo toast
|
|
1700
1879
|
if (mergedOptions.toastMode) {
|
|
1701
1880
|
mergedOptions.width = mergedOptions.width || '350px';
|
|
@@ -1705,15 +1884,18 @@ class AlertDialogService {
|
|
|
1705
1884
|
mergedOptions.position = this.getToastPosition(mergedOptions.toastPosition || 'top-right');
|
|
1706
1885
|
mergedOptions.disableClose = false;
|
|
1707
1886
|
mergedOptions.animation = mergedOptions.animation || 'slide';
|
|
1708
|
-
|
|
1887
|
+
mergedOptions.dialogType = 'toast'; // Los toasts usan el z-index más alto
|
|
1888
|
+
// Configuración específica para toasts no-intrusivos
|
|
1889
|
+
mergedOptions.closeOnBackdropClick = false; // No hay backdrop en toasts
|
|
1890
|
+
mergedOptions.allowEscapeKey = false; // ESC no debe cerrar toasts
|
|
1891
|
+
mergedOptions.allowMultiple = true; // Permitir múltiples toasts
|
|
1892
|
+
}
|
|
1893
|
+
// Determinar el tipo de diálogo para z-index
|
|
1894
|
+
const dialogType = mergedOptions.dialogType || (mergedOptions.toastMode ? 'toast' : 'alert');
|
|
1709
1895
|
// Calcular posición del diálogo
|
|
1710
1896
|
const position = mergedOptions.toastMode
|
|
1711
1897
|
? this.getToastDialogPosition(mergedOptions.toastPosition || 'top-right')
|
|
1712
1898
|
: this.getDialogPosition(mergedOptions.position || 'center');
|
|
1713
|
-
// Calcular z-index dinámico basado en diálogos abiertos
|
|
1714
|
-
const openDialogs = this.dialog.openDialogs.length;
|
|
1715
|
-
const baseZIndex = 1000;
|
|
1716
|
-
const zIndex = baseZIndex + openDialogs * 10;
|
|
1717
1899
|
const dialogRef = this.dialog.open(AlertDialog, {
|
|
1718
1900
|
width: mergedOptions.width,
|
|
1719
1901
|
minWidth: mergedOptions.minWidth,
|
|
@@ -1727,22 +1909,17 @@ class AlertDialogService {
|
|
|
1727
1909
|
closeOnNavigation: true,
|
|
1728
1910
|
autoFocus: mergedOptions.focusConfirm !== false,
|
|
1729
1911
|
restoreFocus: true,
|
|
1730
|
-
hasBackdrop: !mergedOptions.toastMode,
|
|
1912
|
+
hasBackdrop: !mergedOptions.toastMode, // Los toasts NO tienen backdrop
|
|
1731
1913
|
});
|
|
1732
|
-
// Aplicar z-index dinámico
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
if (backdrop) {
|
|
1742
|
-
backdrop.style.zIndex = (zIndex + 1).toString();
|
|
1743
|
-
}
|
|
1744
|
-
}
|
|
1745
|
-
}, 0);
|
|
1914
|
+
// Aplicar z-index dinámico usando el servicio centralizado
|
|
1915
|
+
if (mergedOptions.forceToTop) {
|
|
1916
|
+
// Si se requiere forzar al tope, usar forceToTop
|
|
1917
|
+
this.zIndexService.forceToTop(dialogRef);
|
|
1918
|
+
}
|
|
1919
|
+
else {
|
|
1920
|
+
// Usar el tipo de diálogo apropiado para z-index
|
|
1921
|
+
this.zIndexService.applyZIndex(dialogRef, dialogType);
|
|
1922
|
+
}
|
|
1746
1923
|
// Callbacks de ciclo de vida
|
|
1747
1924
|
if (mergedOptions.willOpen) {
|
|
1748
1925
|
mergedOptions.willOpen();
|
|
@@ -1876,25 +2053,62 @@ class AlertDialogService {
|
|
|
1876
2053
|
});
|
|
1877
2054
|
}
|
|
1878
2055
|
/**
|
|
1879
|
-
* Toast notification (auto-cierre, posición personalizada)
|
|
2056
|
+
* Toast notification (auto-cierre, posición personalizada, no-intrusivo)
|
|
1880
2057
|
*/
|
|
1881
2058
|
toast(options) {
|
|
1882
2059
|
const opts = typeof options === 'string' ? { message: options } : options;
|
|
1883
2060
|
return this.fire({
|
|
1884
2061
|
timer: 3000,
|
|
1885
|
-
timerProgressBar: true,
|
|
1886
2062
|
showConfirmButton: false,
|
|
1887
|
-
position: '
|
|
2063
|
+
position: 'bottom-start',
|
|
1888
2064
|
width: '350px',
|
|
2065
|
+
toastMode: true,
|
|
2066
|
+
dialogType: 'toast',
|
|
2067
|
+
forceToTop: false, // Los toasts usan su propio rango de z-index
|
|
2068
|
+
allowMultiple: true, // Permitir múltiples toasts
|
|
2069
|
+
disableClose: true, // No se puede cerrar manualmente (solo por timer)
|
|
2070
|
+
closeOnBackdropClick: false, // No hay backdrop
|
|
2071
|
+
allowEscapeKey: false, // ESC no cierra toasts
|
|
2072
|
+
allowEnterKey: false, // ENTER no cierra toasts
|
|
2073
|
+
autoClose: true,
|
|
2074
|
+
progressBar: true,
|
|
1889
2075
|
...opts,
|
|
1890
2076
|
});
|
|
1891
2077
|
}
|
|
2078
|
+
/**
|
|
2079
|
+
* Alerta crítica que siempre aparece encima de todo
|
|
2080
|
+
*/
|
|
2081
|
+
critical(options) {
|
|
2082
|
+
const opts = typeof options === 'string'
|
|
2083
|
+
? { message: options, title: '¡Atención!' }
|
|
2084
|
+
: { title: '¡Atención!', ...options };
|
|
2085
|
+
return this.fire({
|
|
2086
|
+
...opts,
|
|
2087
|
+
type: 'error',
|
|
2088
|
+
forceToTop: true,
|
|
2089
|
+
disableClose: true,
|
|
2090
|
+
closeOnBackdropClick: false,
|
|
2091
|
+
allowEscapeKey: false,
|
|
2092
|
+
});
|
|
2093
|
+
}
|
|
1892
2094
|
/**
|
|
1893
2095
|
* Cerrar todos los diálogos abiertos
|
|
1894
2096
|
*/
|
|
1895
2097
|
closeAll() {
|
|
1896
2098
|
this.dialog.closeAll();
|
|
1897
2099
|
}
|
|
2100
|
+
/**
|
|
2101
|
+
* Cerrar solo los toasts activos (mantener otros diálogos abiertos)
|
|
2102
|
+
*/
|
|
2103
|
+
closeAllToasts() {
|
|
2104
|
+
this.zIndexService.closeAllToasts();
|
|
2105
|
+
}
|
|
2106
|
+
/**
|
|
2107
|
+
* Obtener el número de toasts activos
|
|
2108
|
+
*/
|
|
2109
|
+
getActiveToastCount() {
|
|
2110
|
+
return this.zIndexService.getActiveToastCount();
|
|
2111
|
+
}
|
|
1898
2112
|
getDialogPosition(position) {
|
|
1899
2113
|
const positions = {
|
|
1900
2114
|
top: { top: '20px' },
|
|
@@ -5732,9 +5946,6 @@ class AlertDialog {
|
|
|
5732
5946
|
container;
|
|
5733
5947
|
componentRef = null;
|
|
5734
5948
|
timerInterval;
|
|
5735
|
-
// CDK Drag properties
|
|
5736
|
-
static lastZIndex = 1000;
|
|
5737
|
-
bringToFrontTimeoutId = null;
|
|
5738
5949
|
inputValue = '';
|
|
5739
5950
|
validationError = null;
|
|
5740
5951
|
timerProgress = 100;
|
|
@@ -5746,6 +5957,7 @@ class AlertDialog {
|
|
|
5746
5957
|
renderer = inject(Renderer2);
|
|
5747
5958
|
elementRef = inject(ElementRef);
|
|
5748
5959
|
cdr = inject(ChangeDetectorRef);
|
|
5960
|
+
zIndexService = inject(DialogZIndexService);
|
|
5749
5961
|
constructor() {
|
|
5750
5962
|
this.sanitizedHtml = this.sanitizer.bypassSecurityTrustHtml(this.data.html || '');
|
|
5751
5963
|
}
|
|
@@ -5756,14 +5968,6 @@ class AlertDialog {
|
|
|
5756
5968
|
if (this.componentRef) {
|
|
5757
5969
|
this.componentRef.destroy();
|
|
5758
5970
|
}
|
|
5759
|
-
// Limpiar timeout de CDK Drag
|
|
5760
|
-
if (this.bringToFrontTimeoutId !== null) {
|
|
5761
|
-
cancelAnimationFrame(this.bringToFrontTimeoutId);
|
|
5762
|
-
this.bringToFrontTimeoutId = null;
|
|
5763
|
-
}
|
|
5764
|
-
}
|
|
5765
|
-
ngAfterViewInit() {
|
|
5766
|
-
// CDK Drag se maneja automáticamente a través del template
|
|
5767
5971
|
}
|
|
5768
5972
|
// Start the timer for auto-closing the dialog
|
|
5769
5973
|
startTimer() {
|
|
@@ -6056,22 +6260,11 @@ class AlertDialog {
|
|
|
6056
6260
|
// ===== CDK DRAG FUNCTIONALITY =====
|
|
6057
6261
|
/**
|
|
6058
6262
|
* Brings the dialog to the front by adjusting its z-index.
|
|
6059
|
-
* Uses
|
|
6263
|
+
* Uses the centralized DialogZIndexService for consistent z-index management.
|
|
6060
6264
|
* Called when the dialog header is clicked.
|
|
6061
6265
|
*/
|
|
6062
6266
|
bringToFront() {
|
|
6063
|
-
|
|
6064
|
-
if (this.bringToFrontTimeoutId !== null) {
|
|
6065
|
-
cancelAnimationFrame(this.bringToFrontTimeoutId);
|
|
6066
|
-
}
|
|
6067
|
-
// Schedule the z-index update for the next animation frame
|
|
6068
|
-
this.bringToFrontTimeoutId = requestAnimationFrame(() => {
|
|
6069
|
-
const pane = this.elementRef.nativeElement.closest('.cdk-overlay-pane');
|
|
6070
|
-
if (pane) {
|
|
6071
|
-
pane.style.zIndex = (++AlertDialog.lastZIndex).toString();
|
|
6072
|
-
}
|
|
6073
|
-
this.bringToFrontTimeoutId = null;
|
|
6074
|
-
});
|
|
6267
|
+
this.zIndexService.bringToFront(this.elementRef.nativeElement);
|
|
6075
6268
|
}
|
|
6076
6269
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AlertDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6077
6270
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AlertDialog, isStandalone: true, selector: "acp-alert-dialog", viewQueries: [{ propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true }, { propertyName: "dialogTitle", first: true, predicate: ["dialogTitle"], descendants: true }, { propertyName: "container", first: true, predicate: ["dynamicComponentContainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div\n class=\"alert-dialog\"\n [class.modern-layout]=\"data.layout === 'modern'\"\n [class.toast-layout]=\"data.layout === 'toast' || data.toastMode\"\n [class.icon-left]=\"data.iconPosition === 'left'\"\n [class.icon-center]=\"data.iconPosition === 'center'\"\n [class.icon-top]=\"data.iconPosition === 'top'\"\n [class.content-left]=\"data.contentAlignment === 'left'\"\n [class.content-center]=\"data.contentAlignment === 'center'\"\n [class.content-right]=\"data.contentAlignment === 'right'\"\n [attr.aria-label]=\"data.ariaLabel\"\n [attr.aria-describedby]=\"data.ariaDescribedBy\"\n>\n <!-- Timer Progress Bar -->\n @if (data.timer && (data.timerProgressBar || data.progressBar || data.toastMode)) {\n <mat-progress-bar\n mode=\"determinate\"\n [value]=\"timerProgress\"\n class=\"timer-progress\"\n [class.toast-progress]=\"data.toastMode\"\n >\n </mat-progress-bar>\n }\n\n <!-- Alert Header -->\n @if (data.draggable) {\n <div\n class=\"acp-alert-header\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragHandle\n (mousedown)=\"bringToFront()\"\n >\n <!-- Icon -->\n @if (data.type || data.icon) {\n <div class=\"alert-dialog-icon\" [ngClass]=\"'icon-' + (data.type || 'custom')\">\n <mat-icon class=\"icon-large\" [style.color]=\"data.iconColor\"> {{ getIconName() }} </mat-icon>\n </div>\n }\n\n <!-- Toast Content (solo para modo toast) -->\n @if (data.toastMode || data.layout === 'toast') {\n <!-- Title y Message en l\u00EDnea para toast -->\n <div class=\"toast-content\">\n @if (data.title) {\n <span class=\"toast-title\" #dialogTitle>{{ data.title }}</span>\n } @if (data.message) {\n <span class=\"toast-message\">{{ data.message }}</span>\n }\n </div>\n }\n\n <!-- Close Button -->\n @if (data.showCloseButton) {\n <button\n mat-icon-button\n class=\"close-button\"\n [class.top-right]=\"data.closeButtonPosition === 'top-right'\"\n [class.top-left]=\"data.closeButtonPosition === 'top-left'\"\n (click)=\"onClose()\"\n aria-label=\"Cerrar\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n } @else {\n <div class=\"acp-alert-header\">\n <!-- Icon -->\n @if (data.type || data.icon) {\n <div class=\"alert-dialog-icon\" [ngClass]=\"'icon-' + (data.type || 'custom')\">\n <mat-icon class=\"icon-large\" [style.color]=\"data.iconColor\"> {{ getIconName() }} </mat-icon>\n </div>\n }\n\n <!-- Toast Content (solo para modo toast) -->\n @if (data.toastMode || data.layout === 'toast') {\n <!-- Title y Message en l\u00EDnea para toast -->\n <div class=\"toast-content\">\n @if (data.title) {\n <span class=\"toast-title\" #dialogTitle>{{ data.title }}</span>\n } @if (data.message) {\n <span class=\"toast-message\">{{ data.message }}</span>\n }\n </div>\n }\n\n <!-- Close Button -->\n @if (data.showCloseButton) {\n <button\n mat-icon-button\n class=\"close-button\"\n [class.top-right]=\"data.closeButtonPosition === 'top-right'\"\n [class.top-left]=\"data.closeButtonPosition === 'top-left'\"\n (click)=\"onClose()\"\n aria-label=\"Cerrar\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n }\n\n <!-- Content (solo para modo normal, no toast) -->\n @if (!(data.toastMode || data.layout === 'toast')) {\n <mat-dialog-content class=\"alert-dialog-content\">\n <!-- Title -->\n @if (data.title) {\n <h2 class=\"alert-dialog-title\" #dialogTitle>{{ data.title }}</h2>\n }\n <!-- Image -->\n @if (data.imageUrl) {\n <div class=\"alert-dialog-image\">\n <img\n [src]=\"data.imageUrl\"\n [alt]=\"data.imageAlt || 'Alert image'\"\n [style.width]=\"data.imageWidth || 'auto'\"\n [style.height]=\"data.imageHeight || 'auto'\"\n [style.max-width]=\"data.imageWidth || '100%'\"\n />\n </div>\n }\n\n <!-- Dynamic Component -->\n @if (data.component) {\n <div #dynamicComponentContainer></div>\n } @if (data.html) {\n <div [innerHTML]=\"sanitizedHtml\"></div>\n } @else if (data.message) {\n <p class=\"alert-message\">{{ data.message }}</p>\n }\n\n <!-- Input Field -->\n @if (data.input) {\n <mat-form-field appearance=\"outline\" class=\"alert-input-field\">\n @if (data.inputLabel) {\n <mat-label>{{ data.inputLabel }}</mat-label>\n } @if (data.input === 'textarea') {\n <textarea\n matInput\n #inputField\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"data.inputPlaceholder || ''\"\n [type]=\"data.input\"\n rows=\"4\"\n (keyup.enter)=\"onInputEnter()\"\n [attr.aria-invalid]=\"!!validationError\"\n >\n </textarea>\n } @else {\n <input\n matInput\n #inputField\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"data.inputPlaceholder || ''\"\n [type]=\"data.input\"\n (keyup.enter)=\"onInputEnter()\"\n [attr.aria-invalid]=\"!!validationError\"\n />\n } @if (validationError) {\n <mat-error>{{ validationError }}</mat-error>\n }\n </mat-form-field>\n }\n </mat-dialog-content>\n }\n\n <!-- Actions (solo para modo normal, no toast) -->\n @if (!(data.toastMode || data.layout === 'toast') && (data.showConfirmButton !== false ||\n data.showCancelButton || data.showDenyButton)) {\n <mat-dialog-actions\n class=\"alert-dialog-actions\"\n [class.reverse-buttons]=\"data.reverseButtons\"\n [class.vertical-buttons]=\"data.verticalButtons\"\n [align]=\"getActionsAlignment()\"\n >\n @if (data.showDenyButton) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('deny')\"\n [variant]=\"getButtonVariant('deny')\"\n [icon]=\"getButtonIcon('deny')\"\n (handleClick)=\"onDeny()\"\n [text]=\"data.denyText || 'No'\"\n [disabled]=\"data.disableDenyButton?? false\"\n [class.spinning]=\"data.processing && data.processingButton === 'deny'\"\n [class.full-width]=\"data.fullWidthButtons\"\n />\n } @if (data.showCancelButton) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('cancel')\"\n [variant]=\"getButtonVariant('cancel')\"\n [icon]=\"getButtonIcon('cancel')\"\n (handleClick)=\"onCancel()\"\n [text]=\"data.cancelText || 'Cancel'\"\n [disabled]=\"data.disableCancelButton??false\"\n [class.spinning]=\"data.processing && data.processingButton === 'cancel'\"\n [class.full-width]=\"data.fullWidthButtons\"\n />\n } @if (data.showConfirmButton !== false) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('confirm')\"\n [variant]=\"getButtonVariant('confirm')\"\n [icon]=\"getButtonIcon('confirm')\"\n (handleClick)=\"onConfirm()\"\n [text]=\"data.confirmText || 'OK'\"\n [disabled]=\"data.disableConfirmButton?? false\"\n [class.spinning]=\"data.processing && data.processingButton === 'confirm'\"\n [class.full-width]=\"data.fullWidthButtons\"\n [autofocus]=\"data.focusConfirm\"\n />\n }\n </mat-dialog-actions>\n }\n\n <!-- Footer -->\n @if (data.footer || data.footerHtml) {\n <div class=\"alert-dialog-footer\">\n @if (data.footerHtml) {\n <div [innerHTML]=\"sanitizedFooter\"></div>\n } @else { {{ data.footer }} }\n </div>\n }\n</div>\n", styles: [".alert-dialog{position:relative;overflow:hidden;padding:0;display:flex;flex-direction:column;border-radius:16px}.acp-alert-header{display:flex;align-items:flex-start;justify-content:space-between;padding:24px 24px 0;position:relative}.acp-alert-header .alert-dialog-icon{margin:4px 0 0;flex-shrink:0}.alert-dialog-title{margin:0 0 12px;font-size:20px;font-weight:600;line-height:1.2;color:#1a1a1a;text-align:left}.alert-dialog-content{text-align:left}.alert-dialog-content .alert-message{margin:0;font-size:16px;line-height:1.4;color:#666}.alert-dialog-actions{margin:24px;padding:0;gap:12px}.close-button{position:relative;z-index:10;width:40px;height:40px;margin:0;background-color:#0000000d;border-radius:50%}.close-button mat-icon{font-size:20px;width:20px;height:20px;color:#0009}.close-button:hover{background-color:#0000001a}.alert-dialog.modern-layout .acp-alert-header{padding:24px 24px 0}.alert-dialog.modern-layout .acp-alert-header .alert-dialog-icon{margin-right:16px}.alert-dialog.modern-layout .acp-alert-header .alert-dialog-icon .icon-large{font-size:48px;width:48px;height:48px}.alert-dialog.toast-layout{border-radius:8px}.alert-dialog.toast-layout .acp-alert-header{padding:16px;align-items:center;gap:12px}.alert-dialog.toast-layout .acp-alert-header .alert-dialog-icon{margin:0;flex-shrink:0}.alert-dialog.toast-layout .acp-alert-header .alert-dialog-icon .icon-large{font-size:24px;width:24px;height:24px}.alert-dialog.toast-layout .acp-alert-header .toast-content{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.alert-dialog.toast-layout .acp-alert-header .toast-content .toast-title{font-size:14px;font-weight:600;line-height:1.2;color:#1a1a1a;margin:0}.alert-dialog.toast-layout .acp-alert-header .toast-content .toast-message{font-size:13px;line-height:1.3;color:#666;margin:0}.alert-dialog.toast-layout .acp-alert-header .close-button{margin:0;flex-shrink:0}.alert-dialog.toast-layout .alert-dialog-content,.alert-dialog.toast-layout .alert-dialog-actions{display:none}.alert-dialog.icon-center .acp-alert-header{flex-direction:column;text-align:center;align-items:center;padding:24px 24px 16px}.alert-dialog.icon-center .acp-alert-header .alert-dialog-icon{margin:0 0 16px}.alert-dialog.icon-center .acp-alert-header .close-button{position:absolute;top:16px;right:16px}.alert-dialog.icon-center .alert-dialog-title,.alert-dialog.icon-center .alert-dialog-content{text-align:center}.alert-dialog.icon-top .acp-alert-header{flex-direction:column;align-items:flex-start;padding:24px 24px 16px}.alert-dialog.icon-top .acp-alert-header .alert-dialog-icon{margin:0 0 16px}.alert-dialog.icon-top .acp-alert-header .close-button{position:absolute;top:16px;right:16px}.alert-dialog.content-left .alert-dialog-title,.alert-dialog.content-left .alert-dialog-content{text-align:left}.alert-dialog.content-center .acp-alert-header{justify-content:center}.alert-dialog.content-center .alert-dialog-title,.alert-dialog.content-center .alert-dialog-content{text-align:center}.alert-dialog.content-right .alert-dialog-title,.alert-dialog.content-right .alert-dialog-content{text-align:right}.timer-progress{position:absolute;top:0;left:0;right:0;height:4px;z-index:5;border-radius:0}.timer-progress.toast-progress{height:3px;border-radius:0}:host ::ng-deep .timer-progress .mdc-linear-progress__bar{transition:transform 50ms linear}:host ::ng-deep .timer-progress .mdc-linear-progress__buffer{background-color:#0000001a}.icon-success mat-icon{color:#10b981}.icon-error mat-icon{color:#ef4444}.icon-warning mat-icon{color:#f59e0b}.icon-info mat-icon{color:#3b82f6}.icon-question mat-icon{color:#8b5cf6}.icon-delete mat-icon{color:#ef4444}.alert-dialog-image{margin:1rem auto;display:flex;justify-content:center;align-items:center}.alert-dialog-image img{max-width:100%;border-radius:8px}.alert-input-field{width:100%;margin-top:1rem}.confirm-button,.cancel-button,.deny-button{min-width:100px}.cancel-button{color:#333}.alert-dialog-footer{margin:0 24px 24px;padding-top:1rem;border-top:1px solid #e0e0e0;font-size:.875rem;color:#666}.acp-alert-header[cdkDrag]{cursor:move;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.acp-alert-header[cdkDrag]:hover{background-color:#00000005}.cdk-drag-dragging{user-select:none!important;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important}:host ::ng-deep .animation-fade .mat-mdc-dialog-container{animation:fadeIn .3s ease-out}:host ::ng-deep .animation-slide .mat-mdc-dialog-container{animation:slideIn .3s ease-out}:host ::ng-deep .animation-bounce .mat-mdc-dialog-container{animation:bounceIn .5s ease-out}:host ::ng-deep .animation-zoom .mat-mdc-dialog-container{animation:zoomIn .3s ease-out}:host ::ng-deep .toast-mode .mat-mdc-dialog-container{border-radius:8px;box-shadow:0 4px 12px #00000026;max-width:400px;animation:slideInRight .3s ease-out}:host ::ng-deep .layout-toast .mat-mdc-dialog-container{border-radius:8px;box-shadow:0 4px 12px #00000026;max-width:400px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes bounceIn{0%{transform:scale(.3);opacity:0}50%{transform:scale(1.05)}70%{transform:scale(.9)}to{transform:scale(1);opacity:1}}@keyframes zoomIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i7.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: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: Button, selector: "acp-button", inputs: ["variant", "text", "icon", "disabled", "type", "matStyle", "customClass", "reportFormat", "extended", "title", "ariaLabel", "name", "id", "form", "tabIndex", "testId"], outputs: ["handleClick"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
@@ -6238,5 +6431,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
6238
6431
|
* Generated bundle index. Do not edit.
|
|
6239
6432
|
*/
|
|
6240
6433
|
|
|
6241
|
-
export { ACP_DRAWER_DATA, ACP_DRAWER_DEFAULT_OPTIONS, ACP_POPOVER_CONTENT, ACP_POPOVER_DEFAULT_OPTIONS, ACP_POPOVER_SCROLL_STRATEGY, AUTOCOMPLETE_WRAPPER_CUSTOMER_CONFIG, AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG, AUTOCOMPLETE_WRAPPER_LOCAL_CONFIG, AUTOCOMPLETE_WRAPPER_PAGINATED_CONFIG, AUTOCOMPLETE_WRAPPER_PRODUCT_CONFIG, AUTOCOMPLETE_WRAPPER_SIMPLE_CONFIG, AcpDrawer, AcpDrawerConfig, AcpDrawerContainer, AcpDrawerRef, AcpPopover, AcpPopoverContent, AcpPopoverTarget, AcpPopoverTrigger, AdvancedDialogService, AlertDialog, AlertDialogService, AutocompleteWrapperService, Button, DATA_GRID_DEFAULT_OPTIONS, DataGrid, DateRangePicker, DialogWrapper, DynamicCard, DynamicSelect, GetTotalPipe, IconRegistryService, InputChip, KeyboardNavigationService, OverlayService, Pagination, ReusableAutocompleteComponent, Spinner, StatusDisplayPipe, SvgIcon, TabulatorTable, ThemeSwitcher, ThemeToggle, ToUpperCase, UserIcon, _AcpPopoverContentBase, createAutocompleteWrapperConfig, throwAcpPopoverInvalidPositionEnd, throwAcpPopoverInvalidPositionStart, throwAcpPopoverMissingError };
|
|
6434
|
+
export { ACP_DRAWER_DATA, ACP_DRAWER_DEFAULT_OPTIONS, ACP_POPOVER_CONTENT, ACP_POPOVER_DEFAULT_OPTIONS, ACP_POPOVER_SCROLL_STRATEGY, AUTOCOMPLETE_WRAPPER_CUSTOMER_CONFIG, AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG, AUTOCOMPLETE_WRAPPER_LOCAL_CONFIG, AUTOCOMPLETE_WRAPPER_PAGINATED_CONFIG, AUTOCOMPLETE_WRAPPER_PRODUCT_CONFIG, AUTOCOMPLETE_WRAPPER_SIMPLE_CONFIG, AcpDrawer, AcpDrawerConfig, AcpDrawerContainer, AcpDrawerRef, AcpPopover, AcpPopoverContent, AcpPopoverTarget, AcpPopoverTrigger, AdvancedDialogService, AlertDialog, AlertDialogService, AutocompleteWrapperService, Button, DATA_GRID_DEFAULT_OPTIONS, DataGrid, DateRangePicker, DialogWrapper, DialogZIndexService, DynamicCard, DynamicSelect, GetTotalPipe, IconRegistryService, InputChip, KeyboardNavigationService, OverlayService, Pagination, ReusableAutocompleteComponent, Spinner, StatusDisplayPipe, SvgIcon, TabulatorTable, ThemeSwitcher, ThemeToggle, ToUpperCase, UserIcon, _AcpPopoverContentBase, createAutocompleteWrapperConfig, throwAcpPopoverInvalidPositionEnd, throwAcpPopoverInvalidPositionStart, throwAcpPopoverMissingError };
|
|
6242
6435
|
//# sourceMappingURL=acontplus-ng-components.mjs.map
|