@jvsoft/components 0.0.13-alpha.0 → 0.0.13-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dialog-flotante/dialog-flotante.component.d.ts +32 -0
  2. package/dialog-flotante/dialog-flotante.interface.d.ts +11 -0
  3. package/dialog-flotante/index.d.ts +5 -0
  4. package/fesm2022/jvsoft-components-dialog-flotante.mjs +129 -0
  5. package/fesm2022/jvsoft-components-dialog-flotante.mjs.map +1 -0
  6. package/fesm2022/jvsoft-components-lista-arbol.mjs +294 -0
  7. package/fesm2022/jvsoft-components-lista-arbol.mjs.map +1 -0
  8. package/fesm2022/jvsoft-components-luces-navidad.mjs +33 -0
  9. package/fesm2022/jvsoft-components-luces-navidad.mjs.map +1 -0
  10. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs +47 -0
  11. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs.map +1 -0
  12. package/fesm2022/jvsoft-components-menu.mjs +102 -0
  13. package/fesm2022/jvsoft-components-menu.mjs.map +1 -0
  14. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs +91 -0
  15. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs.map +1 -0
  16. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs +1798 -0
  17. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs.map +1 -0
  18. package/fesm2022/jvsoft-components.mjs +2333 -0
  19. package/fesm2022/jvsoft-components.mjs.map +1 -0
  20. package/{index.ts → index.d.ts} +1 -8
  21. package/lista-arbol/index.d.ts +5 -0
  22. package/lista-arbol/lista-arbol.component.d.ts +59 -0
  23. package/lista-arbol/lista-arbol.functions.d.ts +8 -0
  24. package/luces-navidad/index.d.ts +5 -0
  25. package/luces-navidad/luces-navidad.component.d.ts +11 -0
  26. package/mat-suffix-search-button/index.d.ts +5 -0
  27. package/mat-suffix-search-button/mat-suffix-search-button.component.d.ts +12 -0
  28. package/menu/index.d.ts +5 -0
  29. package/menu/menu.component.d.ts +25 -0
  30. package/menu/menu.interface.d.ts +16 -0
  31. package/package.json +45 -13
  32. package/src/styles/base-jvsoft-components.css +9 -0
  33. package/tabla-mantenimiento/classes/data-model.d.ts +25 -0
  34. package/tabla-mantenimiento/components/progress-bar/index.d.ts +5 -0
  35. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.d.ts +30 -0
  36. package/tabla-mantenimiento/components/progress-bar/public-api.d.ts +1 -0
  37. package/tabla-mantenimiento/index.d.ts +5 -0
  38. package/tabla-mantenimiento/interfaces/{archivo.ts → archivo.d.ts} +4 -7
  39. package/tabla-mantenimiento/interfaces/global/{boton-mantenimiento.ts → boton-mantenimiento.d.ts} +3 -9
  40. package/tabla-mantenimiento/interfaces/global/{columnas-tabla.ts → columnas-tabla.d.ts} +12 -89
  41. package/tabla-mantenimiento/interfaces/global/no-export.d.ts +2 -0
  42. package/tabla-mantenimiento/interfaces/global/{otros.ts → otros.d.ts} +3 -15
  43. package/tabla-mantenimiento/interfaces/implements/{incluye-tabla-mantenimiento.ts → incluye-tabla-mantenimiento.d.ts} +4 -6
  44. package/tabla-mantenimiento/interfaces/implements/{index.ts → index.d.ts} +0 -1
  45. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.d.ts +19 -0
  46. package/tabla-mantenimiento/pipes/no-sanitize.pipe.d.ts +10 -0
  47. package/tabla-mantenimiento/pipes/zero-fill.pipe.d.ts +8 -0
  48. package/tabla-mantenimiento/{public-api.ts → public-api.d.ts} +2 -3
  49. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.d.ts +8 -0
  50. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.d.ts +9 -0
  51. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.d.ts +9 -0
  52. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.d.ts +8 -0
  53. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.d.ts +8 -0
  54. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.d.ts +9 -0
  55. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.d.ts +8 -0
  56. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.d.ts +18 -0
  57. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.d.ts +23 -0
  58. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.d.ts +21 -0
  59. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.d.ts +18 -0
  60. package/tabla-mantenimiento/tabla-mantenimiento.component.d.ts +147 -0
  61. package/tabla-mantenimiento/tabla-mantenimiento.functions.d.ts +5 -0
  62. package/tabla-mantenimiento/tabla-mantenimiento.service.d.ts +8 -0
  63. package/tabla-mantenimiento/table-util.d.ts +11 -0
  64. package/CHANGELOG.md +0 -26
  65. package/build.js +0 -20
  66. package/dialog-flotante/dialog-flotante.component.html +0 -66
  67. package/dialog-flotante/dialog-flotante.component.ts +0 -115
  68. package/dialog-flotante/dialog-flotante.interface.ts +0 -13
  69. package/dialog-flotante/index.ts +0 -1
  70. package/dialog-flotante/ng-package.json +0 -5
  71. package/lista-arbol/lista-arbol.component.html +0 -66
  72. package/lista-arbol/lista-arbol.component.ts +0 -238
  73. package/lista-arbol/lista-arbol.functions.ts +0 -46
  74. package/lista-arbol/ng-package.json +0 -5
  75. package/luces-navidad/christmas-tree.png +0 -0
  76. package/luces-navidad/index.ts +0 -1
  77. package/luces-navidad/luces-navidad.component.html +0 -6
  78. package/luces-navidad/luces-navidad.component.ts +0 -24
  79. package/luces-navidad/ng-package.json +0 -5
  80. package/mat-suffix-search-button/index.ts +0 -1
  81. package/mat-suffix-search-button/mat-suffix-search-button.component.html +0 -5
  82. package/mat-suffix-search-button/mat-suffix-search-button.component.ts +0 -36
  83. package/mat-suffix-search-button/ng-package.json +0 -5
  84. package/menu/index.ts +0 -1
  85. package/menu/menu.component.html +0 -40
  86. package/menu/menu.component.ts +0 -88
  87. package/menu/menu.interface.ts +0 -16
  88. package/menu/ng-package.json +0 -5
  89. package/ng-package.json +0 -17
  90. package/progress-spinner.zip +0 -0
  91. package/tabla-mantenimiento/classes/data-model.ts +0 -150
  92. package/tabla-mantenimiento/components/progress-bar/index.ts +0 -1
  93. package/tabla-mantenimiento/components/progress-bar/ng-package.json +0 -5
  94. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.html +0 -10
  95. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.ts +0 -85
  96. package/tabla-mantenimiento/components/progress-bar/public-api.ts +0 -2
  97. package/tabla-mantenimiento/index.ts +0 -1
  98. package/tabla-mantenimiento/interfaces/global/export-excel-servidor.ts +0 -0
  99. package/tabla-mantenimiento/interfaces/global/no-export.ts +0 -11
  100. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.ts +0 -97
  101. package/tabla-mantenimiento/ng-package.json +0 -5
  102. package/tabla-mantenimiento/pipes/no-sanitize.pipe.ts +0 -12
  103. package/tabla-mantenimiento/pipes/zero-fill.pipe.ts +0 -19
  104. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.html +0 -22
  105. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.ts +0 -12
  106. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.html +0 -58
  107. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.ts +0 -19
  108. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.html +0 -40
  109. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.ts +0 -17
  110. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.html +0 -25
  111. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.ts +0 -14
  112. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.html +0 -28
  113. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.ts +0 -13
  114. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.html +0 -30
  115. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.ts +0 -38
  116. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.html +0 -97
  117. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.ts +0 -43
  118. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.html +0 -26
  119. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.ts +0 -36
  120. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.ts +0 -54
  121. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.html +0 -76
  122. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.ts +0 -67
  123. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.html +0 -7
  124. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.ts +0 -39
  125. package/tabla-mantenimiento/tabla-mantenimiento.component.html +0 -385
  126. package/tabla-mantenimiento/tabla-mantenimiento.component.ts +0 -951
  127. package/tabla-mantenimiento/tabla-mantenimiento.functions.ts +0 -57
  128. package/tabla-mantenimiento/tabla-mantenimiento.service.ts +0 -44
  129. package/tabla-mantenimiento/table-util.ts +0 -49
  130. package/tabla-mantenimiento.zip +0 -0
  131. package/tsconfig.lib.json +0 -16
  132. package/tsconfig.lib.prod.json +0 -11
  133. package/tsconfig.spec.json +0 -15
  134. package/yarn-error.log +0 -68
  135. /package/dialog-flotante/{public-api.ts → public-api.d.ts} +0 -0
  136. /package/lista-arbol/{public-api.ts → public-api.d.ts} +0 -0
  137. /package/luces-navidad/{public-api.ts → public-api.d.ts} +0 -0
  138. /package/mat-suffix-search-button/{public-api.ts → public-api.d.ts} +0 -0
  139. /package/menu/{public-api.ts → public-api.d.ts} +0 -0
  140. /package/tabla-mantenimiento/interfaces/global/{index.ts → index.d.ts} +0 -0
  141. /package/tabla-mantenimiento/interfaces/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,32 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { MatDialogRef } from '@angular/material/dialog';
