@osumi/angular-tools 1.4.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
25
- content = signal('', ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
26
- ok = signal('Continuar', ...(ngDevMode ? [{ debugName: "ok" }] : /* istanbul ignore next */ []));
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: "21.2.13", ngImport: i0, type: AlertDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.13", 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\"\n\t\t\tmat-flat-button\n\t\t\tcolor=\"primary\"\n\t\t\t(click)=\"close(true)\">{{ ok() }}</button>\n</div>\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"] }] });
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: "21.2.13", ngImport: i0, type: AlertDialogComponent, decorators: [{
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('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
51
- content = signal('', ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
52
- warn = signal(false, ...(ngDevMode ? [{ debugName: "warn" }] : /* istanbul ignore next */ []));
53
- ok = signal('Continuar', ...(ngDevMode ? [{ debugName: "ok" }] : /* istanbul ignore next */ []));
54
- cancel = signal('Cancelar', ...(ngDevMode ? [{ debugName: "cancel" }] : /* istanbul ignore next */ []));
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: "21.2.13", ngImport: i0, type: ConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
62
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.13", 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\"\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"], 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 });
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: "21.2.13", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
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('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
85
- content = signal('', ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
86
- fields = signal([], ...(ngDevMode ? [{ debugName: "fields" }] : /* istanbul ignore next */ []));
87
- ok = signal('Continuar', ...(ngDevMode ? [{ debugName: "ok" }] : /* istanbul ignore next */ []));
88
- cancel = signal('Cancelar', ...(ngDevMode ? [{ debugName: "cancel" }] : /* istanbul ignore next */ []));
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 (!field.required || Boolean(field.value && field.value.trim() !== ''));
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: "21.2.13", ngImport: i0, type: FormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
106
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", 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\"\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", styles: [".dialogs-full-width{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: 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 });
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: "21.2.13", ngImport: i0, type: FormDialogComponent, decorators: [{
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>\n", styles: [".dialogs-full-width{width:100%}\n"] }]
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: "21.2.13", ngImport: i0, type: OverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
303
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: OverlayComponent, isStandalone: true, selector: "oat-overlay", viewQueries: [{ propertyName: "modal", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, 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"], 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"] }] });
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: "21.2.13", ngImport: i0, type: OverlayComponent, decorators: [{
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: "21.2.13", ngImport: i0, type: SwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
362
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", 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 });
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: "21.2.13", ngImport: i0, type: SwipeDirective, decorators: [{
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: "21.2.13", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
632
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: DialogService, providedIn: 'root' });
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: "21.2.13", ngImport: i0, type: DialogService, decorators: [{
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: "21.2.13", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
677
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: OverlayService, providedIn: 'root' });
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: "21.2.13", ngImport: i0, type: OverlayService, decorators: [{
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.4.2",
3
+ "version": "1.5.0",
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
- "main": "fesm2022/osumi-angular-tools.mjs",
11
+ "type": "module",
12
12
  "module": "fesm2022/osumi-angular-tools.mjs",
13
13
  "types": "index.d.ts",
14
14
  "peerDependencies": {
15
- "@angular/common": "^21.0.0",
16
- "@angular/core": "^21.0.0",
17
- "@angular/forms": "^21.0.0",
18
- "@angular/material": "^21.0.0",
19
- "@angular/cdk": "^21.0.0",
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": "^21.0.0",
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,92 @@
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.5",
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
+ }
95
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../../../../../projects/osumi-angular-tools/schematics/migrations/noop/index.ts"],"names":[],"mappings":";;AAEA,oBAIC;AAJD,SAAgB,IAAI,CAAC,KAAW,EAAE,QAA0B;IAC1D,OAAO,CAAC,KAAW,EAAE,EAAE;QACrB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../../../../projects/osumi-angular-tools/schematics/ng-add/index.ts"],"names":[],"mappings":";;AAEA,sBAEC;AAJD,2DAAyD;AAEzD,SAAgB,KAAK;IACnB,OAAO,IAAA,kBAAK,EAAC,CAAC,IAAA,iBAAI,GAAE,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../../../../projects/osumi-angular-tools/schematics/ng-update/index.ts"],"names":[],"mappings":";;AAEA,4BAEC;AAJD,2DAAkD;AAElD,SAAgB,QAAQ;IACtB,OAAO,IAAA,iBAAI,GAAE,CAAC;AAChB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../../projects/osumi-angular-tools/schematics/migrations/noop/index.ts"],"names":[],"mappings":";;AAEA,oBAIC;AAJD,SAAgB,IAAI,CAAC,KAAW,EAAE,QAA0B;IAC1D,OAAO,CAAC,KAAW,EAAE,EAAE;QACrB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../projects/osumi-angular-tools/schematics/ng-add/index.ts"],"names":[],"mappings":";;AAEA,sBAEC;AAJD,2DAAyD;AAEzD,SAAgB,KAAK;IACnB,OAAO,IAAA,kBAAK,EAAC,CAAC,IAAA,iBAAI,GAAE,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../projects/osumi-angular-tools/schematics/ng-update/index.ts"],"names":[],"mappings":";;AAEA,4BAEC;AAJD,2DAAkD;AAElD,SAAgB,QAAQ;IACtB,OAAO,IAAA,iBAAI,GAAE,CAAC;AAChB,CAAC"}