@osumi/angular-tools 1.4.2 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -17,20 +17,20 @@ NOTA: Los diálogos incluyen una serie de estilos por defecto. Para poder usarlo
|
|
|
17
17
|
"styles": [
|
|
18
18
|
"@angular/material/prebuilt-themes/azure-blue.css",
|
|
19
19
|
"src/styles.scss",
|
|
20
|
-
"@osumi/angular-tools/styles/dialogs.scss"
|
|
20
|
+
"@osumi/angular-tools/styles/dialogs.scss"
|
|
21
21
|
],
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Estos estilos por defecto luego se pueden sobrescribir usando variables CSS:
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Estos estilos por defecto luego se pueden sobrescribir usando variables CSS:
|
|
25
25
|
|
|
26
26
|
```css
|
|
27
27
|
:root {
|
|
28
28
|
--oat-dialogs-color-warn: #ba1a1a;
|
|
29
29
|
--oat-dialogs-color-white: #fff;
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Los dos últimos parámetros opcionales de `open` permiten indicar desde qué elemento se abre el modal (`from`) y la duración de la animación en milisegundos (`animationDuration`).
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Los dos últimos parámetros opcionales de `open` permiten indicar desde qué elemento se abre el modal (`from`) y la duración de la animación en milisegundos (`animationDuration`).
|
|
34
34
|
|
|
35
35
|
**alert**
|
|
36
36
|
|
|
@@ -108,8 +108,8 @@ export interface BuscadorModal extends Modal {
|
|
|
108
108
|
key: string;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
os: OverlayService = inject(OverlayService);
|
|
112
|
-
button: Signal<ElementRef> = viewChild.required('button');
|
|
111
|
+
os: OverlayService = inject(OverlayService);
|
|
112
|
+
button: Signal<ElementRef> = viewChild.required('button');
|
|
113
113
|
|
|
114
114
|
const modalBuscadorData: BuscadorModal = {
|
|
115
115
|
modalTitle: 'Buscador',
|
|
@@ -117,14 +117,14 @@ const modalBuscadorData: BuscadorModal = {
|
|
|
117
117
|
css: 'modal-wide',
|
|
118
118
|
key: ev.key,
|
|
119
119
|
};
|
|
120
|
-
const dialog = this.os.open(
|
|
121
|
-
BuscadorModalComponent,
|
|
122
|
-
modalBuscadorData,
|
|
123
|
-
[],
|
|
124
|
-
true,
|
|
125
|
-
this.button().nativeElement,
|
|
126
|
-
350
|
|
127
|
-
); // BuscadorModalComponent sería el componente a mostrar en el modal
|
|
120
|
+
const dialog = this.os.open(
|
|
121
|
+
BuscadorModalComponent,
|
|
122
|
+
modalBuscadorData,
|
|
123
|
+
[],
|
|
124
|
+
true,
|
|
125
|
+
this.button().nativeElement,
|
|
126
|
+
350
|
|
127
|
+
); // BuscadorModalComponent sería el componente a mostrar en el modal
|
|
128
128
|
dialog.afterClosed$.subscribe((data): void => {
|
|
129
129
|
if (data.data !== null) {
|
|
130
130
|
console.log(data.data); // Resultado obtenido del modal
|
|
@@ -21,21 +21,24 @@ import { ComponentPortal } from '@angular/cdk/portal';
|
|
|
21
21
|
*/
|
|
22
22
|
class AlertDialogComponent {
|
|
23
23
|
dialogRef = inject(MatDialogRef);
|
|
24
|
-
title = signal('',
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
title = signal('', /* @ts-ignore */
|
|
25
|
+
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
26
|
+
content = signal('', /* @ts-ignore */
|
|
27
|
+
...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
|
|
28
|
+
ok = signal('Continuar', /* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [{ debugName: "ok" }] : /* istanbul ignore next */ []));
|
|
27
30
|
closeDialog = (result) => {
|
|
28
31
|
this.dialogRef.close(result);
|
|
29
32
|
};
|
|
30
33
|
close(result) {
|
|
31
34
|
this.closeDialog(result);
|
|
32
35
|
}
|
|
33
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
34
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
36
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: AlertDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: AlertDialogComponent, isStandalone: true, selector: "oat-alert-dialog", ngImport: i0, template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\tcolor=\"primary\"\r\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] });
|
|
35
38
|
}
|
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: AlertDialogComponent, decorators: [{
|
|
37
40
|
type: Component,
|
|
38
|
-
args: [{ selector: 'oat-alert-dialog', imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton], template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\n\t\t\tmat-flat-button\n\t\t\tcolor=\"primary\"\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\n</div>\n" }]
|
|
41
|
+
args: [{ selector: 'oat-alert-dialog', imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton], template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\tcolor=\"primary\"\r\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\r\n</div>\r\n" }]
|
|
39
42
|
}] });
|
|
40
43
|
|
|
41
44
|
/**
|
|
@@ -47,29 +50,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
|
|
|
47
50
|
*/
|
|
48
51
|
class ConfirmDialogComponent {
|
|
49
52
|
dialogRef = inject(MatDialogRef);
|
|
50
|
-
title = signal('',
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
title = signal('', /* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
55
|
+
content = signal('', /* @ts-ignore */
|
|
56
|
+
...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
|
|
57
|
+
warn = signal(false, /* @ts-ignore */
|
|
58
|
+
...(ngDevMode ? [{ debugName: "warn" }] : /* istanbul ignore next */ []));
|
|
59
|
+
ok = signal('Continuar', /* @ts-ignore */
|
|
60
|
+
...(ngDevMode ? [{ debugName: "ok" }] : /* istanbul ignore next */ []));
|
|
61
|
+
cancel = signal('Cancelar', /* @ts-ignore */
|
|
62
|
+
...(ngDevMode ? [{ debugName: "cancel" }] : /* istanbul ignore next */ []));
|
|
55
63
|
closeDialog = (result) => {
|
|
56
64
|
this.dialogRef.close(result);
|
|
57
65
|
};
|
|
58
66
|
close(result) {
|
|
59
67
|
this.closeDialog(result);
|
|
60
68
|
}
|
|
61
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
62
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
69
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
70
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: ConfirmDialogComponent, isStandalone: true, selector: "oat-confirm-dialog", ngImport: i0, template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-button\r\n\t\t\t(click)=\"close(false)\">{{ cancel() }}</button>\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\t[ngClass]=\"{'dialogs-warn': warn()}\"\r\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\r\n</div>\r\n", styles: [".dialogs-warn{background-color:var(--oat-dialogs-color-warn)!important;color:var(--oat-dialogs-color-white)!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
63
71
|
}
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
|
|
65
73
|
type: Component,
|
|
66
|
-
args: [{ selector: 'oat-confirm-dialog', imports: [
|
|
67
|
-
MatDialogTitle,
|
|
68
|
-
MatDialogContent,
|
|
69
|
-
MatDialogActions,
|
|
70
|
-
MatButton,
|
|
71
|
-
NgClass,
|
|
72
|
-
], encapsulation: ViewEncapsulation.None, template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\n\t\t\tmat-button\n\t\t\t(click)=\"close(false)\">{{ cancel() }}</button>\n\t<button type=\"button\"\n\t\t\tmat-flat-button\n\t\t\t[ngClass]=\"{'dialogs-warn': warn()}\"\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\n</div>\n", styles: [".dialogs-warn{background-color:var(--oat-dialogs-color-warn)!important;color:var(--oat-dialogs-color-white)!important}\n"] }]
|
|
74
|
+
args: [{ selector: 'oat-confirm-dialog', imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton, NgClass], encapsulation: ViewEncapsulation.None, template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-button\r\n\t\t\t(click)=\"close(false)\">{{ cancel() }}</button>\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\t[ngClass]=\"{'dialogs-warn': warn()}\"\r\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\r\n</div>\r\n", styles: [".dialogs-warn{background-color:var(--oat-dialogs-color-warn)!important;color:var(--oat-dialogs-color-white)!important}\n"] }]
|
|
73
75
|
}] });
|
|
74
76
|
|
|
75
77
|
/**
|
|
@@ -81,11 +83,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
|
|
|
81
83
|
*/
|
|
82
84
|
class FormDialogComponent {
|
|
83
85
|
dialogRef = inject(MatDialogRef);
|
|
84
|
-
title = signal('',
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
title = signal('', /* @ts-ignore */
|
|
87
|
+
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
88
|
+
content = signal('', /* @ts-ignore */
|
|
89
|
+
...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
|
|
90
|
+
fields = signal([], /* @ts-ignore */
|
|
91
|
+
...(ngDevMode ? [{ debugName: "fields" }] : /* istanbul ignore next */ []));
|
|
92
|
+
ok = signal('Continuar', /* @ts-ignore */
|
|
93
|
+
...(ngDevMode ? [{ debugName: "ok" }] : /* istanbul ignore next */ []));
|
|
94
|
+
cancel = signal('Cancelar', /* @ts-ignore */
|
|
95
|
+
...(ngDevMode ? [{ debugName: "cancel" }] : /* istanbul ignore next */ []));
|
|
89
96
|
closeDialog = (result) => {
|
|
90
97
|
this.dialogRef.close(result);
|
|
91
98
|
};
|
|
@@ -96,16 +103,16 @@ class FormDialogComponent {
|
|
|
96
103
|
*/
|
|
97
104
|
isFormValid() {
|
|
98
105
|
return this.fields().every((field) => {
|
|
99
|
-
return
|
|
106
|
+
return !field.required || Boolean(field.value && field.value.trim() !== '');
|
|
100
107
|
});
|
|
101
108
|
}
|
|
102
109
|
close(result) {
|
|
103
110
|
this.closeDialog(result);
|
|
104
111
|
}
|
|
105
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
106
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
112
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: FormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
113
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: FormDialogComponent, isStandalone: true, selector: "oat-form-dialog", ngImport: i0, template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n\t@for (field of fields(); track field.title) {\r\n\t<p>\r\n\t\t<mat-form-field class=\"dialogs-full-width\">\r\n\t\t\t<mat-label>{{ field.title }}</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\t [type]=\"field.type\"\r\n\t\t\t\t [(ngModel)]=\"field.value\"\r\n\t\t\t\t [required]=\"field.required || false\">\r\n\t\t\t@if (field.hint) {\r\n\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\r\n\t\t\t}\r\n\t\t</mat-form-field>\r\n\t</p>\r\n\t}\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-button\r\n\t\t\t(click)=\"close()\">{{ cancel() }}</button>\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\tcolor=\"primary\"\r\n\t\t\t[disabled]=\"!isFormValid()\"\r\n\t\t\t(click)=\"close(fields())\">{{ ok() }}</button>\r\n</div>", styles: [".dialogs-full-width{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: 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: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
107
114
|
}
|
|
108
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
115
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: FormDialogComponent, decorators: [{
|
|
109
116
|
type: Component,
|
|
110
117
|
args: [{ selector: 'oat-form-dialog', imports: [
|
|
111
118
|
FormsModule,
|
|
@@ -117,7 +124,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
|
|
|
117
124
|
MatInput,
|
|
118
125
|
MatHint,
|
|
119
126
|
MatButton,
|
|
120
|
-
], encapsulation: ViewEncapsulation.None, template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n\t@for (field of fields(); track field.title) {\r\n\t<p>\r\n\t\t<mat-form-field class=\"dialogs-full-width\">\r\n\t\t\t<mat-label>{{field.title}}</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\t [type]=\"field.type\"\r\n\t\t\t\t [(ngModel)]=\"field.value\"\r\n\t\t\t\t [required]=\"field.required || false\">\r\n\t\t\t@if (field.hint) {\r\n\t\t\t<mat-hint>{{field.hint}}</mat-hint>\r\n\t\t\t}\r\n\t\t</mat-form-field>\r\n\t</p>\r\n\t}\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\n\t\t\tmat-button\n\t\t\t(click)=\"close()\">{{ cancel() }}</button>\n\t<button type=\"button\"\n\t\t\tmat-flat-button\n\t\t\tcolor=\"primary\"\n\t\t\t[disabled]=\"!isFormValid()\"\n\t\t\t(click)=\"close(fields())\">{{ ok() }}</button>\n</div
|
|
127
|
+
], encapsulation: ViewEncapsulation.None, template: "<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n\t@for (field of fields(); track field.title) {\r\n\t<p>\r\n\t\t<mat-form-field class=\"dialogs-full-width\">\r\n\t\t\t<mat-label>{{ field.title }}</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\t [type]=\"field.type\"\r\n\t\t\t\t [(ngModel)]=\"field.value\"\r\n\t\t\t\t [required]=\"field.required || false\">\r\n\t\t\t@if (field.hint) {\r\n\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\r\n\t\t\t}\r\n\t\t</mat-form-field>\r\n\t</p>\r\n\t}\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-button\r\n\t\t\t(click)=\"close()\">{{ cancel() }}</button>\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\tcolor=\"primary\"\r\n\t\t\t[disabled]=\"!isFormValid()\"\r\n\t\t\t(click)=\"close(fields())\">{{ ok() }}</button>\r\n</div>", styles: [".dialogs-full-width{width:100%}\n"] }]
|
|
121
128
|
}] });
|
|
122
129
|
|
|
123
130
|
/**
|
|
@@ -287,8 +294,7 @@ class OverlayComponent {
|
|
|
287
294
|
};
|
|
288
295
|
}
|
|
289
296
|
getAnimationDuration() {
|
|
290
|
-
return this.clamp(this.customOverlayRef.animationDuration ??
|
|
291
|
-
DEFAULT_OVERLAY_ANIMATION_DURATION, 0, 5000);
|
|
297
|
+
return this.clamp(this.customOverlayRef.animationDuration ?? DEFAULT_OVERLAY_ANIMATION_DURATION, 0, 5000);
|
|
292
298
|
}
|
|
293
299
|
getCloseAnimationDuration() {
|
|
294
300
|
return Math.round(this.getAnimationDuration() * 0.82);
|
|
@@ -299,12 +305,12 @@ class OverlayComponent {
|
|
|
299
305
|
clamp(value, min, max) {
|
|
300
306
|
return Math.min(Math.max(value, min), max);
|
|
301
307
|
}
|
|
302
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
303
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
308
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: OverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
309
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: OverlayComponent, isStandalone: true, selector: "oat-overlay", viewQueries: [{ propertyName: "modal", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #modal\r\n\t [class]=\"'modal ' + (inputData.css ? inputData.css : '')\">\r\n\t<div [class]=\"'modal__header modal__header--' + inputData.modalColor\">\r\n\t\t<div class=\"title\">{{ inputData.modalTitle }}</div>\r\n\t\t@if (!inputData.hideCloseBtn) {\r\n\t\t<button mat-icon-button\r\n\t\t\t\tclass=\"btn-close\"\r\n\t\t\t\t(click)=\"close()\">\r\n\t\t\t<mat-icon>close</mat-icon>\r\n\t\t</button>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<div [class]=\"'modal__content ' + inputData.contentCss\">\r\n\t\t<ng-container *ngComponentOutlet=\"content\"></ng-container>\r\n\t</div>\r\n</div>\r\n", styles: [":host{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.modal{border-radius:6px;box-shadow:4px 4px 5px 0 var(--oat-modals-bg-color)}.modal__header{border-top-left-radius:6px;border-top-right-radius:6px;display:flex;justify-content:space-between;align-items:center;padding:0 20px;height:48px;font-size:24px;background-color:var(--oat-modals-main-color)}.modal__header .title{color:var(--oat-modals-color-white)}.modal__header .btn-close{cursor:pointer;color:var(--oat-modals-color-white)}.modal__header--blue{background-color:var(--oat-modals-color-blue)}.modal__header--yellow{background-color:var(--oat-modals-color-yellow);color:var(--oat-modals-color-black)}.modal__header--yellow>.btn-close{color:var(--oat-modals-color-black)}.modal__header--red{background-color:var(--oat-modals-color-red)}.modal__content{padding:20px;border-bottom-left-radius:6px;background-color:var(--oat-modals-color-white);border-bottom-right-radius:6px;height:calc(100% - 48px);overflow-y:auto;box-sizing:border-box}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }] });
|
|
304
310
|
}
|
|
305
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
311
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: OverlayComponent, decorators: [{
|
|
306
312
|
type: Component,
|
|
307
|
-
args: [{ selector: 'oat-overlay', imports: [MatIcon, MatIconButton, NgComponentOutlet], template: "<div #modal\n\t [class]=\"'modal ' + (inputData.css ? inputData.css : '')\">\n\t<div [class]=\"'modal__header modal__header--' + inputData.modalColor\">\r\n\t\t<div class=\"title\">{{ inputData.modalTitle }}</div>\r\n\t\t@if (!inputData.hideCloseBtn) {\r\n\t\t<button mat-icon-button\r\n\t\t\t\tclass=\"btn-close\"\r\n\t\t\t\t(click)=\"close()\">\r\n\t\t\t<mat-icon>close</mat-icon>\r\n\t\t</button>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<div [class]=\"'modal__content ' + inputData.contentCss\">\r\n\t\t<ng-container *ngComponentOutlet=\"content\"></ng-container>\r\n\t</div>\r\n</div>\n", styles: [":host{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.modal{border-radius:6px;box-shadow:4px 4px 5px 0 var(--oat-modals-bg-color)}.modal__header{border-top-left-radius:6px;border-top-right-radius:6px;display:flex;justify-content:space-between;align-items:center;padding:0 20px;height:48px;font-size:24px;background-color:var(--oat-modals-main-color)}.modal__header .title{color:var(--oat-modals-color-white)}.modal__header .btn-close{cursor:pointer;color:var(--oat-modals-color-white)}.modal__header--blue{background-color:var(--oat-modals-color-blue)}.modal__header--yellow{background-color:var(--oat-modals-color-yellow);color:var(--oat-modals-color-black)}.modal__header--yellow>.btn-close{color:var(--oat-modals-color-black)}.modal__header--red{background-color:var(--oat-modals-color-red)}.modal__content{padding:20px;border-bottom-left-radius:6px;background-color:var(--oat-modals-color-white);border-bottom-right-radius:6px;height:calc(100% - 48px);overflow-y:auto;box-sizing:border-box}\n"] }]
|
|
313
|
+
args: [{ selector: 'oat-overlay', imports: [MatIcon, MatIconButton, NgComponentOutlet], template: "<div #modal\r\n\t [class]=\"'modal ' + (inputData.css ? inputData.css : '')\">\r\n\t<div [class]=\"'modal__header modal__header--' + inputData.modalColor\">\r\n\t\t<div class=\"title\">{{ inputData.modalTitle }}</div>\r\n\t\t@if (!inputData.hideCloseBtn) {\r\n\t\t<button mat-icon-button\r\n\t\t\t\tclass=\"btn-close\"\r\n\t\t\t\t(click)=\"close()\">\r\n\t\t\t<mat-icon>close</mat-icon>\r\n\t\t</button>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<div [class]=\"'modal__content ' + inputData.contentCss\">\r\n\t\t<ng-container *ngComponentOutlet=\"content\"></ng-container>\r\n\t</div>\r\n</div>\r\n", styles: [":host{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.modal{border-radius:6px;box-shadow:4px 4px 5px 0 var(--oat-modals-bg-color)}.modal__header{border-top-left-radius:6px;border-top-right-radius:6px;display:flex;justify-content:space-between;align-items:center;padding:0 20px;height:48px;font-size:24px;background-color:var(--oat-modals-main-color)}.modal__header .title{color:var(--oat-modals-color-white)}.modal__header .btn-close{cursor:pointer;color:var(--oat-modals-color-white)}.modal__header--blue{background-color:var(--oat-modals-color-blue)}.modal__header--yellow{background-color:var(--oat-modals-color-yellow);color:var(--oat-modals-color-black)}.modal__header--yellow>.btn-close{color:var(--oat-modals-color-black)}.modal__header--red{background-color:var(--oat-modals-color-red)}.modal__content{padding:20px;border-bottom-left-radius:6px;background-color:var(--oat-modals-color-white);border-bottom-right-radius:6px;height:calc(100% - 48px);overflow-y:auto;box-sizing:border-box}\n"] }]
|
|
308
314
|
}], propDecorators: { modal: [{ type: i0.ViewChild, args: ['modal', { isSignal: true }] }] } });
|
|
309
315
|
|
|
310
316
|
/**
|
|
@@ -358,14 +364,13 @@ class SwipeDirective {
|
|
|
358
364
|
this.mouseDownListener();
|
|
359
365
|
this.mouseUpListener();
|
|
360
366
|
}
|
|
361
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
362
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
367
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: SwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
368
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0", type: SwipeDirective, isStandalone: true, selector: "[oatSwipe]", outputs: { swipeEnd: "swipeEnd" }, host: { listeners: { "touchstart": "onTouchStart($event)", "touchend": "onTouchEnd($event)", "mousedown": "onMouseDown($event)", "mouseup": "onMouseUp($event)" } }, ngImport: i0 });
|
|
363
369
|
}
|
|
364
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: SwipeDirective, decorators: [{
|
|
365
371
|
type: Directive,
|
|
366
372
|
args: [{
|
|
367
373
|
selector: '[oatSwipe]',
|
|
368
|
-
standalone: true,
|
|
369
374
|
host: {
|
|
370
375
|
'(touchstart)': 'onTouchStart($event)',
|
|
371
376
|
'(touchend)': 'onTouchEnd($event)',
|
|
@@ -628,10 +633,10 @@ class DialogService {
|
|
|
628
633
|
getCloseAnimationDuration(animationDuration) {
|
|
629
634
|
return Math.round(animationDuration * 0.82);
|
|
630
635
|
}
|
|
631
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
632
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
636
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
637
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DialogService, providedIn: 'root' });
|
|
633
638
|
}
|
|
634
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
639
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DialogService, decorators: [{
|
|
635
640
|
type: Injectable,
|
|
636
641
|
args: [{ providedIn: 'root' }]
|
|
637
642
|
}] });
|
|
@@ -673,10 +678,10 @@ class OverlayService {
|
|
|
673
678
|
parent: inj,
|
|
674
679
|
});
|
|
675
680
|
}
|
|
676
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
677
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
681
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
682
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: OverlayService, providedIn: 'root' });
|
|
678
683
|
}
|
|
679
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
684
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: OverlayService, decorators: [{
|
|
680
685
|
type: Injectable,
|
|
681
686
|
args: [{ providedIn: 'root' }]
|
|
682
687
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"osumi-angular-tools.mjs","sources":["../../../projects/osumi-angular-tools/src/lib/components/dialogs/alert-dialog/alert-dialog.component.ts","../../../projects/osumi-angular-tools/src/lib/components/dialogs/alert-dialog/alert-dialog.component.html","../../../projects/osumi-angular-tools/src/lib/components/dialogs/confirm-dialog/confirm-dialog.component.ts","../../../projects/osumi-angular-tools/src/lib/components/dialogs/confirm-dialog/confirm-dialog.component.html","../../../projects/osumi-angular-tools/src/lib/components/dialogs/form-dialog/form-dialog.component.ts","../../../projects/osumi-angular-tools/src/lib/components/dialogs/form-dialog/form-dialog.component.html","../../../projects/osumi-angular-tools/src/lib/model/custom-overlay-ref.model.ts","../../../projects/osumi-angular-tools/src/lib/components/overlay/overlay.component.ts","../../../projects/osumi-angular-tools/src/lib/components/overlay/overlay.component.html","../../../projects/osumi-angular-tools/src/lib/directives/swipe.directive.ts","../../../projects/osumi-angular-tools/src/lib/services/dialog.service.ts","../../../projects/osumi-angular-tools/src/lib/services/overlay.service.ts","../../../projects/osumi-angular-tools/src/public-api.ts","../../../projects/osumi-angular-tools/src/osumi-angular-tools.ts"],"sourcesContent":["import { Component, inject, signal, WritableSignal } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport {\r\n MatDialogActions,\r\n MatDialogContent,\r\n MatDialogRef,\r\n MatDialogTitle,\r\n} from '@angular/material/dialog';\r\n\r\n/**\r\n * Componente para mostrar un diálogo de alerta.\r\n *\r\n * Permite mostrar un mensaje de alerta con un título, contenido y un botón de confirmación personalizables.\r\n *\r\n * @returns Devuelve mediante un observable la notificación de cierre del diálogo.\r\n */\r\n@Component({\r\n selector: 'oat-alert-dialog',\r\n templateUrl: './alert-dialog.component.html',\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton],\r\n})\r\nexport class AlertDialogComponent {\n public dialogRef: MatDialogRef<AlertDialogComponent> = inject(MatDialogRef);\n\n public title: WritableSignal<string> = signal<string>('');\n public content: WritableSignal<string> = signal<string>('');\n public ok: WritableSignal<string> = signal<string>('Continuar');\n\n public closeDialog: (result: boolean) => void = (result: boolean): void => {\n this.dialogRef.close(result);\n };\n\n close(result: boolean): void {\n this.closeDialog(result);\n }\n}\n","<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\n\t\t\tmat-flat-button\n\t\t\tcolor=\"primary\"\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\n</div>\n","import { NgClass } from '@angular/common';\r\nimport {\r\n Component,\r\n inject,\r\n signal,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport {\r\n MatDialogActions,\r\n MatDialogContent,\r\n MatDialogRef,\r\n MatDialogTitle,\r\n} from '@angular/material/dialog';\r\n\r\n/**\r\n * Componente para mostrar un diálogo de confirmación.\r\n *\r\n * Permite mostrar un mensaje de confirmación con un título, contenido y botones de confirmación y cancelar personalizables.\r\n *\r\n * @returns Devuelve mediante un observable la notificación de cierre del diálogo indicando si se ha confirmado o cancelado la acción.\r\n */\r\n@Component({\r\n selector: 'oat-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrl: './confirm-dialog.component.scss',\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatButton,\r\n NgClass,\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ConfirmDialogComponent {\n public dialogRef: MatDialogRef<ConfirmDialogComponent> = inject(MatDialogRef);\n\n public title: WritableSignal<string> = signal<string>('');\n public content: WritableSignal<string> = signal<string>('');\n public warn: WritableSignal<boolean> = signal<boolean>(false);\n public ok: WritableSignal<string> = signal<string>('Continuar');\n public cancel: WritableSignal<string> = signal<string>('Cancelar');\n\n public closeDialog: (result: boolean) => void = (result: boolean): void => {\n this.dialogRef.close(result);\n };\n\n close(result: boolean): void {\n this.closeDialog(result);\n }\n}\n","<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\n\t\t\tmat-button\n\t\t\t(click)=\"close(false)\">{{ cancel() }}</button>\n\t<button type=\"button\"\n\t\t\tmat-flat-button\n\t\t\t[ngClass]=\"{'dialogs-warn': warn()}\"\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\n</div>\n","import {\r\n Component,\r\n inject,\r\n signal,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport {\r\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormField, MatHint, MatLabel } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { DialogField } from '../../../interfaces/dialogs.interface';\r\n\r\n/**\r\n * Componente para mostrar un diálogo con un formulario.\r\n *\r\n * Permite mostrar un mensaje de confirmación con un título, contenido y y un formulario personalizable.\r\n *\r\n * @returns Devuelve mediante un observable la notificación de cierre del diálogo con los datos del formulario.\r\n */\r\n@Component({\r\n selector: 'oat-form-dialog',\r\n templateUrl: './form-dialog.component.html',\r\n styleUrl: './form-dialog.component.scss',\r\n imports: [\r\n FormsModule,\r\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatFormField,\n MatLabel,\r\n MatInput,\r\n MatHint,\r\n MatButton,\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FormDialogComponent {\n public dialogRef: MatDialogRef<FormDialogComponent> = inject(MatDialogRef);\n\n public title: WritableSignal<string> = signal<string>('');\n public content: WritableSignal<string> = signal<string>('');\n public fields: WritableSignal<DialogField[]> = signal<DialogField[]>([]);\n public ok: WritableSignal<string> = signal<string>('Continuar');\n public cancel: WritableSignal<string> = signal<string>('Cancelar');\n\n public closeDialog: (result?: DialogField[]) => void = (\n result?: DialogField[]\n ): void => {\n this.dialogRef.close(result);\n };\n\r\n /**\r\n * Método para validar el formulario.\r\n * Comprueba si todos los campos requeridos tienen un valor no vacío.\r\n * @returns Devuelve true si el formulario es válido, false en caso contrario.\r\n */\r\n isFormValid(): boolean {\n return this.fields().every((field: DialogField): boolean => {\n return (\n !field.required || Boolean(field.value && field.value.trim() !== '')\n );\n });\n }\n\n close(result?: DialogField[]): void {\n this.closeDialog(result);\n }\n}\n","<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n\t@for (field of fields(); track field.title) {\r\n\t<p>\r\n\t\t<mat-form-field class=\"dialogs-full-width\">\r\n\t\t\t<mat-label>{{field.title}}</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\t [type]=\"field.type\"\r\n\t\t\t\t [(ngModel)]=\"field.value\"\r\n\t\t\t\t [required]=\"field.required || false\">\r\n\t\t\t@if (field.hint) {\r\n\t\t\t<mat-hint>{{field.hint}}</mat-hint>\r\n\t\t\t}\r\n\t\t</mat-form-field>\r\n\t</p>\r\n\t}\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\n\t\t\tmat-button\n\t\t\t(click)=\"close()\">{{ cancel() }}</button>\n\t<button type=\"button\"\n\t\t\tmat-flat-button\n\t\t\tcolor=\"primary\"\n\t\t\t[disabled]=\"!isFormValid()\"\n\t\t\t(click)=\"close(fields())\">{{ ok() }}</button>\n</div>\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { Type } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { OverlayCloseEvent } from '../interfaces/modals.interface';\n\ntype OverlayCloseAnimation = () => Promise<void>;\n\n/**\n * Clase que representa una referencia a un overlay personalizado.\n *\r\n * Permite cerrar el overlay y notificar a los suscriptores sobre el evento de cierre.\r\n *\r\n * @template R Tipo de dato de respuesta.\n * @template T Tipo de dato pasado al modal.\n */\nexport class CustomOverlayRef<R = unknown, T = unknown> {\n afterClosed$ = new Subject<OverlayCloseEvent<R | null>>();\n private closeAnimation: OverlayCloseAnimation | undefined;\n private closing: boolean = false;\n\n constructor(\n public overlay: OverlayRef,\n public content: Type<unknown>,\n public data: T,\n public closeOnBackdropCLick: boolean = true,\n public from?: HTMLElement,\n public animationDuration?: number\n ) {\n if (closeOnBackdropCLick) {\n overlay.backdropClick().subscribe({\n next: () => {\n void this._close('backdropClick', null);\n },\n });\n }\n }\n\n close(data?: R): void {\n void this._close('close', data ?? null);\n }\n\n registerCloseAnimation(closeAnimation: OverlayCloseAnimation): void {\n this.closeAnimation = closeAnimation;\n }\n\n private async _close(\n type: 'backdropClick' | 'close',\n data: R | null\n ): Promise<void> {\n if (this.closing) {\n return;\n }\n\n this.closing = true;\n\n if (this.closeAnimation !== undefined) {\n await this.closeAnimation();\n }\n\n this.overlay.dispose();\n this.afterClosed$.next({\n type,\n data,\r\n });\r\n\r\n this.afterClosed$.complete();\r\n }\r\n}\r\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n inject,\n OnInit,\n Renderer2,\n Signal,\n Type,\n viewChild,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { Modal } from '../../interfaces/modals.interface';\nimport { CustomOverlayRef } from '../../model/custom-overlay-ref.model';\n\nconst DEFAULT_OVERLAY_ANIMATION_DURATION: number = 220;\n\n/**\n * Componente para mostrar un componente personalizado en una ventana modal.\n *\n * @returns Devuelve mediante un observable la notificación de cierre del modal.\n */\n@Component({\n selector: 'oat-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n imports: [MatIcon, MatIconButton, NgComponentOutlet],\n})\nexport class OverlayComponent implements OnInit, AfterViewInit {\n private customOverlayRef: CustomOverlayRef<unknown, Modal> =\n inject(CustomOverlayRef);\n private renderer: Renderer2 = inject(Renderer2);\n private modal: Signal<ElementRef<HTMLElement>> = viewChild.required('modal');\n\n content: Type<unknown> = this.customOverlayRef.content;\n inputData: Modal = { modalTitle: '', modalColor: 'blue' };\n\n ngOnInit(): void {\n this.listenToEscKey();\n this.inputData = this.customOverlayRef.data;\n }\n\n ngAfterViewInit(): void {\n this.customOverlayRef.registerCloseAnimation((): Promise<void> => {\n return this.animateClose();\n });\n\n this.animateOpen();\n }\n\n private listenToEscKey(): void {\n this.renderer.listen('window', 'keyup', (event: KeyboardEvent): void => {\n if (event.key === 'Escape') {\n this.close();\n }\n });\n }\n\n close(): void {\n this.customOverlayRef.close(null);\n }\n\n private animateOpen(): void {\n const modal: HTMLElement = this.modal().nativeElement;\n const animationStart: Keyframe | null = this.getOriginKeyframe(modal);\n\n if (animationStart === null) {\n return;\n }\n\n modal.animate(\n [\n {\n ...animationStart,\n opacity: 0,\n },\n {\n transform: 'translate(0, 0) scale(1)',\n opacity: 1,\n },\n ],\n {\n duration: this.getAnimationDuration(),\n easing: 'cubic-bezier(0.2, 0, 0, 1)',\n }\n );\n }\n\n private animateClose(): Promise<void> {\n const modal: HTMLElement = this.modal().nativeElement;\n const animationEnd: Keyframe | null = this.getOriginKeyframe(modal);\n\n if (animationEnd === null) {\n return Promise.resolve();\n }\n\n modal.style.pointerEvents = 'none';\n\n const animation: Animation = modal.animate(\n [\n {\n transform: 'translate(0, 0) scale(1)',\n opacity: 1,\n },\n {\n ...animationEnd,\n opacity: 0,\n },\n ],\n {\n duration: this.getCloseAnimationDuration(),\n easing: 'cubic-bezier(0.4, 0, 1, 1)',\n fill: 'forwards',\n }\n );\n\n return new Promise((resolve: () => void): void => {\n animation.onfinish = (): void => {\n resolve();\n };\n animation.oncancel = (): void => {\n resolve();\n };\n });\n }\n\n private getOriginKeyframe(modal: HTMLElement): Keyframe | null {\n const from: HTMLElement | undefined = this.customOverlayRef.from;\n\n if (\n from === undefined ||\n !from.isConnected ||\n this.prefersReducedMotion() ||\n typeof modal.animate !== 'function'\n ) {\n return null;\n }\n\n const fromRect: DOMRect = from.getBoundingClientRect();\n const modalRect: DOMRect = modal.getBoundingClientRect();\n\n if (\n fromRect.width === 0 ||\n fromRect.height === 0 ||\n modalRect.width === 0 ||\n modalRect.height === 0\n ) {\n return null;\n }\n\n const fromCenterX: number = fromRect.left + fromRect.width / 2;\n const fromCenterY: number = fromRect.top + fromRect.height / 2;\n const modalCenterX: number = modalRect.left + modalRect.width / 2;\n const modalCenterY: number = modalRect.top + modalRect.height / 2;\n const translateX: number = fromCenterX - modalCenterX;\n const translateY: number = fromCenterY - modalCenterY;\n const scale: number = this.clamp(\n Math.min(\n fromRect.width / modalRect.width,\n fromRect.height / modalRect.height\n ),\n 0.12,\n 0.45\n );\n\n return {\n transform: `translate(${translateX}px, ${translateY}px) scale(${scale})`,\n transformOrigin: 'center center',\n };\n }\n\n private getAnimationDuration(): number {\n return this.clamp(\n this.customOverlayRef.animationDuration ??\n DEFAULT_OVERLAY_ANIMATION_DURATION,\n 0,\n 5000\n );\n }\n\n private getCloseAnimationDuration(): number {\n return Math.round(this.getAnimationDuration() * 0.82);\n }\n\n private prefersReducedMotion(): boolean {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n\n private clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n }\n}\n","<div #modal\n\t [class]=\"'modal ' + (inputData.css ? inputData.css : '')\">\n\t<div [class]=\"'modal__header modal__header--' + inputData.modalColor\">\r\n\t\t<div class=\"title\">{{ inputData.modalTitle }}</div>\r\n\t\t@if (!inputData.hideCloseBtn) {\r\n\t\t<button mat-icon-button\r\n\t\t\t\tclass=\"btn-close\"\r\n\t\t\t\t(click)=\"close()\">\r\n\t\t\t<mat-icon>close</mat-icon>\r\n\t\t</button>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<div [class]=\"'modal__content ' + inputData.contentCss\">\r\n\t\t<ng-container *ngComponentOutlet=\"content\"></ng-container>\r\n\t</div>\r\n</div>\n","import {\r\n Directive,\r\n ElementRef,\r\n inject,\r\n OnDestroy,\r\n output,\r\n OutputEmitterRef,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { SwipeData } from '../interfaces/swipe.interface';\r\n\r\n/**\r\n * Directiva para detectar gestos de deslizamiento (swipe) en un elemento.\r\n *\r\n * Permite detectar deslizamientos tanto en dispositivos táctiles como con ratón.\r\n *\r\n * @returns Devuelve un observable que emite los datos del deslizamiento (deltaX y deltaY).\r\n */\r\n@Directive({\r\n selector: '[oatSwipe]',\r\n standalone: true,\r\n host: {\r\n '(touchstart)': 'onTouchStart($event)',\r\n '(touchend)': 'onTouchEnd($event)',\r\n '(mousedown)': 'onMouseDown($event)',\r\n '(mouseup)': 'onMouseUp($event)',\r\n },\r\n})\r\nexport class SwipeDirective implements OnDestroy {\r\n private el: ElementRef = inject(ElementRef);\r\n private renderer: Renderer2 = inject(Renderer2);\r\n swipeEnd: OutputEmitterRef<SwipeData> = output<SwipeData>();\r\n\r\n private startX: number = 0;\r\n private startY: number = 0;\r\n\r\n private touchStartListener: () => void;\r\n private touchEndListener: () => void;\r\n private mouseDownListener: () => void;\r\n private mouseUpListener: () => void;\r\n\r\n constructor() {\r\n this.touchStartListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'touchstart',\r\n (event: TouchEvent): void => this.onTouchStart(event)\r\n );\r\n this.touchEndListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'touchend',\r\n (event: TouchEvent): void => this.onTouchEnd(event)\r\n );\r\n this.mouseDownListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'mousedown',\r\n (event: MouseEvent): void => this.onMouseDown(event)\r\n );\r\n this.mouseUpListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'mouseup',\r\n (event: MouseEvent): void => this.onMouseUp(event)\r\n );\r\n }\r\n\r\n onTouchStart(event: TouchEvent): void {\r\n this.startX = event.touches[0].clientX;\r\n this.startY = event.touches[0].clientY;\r\n }\r\n\r\n onTouchEnd(event: TouchEvent): void {\r\n const endX: number = event.changedTouches[0].clientX;\r\n const endY: number = event.changedTouches[0].clientY;\r\n const deltaX: number = endX - this.startX;\r\n const deltaY: number = endY - this.startY;\r\n\r\n this.swipeEnd.emit({ x: deltaX, y: deltaY });\r\n }\r\n\r\n onMouseDown(event: MouseEvent): void {\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n }\r\n\r\n onMouseUp(event: MouseEvent): void {\r\n const endX: number = event.clientX;\r\n const endY: number = event.clientY;\r\n const deltaX: number = endX - this.startX;\r\n const deltaY: number = endY - this.startY;\r\n\r\n this.swipeEnd.emit({ x: deltaX, y: deltaY });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.touchStartListener();\r\n this.touchEndListener();\r\n this.mouseDownListener();\r\n this.mouseUpListener();\r\n }\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, Type } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\nimport { AlertDialogComponent } from '../components/dialogs/alert-dialog/alert-dialog.component';\nimport { ConfirmDialogComponent } from '../components/dialogs/confirm-dialog/confirm-dialog.component';\nimport { FormDialogComponent } from '../components/dialogs/form-dialog/form-dialog.component';\nimport { DialogField, DialogOptions } from '../interfaces/dialogs.interface';\n\ntype DialogResult = boolean | DialogField[] | undefined;\nconst DEFAULT_DIALOG_ANIMATION_DURATION: number = 220;\n\n/**\n * Servicio para manejar diálogos en la aplicación.\n *\n * Permite abrir diálogos de alerta, confirmación y formularios personalizados.\n *\n * Cada método devuelve un observable que emite el resultado del diálogo al cerrarse.\n */\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n private dialog: MatDialog = inject(MatDialog);\n private document: Document = inject(DOCUMENT);\n private platformId: object = inject(PLATFORM_ID);\n\n private static dialogId: number = 0;\n\n /**\n * Método para mostrar un diálogo de alerta.\n * @param options Datos a mostrar en el diálogo, incluyendo título, contenido y texto del botón de confirmación (opcional).\n * @returns Devuelve un observable para notificar el cierre del diálogo.\n */\n public alert(options: DialogOptions): Observable<boolean> {\n const dialogRef: MatDialogRef<AlertDialogComponent> = this.openDialog(\n AlertDialogComponent,\n options,\n );\n\n dialogRef.componentInstance.title.set(options.title);\n dialogRef.componentInstance.content.set(options.content);\n if (options.ok !== undefined) {\n dialogRef.componentInstance.ok.set(options.ok);\n }\n\n return dialogRef.afterClosed();\n }\n\n /**\n * Método para mostrar un diálogo de confirmación.\n * @param options Datos a mostrar en el diálogo, incluyendo título, contenido, si es una advertencia (opcional) y textos para los botones de acción (opcionales).\n * @returns Devuelve un observable para notificar el cierre del diálogo con el valor true para diálogo aceptado y false para diálogo cancelado.\n */\n public confirm(options: DialogOptions): Observable<boolean> {\n const dialogRef: MatDialogRef<ConfirmDialogComponent> = this.openDialog(\n ConfirmDialogComponent,\n options,\n );\n\n dialogRef.componentInstance.title.set(options.title);\n dialogRef.componentInstance.content.set(options.content);\n if (options.warn !== undefined) {\n dialogRef.componentInstance.warn.set(options.warn);\n }\n if (options.ok !== undefined) {\n dialogRef.componentInstance.ok.set(options.ok);\n }\n if (options.cancel !== undefined) {\n dialogRef.componentInstance.cancel.set(options.cancel);\n }\n\n return dialogRef.afterClosed();\n }\n\n /**\n * Método para mostrar un diálogo con un formulario personalizado.\n * @param options Datos a mostrar en el diálogo, incluyendo título, campos a rellenar y textos para los botones de acción (opcionales).\n * @returns Devuelve un observable para notificar el cierre del diálogo con los valores introducidos en el formulario.\n */\n public form(options: DialogOptions): Observable<DialogField[]> {\n const dialogRef: MatDialogRef<FormDialogComponent> = this.openDialog(\n FormDialogComponent,\n options,\n );\n\n dialogRef.componentInstance.title.set(options.title);\n dialogRef.componentInstance.content.set(options.content);\n if (options.ok !== undefined) {\n dialogRef.componentInstance.ok.set(options.ok);\n }\n if (options.cancel !== undefined) {\n dialogRef.componentInstance.cancel.set(options.cancel);\n }\n if (options.fields !== undefined) {\n dialogRef.componentInstance.fields.set(options.fields);\n }\n\n return dialogRef.afterClosed();\n }\n\n private openDialog<TComponent>(\n component: Type<TComponent>,\n options: DialogOptions,\n ): MatDialogRef<TComponent> {\n const panelClass: string | undefined =\n options.from !== undefined ? this.getPanelClass() : undefined;\n const dialogConfig: MatDialogConfig = {};\n\n if (panelClass !== undefined) {\n dialogConfig.panelClass = panelClass;\n dialogConfig.disableClose = true;\n dialogConfig.enterAnimationDuration = '0ms';\n dialogConfig.exitAnimationDuration = '0ms';\n }\n\n const dialogRef: MatDialogRef<TComponent> = this.dialog.open(component, dialogConfig);\n\n const animationDuration: number = this.getAnimationDuration(options);\n\n this.configureDialogClose(dialogRef, panelClass, options.from, animationDuration);\n\n if (panelClass !== undefined && options.from !== undefined) {\n this.prepareDialogOpen(panelClass);\n this.animateDialogOpen(panelClass, options.from, animationDuration);\n }\n\n return dialogRef;\n }\n\n private configureDialogClose<TComponent>(\n dialogRef: MatDialogRef<TComponent>,\n panelClass: string | undefined,\n from: HTMLElement | undefined,\n animationDuration: number,\n ): void {\n let closing: boolean = false;\n const closeDialog = (result?: DialogResult): void => {\n if (closing) {\n return;\n }\n\n closing = true;\n void this.closeDialog(dialogRef, panelClass, from, animationDuration, result);\n };\n\n (\n dialogRef.componentInstance as TComponent & {\n closeDialog?: (result?: DialogResult) => void;\n }\n ).closeDialog = closeDialog;\n\n if (panelClass === undefined || from === undefined) {\n return;\n }\n\n dialogRef.backdropClick().subscribe({\n next: (): void => {\n closeDialog();\n },\n });\n\n dialogRef.keydownEvents().subscribe({\n next: (event: KeyboardEvent): void => {\n if (event.key === 'Escape') {\n closeDialog();\n }\n },\n });\n }\n\n private getPanelClass(): string {\n DialogService.dialogId++;\n return `oat-dialog-from-${DialogService.dialogId}`;\n }\n\n private animateDialogOpen(\n panelClass: string,\n from: HTMLElement,\n animationDuration: number,\n ): void {\n this.runAfterRender((): void => {\n const panel: HTMLElement | null = this.getPanel(panelClass);\n const animationStart: Keyframe | null = this.getOriginKeyframe(panel, from);\n\n if (panel === null || animationStart === null) {\n if (panel !== null) {\n panel.style.opacity = '';\n }\n return;\n }\n\n const animation: Animation = panel.animate(\n [\n {\n ...animationStart,\n opacity: 0,\n },\n {\n transform: 'translate(0, 0) scale(1)',\n opacity: 1,\n },\n ],\n {\n duration: animationDuration,\n easing: 'cubic-bezier(0.2, 0, 0, 1)',\n },\n );\n\n animation.onfinish = (): void => {\n panel.style.opacity = '';\n };\n animation.oncancel = (): void => {\n panel.style.opacity = '';\n };\n });\n }\n\n private prepareDialogOpen(panelClass: string): void {\n if (!this.canAnimate()) {\n return;\n }\n\n const panel: HTMLElement | null = this.getPanel(panelClass);\n\n if (panel !== null) {\n panel.style.opacity = '0';\n }\n }\n\n private async closeDialog<TComponent>(\n dialogRef: MatDialogRef<TComponent>,\n panelClass: string | undefined,\n from: HTMLElement | undefined,\n animationDuration: number,\n result?: DialogResult,\n ): Promise<void> {\n if (panelClass === undefined || from === undefined) {\n dialogRef.close(result);\n return;\n }\n\n const panel: HTMLElement | null = this.getPanel(panelClass);\n const animationEnd: Keyframe | null = this.getOriginKeyframe(panel, from);\n\n if (panel === null || animationEnd === null) {\n dialogRef.close(result);\n return;\n }\n\n await this.animatePanelClose(\n panel,\n animationEnd,\n this.getCloseAnimationDuration(animationDuration),\n );\n dialogRef.close(result);\n }\n\n private animatePanelClose(\n panel: HTMLElement,\n animationEnd: Keyframe,\n animationDuration: number,\n ): Promise<void> {\n panel.style.pointerEvents = 'none';\n\n const animation: Animation = panel.animate(\n [\n {\n transform: 'translate(0, 0) scale(1)',\n opacity: 1,\n },\n {\n ...animationEnd,\n opacity: 0,\n },\n ],\n {\n duration: animationDuration,\n easing: 'cubic-bezier(0.4, 0, 1, 1)',\n fill: 'forwards',\n },\n );\n\n return new Promise((resolve: () => void): void => {\n animation.onfinish = (): void => {\n resolve();\n };\n animation.oncancel = (): void => {\n resolve();\n };\n });\n }\n\n private getOriginKeyframe(panel: HTMLElement | null, from: HTMLElement): Keyframe | null {\n if (\n panel === null ||\n !this.canAnimate() ||\n !from.isConnected ||\n typeof panel.animate !== 'function'\n ) {\n return null;\n }\n\n const fromRect: DOMRect = from.getBoundingClientRect();\n const panelRect: DOMRect = panel.getBoundingClientRect();\n\n if (\n fromRect.width === 0 ||\n fromRect.height === 0 ||\n panelRect.width === 0 ||\n panelRect.height === 0\n ) {\n return null;\n }\n\n const fromCenterX: number = fromRect.left + fromRect.width / 2;\n const fromCenterY: number = fromRect.top + fromRect.height / 2;\n const panelCenterX: number = panelRect.left + panelRect.width / 2;\n const panelCenterY: number = panelRect.top + panelRect.height / 2;\n const translateX: number = fromCenterX - panelCenterX;\n const translateY: number = fromCenterY - panelCenterY;\n const scale: number = this.clamp(\n Math.min(fromRect.width / panelRect.width, fromRect.height / panelRect.height),\n 0.12,\n 0.45,\n );\n\n return {\n transform: `translate(${translateX}px, ${translateY}px) scale(${scale})`,\n transformOrigin: 'center center',\n };\n }\n\n private getPanel(panelClass: string): HTMLElement | null {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n\n return this.document.querySelector<HTMLElement>(`.${panelClass}`);\n }\n\n private canAnimate(): boolean {\n if (!isPlatformBrowser(this.platformId)) {\n return false;\n }\n\n const defaultView: Window | null = this.document.defaultView;\n\n return (\n defaultView !== null && !defaultView.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n }\n\n private runAfterRender(callback: () => void): void {\n const defaultView: Window | null = this.document.defaultView;\n\n if (!isPlatformBrowser(this.platformId) || defaultView === null) {\n callback();\n return;\n }\n\n defaultView.requestAnimationFrame((): void => {\n defaultView.requestAnimationFrame(callback);\n });\n }\n\n private clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n }\n\n private getAnimationDuration(options: DialogOptions): number {\n return this.clamp(\n options.animationDuration ?? DEFAULT_DIALOG_ANIMATION_DURATION,\n 0,\n 5000,\n );\n }\n\n private getCloseAnimationDuration(animationDuration: number): number {\n return Math.round(animationDuration * 0.82);\n }\n}\n","import { Overlay, OverlayConfig } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { inject, Injectable, Injector, Type } from '@angular/core';\r\nimport { OverlayComponent } from '../components/overlay/overlay.component';\r\nimport { Modal } from '../interfaces/modals.interface';\r\nimport { CustomOverlayRef } from '../model/custom-overlay-ref.model';\r\n\r\n/**\r\n * Servicio para manejar modales personalizados en la aplicación.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class OverlayService {\n private overlay: Overlay = inject(Overlay);\n private injector: Injector = inject(Injector);\n\r\n /**\r\n * Método para abrir un componente personalizado en un modal.\r\n * @param content Componente a mostrar en el overlay.\r\n * @param data Datos a pasar al componente del overlay.\n * @param panelCssClasses Clases CSS adicionales para el panel del overlay (opcional).\n * @param closeOnBackdropCLick Indica si el overlay se cierra al hacer clic en el fondo (opcional, por defecto true).\n * @param from Elemento desde el que se anima la apertura y cierre del overlay (opcional).\n * @param animationDuration Duración de la animación en milisegundos (opcional).\n * @returns Devuelve una referencia personalizada del overlay.\n */\n open<R = unknown>(\n content: Type<unknown>,\n data: Modal,\n panelCssClasses: string[] = [],\n closeOnBackdropCLick: boolean = true,\n from?: HTMLElement,\n animationDuration?: number\n ): CustomOverlayRef<R> {\n const _panelCssClasses: string[] = ['modals-panel'].concat(panelCssClasses);\r\n const config = new OverlayConfig({\r\n hasBackdrop: true,\r\n panelClass: _panelCssClasses,\r\n backdropClass: 'modals-background',\r\n width: '100%',\r\n height: '100%',\r\n });\r\n\r\n const overlayRef = this.overlay.create(config);\r\n\r\n const customOverlayRef = new CustomOverlayRef<R, Modal>(\n overlayRef,\n content,\n data,\n closeOnBackdropCLick,\n from,\n animationDuration\n );\n const injector = this.createInjector(customOverlayRef, this.injector);\r\n overlayRef.attach(new ComponentPortal(OverlayComponent, null, injector));\r\n\r\n return customOverlayRef;\r\n }\r\n\r\n private createInjector<R>(\n ref: CustomOverlayRef<R, Modal>,\n inj: Injector\n ): Injector {\n return Injector.create({\r\n providers: [{ provide: CustomOverlayRef, useValue: ref }],\r\n parent: inj,\r\n });\r\n }\r\n}\r\n","/*\r\n * Public API Surface of osumi-angular-tools\r\n */\r\nexport * from './lib/components/dialogs/alert-dialog/alert-dialog.component';\r\nexport * from './lib/components/dialogs/confirm-dialog/confirm-dialog.component';\r\nexport * from './lib/components/dialogs/form-dialog/form-dialog.component';\r\nexport * from './lib/components/overlay/overlay.component';\r\nexport * from './lib/directives/swipe.directive';\r\nexport * from './lib/interfaces/dialogs.interface';\r\nexport * from './lib/interfaces/modals.interface';\r\nexport * from './lib/interfaces/swipe.interface';\r\nexport * from './lib/model/custom-overlay-ref.model';\r\nexport * from './lib/services/dialog.service';\r\nexport * from './lib/services/overlay.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"osumi-angular-tools.mjs","sources":["../../../projects/osumi-angular-tools/src/lib/components/dialogs/alert-dialog/alert-dialog.component.ts","../../../projects/osumi-angular-tools/src/lib/components/dialogs/alert-dialog/alert-dialog.component.html","../../../projects/osumi-angular-tools/src/lib/components/dialogs/confirm-dialog/confirm-dialog.component.ts","../../../projects/osumi-angular-tools/src/lib/components/dialogs/confirm-dialog/confirm-dialog.component.html","../../../projects/osumi-angular-tools/src/lib/components/dialogs/form-dialog/form-dialog.component.ts","../../../projects/osumi-angular-tools/src/lib/components/dialogs/form-dialog/form-dialog.component.html","../../../projects/osumi-angular-tools/src/lib/model/custom-overlay-ref.model.ts","../../../projects/osumi-angular-tools/src/lib/components/overlay/overlay.component.ts","../../../projects/osumi-angular-tools/src/lib/components/overlay/overlay.component.html","../../../projects/osumi-angular-tools/src/lib/directives/swipe.directive.ts","../../../projects/osumi-angular-tools/src/lib/services/dialog.service.ts","../../../projects/osumi-angular-tools/src/lib/services/overlay.service.ts","../../../projects/osumi-angular-tools/src/public-api.ts","../../../projects/osumi-angular-tools/src/osumi-angular-tools.ts"],"sourcesContent":["import { Component, inject, signal, WritableSignal } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport {\r\n MatDialogActions,\r\n MatDialogContent,\r\n MatDialogRef,\r\n MatDialogTitle,\r\n} from '@angular/material/dialog';\r\n\r\n/**\r\n * Componente para mostrar un diálogo de alerta.\r\n *\r\n * Permite mostrar un mensaje de alerta con un título, contenido y un botón de confirmación personalizables.\r\n *\r\n * @returns Devuelve mediante un observable la notificación de cierre del diálogo.\r\n */\r\n@Component({\r\n selector: 'oat-alert-dialog',\r\n templateUrl: './alert-dialog.component.html',\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton],\r\n})\r\nexport class AlertDialogComponent {\r\n public dialogRef: MatDialogRef<AlertDialogComponent> = inject(MatDialogRef);\r\n\r\n public title: WritableSignal<string> = signal<string>('');\r\n public content: WritableSignal<string> = signal<string>('');\r\n public ok: WritableSignal<string> = signal<string>('Continuar');\r\n\r\n public closeDialog: (result: boolean) => void = (result: boolean): void => {\r\n this.dialogRef.close(result);\r\n };\r\n\r\n close(result: boolean): void {\r\n this.closeDialog(result);\r\n }\r\n}\r\n","<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\tcolor=\"primary\"\r\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, inject, signal, ViewEncapsulation, WritableSignal } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport {\r\n MatDialogActions,\r\n MatDialogContent,\r\n MatDialogRef,\r\n MatDialogTitle,\r\n} from '@angular/material/dialog';\r\n\r\n/**\r\n * Componente para mostrar un diálogo de confirmación.\r\n *\r\n * Permite mostrar un mensaje de confirmación con un título, contenido y botones de confirmación y cancelar personalizables.\r\n *\r\n * @returns Devuelve mediante un observable la notificación de cierre del diálogo indicando si se ha confirmado o cancelado la acción.\r\n */\r\n@Component({\r\n selector: 'oat-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrl: './confirm-dialog.component.scss',\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton, NgClass],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ConfirmDialogComponent {\r\n public dialogRef: MatDialogRef<ConfirmDialogComponent> = inject(MatDialogRef);\r\n\r\n public title: WritableSignal<string> = signal<string>('');\r\n public content: WritableSignal<string> = signal<string>('');\r\n public warn: WritableSignal<boolean> = signal<boolean>(false);\r\n public ok: WritableSignal<string> = signal<string>('Continuar');\r\n public cancel: WritableSignal<string> = signal<string>('Cancelar');\r\n\r\n public closeDialog: (result: boolean) => void = (result: boolean): void => {\r\n this.dialogRef.close(result);\r\n };\r\n\r\n close(result: boolean): void {\r\n this.closeDialog(result);\r\n }\r\n}\r\n","<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-button\r\n\t\t\t(click)=\"close(false)\">{{ cancel() }}</button>\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\t[ngClass]=\"{'dialogs-warn': warn()}\"\r\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\r\n</div>\r\n","import { Component, inject, signal, ViewEncapsulation, WritableSignal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport {\r\n MatDialogActions,\r\n MatDialogContent,\r\n MatDialogRef,\r\n MatDialogTitle,\r\n} from '@angular/material/dialog';\r\nimport { MatFormField, MatHint, MatLabel } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { DialogField } from '../../../interfaces/dialogs.interface';\r\n\r\n/**\r\n * Componente para mostrar un diálogo con un formulario.\r\n *\r\n * Permite mostrar un mensaje de confirmación con un título, contenido y y un formulario personalizable.\r\n *\r\n * @returns Devuelve mediante un observable la notificación de cierre del diálogo con los datos del formulario.\r\n */\r\n@Component({\r\n selector: 'oat-form-dialog',\r\n templateUrl: './form-dialog.component.html',\r\n styleUrl: './form-dialog.component.scss',\r\n imports: [\r\n FormsModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatHint,\r\n MatButton,\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FormDialogComponent {\r\n public dialogRef: MatDialogRef<FormDialogComponent> = inject(MatDialogRef);\r\n\r\n public title: WritableSignal<string> = signal<string>('');\r\n public content: WritableSignal<string> = signal<string>('');\r\n public fields: WritableSignal<DialogField[]> = signal<DialogField[]>([]);\r\n public ok: WritableSignal<string> = signal<string>('Continuar');\r\n public cancel: WritableSignal<string> = signal<string>('Cancelar');\r\n\r\n public closeDialog: (result?: DialogField[]) => void = (result?: DialogField[]): void => {\r\n this.dialogRef.close(result);\r\n };\r\n\r\n /**\r\n * Método para validar el formulario.\r\n * Comprueba si todos los campos requeridos tienen un valor no vacío.\r\n * @returns Devuelve true si el formulario es válido, false en caso contrario.\r\n */\r\n isFormValid(): boolean {\r\n return this.fields().every((field: DialogField): boolean => {\r\n return !field.required || Boolean(field.value && field.value.trim() !== '');\r\n });\r\n }\r\n\r\n close(result?: DialogField[]): void {\r\n this.closeDialog(result);\r\n }\r\n}\r\n","<h1 mat-dialog-title>{{ title() }}</h1>\r\n<div mat-dialog-content>\r\n\t<p>{{ content() }}</p>\r\n\t@for (field of fields(); track field.title) {\r\n\t<p>\r\n\t\t<mat-form-field class=\"dialogs-full-width\">\r\n\t\t\t<mat-label>{{ field.title }}</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\t [type]=\"field.type\"\r\n\t\t\t\t [(ngModel)]=\"field.value\"\r\n\t\t\t\t [required]=\"field.required || false\">\r\n\t\t\t@if (field.hint) {\r\n\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\r\n\t\t\t}\r\n\t\t</mat-form-field>\r\n\t</p>\r\n\t}\r\n</div>\r\n<div mat-dialog-actions\r\n\t align=\"end\">\r\n\t<button type=\"button\"\r\n\t\t\tmat-button\r\n\t\t\t(click)=\"close()\">{{ cancel() }}</button>\r\n\t<button type=\"button\"\r\n\t\t\tmat-flat-button\r\n\t\t\tcolor=\"primary\"\r\n\t\t\t[disabled]=\"!isFormValid()\"\r\n\t\t\t(click)=\"close(fields())\">{{ ok() }}</button>\r\n</div>","import { OverlayRef } from '@angular/cdk/overlay';\r\nimport { Type } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { OverlayCloseEvent } from '../interfaces/modals.interface';\r\n\r\ntype OverlayCloseAnimation = () => Promise<void>;\r\n\r\n/**\r\n * Clase que representa una referencia a un overlay personalizado.\r\n *\r\n * Permite cerrar el overlay y notificar a los suscriptores sobre el evento de cierre.\r\n *\r\n * @template R Tipo de dato de respuesta.\r\n * @template T Tipo de dato pasado al modal.\r\n */\r\nexport class CustomOverlayRef<R = unknown, T = unknown> {\r\n afterClosed$ = new Subject<OverlayCloseEvent<R | null>>();\r\n private closeAnimation: OverlayCloseAnimation | undefined;\r\n private closing: boolean = false;\r\n\r\n constructor(\r\n public overlay: OverlayRef,\r\n public content: Type<unknown>,\r\n public data: T,\r\n public closeOnBackdropCLick: boolean = true,\r\n public from?: HTMLElement,\r\n public animationDuration?: number,\r\n ) {\r\n if (closeOnBackdropCLick) {\r\n overlay.backdropClick().subscribe({\r\n next: (): void => {\r\n void this._close('backdropClick', null);\r\n },\r\n });\r\n }\r\n }\r\n\r\n close(data?: R): void {\r\n void this._close('close', data ?? null);\r\n }\r\n\r\n registerCloseAnimation(closeAnimation: OverlayCloseAnimation): void {\r\n this.closeAnimation = closeAnimation;\r\n }\r\n\r\n private async _close(type: 'backdropClick' | 'close', data: R | null): Promise<void> {\r\n if (this.closing) {\r\n return;\r\n }\r\n\r\n this.closing = true;\r\n\r\n if (this.closeAnimation !== undefined) {\r\n await this.closeAnimation();\r\n }\r\n\r\n this.overlay.dispose();\r\n this.afterClosed$.next({\r\n type,\r\n data,\r\n });\r\n\r\n this.afterClosed$.complete();\r\n }\r\n}\r\n","import { NgComponentOutlet } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n inject,\r\n OnInit,\r\n Renderer2,\r\n Signal,\r\n Type,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { Modal } from '../../interfaces/modals.interface';\r\nimport { CustomOverlayRef } from '../../model/custom-overlay-ref.model';\r\n\r\nconst DEFAULT_OVERLAY_ANIMATION_DURATION: number = 220;\r\n\r\n/**\r\n * Componente para mostrar un componente personalizado en una ventana modal.\r\n *\r\n * @returns Devuelve mediante un observable la notificación de cierre del modal.\r\n */\r\n@Component({\r\n selector: 'oat-overlay',\r\n templateUrl: './overlay.component.html',\r\n styleUrls: ['./overlay.component.scss'],\r\n imports: [MatIcon, MatIconButton, NgComponentOutlet],\r\n})\r\nexport class OverlayComponent implements OnInit, AfterViewInit {\r\n private customOverlayRef: CustomOverlayRef<unknown, Modal> = inject(CustomOverlayRef);\r\n private renderer: Renderer2 = inject(Renderer2);\r\n private modal: Signal<ElementRef<HTMLElement>> = viewChild.required('modal');\r\n\r\n content: Type<unknown> = this.customOverlayRef.content;\r\n inputData: Modal = { modalTitle: '', modalColor: 'blue' };\r\n\r\n ngOnInit(): void {\r\n this.listenToEscKey();\r\n this.inputData = this.customOverlayRef.data;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.customOverlayRef.registerCloseAnimation((): Promise<void> => {\r\n return this.animateClose();\r\n });\r\n\r\n this.animateOpen();\r\n }\r\n\r\n private listenToEscKey(): void {\r\n this.renderer.listen('window', 'keyup', (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape') {\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n close(): void {\r\n this.customOverlayRef.close(null);\r\n }\r\n\r\n private animateOpen(): void {\r\n const modal: HTMLElement = this.modal().nativeElement;\r\n const animationStart: Keyframe | null = this.getOriginKeyframe(modal);\r\n\r\n if (animationStart === null) {\r\n return;\r\n }\r\n\r\n modal.animate(\r\n [\r\n {\r\n ...animationStart,\r\n opacity: 0,\r\n },\r\n {\r\n transform: 'translate(0, 0) scale(1)',\r\n opacity: 1,\r\n },\r\n ],\r\n {\r\n duration: this.getAnimationDuration(),\r\n easing: 'cubic-bezier(0.2, 0, 0, 1)',\r\n },\r\n );\r\n }\r\n\r\n private animateClose(): Promise<void> {\r\n const modal: HTMLElement = this.modal().nativeElement;\r\n const animationEnd: Keyframe | null = this.getOriginKeyframe(modal);\r\n\r\n if (animationEnd === null) {\r\n return Promise.resolve();\r\n }\r\n\r\n modal.style.pointerEvents = 'none';\r\n\r\n const animation: Animation = modal.animate(\r\n [\r\n {\r\n transform: 'translate(0, 0) scale(1)',\r\n opacity: 1,\r\n },\r\n {\r\n ...animationEnd,\r\n opacity: 0,\r\n },\r\n ],\r\n {\r\n duration: this.getCloseAnimationDuration(),\r\n easing: 'cubic-bezier(0.4, 0, 1, 1)',\r\n fill: 'forwards',\r\n },\r\n );\r\n\r\n return new Promise((resolve: () => void): void => {\r\n animation.onfinish = (): void => {\r\n resolve();\r\n };\r\n animation.oncancel = (): void => {\r\n resolve();\r\n };\r\n });\r\n }\r\n\r\n private getOriginKeyframe(modal: HTMLElement): Keyframe | null {\r\n const from: HTMLElement | undefined = this.customOverlayRef.from;\r\n\r\n if (\r\n from === undefined ||\r\n !from.isConnected ||\r\n this.prefersReducedMotion() ||\r\n typeof modal.animate !== 'function'\r\n ) {\r\n return null;\r\n }\r\n\r\n const fromRect: DOMRect = from.getBoundingClientRect();\r\n const modalRect: DOMRect = modal.getBoundingClientRect();\r\n\r\n if (\r\n fromRect.width === 0 ||\r\n fromRect.height === 0 ||\r\n modalRect.width === 0 ||\r\n modalRect.height === 0\r\n ) {\r\n return null;\r\n }\r\n\r\n const fromCenterX: number = fromRect.left + fromRect.width / 2;\r\n const fromCenterY: number = fromRect.top + fromRect.height / 2;\r\n const modalCenterX: number = modalRect.left + modalRect.width / 2;\r\n const modalCenterY: number = modalRect.top + modalRect.height / 2;\r\n const translateX: number = fromCenterX - modalCenterX;\r\n const translateY: number = fromCenterY - modalCenterY;\r\n const scale: number = this.clamp(\r\n Math.min(fromRect.width / modalRect.width, fromRect.height / modalRect.height),\r\n 0.12,\r\n 0.45,\r\n );\r\n\r\n return {\r\n transform: `translate(${translateX}px, ${translateY}px) scale(${scale})`,\r\n transformOrigin: 'center center',\r\n };\r\n }\r\n\r\n private getAnimationDuration(): number {\r\n return this.clamp(\r\n this.customOverlayRef.animationDuration ?? DEFAULT_OVERLAY_ANIMATION_DURATION,\r\n 0,\r\n 5000,\r\n );\r\n }\r\n\r\n private getCloseAnimationDuration(): number {\r\n return Math.round(this.getAnimationDuration() * 0.82);\r\n }\r\n\r\n private prefersReducedMotion(): boolean {\r\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n }\r\n\r\n private clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n}\r\n","<div #modal\r\n\t [class]=\"'modal ' + (inputData.css ? inputData.css : '')\">\r\n\t<div [class]=\"'modal__header modal__header--' + inputData.modalColor\">\r\n\t\t<div class=\"title\">{{ inputData.modalTitle }}</div>\r\n\t\t@if (!inputData.hideCloseBtn) {\r\n\t\t<button mat-icon-button\r\n\t\t\t\tclass=\"btn-close\"\r\n\t\t\t\t(click)=\"close()\">\r\n\t\t\t<mat-icon>close</mat-icon>\r\n\t\t</button>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<div [class]=\"'modal__content ' + inputData.contentCss\">\r\n\t\t<ng-container *ngComponentOutlet=\"content\"></ng-container>\r\n\t</div>\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n inject,\r\n OnDestroy,\r\n output,\r\n OutputEmitterRef,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { SwipeData } from '../interfaces/swipe.interface';\r\n\r\n/**\r\n * Directiva para detectar gestos de deslizamiento (swipe) en un elemento.\r\n *\r\n * Permite detectar deslizamientos tanto en dispositivos táctiles como con ratón.\r\n *\r\n * @returns Devuelve un observable que emite los datos del deslizamiento (deltaX y deltaY).\r\n */\r\n@Directive({\r\n selector: '[oatSwipe]',\r\n host: {\r\n '(touchstart)': 'onTouchStart($event)',\r\n '(touchend)': 'onTouchEnd($event)',\r\n '(mousedown)': 'onMouseDown($event)',\r\n '(mouseup)': 'onMouseUp($event)',\r\n },\r\n})\r\nexport class SwipeDirective implements OnDestroy {\r\n private el: ElementRef = inject(ElementRef);\r\n private renderer: Renderer2 = inject(Renderer2);\r\n swipeEnd: OutputEmitterRef<SwipeData> = output<SwipeData>();\r\n\r\n private startX: number = 0;\r\n private startY: number = 0;\r\n\r\n private touchStartListener: () => void;\r\n private touchEndListener: () => void;\r\n private mouseDownListener: () => void;\r\n private mouseUpListener: () => void;\r\n\r\n constructor() {\r\n this.touchStartListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'touchstart',\r\n (event: TouchEvent): void => this.onTouchStart(event),\r\n );\r\n this.touchEndListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'touchend',\r\n (event: TouchEvent): void => this.onTouchEnd(event),\r\n );\r\n this.mouseDownListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'mousedown',\r\n (event: MouseEvent): void => this.onMouseDown(event),\r\n );\r\n this.mouseUpListener = this.renderer.listen(\r\n this.el.nativeElement,\r\n 'mouseup',\r\n (event: MouseEvent): void => this.onMouseUp(event),\r\n );\r\n }\r\n\r\n onTouchStart(event: TouchEvent): void {\r\n this.startX = event.touches[0].clientX;\r\n this.startY = event.touches[0].clientY;\r\n }\r\n\r\n onTouchEnd(event: TouchEvent): void {\r\n const endX: number = event.changedTouches[0].clientX;\r\n const endY: number = event.changedTouches[0].clientY;\r\n const deltaX: number = endX - this.startX;\r\n const deltaY: number = endY - this.startY;\r\n\r\n this.swipeEnd.emit({ x: deltaX, y: deltaY });\r\n }\r\n\r\n onMouseDown(event: MouseEvent): void {\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n }\r\n\r\n onMouseUp(event: MouseEvent): void {\r\n const endX: number = event.clientX;\r\n const endY: number = event.clientY;\r\n const deltaX: number = endX - this.startX;\r\n const deltaY: number = endY - this.startY;\r\n\r\n this.swipeEnd.emit({ x: deltaX, y: deltaY });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.touchStartListener();\r\n this.touchEndListener();\r\n this.mouseDownListener();\r\n this.mouseUpListener();\r\n }\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { inject, Injectable, PLATFORM_ID, Type } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { AlertDialogComponent } from '../components/dialogs/alert-dialog/alert-dialog.component';\r\nimport { ConfirmDialogComponent } from '../components/dialogs/confirm-dialog/confirm-dialog.component';\r\nimport { FormDialogComponent } from '../components/dialogs/form-dialog/form-dialog.component';\r\nimport { DialogField, DialogOptions } from '../interfaces/dialogs.interface';\r\n\r\ntype DialogResult = boolean | DialogField[] | undefined;\r\nconst DEFAULT_DIALOG_ANIMATION_DURATION: number = 220;\r\n\r\n/**\r\n * Servicio para manejar diálogos en la aplicación.\r\n *\r\n * Permite abrir diálogos de alerta, confirmación y formularios personalizados.\r\n *\r\n * Cada método devuelve un observable que emite el resultado del diálogo al cerrarse.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DialogService {\r\n private dialog: MatDialog = inject(MatDialog);\r\n private document: Document = inject(DOCUMENT);\r\n private platformId: object = inject(PLATFORM_ID);\r\n\r\n private static dialogId: number = 0;\r\n\r\n /**\r\n * Método para mostrar un diálogo de alerta.\r\n * @param options Datos a mostrar en el diálogo, incluyendo título, contenido y texto del botón de confirmación (opcional).\r\n * @returns Devuelve un observable para notificar el cierre del diálogo.\r\n */\r\n public alert(options: DialogOptions): Observable<boolean> {\r\n const dialogRef: MatDialogRef<AlertDialogComponent> = this.openDialog(\r\n AlertDialogComponent,\r\n options,\r\n );\r\n\r\n dialogRef.componentInstance.title.set(options.title);\r\n dialogRef.componentInstance.content.set(options.content);\r\n if (options.ok !== undefined) {\r\n dialogRef.componentInstance.ok.set(options.ok);\r\n }\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n /**\r\n * Método para mostrar un diálogo de confirmación.\r\n * @param options Datos a mostrar en el diálogo, incluyendo título, contenido, si es una advertencia (opcional) y textos para los botones de acción (opcionales).\r\n * @returns Devuelve un observable para notificar el cierre del diálogo con el valor true para diálogo aceptado y false para diálogo cancelado.\r\n */\r\n public confirm(options: DialogOptions): Observable<boolean> {\r\n const dialogRef: MatDialogRef<ConfirmDialogComponent> = this.openDialog(\r\n ConfirmDialogComponent,\r\n options,\r\n );\r\n\r\n dialogRef.componentInstance.title.set(options.title);\r\n dialogRef.componentInstance.content.set(options.content);\r\n if (options.warn !== undefined) {\r\n dialogRef.componentInstance.warn.set(options.warn);\r\n }\r\n if (options.ok !== undefined) {\r\n dialogRef.componentInstance.ok.set(options.ok);\r\n }\r\n if (options.cancel !== undefined) {\r\n dialogRef.componentInstance.cancel.set(options.cancel);\r\n }\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n /**\r\n * Método para mostrar un diálogo con un formulario personalizado.\r\n * @param options Datos a mostrar en el diálogo, incluyendo título, campos a rellenar y textos para los botones de acción (opcionales).\r\n * @returns Devuelve un observable para notificar el cierre del diálogo con los valores introducidos en el formulario.\r\n */\r\n public form(options: DialogOptions): Observable<DialogField[]> {\r\n const dialogRef: MatDialogRef<FormDialogComponent> = this.openDialog(\r\n FormDialogComponent,\r\n options,\r\n );\r\n\r\n dialogRef.componentInstance.title.set(options.title);\r\n dialogRef.componentInstance.content.set(options.content);\r\n if (options.ok !== undefined) {\r\n dialogRef.componentInstance.ok.set(options.ok);\r\n }\r\n if (options.cancel !== undefined) {\r\n dialogRef.componentInstance.cancel.set(options.cancel);\r\n }\r\n if (options.fields !== undefined) {\r\n dialogRef.componentInstance.fields.set(options.fields);\r\n }\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n private openDialog<TComponent>(\r\n component: Type<TComponent>,\r\n options: DialogOptions,\r\n ): MatDialogRef<TComponent> {\r\n const panelClass: string | undefined =\r\n options.from !== undefined ? this.getPanelClass() : undefined;\r\n const dialogConfig: MatDialogConfig = {};\r\n\r\n if (panelClass !== undefined) {\r\n dialogConfig.panelClass = panelClass;\r\n dialogConfig.disableClose = true;\r\n dialogConfig.enterAnimationDuration = '0ms';\r\n dialogConfig.exitAnimationDuration = '0ms';\r\n }\r\n\r\n const dialogRef: MatDialogRef<TComponent> = this.dialog.open(component, dialogConfig);\r\n\r\n const animationDuration: number = this.getAnimationDuration(options);\r\n\r\n this.configureDialogClose(dialogRef, panelClass, options.from, animationDuration);\r\n\r\n if (panelClass !== undefined && options.from !== undefined) {\r\n this.prepareDialogOpen(panelClass);\r\n this.animateDialogOpen(panelClass, options.from, animationDuration);\r\n }\r\n\r\n return dialogRef;\r\n }\r\n\r\n private configureDialogClose<TComponent>(\r\n dialogRef: MatDialogRef<TComponent>,\r\n panelClass: string | undefined,\r\n from: HTMLElement | undefined,\r\n animationDuration: number,\r\n ): void {\r\n let closing: boolean = false;\r\n const closeDialog = (result?: DialogResult): void => {\r\n if (closing) {\r\n return;\r\n }\r\n\r\n closing = true;\r\n void this.closeDialog(dialogRef, panelClass, from, animationDuration, result);\r\n };\r\n\r\n (\r\n dialogRef.componentInstance as TComponent & {\r\n closeDialog?: (result?: DialogResult) => void;\r\n }\r\n ).closeDialog = closeDialog;\r\n\r\n if (panelClass === undefined || from === undefined) {\r\n return;\r\n }\r\n\r\n dialogRef.backdropClick().subscribe({\r\n next: (): void => {\r\n closeDialog();\r\n },\r\n });\r\n\r\n dialogRef.keydownEvents().subscribe({\r\n next: (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape') {\r\n closeDialog();\r\n }\r\n },\r\n });\r\n }\r\n\r\n private getPanelClass(): string {\r\n DialogService.dialogId++;\r\n return `oat-dialog-from-${DialogService.dialogId}`;\r\n }\r\n\r\n private animateDialogOpen(\r\n panelClass: string,\r\n from: HTMLElement,\r\n animationDuration: number,\r\n ): void {\r\n this.runAfterRender((): void => {\r\n const panel: HTMLElement | null = this.getPanel(panelClass);\r\n const animationStart: Keyframe | null = this.getOriginKeyframe(panel, from);\r\n\r\n if (panel === null || animationStart === null) {\r\n if (panel !== null) {\r\n panel.style.opacity = '';\r\n }\r\n return;\r\n }\r\n\r\n const animation: Animation = panel.animate(\r\n [\r\n {\r\n ...animationStart,\r\n opacity: 0,\r\n },\r\n {\r\n transform: 'translate(0, 0) scale(1)',\r\n opacity: 1,\r\n },\r\n ],\r\n {\r\n duration: animationDuration,\r\n easing: 'cubic-bezier(0.2, 0, 0, 1)',\r\n },\r\n );\r\n\r\n animation.onfinish = (): void => {\r\n panel.style.opacity = '';\r\n };\r\n animation.oncancel = (): void => {\r\n panel.style.opacity = '';\r\n };\r\n });\r\n }\r\n\r\n private prepareDialogOpen(panelClass: string): void {\r\n if (!this.canAnimate()) {\r\n return;\r\n }\r\n\r\n const panel: HTMLElement | null = this.getPanel(panelClass);\r\n\r\n if (panel !== null) {\r\n panel.style.opacity = '0';\r\n }\r\n }\r\n\r\n private async closeDialog<TComponent>(\r\n dialogRef: MatDialogRef<TComponent>,\r\n panelClass: string | undefined,\r\n from: HTMLElement | undefined,\r\n animationDuration: number,\r\n result?: DialogResult,\r\n ): Promise<void> {\r\n if (panelClass === undefined || from === undefined) {\r\n dialogRef.close(result);\r\n return;\r\n }\r\n\r\n const panel: HTMLElement | null = this.getPanel(panelClass);\r\n const animationEnd: Keyframe | null = this.getOriginKeyframe(panel, from);\r\n\r\n if (panel === null || animationEnd === null) {\r\n dialogRef.close(result);\r\n return;\r\n }\r\n\r\n await this.animatePanelClose(\r\n panel,\r\n animationEnd,\r\n this.getCloseAnimationDuration(animationDuration),\r\n );\r\n dialogRef.close(result);\r\n }\r\n\r\n private animatePanelClose(\r\n panel: HTMLElement,\r\n animationEnd: Keyframe,\r\n animationDuration: number,\r\n ): Promise<void> {\r\n panel.style.pointerEvents = 'none';\r\n\r\n const animation: Animation = panel.animate(\r\n [\r\n {\r\n transform: 'translate(0, 0) scale(1)',\r\n opacity: 1,\r\n },\r\n {\r\n ...animationEnd,\r\n opacity: 0,\r\n },\r\n ],\r\n {\r\n duration: animationDuration,\r\n easing: 'cubic-bezier(0.4, 0, 1, 1)',\r\n fill: 'forwards',\r\n },\r\n );\r\n\r\n return new Promise((resolve: () => void): void => {\r\n animation.onfinish = (): void => {\r\n resolve();\r\n };\r\n animation.oncancel = (): void => {\r\n resolve();\r\n };\r\n });\r\n }\r\n\r\n private getOriginKeyframe(panel: HTMLElement | null, from: HTMLElement): Keyframe | null {\r\n if (\r\n panel === null ||\r\n !this.canAnimate() ||\r\n !from.isConnected ||\r\n typeof panel.animate !== 'function'\r\n ) {\r\n return null;\r\n }\r\n\r\n const fromRect: DOMRect = from.getBoundingClientRect();\r\n const panelRect: DOMRect = panel.getBoundingClientRect();\r\n\r\n if (\r\n fromRect.width === 0 ||\r\n fromRect.height === 0 ||\r\n panelRect.width === 0 ||\r\n panelRect.height === 0\r\n ) {\r\n return null;\r\n }\r\n\r\n const fromCenterX: number = fromRect.left + fromRect.width / 2;\r\n const fromCenterY: number = fromRect.top + fromRect.height / 2;\r\n const panelCenterX: number = panelRect.left + panelRect.width / 2;\r\n const panelCenterY: number = panelRect.top + panelRect.height / 2;\r\n const translateX: number = fromCenterX - panelCenterX;\r\n const translateY: number = fromCenterY - panelCenterY;\r\n const scale: number = this.clamp(\r\n Math.min(fromRect.width / panelRect.width, fromRect.height / panelRect.height),\r\n 0.12,\r\n 0.45,\r\n );\r\n\r\n return {\r\n transform: `translate(${translateX}px, ${translateY}px) scale(${scale})`,\r\n transformOrigin: 'center center',\r\n };\r\n }\r\n\r\n private getPanel(panelClass: string): HTMLElement | null {\r\n if (!isPlatformBrowser(this.platformId)) {\r\n return null;\r\n }\r\n\r\n return this.document.querySelector<HTMLElement>(`.${panelClass}`);\r\n }\r\n\r\n private canAnimate(): boolean {\r\n if (!isPlatformBrowser(this.platformId)) {\r\n return false;\r\n }\r\n\r\n const defaultView: Window | null = this.document.defaultView;\r\n\r\n return (\r\n defaultView !== null && !defaultView.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n );\r\n }\r\n\r\n private runAfterRender(callback: () => void): void {\r\n const defaultView: Window | null = this.document.defaultView;\r\n\r\n if (!isPlatformBrowser(this.platformId) || defaultView === null) {\r\n callback();\r\n return;\r\n }\r\n\r\n defaultView.requestAnimationFrame((): void => {\r\n defaultView.requestAnimationFrame(callback);\r\n });\r\n }\r\n\r\n private clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n private getAnimationDuration(options: DialogOptions): number {\r\n return this.clamp(\r\n options.animationDuration ?? DEFAULT_DIALOG_ANIMATION_DURATION,\r\n 0,\r\n 5000,\r\n );\r\n }\r\n\r\n private getCloseAnimationDuration(animationDuration: number): number {\r\n return Math.round(animationDuration * 0.82);\r\n }\r\n}\r\n","import { Overlay, OverlayConfig } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { inject, Injectable, Injector, Type } from '@angular/core';\r\nimport { OverlayComponent } from '../components/overlay/overlay.component';\r\nimport { Modal } from '../interfaces/modals.interface';\r\nimport { CustomOverlayRef } from '../model/custom-overlay-ref.model';\r\n\r\n/**\r\n * Servicio para manejar modales personalizados en la aplicación.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class OverlayService {\r\n private overlay: Overlay = inject(Overlay);\r\n private injector: Injector = inject(Injector);\r\n\r\n /**\r\n * Método para abrir un componente personalizado en un modal.\r\n * @param content Componente a mostrar en el overlay.\r\n * @param data Datos a pasar al componente del overlay.\r\n * @param panelCssClasses Clases CSS adicionales para el panel del overlay (opcional).\r\n * @param closeOnBackdropCLick Indica si el overlay se cierra al hacer clic en el fondo (opcional, por defecto true).\r\n * @param from Elemento desde el que se anima la apertura y cierre del overlay (opcional).\r\n * @param animationDuration Duración de la animación en milisegundos (opcional).\r\n * @returns Devuelve una referencia personalizada del overlay.\r\n */\r\n open<R = unknown>(\r\n content: Type<unknown>,\r\n data: Modal,\r\n panelCssClasses: string[] = [],\r\n closeOnBackdropCLick: boolean = true,\r\n from?: HTMLElement,\r\n animationDuration?: number\r\n ): CustomOverlayRef<R> {\r\n const _panelCssClasses: string[] = ['modals-panel'].concat(panelCssClasses);\r\n const config = new OverlayConfig({\r\n hasBackdrop: true,\r\n panelClass: _panelCssClasses,\r\n backdropClass: 'modals-background',\r\n width: '100%',\r\n height: '100%',\r\n });\r\n\r\n const overlayRef = this.overlay.create(config);\r\n\r\n const customOverlayRef = new CustomOverlayRef<R, Modal>(\r\n overlayRef,\r\n content,\r\n data,\r\n closeOnBackdropCLick,\r\n from,\r\n animationDuration\r\n );\r\n const injector = this.createInjector(customOverlayRef, this.injector);\r\n overlayRef.attach(new ComponentPortal(OverlayComponent, null, injector));\r\n\r\n return customOverlayRef;\r\n }\r\n\r\n private createInjector<R>(\r\n ref: CustomOverlayRef<R, Modal>,\r\n inj: Injector\r\n ): Injector {\r\n return Injector.create({\r\n providers: [{ provide: CustomOverlayRef, useValue: ref }],\r\n parent: inj,\r\n });\r\n }\r\n}\r\n","/*\r\n * Public API Surface of osumi-angular-tools\r\n */\r\nexport * from './lib/components/dialogs/alert-dialog/alert-dialog.component';\r\nexport * from './lib/components/dialogs/confirm-dialog/confirm-dialog.component';\r\nexport * from './lib/components/dialogs/form-dialog/form-dialog.component';\r\nexport * from './lib/components/overlay/overlay.component';\r\nexport * from './lib/directives/swipe.directive';\r\nexport * from './lib/interfaces/dialogs.interface';\r\nexport * from './lib/interfaces/modals.interface';\r\nexport * from './lib/interfaces/swipe.interface';\r\nexport * from './lib/model/custom-overlay-ref.model';\r\nexport * from './lib/services/dialog.service';\r\nexport * from './lib/services/overlay.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osumi/angular-tools",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "Tools to be used on Angular projects.",
|
|
5
5
|
"author": "Iñigo Gorosabel",
|
|
6
6
|
"license": "MIT",
|
|
@@ -8,19 +8,19 @@
|
|
|
8
8
|
"url": "https://github.com/osumionline/Osumi-Angular-Tools/issues"
|
|
9
9
|
},
|
|
10
10
|
"homepage": "https://github.com/osumionline/Osumi-Angular-Tools#readme",
|
|
11
|
-
"
|
|
11
|
+
"type": "module",
|
|
12
12
|
"module": "fesm2022/osumi-angular-tools.mjs",
|
|
13
13
|
"types": "index.d.ts",
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"@angular/common": "^
|
|
16
|
-
"@angular/core": "^
|
|
17
|
-
"@angular/forms": "^
|
|
18
|
-
"@angular/material": "^
|
|
19
|
-
"@angular/cdk": "^
|
|
15
|
+
"@angular/common": "^22.0.0",
|
|
16
|
+
"@angular/core": "^22.0.0",
|
|
17
|
+
"@angular/forms": "^22.0.0",
|
|
18
|
+
"@angular/material": "^22.0.0",
|
|
19
|
+
"@angular/cdk": "^22.0.0",
|
|
20
20
|
"rxjs": "~7.8.2"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@angular-devkit/schematics": "^
|
|
23
|
+
"@angular-devkit/schematics": "^22.0.0",
|
|
24
24
|
"tslib": "^2.8.1"
|
|
25
25
|
},
|
|
26
26
|
"sideEffects": false,
|
|
@@ -61,6 +61,5 @@
|
|
|
61
61
|
"default": "./fesm2022/osumi-angular-tools.mjs"
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
|
-
"typings": "types/osumi-angular-tools.d.ts"
|
|
65
|
-
"type": "module"
|
|
64
|
+
"typings": "types/osumi-angular-tools.d.ts"
|
|
66
65
|
}
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"schematics": {
|
|
4
4
|
"ng-add": {
|
|
5
5
|
"description": "Adds Osumi Angular Tools to the project.",
|
|
6
|
-
"factory": "./ng-add/index.cjs#ngAdd",
|
|
6
|
+
"factory": "./ng-add/index.cjs#ngAdd",
|
|
7
7
|
"schema": "./ng-add/schema.json"
|
|
8
8
|
},
|
|
9
9
|
"ng-update": {
|
|
10
10
|
"description": "Update to the latest version of Osumi Angular Tools.",
|
|
11
|
-
"factory": "./ng-update/index.cjs#ngUpdate",
|
|
11
|
+
"factory": "./ng-update/index.cjs#ngUpdate",
|
|
12
12
|
"schema": "./ng-update/schema.json"
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -4,87 +4,97 @@
|
|
|
4
4
|
"osumi-angular-tools-1-0-15": {
|
|
5
5
|
"description": "Pruebas de ng-update",
|
|
6
6
|
"version": "1.0.15",
|
|
7
|
-
"factory": "./noop/index.cjs#noop"
|
|
7
|
+
"factory": "./noop/index.cjs#noop"
|
|
8
8
|
},
|
|
9
9
|
"osumi-angular-tools-1-0-16": {
|
|
10
10
|
"description": "Pruebas de ng-update 1.0.16",
|
|
11
11
|
"version": "1.0.16",
|
|
12
|
-
"factory": "./noop/index.cjs#noop"
|
|
12
|
+
"factory": "./noop/index.cjs#noop"
|
|
13
13
|
},
|
|
14
14
|
"osumi-angular-tools-1-0-17": {
|
|
15
15
|
"description": "Pruebas de ng-update 1.0.17",
|
|
16
16
|
"version": "1.0.17",
|
|
17
|
-
"factory": "./noop/index.cjs#noop"
|
|
17
|
+
"factory": "./noop/index.cjs#noop"
|
|
18
18
|
},
|
|
19
19
|
"osumi-angular-tools-1-0-18": {
|
|
20
20
|
"description": "Pruebas de ng-update 1.0.18",
|
|
21
21
|
"version": "1.0.18",
|
|
22
|
-
"factory": "./noop/index.cjs#noop"
|
|
22
|
+
"factory": "./noop/index.cjs#noop"
|
|
23
23
|
},
|
|
24
24
|
"osumi-angular-tools-1-1-0": {
|
|
25
25
|
"description": "Primera versión estable con soporte para ng-add y ng-update",
|
|
26
26
|
"version": "1.1.0",
|
|
27
|
-
"factory": "./noop/index.cjs#noop"
|
|
27
|
+
"factory": "./noop/index.cjs#noop"
|
|
28
28
|
},
|
|
29
29
|
"osumi-angular-tools-1-1-1": {
|
|
30
30
|
"description": "Correcciones de ESLint y primera versión de Swipe",
|
|
31
31
|
"version": "1.1.1",
|
|
32
|
-
"factory": "./noop/index.cjs#noop"
|
|
32
|
+
"factory": "./noop/index.cjs#noop"
|
|
33
33
|
},
|
|
34
34
|
"osumi-angular-tools-1-1-2": {
|
|
35
35
|
"description": "Swipe simplificado",
|
|
36
36
|
"version": "1.1.2",
|
|
37
|
-
"factory": "./noop/index.cjs#noop"
|
|
37
|
+
"factory": "./noop/index.cjs#noop"
|
|
38
38
|
},
|
|
39
39
|
"osumi-angular-tools-1-1-3": {
|
|
40
40
|
"description": "Pruebas para propagación de eventos en Swipe",
|
|
41
41
|
"version": "1.1.3",
|
|
42
|
-
"factory": "./noop/index.cjs#noop"
|
|
42
|
+
"factory": "./noop/index.cjs#noop"
|
|
43
43
|
},
|
|
44
44
|
"osumi-angular-tools-1-1-4": {
|
|
45
45
|
"description": "Corrección en iconos de cabeceras de modales",
|
|
46
46
|
"version": "1.1.4",
|
|
47
|
-
"factory": "./noop/index.cjs#noop"
|
|
47
|
+
"factory": "./noop/index.cjs#noop"
|
|
48
48
|
},
|
|
49
49
|
"osumi-angular-tools-1-1-5": {
|
|
50
50
|
"description": "Corrección en iconos de cabeceras de modales",
|
|
51
51
|
"version": "1.1.5",
|
|
52
|
-
"factory": "./noop/index.cjs#noop"
|
|
52
|
+
"factory": "./noop/index.cjs#noop"
|
|
53
53
|
},
|
|
54
54
|
"osumi-angular-tools-1-1-6": {
|
|
55
55
|
"description": "Corrección en resultado de diálogos con formulario y opción required",
|
|
56
|
-
"version": "1.1.
|
|
57
|
-
"factory": "./noop/index.cjs#noop"
|
|
56
|
+
"version": "1.1.6",
|
|
57
|
+
"factory": "./noop/index.cjs#noop"
|
|
58
58
|
},
|
|
59
59
|
"osumi-angular-tools-1-2-2": {
|
|
60
60
|
"description": "Refactorización de variables CSS para evitar colisiones y documentación de todos los componentes, métodos y servicios",
|
|
61
61
|
"version": "1.2.2",
|
|
62
|
-
"factory": "./noop/index.cjs#noop"
|
|
62
|
+
"factory": "./noop/index.cjs#noop"
|
|
63
63
|
},
|
|
64
64
|
"osumi-angular-tools-1-2-3": {
|
|
65
65
|
"description": "Corrección en diálogos de tipo formulario",
|
|
66
66
|
"version": "1.2.3",
|
|
67
|
-
"factory": "./noop/index.cjs#noop"
|
|
67
|
+
"factory": "./noop/index.cjs#noop"
|
|
68
68
|
},
|
|
69
69
|
"osumi-angular-tools-1-3-0": {
|
|
70
70
|
"description": "Actualización a Angular 21",
|
|
71
71
|
"version": "1.3.0",
|
|
72
|
-
"factory": "./noop/index.cjs#noop"
|
|
72
|
+
"factory": "./noop/index.cjs#noop"
|
|
73
73
|
},
|
|
74
74
|
"osumi-angular-tools-1-4-0": {
|
|
75
75
|
"description": "Animaciones en diálogos",
|
|
76
76
|
"version": "1.4.0",
|
|
77
|
-
"factory": "./noop/index.cjs#noop"
|
|
77
|
+
"factory": "./noop/index.cjs#noop"
|
|
78
78
|
},
|
|
79
79
|
"osumi-angular-tools-1-4-1": {
|
|
80
80
|
"description": "Corrección del empaquetado de migraciones",
|
|
81
81
|
"version": "1.4.1",
|
|
82
|
-
"factory": "./noop/index.cjs#noop"
|
|
83
|
-
},
|
|
84
|
-
"osumi-angular-tools-1-4-2": {
|
|
85
|
-
"description": "Uso de extension cjs para migraciones",
|
|
86
|
-
"version": "1.4.2",
|
|
87
|
-
"factory": "./noop/index.cjs#noop"
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
82
|
+
"factory": "./noop/index.cjs#noop"
|
|
83
|
+
},
|
|
84
|
+
"osumi-angular-tools-1-4-2": {
|
|
85
|
+
"description": "Uso de extension cjs para migraciones",
|
|
86
|
+
"version": "1.4.2",
|
|
87
|
+
"factory": "./noop/index.cjs#noop"
|
|
88
|
+
},
|
|
89
|
+
"osumi-angular-tools-1-5-0": {
|
|
90
|
+
"description": "Actualización a Angular 22",
|
|
91
|
+
"version": "1.5.0",
|
|
92
|
+
"factory": "./noop/index.cjs#noop"
|
|
93
|
+
},
|
|
94
|
+
"osumi-angular-tools-1-5-1": {
|
|
95
|
+
"description": "Corrección para ng update",
|
|
96
|
+
"version": "1.5.1",
|
|
97
|
+
"factory": "./noop/index.cjs#noop"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|