3
+ import { BotonDialog } from './dialog-flotante.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class DialogFlotanteComponent {
6
+ cssClases: Record<string, string>;
7
+ private _sinTitulo;
8
+ get sinTitulo(): boolean;
9
+ set sinTitulo(val: boolean | '');
10
+ private _sinBarraDeAccion;
11
+ get sinBarraDeAccion(): boolean;
12
+ set sinBarraDeAccion(val: boolean | '');
13
+ private readonly defaultBtnCerrar;
14
+ private _btnCerrar;
15
+ get btnCerrar(): BotonDialog;
16
+ set btnCerrar(val: BotonDialog | boolean | string | '');
17
+ private _btnCerrarBarra;
18
+ get btnCerrarBarra(): boolean;
19
+ set btnCerrarBarra(val: boolean | '');
20
+ private readonly defaultBtnGuardar;
21
+ private _btnGuardar;
22
+ get btnGuardar(): BotonDialog;
23
+ set btnGuardar(val: BotonDialog | boolean | string | '');
24
+ iconoTitulo?: string;
25
+ matDialogRefActual: MatDialogRef<any>;
26
+ btnGuardarClick: EventEmitter<any>;
27
+ btnCerrarClick: EventEmitter<any>;
28
+ guardarDialogo(): void;
29
+ cerrarDialogo(): void;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<DialogFlotanteComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<DialogFlotanteComponent, "[jvsDialogFlotante]", never, { "cssClases": { "alias": "cssClases"; "required": false; }; "sinTitulo": { "alias": "sinTitulo"; "required": false; }; "sinBarraDeAccion": { "alias": "sinBarraDeAccion"; "required": false; }; "btnCerrar": { "alias": "btnCerrar"; "required": false; }; "btnCerrarBarra": { "alias": "btnCerrarBarra"; "required": false; }; "btnGuardar": { "alias": "btnGuardar"; "required": false; }; "iconoTitulo": { "alias": "iconoTitulo"; "required": false; }; "matDialogRefActual": { "alias": "matDialogRefActual"; "required": false; }; }, { "btnGuardarClick": "btnGuardarClick"; "btnCerrarClick": "btnCerrarClick"; }, never, ["[tituloImagen]", "[titulo]", "[selectTitulo]", "[cuerpo]", "[pieIzquierda]", "[pieCentro]", "[pieDerecha]"], true, never>;
32
+ }
@@ -0,0 +1,11 @@
1
+ export interface DialogFlotanteInterface {
2
+ }
3
+ type TiposOpciones = 'ver' | 'nuevo' | 'editar' | 'guardar' | 'eliminar' | 'seleccionar' | 'editar_item' | 'detalle' | 'ver_archivos' | 'eliminar_fila' | 'imprimir' | 'descargar' | 'exportar_pdf' | 'exportar_excel' | string;
4
+ export interface BotonDialog {
5
+ tipo?: TiposOpciones;
6
+ class?: string;
7
+ icono?: string;
8
+ label?: string;
9
+ sinCondicion?: boolean;
10
+ }
11
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@jvsoft/components/dialog-flotante" />
5
+ export * from './public-api';
@@ -0,0 +1,129 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, Component } from '@angular/core';
3
+ import * as i3 from '@angular/material/dialog';
4
+ import { MatDialogModule } from '@angular/material/dialog';
5
+ import * as i2 from '@angular/material/icon';
6
+ import { MatIconModule } from '@angular/material/icon';
7
+ import * as i1 from '@angular/common';
8
+ import { CommonModule } from '@angular/common';
9
+ import { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
10
+ import { MatRipple } from '@angular/material/core';
11
+ import { MatDivider } from '@angular/material/divider';
12
+
13
+ class DialogFlotanteComponent {
14
+ cssClases = {};
15
+ _sinTitulo = false;
16
+ get sinTitulo() {
17
+ return !!this._sinTitulo;
18
+ }
19
+ set sinTitulo(val) {
20
+ this._sinTitulo = val == '';
21
+ }
22
+ _sinBarraDeAccion = false;
23
+ get sinBarraDeAccion() {
24
+ return !!this._sinBarraDeAccion;
25
+ }
26
+ set sinBarraDeAccion(val) {
27
+ this._sinBarraDeAccion = val == '';
28
+ }
29
+ defaultBtnCerrar = { label: 'CERRAR', class: 'text-gray-700 border-gray-700' };
30
+ _btnCerrar = this.defaultBtnCerrar;
31
+ get btnCerrar() {
32
+ return this._btnCerrar;
33
+ }
34
+ set btnCerrar(val) {
35
+ if (val == null || val === '') {
36
+ this._btnCerrar = this.defaultBtnCerrar;
37
+ }
38
+ else {
39
+ this._btnCerrar = (typeof val === 'string' && val !== '') ? { ...this.defaultBtnCerrar, label: val } :
40
+ (typeof val === 'boolean' && val) ? this.defaultBtnCerrar :
41
+ val ?? this.defaultBtnCerrar;
42
+ }
43
+ }
44
+ _btnCerrarBarra = true;
45
+ get btnCerrarBarra() {
46
+ return this._btnCerrarBarra;
47
+ }
48
+ set btnCerrarBarra(val) {
49
+ this._btnCerrarBarra = val || true;
50
+ }
51
+ defaultBtnGuardar = {
52
+ label: 'GUARDAR', class: 'text-blue-700 border-blue-700', icono: 'roundSave'
53
+ };
54
+ _btnGuardar = this.defaultBtnGuardar;
55
+ get btnGuardar() {
56
+ return this._btnGuardar;
57
+ }
58
+ set btnGuardar(val) {
59
+ if (val == null || val === '') {
60
+ this._btnGuardar = this.defaultBtnGuardar;
61
+ }
62
+ else {
63
+ this._btnGuardar = (typeof val === 'string' && val !== '') ? { ...this.defaultBtnGuardar, label: val } :
64
+ (typeof val === 'boolean' && val) ? this.defaultBtnGuardar :
65
+ val ?? this.defaultBtnGuardar;
66
+ }
67
+ }
68
+ iconoTitulo;
69
+ matDialogRefActual;
70
+ btnGuardarClick = new EventEmitter();
71
+ btnCerrarClick = new EventEmitter();
72
+ guardarDialogo() {
73
+ this.btnGuardarClick.emit(true);
74
+ }
75
+ cerrarDialogo() {
76
+ this.btnCerrarClick.emit(true);
77
+ if (this.matDialogRefActual) {
78
+ if (this.matDialogRefActual.componentInstance?.validarCerrarDialog) {
79
+ this.matDialogRefActual.componentInstance?.validarCerrarDialog();
80
+ }
81
+ else {
82
+ this.matDialogRefActual.close('Cerrado GDLG');
83
+ }
84
+ }
85
+ }
86
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DialogFlotanteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
87
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DialogFlotanteComponent, isStandalone: true, selector: "[jvsDialogFlotante]", inputs: { cssClases: "cssClases", sinTitulo: "sinTitulo", sinBarraDeAccion: "sinBarraDeAccion", btnCerrar: "btnCerrar", btnCerrarBarra: "btnCerrarBarra", btnGuardar: "btnGuardar", iconoTitulo: "iconoTitulo", matDialogRefActual: "matDialogRefActual" }, outputs: { btnGuardarClick: "btnGuardarClick", btnCerrarClick: "btnCerrarClick" }, host: { classAttribute: "jvs-dialog-flotante" }, ngImport: i0, template: "<ng-container *ngIf=\"sinTitulo; else conTitulo\">\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n</ng-container>\n\n<ng-template #conTitulo>\n <div cdkDrag class=\"block h-full\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragBoundary=\"body\">\n <div class=\"flex-auto flex items-center justify-between hover:cursor-move gap-1\"\n [ngClass]=\"cssClases['titulo'] ?? 'bg-primary text-primary-contrast'\"\n mat-dialog-title cdkDragHandle>\n\n <mat-icon *ngIf=\"iconoTitulo\" class=\"flex-none icon-xs\" [svgIcon]=\"iconoTitulo\"></mat-icon>\n <ng-content select=\"[tituloImagen]\"></ng-content>\n <h5 class=\"flex-1 m-0\">\n <ng-content select=\"[titulo]\"></ng-content>\n </h5>\n <ng-content select=\"[selectTitulo]\"></ng-content>\n\n <ng-container *ngIf=\"btnCerrar || btnCerrarBarra\">\n <button matRipple class=\"flex items-center justify-center ml-2 h-6 w-6 bg-red-700 rounded-md text-white\"\n type=\"button\" [mat-dialog-close]=\"!matDialogRefActual\"\n (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon svgIcon=\"roundClose\"></mat-icon>\n </button>\n </ng-container>\n </div>\n\n <mat-divider class=\"flex-auto bg-primary\"></mat-divider>\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #parteComun>\n <mat-dialog-content class=\"flex-1\">\n <div class=\"contenedor-cuerpo\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"flex-auto flex items-center justify-between gap-1 pt-0 mt-0\" *ngIf=\"!sinBarraDeAccion\">\n <div class=\"flex items-start justify-start gap-1\">\n <ng-content select=\"[pieIzquierda]\"></ng-content>\n </div>\n <div class=\"flex items-center justify-center gap-1\">\n <ng-content select=\"[pieCentro]\"></ng-content>\n </div>\n <div class=\"flex items-end justify-end gap-1\">\n <ng-content select=\"[pieDerecha]\"></ng-content>\n\n <!-- Bot\u00F3n Guardar -->\n <button matRipple *ngIf=\"btnGuardar\" type=\"submit\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnGuardar.class\"\n [class]=\"cssClases['btnGuardar']\" (click)=\"guardarDialogo()\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"btnGuardar?.icono ?? ''\"></mat-icon>\n <span>{{ btnGuardar.label }}</span>\n </button>\n\n <!-- Bot\u00F3n Cerrar -->\n <button matRipple *ngIf=\"btnCerrar\" type=\"button\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnCerrar.class\"\n [mat-dialog-close]=\"!matDialogRefActual\" (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon class=\"icon-xs\" svgIcon=\"roundClose\"></mat-icon>\n <span>{{ btnCerrar.label }}</span>\n </button>\n </div>\n </mat-dialog-actions>\n</ng-template>\n", styles: [".jvs-dialog-flotante{max-width:98vw}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-form-field{color:unset}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:focus:focus:not(:checked):not(:indeterminate)~.mdc-checkbox__background{border-color:var(--color-prnpx tailwindcss init --fullimary-contrast)!important}.jvs-dialog-flotante fieldset{@apply w-full sm:w-auto rounded-sm bg-transparent pt-0 pb-1 px-1 border;}.jvs-dialog-flotante fieldset legend{@apply px-2 font-bold border-0 bg-transparent;width:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] });
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DialogFlotanteComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: '[jvsDialogFlotante]', imports: [
92
+ CommonModule,
93
+ MatIconModule,
94
+ MatDialogModule,
95
+ CdkDrag,
96
+ CdkDragHandle,
97
+ MatRipple,
98
+ MatDivider,
99
+ ], host: {
100
+ class: 'jvs-dialog-flotante',
101
+ }, template: "<ng-container *ngIf=\"sinTitulo; else conTitulo\">\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n</ng-container>\n\n<ng-template #conTitulo>\n <div cdkDrag class=\"block h-full\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragBoundary=\"body\">\n <div class=\"flex-auto flex items-center justify-between hover:cursor-move gap-1\"\n [ngClass]=\"cssClases['titulo'] ?? 'bg-primary text-primary-contrast'\"\n mat-dialog-title cdkDragHandle>\n\n <mat-icon *ngIf=\"iconoTitulo\" class=\"flex-none icon-xs\" [svgIcon]=\"iconoTitulo\"></mat-icon>\n <ng-content select=\"[tituloImagen]\"></ng-content>\n <h5 class=\"flex-1 m-0\">\n <ng-content select=\"[titulo]\"></ng-content>\n </h5>\n <ng-content select=\"[selectTitulo]\"></ng-content>\n\n <ng-container *ngIf=\"btnCerrar || btnCerrarBarra\">\n <button matRipple class=\"flex items-center justify-center ml-2 h-6 w-6 bg-red-700 rounded-md text-white\"\n type=\"button\" [mat-dialog-close]=\"!matDialogRefActual\"\n (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon svgIcon=\"roundClose\"></mat-icon>\n </button>\n </ng-container>\n </div>\n\n <mat-divider class=\"flex-auto bg-primary\"></mat-divider>\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #parteComun>\n <mat-dialog-content class=\"flex-1\">\n <div class=\"contenedor-cuerpo\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"flex-auto flex items-center justify-between gap-1 pt-0 mt-0\" *ngIf=\"!sinBarraDeAccion\">\n <div class=\"flex items-start justify-start gap-1\">\n <ng-content select=\"[pieIzquierda]\"></ng-content>\n </div>\n <div class=\"flex items-center justify-center gap-1\">\n <ng-content select=\"[pieCentro]\"></ng-content>\n </div>\n <div class=\"flex items-end justify-end gap-1\">\n <ng-content select=\"[pieDerecha]\"></ng-content>\n\n <!-- Bot\u00F3n Guardar -->\n <button matRipple *ngIf=\"btnGuardar\" type=\"submit\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnGuardar.class\"\n [class]=\"cssClases['btnGuardar']\" (click)=\"guardarDialogo()\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"btnGuardar?.icono ?? ''\"></mat-icon>\n <span>{{ btnGuardar.label }}</span>\n </button>\n\n <!-- Bot\u00F3n Cerrar -->\n <button matRipple *ngIf=\"btnCerrar\" type=\"button\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnCerrar.class\"\n [mat-dialog-close]=\"!matDialogRefActual\" (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon class=\"icon-xs\" svgIcon=\"roundClose\"></mat-icon>\n <span>{{ btnCerrar.label }}</span>\n </button>\n </div>\n </mat-dialog-actions>\n</ng-template>\n", styles: [".jvs-dialog-flotante{max-width:98vw}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-form-field{color:unset}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:focus:focus:not(:checked):not(:indeterminate)~.mdc-checkbox__background{border-color:var(--color-prnpx tailwindcss init --fullimary-contrast)!important}.jvs-dialog-flotante fieldset{@apply w-full sm:w-auto rounded-sm bg-transparent pt-0 pb-1 px-1 border;}.jvs-dialog-flotante fieldset legend{@apply px-2 font-bold border-0 bg-transparent;width:auto}\n"] }]
102
+ }], propDecorators: { cssClases: [{
103
+ type: Input
104
+ }], sinTitulo: [{
105
+ type: Input
106
+ }], sinBarraDeAccion: [{
107
+ type: Input
108
+ }], btnCerrar: [{
109
+ type: Input
110
+ }], btnCerrarBarra: [{
111
+ type: Input
112
+ }], btnGuardar: [{
113
+ type: Input
114
+ }], iconoTitulo: [{
115
+ type: Input
116
+ }], matDialogRefActual: [{
117
+ type: Input
118
+ }], btnGuardarClick: [{
119
+ type: Output
120
+ }], btnCerrarClick: [{
121
+ type: Output
122
+ }] } });
123
+
124
+ /**
125
+ * Generated bundle index. Do not edit.
126
+ */
127
+
128
+ export { DialogFlotanteComponent };
129
+ //# sourceMappingURL=jvsoft-components-dialog-flotante.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jvsoft-components-dialog-flotante.mjs","sources":["../../../projects/components/dialog-flotante/dialog-flotante.component.ts","../../../projects/components/dialog-flotante/dialog-flotante.component.html","../../../projects/components/dialog-flotante/jvsoft-components-dialog-flotante.ts"],"sourcesContent":["import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {MatDialogModule, MatDialogRef} from '@angular/material/dialog';\nimport {BotonDialog} from './dialog-flotante.interface';\nimport {MatIconModule} from '@angular/material/icon';\nimport {CommonModule} from '@angular/common';\nimport {CdkDrag, CdkDragHandle} from '@angular/cdk/drag-drop';\nimport {MatRipple} from '@angular/material/core';\nimport {MatDivider} from '@angular/material/divider';\n\n@Component({\n selector: '[jvsDialogFlotante]',\n imports: [\n CommonModule,\n MatIconModule,\n MatDialogModule,\n CdkDrag,\n CdkDragHandle,\n MatRipple,\n MatDivider,\n\n ],\n templateUrl: './dialog-flotante.component.html',\n styleUrls: ['./dialog-flotante.component.scss'],\n host: {\n class: 'jvs-dialog-flotante',\n }\n})\nexport class DialogFlotanteComponent {\n @Input() cssClases: Record<string, string> = {};\n\n private _sinTitulo: boolean | '' = false;\n get sinTitulo(): boolean {\n return !!this._sinTitulo;\n }\n\n @Input() set sinTitulo(val: boolean | '') {\n this._sinTitulo = val == '';\n }\n\n private _sinBarraDeAccion: boolean | '' = false;\n get sinBarraDeAccion(): boolean {\n return !!this._sinBarraDeAccion;\n }\n\n @Input() set sinBarraDeAccion(val: boolean | '') {\n this._sinBarraDeAccion = val == '';\n }\n\n private readonly defaultBtnCerrar: BotonDialog = {label: 'CERRAR', class: 'text-gray-700 border-gray-700'};\n private _btnCerrar: BotonDialog = this.defaultBtnCerrar;\n get btnCerrar(): BotonDialog {\n return this._btnCerrar;\n }\n\n @Input() set btnCerrar(val: BotonDialog | boolean | string | '') {\n if (val == null || val === '') {\n this._btnCerrar = this.defaultBtnCerrar;\n }\n else {\n this._btnCerrar = (typeof val === 'string' && val !== '') ? {...this.defaultBtnCerrar, label: val}:\n (typeof val === 'boolean' && val) ? this.defaultBtnCerrar:\n (val as BotonDialog) ?? this.defaultBtnCerrar;\n }\n }\n\n private _btnCerrarBarra: boolean = true;\n get btnCerrarBarra(): boolean {\n return this._btnCerrarBarra;\n }\n\n @Input() set btnCerrarBarra(val: boolean | '') {\n this._btnCerrarBarra = val || true;\n }\n\n private readonly defaultBtnGuardar: BotonDialog = {\n label: 'GUARDAR', class: 'text-blue-700 border-blue-700', icono: 'roundSave'\n };\n private _btnGuardar: BotonDialog = this.defaultBtnGuardar;\n get btnGuardar(): BotonDialog {\n return this._btnGuardar;\n }\n\n @Input() set btnGuardar(val: BotonDialog | boolean | string | '') {\n if (val == null || val === '') {\n this._btnGuardar = this.defaultBtnGuardar;\n }\n else {\n this._btnGuardar = (typeof val === 'string' && val !== '') ? {...this.defaultBtnGuardar, label: val}:\n (typeof val === 'boolean' && val) ? this.defaultBtnGuardar:\n (val as BotonDialog) ?? this.defaultBtnGuardar;\n }\n }\n\n @Input() iconoTitulo?: string;\n @Input() matDialogRefActual!: MatDialogRef<any>;\n @Output() btnGuardarClick = new EventEmitter<any>();\n @Output() btnCerrarClick = new EventEmitter<any>();\n\n guardarDialogo() {\n this.btnGuardarClick.emit(true);\n }\n\n cerrarDialogo() {\n this.btnCerrarClick.emit(true);\n if (this.matDialogRefActual) {\n if (this.matDialogRefActual.componentInstance?.validarCerrarDialog) {\n this.matDialogRefActual.componentInstance?.validarCerrarDialog();\n }\n else {\n this.matDialogRefActual.close('Cerrado GDLG');\n }\n }\n }\n\n}\n","<ng-container *ngIf=\"sinTitulo; else conTitulo\">\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n</ng-container>\n\n<ng-template #conTitulo>\n <div cdkDrag class=\"block h-full\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragBoundary=\"body\">\n <div class=\"flex-auto flex items-center justify-between hover:cursor-move gap-1\"\n [ngClass]=\"cssClases['titulo'] ?? 'bg-primary text-primary-contrast'\"\n mat-dialog-title cdkDragHandle>\n\n <mat-icon *ngIf=\"iconoTitulo\" class=\"flex-none icon-xs\" [svgIcon]=\"iconoTitulo\"></mat-icon>\n <ng-content select=\"[tituloImagen]\"></ng-content>\n <h5 class=\"flex-1 m-0\">\n <ng-content select=\"[titulo]\"></ng-content>\n </h5>\n <ng-content select=\"[selectTitulo]\"></ng-content>\n\n <ng-container *ngIf=\"btnCerrar || btnCerrarBarra\">\n <button matRipple class=\"flex items-center justify-center ml-2 h-6 w-6 bg-red-700 rounded-md text-white\"\n type=\"button\" [mat-dialog-close]=\"!matDialogRefActual\"\n (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon svgIcon=\"roundClose\"></mat-icon>\n </button>\n </ng-container>\n </div>\n\n <mat-divider class=\"flex-auto bg-primary\"></mat-divider>\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #parteComun>\n <mat-dialog-content class=\"flex-1\">\n <div class=\"contenedor-cuerpo\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"flex-auto flex items-center justify-between gap-1 pt-0 mt-0\" *ngIf=\"!sinBarraDeAccion\">\n <div class=\"flex items-start justify-start gap-1\">\n <ng-content select=\"[pieIzquierda]\"></ng-content>\n </div>\n <div class=\"flex items-center justify-center gap-1\">\n <ng-content select=\"[pieCentro]\"></ng-content>\n </div>\n <div class=\"flex items-end justify-end gap-1\">\n <ng-content select=\"[pieDerecha]\"></ng-content>\n\n <!-- Botón Guardar -->\n <button matRipple *ngIf=\"btnGuardar\" type=\"submit\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnGuardar.class\"\n [class]=\"cssClases['btnGuardar']\" (click)=\"guardarDialogo()\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"btnGuardar?.icono ?? ''\"></mat-icon>\n <span>{{ btnGuardar.label }}</span>\n </button>\n\n <!-- Botón Cerrar -->\n <button matRipple *ngIf=\"btnCerrar\" type=\"button\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnCerrar.class\"\n [mat-dialog-close]=\"!matDialogRefActual\" (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon class=\"icon-xs\" svgIcon=\"roundClose\"></mat-icon>\n <span>{{ btnCerrar.label }}</span>\n </button>\n </div>\n </mat-dialog-actions>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;MA2Ba,uBAAuB,CAAA;IACvB,SAAS,GAA2B,EAAE;IAEvC,UAAU,GAAiB,KAAK;AACxC,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU;;IAG5B,IAAa,SAAS,CAAC,GAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,EAAE;;IAGvB,iBAAiB,GAAiB,KAAK;AAC/C,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB;;IAGnC,IAAa,gBAAgB,CAAC,GAAiB,EAAA;AAC3C,QAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,IAAI,EAAE;;IAGrB,gBAAgB,GAAgB,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,+BAA+B,EAAC;AAClG,IAAA,UAAU,GAAgB,IAAI,CAAC,gBAAgB;AACvD,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU;;IAG1B,IAAa,SAAS,CAAC,GAAwC,EAAA;QAC3D,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB;;aAEtC;YACD,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAC;AAC9F,gBAAA,CAAC,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,IAAI,IAAI,CAAC,gBAAgB;AACpD,oBAAA,GAAmB,IAAI,IAAI,CAAC,gBAAgB;;;IAIrD,eAAe,GAAY,IAAI;AACvC,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe;;IAG/B,IAAa,cAAc,CAAC,GAAiB,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,IAAI,IAAI;;AAGrB,IAAA,iBAAiB,GAAgB;QAC9C,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE;KACpE;AACO,IAAA,WAAW,GAAgB,IAAI,CAAC,iBAAiB;AACzD,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;;IAG3B,IAAa,UAAU,CAAC,GAAwC,EAAA;QAC5D,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB;;aAExC;YACD,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAC;AAChG,gBAAA,CAAC,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,IAAI,IAAI,CAAC,iBAAiB;AACrD,oBAAA,GAAmB,IAAI,IAAI,CAAC,iBAAiB;;;AAIrD,IAAA,WAAW;AACX,IAAA,kBAAkB;AACjB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAO;IAElD,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGnC,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,mBAAmB,EAAE;AAChE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,mBAAmB,EAAE;;iBAE/D;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC;;;;wGAlFhD,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EC3BpC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,kqGAkEA,EDtDQ,MAAA,EAAA,CAAA,ikBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,uYACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,wPACT,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FASL,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAlBnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACtB,OAAA,EAAA;wBACL,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,OAAO;wBACP,aAAa;wBACb,SAAS;wBACT,UAAU;qBAEb,EAGK,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,qBAAqB;AAC/B,qBAAA,EAAA,QAAA,EAAA,kqGAAA,EAAA,MAAA,EAAA,CAAA,ikBAAA,CAAA,EAAA;8BAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAOY,SAAS,EAAA,CAAA;sBAArB;gBASY,gBAAgB,EAAA,CAAA;sBAA5B;gBAUY,SAAS,EAAA,CAAA;sBAArB;gBAgBY,cAAc,EAAA,CAAA;sBAA1B;gBAYY,UAAU,EAAA,CAAA;sBAAtB;gBAWQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBACS,cAAc,EAAA,CAAA;sBAAvB;;;AEhGL;;AAEG;;;;"}
@@ -0,0 +1,294 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Input, Output, Component } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i3 from '@angular/material/tree';
6
+ import { MatTreeModule } from '@angular/material/tree';
7
+ import * as i4 from '@angular/material/icon';
8
+ import { MatIconModule } from '@angular/material/icon';
9
+ import * as i5 from '@angular/material/checkbox';
10
+ import { MatCheckboxModule } from '@angular/material/checkbox';
11
+ import * as i2 from '@angular/forms';
12
+ import { FormsModule } from '@angular/forms';
13
+ import { NestedTreeControl } from '@angular/cdk/tree';
14
+ import { DataModel } from '@jvsoft/utils';
15
+ import shortHash from 'shorthash2';
16
+
17
+ function generarArbol(params) {
18
+ const { lista, campoId, campoIdPadre, idPadre = null, strChildren = 'hijos', campoOrden, } = params;
19
+ const hijos = lista.filter(n => n[campoIdPadre] === idPadre);
20
+ if (campoOrden) {
21
+ hijos.sort((a, b) => {
22
+ const va = a[campoOrden];
23
+ const vb = b[campoOrden];
24
+ if (typeof va === 'string' && typeof vb === 'string') {
25
+ return va.localeCompare(vb);
26
+ }
27
+ if (typeof va === 'number' && typeof vb === 'number') {
28
+ return va - vb;
29
+ }
30
+ return 0;
31
+ });
32
+ }
33
+ return hijos.map(n => ({
34
+ ...n,
35
+ [strChildren]: generarArbol({
36
+ lista,
37
+ campoId,
38
+ campoIdPadre,
39
+ idPadre: n[campoId],
40
+ strChildren,
41
+ campoOrden,
42
+ }),
43
+ }));
44
+ }
45
+
46
+ class ListaArbolComponent {
47
+ listaSuscription;
48
+ nombreColeccion;
49
+ checkbox = false;
50
+ expandirRecursivo = false;
51
+ checkboxSeleccionados = [];
52
+ campoId;
53
+ campoIdPadre;
54
+ campoStr;
55
+ campoOrden;
56
+ strHijoContainer = 'hijos';
57
+ menuContextual;
58
+ classSeleccionado = ['bg-primary-activo', 'text-primary', 'dark:!bg-primary-dark-activo'];
59
+ classAnulado = ['line-through', 'text-red', 'italic'];
60
+ campoAnulado;
61
+ templateTxtData;
62
+ condicionMostrar;
63
+ condicionesClaseFila = () => [];
64
+ set selectionModel(val) {
65
+ this.objSeleccionado = val;
66
+ }
67
+ selectionModelChange = new EventEmitter();
68
+ seleccionado = new EventEmitter();
69
+ listaCheck = new EventEmitter();
70
+ listaCheckObj = new EventEmitter();
71
+ _idTabla = [];
72
+ get idTabla() {
73
+ return this._idTabla;
74
+ }
75
+ set idTabla(val) {
76
+ if (Array.isArray(val)) {
77
+ this._idTabla = val;
78
+ }
79
+ else {
80
+ this._idTabla.push(val);
81
+ }
82
+ }
83
+ get buscarItemSeleccionado() {
84
+ const dRet = this.listaOriginal.find(itm => this._seleccionado === this.propiedadSeleccion(itm));
85
+ return dRet ?? null;
86
+ }
87
+ get objSeleccionado() {
88
+ return this.buscarItemSeleccionado; // ?? this.objThis?.['seleccionados']?.[this.nombreColeccion];
89
+ }
90
+ set objSeleccionado(val) {
91
+ this.seleccionarItem(val, true);
92
+ }
93
+ chkLista = new DataModel();
94
+ listaMuestraArbol = [];
95
+ listaOriginal = [];
96
+ treeControl = new NestedTreeControl((node) => node[this.strHijoContainer]);
97
+ _seleccionado = {};
98
+ ngOnInit() {
99
+ this.listaSuscription.subscribe(res => {
100
+ if (res) {
101
+ this.listaOriginal = res;
102
+ const listaAs = generarArbol({
103
+ lista: res,
104
+ campoId: this.campoId,
105
+ campoIdPadre: this.campoIdPadre,
106
+ idPadre: null,
107
+ strChildren: this.strHijoContainer,
108
+ campoOrden: this.campoOrden
109
+ });
110
+ this.listaMuestraArbol = [];
111
+ setTimeout(() => {
112
+ this.listaMuestraArbol = listaAs;
113
+ }, 1);
114
+ if (this.checkbox) {
115
+ this.chkLista.agregarControles(res, this.campoId);
116
+ this.checkboxSeleccionados.forEach((chkSel) => {
117
+ this.chkLista.setState(chkSel[this.campoId], true);
118
+ });
119
+ this.emitirModeloCheck();
120
+ }
121
+ }
122
+ });
123
+ }
124
+ idTablaValor(data) {
125
+ if (data) {
126
+ if (this.idTabla.length < 1) {
127
+ return shortHash(JSON.stringify({ data, claseFinal: undefined }));
128
+ }
129
+ return this.idTabla.map(d => data[d]).join('-');
130
+ }
131
+ return '';
132
+ }
133
+ propiedadSeleccion(item) {
134
+ return `${this.nombreColeccion}_${this.idTablaValor(item)}`;
135
+ }
136
+ esSeleccionActual(item) {
137
+ return this._seleccionado === this.propiedadSeleccion(item);
138
+ }
139
+ seleccionarItem(item, forzado = false) {
140
+ const idItem = this.propiedadSeleccion(item);
141
+ if (forzado) {
142
+ this._seleccionado = idItem;
143
+ }
144
+ else {
145
+ this._seleccionado = this._seleccionado === idItem ? null : idItem;
146
+ }
147
+ this.selectionModelChange.emit(this.objSeleccionado);
148
+ this.seleccionado.emit(this.objSeleccionado);
149
+ }
150
+ hasChild = (_, node) => !!node[this.strHijoContainer] && node[this.strHijoContainer].length > 0;
151
+ opcMenu(v) {
152
+ // console.warn(v);
153
+ // console.warn(this.objSeleccionado);
154
+ const opAdic = { seccion: this.nombreColeccion };
155
+ opAdic['itemSeleccionado'] = this.objSeleccionado;
156
+ // v = {...v, ...opAdic};
157
+ // this.seleccionado.emit(v);
158
+ }
159
+ emitirModeloCheck() {
160
+ this.listaCheck.emit(this.chkLista.generarLista());
161
+ this.listaCheckObj.emit(this.chkLista.generarLista('object'));
162
+ }
163
+ cambiarPadre(checkActual, estado) {
164
+ const parentId = checkActual[this.campoIdPadre];
165
+ if (parentId) {
166
+ const padreAct = this.listaMuestraArbol.find((itm) => itm[this.campoId] == parentId);
167
+ if (padreAct) {
168
+ this.chkLista.setState(parentId, this.hijosActivos('checked', padreAct) || this.hijosActivos('indeterminate', padreAct));
169
+ this.cambiarPadre(padreAct, estado);
170
+ }
171
+ }
172
+ }
173
+ cambiarCheck(checkActual, estado) {
174
+ if (this.hasChild(0, checkActual)) {
175
+ (this.treeControl.getChildren(checkActual) ?? []).forEach((vas) => {
176
+ this.cambiarCheck(vas, estado);
177
+ });
178
+ }
179
+ this.cambiarPadre(checkActual, estado);
180
+ this.chkLista.setState(checkActual[this.campoId], estado);
181
+ }
182
+ hijosActivos(tipo, checkActual) {
183
+ let totalHijos = 0;
184
+ let cantActivo = 0;
185
+ if (this.hasChild(0, checkActual)) {
186
+ (this.treeControl.getChildren(checkActual) ?? []).forEach((vas) => {
187
+ if (this.chkLista.getState(vas[this.campoId] + '')) {
188
+ cantActivo++;
189
+ }
190
+ totalHijos++;
191
+ });
192
+ }
193
+ switch (tipo) {
194
+ case 'checked':
195
+ return (cantActivo == totalHijos);
196
+ case 'indeterminate':
197
+ if (cantActivo == totalHijos) {
198
+ this.chkLista.setState(checkActual[this.campoId], true);
199
+ }
200
+ return ((cantActivo > 0) && (cantActivo != totalHijos));
201
+ }
202
+ return false;
203
+ }
204
+ classFila2(item) {
205
+ let clases = [];
206
+ if (this.campoAnulado && item[this.campoAnulado] === 1) {
207
+ clases = clases.concat(this.classAnulado);
208
+ }
209
+ if (item?.seleccionado) {
210
+ clases = clases.concat(this.classSeleccionado);
211
+ }
212
+ clases = clases.concat(this.condicionesClaseFila(item));
213
+ item.claseFinal = clases;
214
+ return clases;
215
+ }
216
+ classFila(item) {
217
+ let claseFinal = [];
218
+ if (this.campoAnulado && (item[this.campoAnulado] == 1)) {
219
+ claseFinal = claseFinal.concat(this.classAnulado);
220
+ }
221
+ if (this.objSeleccionado == item || this.esSeleccionActual(item)) {
222
+ claseFinal = claseFinal.concat(this.classSeleccionado);
223
+ }
224
+ claseFinal = claseFinal.concat(this.condicionesClaseFila(item));
225
+ item.claseFinal = claseFinal;
226
+ return claseFinal;
227
+ }
228
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ListaArbolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
229
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ListaArbolComponent, isStandalone: true, selector: "jvs-lista-arbol", inputs: { listaSuscription: "listaSuscription", nombreColeccion: "nombreColeccion", checkbox: "checkbox", expandirRecursivo: "expandirRecursivo", checkboxSeleccionados: "checkboxSeleccionados", campoId: "campoId", campoIdPadre: "campoIdPadre", campoStr: "campoStr", campoOrden: "campoOrden", strHijoContainer: "strHijoContainer", menuContextual: "menuContextual", classSeleccionado: "classSeleccionado", classAnulado: "classAnulado", campoAnulado: "campoAnulado", templateTxtData: "templateTxtData", condicionMostrar: "condicionMostrar", condicionesClaseFila: "condicionesClaseFila", selectionModel: "selectionModel", idTabla: "idTabla" }, outputs: { selectionModelChange: "selectionModelChange", seleccionado: "seleccionado", listaCheck: "listaCheck", listaCheckObj: "listaCheckObj" }, ngImport: i0, template: "<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n\n <!-- Cambiar mat-tree-node plano por mat-nested-tree-node sin hijos -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<!--\n\n\n<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-tree-node class=\"!pl-0 min-h-0\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </mat-tree-node>\n\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n-->\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i3.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], outputs: ["activation", "expandedChange"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i3.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
230
+ }
231
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ListaArbolComponent, decorators: [{
232
+ type: Component,
233
+ args: [{ selector: 'jvs-lista-arbol', standalone: true, imports: [
234
+ CommonModule,
235
+ FormsModule,
236
+ MatTreeModule,
237
+ MatIconModule,
238
+ MatCheckboxModule,
239
+ ], template: "<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n\n <!-- Cambiar mat-tree-node plano por mat-nested-tree-node sin hijos -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<!--\n\n\n<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-tree-node class=\"!pl-0 min-h-0\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </mat-tree-node>\n\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n-->\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n" }]
240
+ }], propDecorators: { listaSuscription: [{
241
+ type: Input
242
+ }], nombreColeccion: [{
243
+ type: Input
244
+ }], checkbox: [{
245
+ type: Input
246
+ }], expandirRecursivo: [{
247
+ type: Input
248
+ }], checkboxSeleccionados: [{
249
+ type: Input
250
+ }], campoId: [{
251
+ type: Input
252
+ }], campoIdPadre: [{
253
+ type: Input
254
+ }], campoStr: [{
255
+ type: Input
256
+ }], campoOrden: [{
257
+ type: Input
258
+ }], strHijoContainer: [{
259
+ type: Input
260
+ }], menuContextual: [{
261
+ type: Input
262
+ }], classSeleccionado: [{
263
+ type: Input
264
+ }], classAnulado: [{
265
+ type: Input
266
+ }], campoAnulado: [{
267
+ type: Input
268
+ }], templateTxtData: [{
269
+ type: Input
270
+ }], condicionMostrar: [{
271
+ type: Input
272
+ }], condicionesClaseFila: [{
273
+ type: Input
274
+ }], selectionModel: [{
275
+ type: Input
276
+ }], selectionModelChange: [{
277
+ type: Output
278
+ }], seleccionado: [{
279
+ type: Output
280
+ }], listaCheck: [{
281
+ type: Output
282
+ }], listaCheckObj: [{
283
+ type: Output
284
+ }], idTabla: [{
285
+ type: Input,
286
+ args: [{ required: true }]
287
+ }] } });
288
+
289
+ /**
290
+ * Generated bundle index. Do not edit.
291
+ */
292
+
293
+ export { ListaArbolComponent };
294
+ //# sourceMappingURL=jvsoft-components-lista-arbol.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jvsoft-components-lista-arbol.mjs","sources":["../../../projects/components/lista-arbol/lista-arbol.functions.ts","../../../projects/components/lista-arbol/lista-arbol.component.ts","../../../projects/components/lista-arbol/lista-arbol.component.html","../../../projects/components/lista-arbol/jvsoft-components-lista-arbol.ts"],"sourcesContent":["export function generarArbol(params: {\n lista: any[],\n campoId: string,\n campoIdPadre: string,\n idPadre?: any,\n strChildren?: string,\n campoOrden?: string\n}): any[] {\n const {\n lista,\n campoId,\n campoIdPadre,\n idPadre = null,\n strChildren = 'hijos',\n campoOrden,\n } = params;\n\n const hijos = lista.filter(n => n[campoIdPadre] === idPadre);\n\n if (campoOrden) {\n hijos.sort((a, b) => {\n const va = a[campoOrden];\n const vb = b[campoOrden];\n\n if (typeof va === 'string' && typeof vb === 'string') {\n return va.localeCompare(vb);\n }\n if (typeof va === 'number' && typeof vb === 'number') {\n return va - vb;\n }\n return 0;\n });\n }\n\n return hijos.map(n => ({\n ...n,\n [strChildren]: generarArbol({\n lista,\n campoId,\n campoIdPadre,\n idPadre: n[campoId],\n strChildren,\n campoOrden,\n }),\n }));\n}\n","import {Component, EventEmitter, Input, OnInit, Output, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatTreeModule} from '@angular/material/tree';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {FormsModule} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {NestedTreeControl} from '@angular/cdk/tree';\nimport {generarArbol} from './lista-arbol.functions';\nimport {DataModel} from '@jvsoft/utils';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport shortHash from 'shorthash2';\n\n@Component({\n selector: 'jvs-lista-arbol',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatTreeModule,\n MatIconModule,\n MatCheckboxModule,\n ],\n templateUrl: './lista-arbol.component.html',\n})\nexport class ListaArbolComponent<T = any> implements OnInit {\n @Input() listaSuscription!: Observable<T[]>;\n @Input() nombreColeccion!: string;\n @Input() checkbox = false;\n @Input() expandirRecursivo = false;\n @Input() checkboxSeleccionados: T[] = [];\n\n @Input() campoId!: string;\n @Input() campoIdPadre!: string;\n @Input() campoStr!: string;\n @Input() campoOrden?: string;\n @Input() strHijoContainer = 'hijos';\n @Input() menuContextual?: { abrirMenuContextual: Function; cerrarMenuContextual: Function };\n @Input() classSeleccionado: string[] = ['bg-primary-activo', 'text-primary', 'dark:!bg-primary-dark-activo'];\n @Input() classAnulado: string[] = ['line-through', 'text-red', 'italic'];\n @Input() campoAnulado?: string | null;\n @Input() templateTxtData?: TemplateRef<any>;\n @Input() condicionMostrar?: (item: T) => boolean;\n @Input() condicionesClaseFila: (item: T) => string[] = () => [];\n\n @Input() set selectionModel(val: SelectionModel<any>) {\n this.objSeleccionado = val;\n }\n @Output() selectionModelChange = new EventEmitter<SelectionModel<any>>();\n\n @Output() seleccionado = new EventEmitter<any>();\n @Output() listaCheck = new EventEmitter<T[]>();\n @Output() listaCheckObj = new EventEmitter<Record<string, any>>();\n\n private _idTabla: string[] = [];\n\n get idTabla(): string[] {\n return this._idTabla;\n }\n\n @Input({required: true}) set idTabla(val: string[] | string) {\n if (Array.isArray(val)) {\n this._idTabla = val;\n }\n else {\n this._idTabla.push(val);\n }\n }\n\n get buscarItemSeleccionado(): any {\n const dRet = this.listaOriginal.find(itm => this._seleccionado === this.propiedadSeleccion(itm));\n return dRet ?? null;\n }\n get objSeleccionado() {\n return this.buscarItemSeleccionado; // ?? this.objThis?.['seleccionados']?.[this.nombreColeccion];\n }\n\n set objSeleccionado(val: any) {\n this.seleccionarItem(val, true);\n }\n\n chkLista = new DataModel();\n listaMuestraArbol: T[] = [];\n listaOriginal: T[] = [];\n\n treeControl = new NestedTreeControl((node: any) => node[this.strHijoContainer]);\n\n _seleccionado: any = {};\n\n ngOnInit(): void {\n this.listaSuscription.subscribe(res => {\n if (res) {\n this.listaOriginal = res;\n const listaAs = generarArbol({\n lista: res,\n campoId: this.campoId,\n campoIdPadre: this.campoIdPadre,\n idPadre: null,\n strChildren: this.strHijoContainer,\n campoOrden: this.campoOrden\n });\n this.listaMuestraArbol = [];\n setTimeout(() => {\n this.listaMuestraArbol = listaAs;\n }, 1);\n if (this.checkbox) {\n this.chkLista.agregarControles(res, this.campoId);\n this.checkboxSeleccionados.forEach((chkSel: any) => {\n this.chkLista.setState(chkSel[this.campoId], true);\n });\n this.emitirModeloCheck();\n }\n }\n });\n }\n\n\n idTablaValor(data: any): string {\n if (data) {\n if (this.idTabla.length < 1) {\n return shortHash(JSON.stringify({data, claseFinal: undefined}))\n }\n return this.idTabla.map(d => data[d]).join('-');\n }\n return '';\n }\n\n propiedadSeleccion(item: any): string {\n return `${this.nombreColeccion}_${this.idTablaValor(item)}`;\n }\n\n esSeleccionActual(item: any): boolean {\n return this._seleccionado === this.propiedadSeleccion(item);\n }\n seleccionarItem(item?: any, forzado: boolean = false): void {\n const idItem = this.propiedadSeleccion(item);\n if (forzado) {\n this._seleccionado = idItem;\n }\n else {\n this._seleccionado = this._seleccionado === idItem ? null:idItem;\n }\n this.selectionModelChange.emit(this.objSeleccionado);\n this.seleccionado.emit(this.objSeleccionado);\n }\n\n\n hasChild = (_: number, node: any) => !!node[this.strHijoContainer] && node[this.strHijoContainer].length > 0;\n\n\n opcMenu(v: any) {\n // console.warn(v);\n // console.warn(this.objSeleccionado);\n const opAdic: any = {seccion: this.nombreColeccion};\n opAdic['itemSeleccionado'] = this.objSeleccionado;\n // v = {...v, ...opAdic};\n // this.seleccionado.emit(v);\n }\n\n emitirModeloCheck() {\n this.listaCheck.emit(<any[]>this.chkLista.generarLista());\n this.listaCheckObj.emit(<object>this.chkLista.generarLista('object'));\n }\n\n\n cambiarPadre(checkActual: T, estado: boolean): void {\n const parentId = (checkActual as any)[this.campoIdPadre];\n if (parentId) {\n const padreAct = this.listaMuestraArbol.find((itm: any) => itm[this.campoId] == parentId);\n if (padreAct) {\n this.chkLista.setState(parentId, this.hijosActivos('checked', padreAct) || this.hijosActivos('indeterminate', padreAct));\n this.cambiarPadre(padreAct, estado);\n }\n }\n }\n\n cambiarCheck(checkActual: T, estado: boolean): void {\n if (this.hasChild(0, checkActual)) {\n (this.treeControl.getChildren(checkActual) ?? []).forEach((vas: any) => {\n this.cambiarCheck(vas, estado);\n });\n }\n this.cambiarPadre(checkActual, estado);\n this.chkLista.setState((checkActual as any)[this.campoId], estado);\n }\n\n hijosActivos(tipo: 'checked' | 'indeterminate', checkActual: T): boolean {\n let totalHijos = 0;\n let cantActivo = 0;\n if (this.hasChild(0, checkActual)) {\n (this.treeControl.getChildren(checkActual) ?? []).forEach((vas: any) => {\n if (this.chkLista.getState(vas[this.campoId] + '')) {\n cantActivo++;\n }\n totalHijos++;\n });\n }\n\n switch (tipo) {\n case 'checked':\n return (cantActivo == totalHijos);\n case 'indeterminate':\n if (cantActivo == totalHijos) {\n this.chkLista.setState((checkActual as any)[this.campoId], true);\n }\n return ((cantActivo > 0) && (cantActivo != totalHijos));\n }\n return false;\n }\n\n\n classFila2(item: T): string[] {\n let clases: string[] = [];\n if (this.campoAnulado && (item as any)[this.campoAnulado] === 1) {\n clases = clases.concat(this.classAnulado);\n }\n if ((item as any)?.seleccionado) {\n clases = clases.concat(this.classSeleccionado);\n }\n clases = clases.concat(this.condicionesClaseFila(item));\n (item as any).claseFinal = clases;\n return clases;\n }\n\n classFila(item: any) {\n let claseFinal: any[] = [];\n if (this.campoAnulado && (item[this.campoAnulado] == 1)) {\n claseFinal = claseFinal.concat(this.classAnulado);\n }\n if (this.objSeleccionado == item || this.esSeleccionActual(item)) {\n claseFinal = claseFinal.concat(this.classSeleccionado);\n }\n claseFinal = claseFinal.concat(this.condicionesClaseFila(item));\n item.claseFinal = claseFinal;\n return claseFinal;\n }\n}\n\n","<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n\n <!-- Cambiar mat-tree-node plano por mat-nested-tree-node sin hijos -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<!--\n\n\n<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-tree-node class=\"!pl-0 min-h-0\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </mat-tree-node>\n\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n-->\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}