sapenlinea-components 0.10.86 → 0.11.88
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 +112 -15
- package/fesm2022/sapenlinea-components.mjs +199 -48
- package/fesm2022/sapenlinea-components.mjs.map +1 -1
- package/index.d.ts +97 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,35 +14,36 @@ Componente para gestionar **filtros de fecha y fecha/hora** a partir de una list
|
|
|
14
14
|
|
|
15
15
|
**Inputs:**
|
|
16
16
|
|
|
17
|
-
- `filters: FilterItem[]` (requerido)
|
|
18
|
-
- Cada `FilterItem` define un filtro disponible:
|
|
17
|
+
- `filters: FilterItem[]` (requerido) – Filtros disponibles. Cada `FilterItem`:
|
|
19
18
|
- `label: string` – Texto visible en el chip/botón.
|
|
20
19
|
- `value: string` – Identificador interno del filtro.
|
|
21
20
|
- `type: 'date' | 'datetime'` – Tipo de filtro.
|
|
22
21
|
- `placeholder?: string` – Placeholder específico.
|
|
23
22
|
- `minDate?: Date` / `maxDate?: Date` – Rango permitido.
|
|
23
|
+
- `clearTrigger: number = 0` – Al incrementar este valor desde el padre se limpia el filtro.
|
|
24
|
+
- `initialValue: Date | string | null = null` – Fecha a restaurar al inicializar (útil para volver a una pantalla con filtros previos). Al hacer clic en el botón de limpiar del chip, el valor inicial queda descartado y no se restaura automáticamente.
|
|
25
|
+
- `initialFilterType: string | null = null` – Key (`FilterItem.value`) del filtro activo a restaurar junto con `initialValue`.
|
|
24
26
|
|
|
25
27
|
**Outputs:**
|
|
26
28
|
|
|
27
29
|
- `dateSelected: EventEmitter<DateFilterSelection>` – Emite `{ filter: string; value: Date }` con el filtro activo y la fecha seleccionada.
|
|
28
30
|
- `dateChange: EventEmitter<Date | null>` – Emite la fecha seleccionada al cambiar (o `null` si se limpia).
|
|
31
|
+
- `enterPressed: EventEmitter<void>` – Emite al presionar Enter.
|
|
29
32
|
|
|
30
33
|
**Uso con formularios reactivos:**
|
|
31
34
|
|
|
32
35
|
```html
|
|
33
36
|
<lib-date-time-filter
|
|
34
37
|
[filters]="dateFilters"
|
|
38
|
+
[clearTrigger]="clearVersion"
|
|
39
|
+
[initialValue]="savedFilters.date"
|
|
40
|
+
[initialFilterType]="'date'"
|
|
35
41
|
(dateSelected)="onDateSelected($event)"
|
|
36
42
|
(dateChange)="onDateChange($event)"
|
|
37
|
-
formControlName="fechaFiltro"
|
|
38
43
|
></lib-date-time-filter>
|
|
39
44
|
```
|
|
40
45
|
|
|
41
46
|
```ts
|
|
42
|
-
const form = this.fb.group({
|
|
43
|
-
fechaFiltro: [null],
|
|
44
|
-
});
|
|
45
|
-
|
|
46
47
|
dateFilters: FilterItem[] = [
|
|
47
48
|
{ label: 'Fecha inicio', value: 'startDate', type: 'date', placeholder: 'Seleccionar fecha inicio' },
|
|
48
49
|
{ label: 'Fecha fin', value: 'endDate', type: 'date', placeholder: 'Seleccionar fecha fin' },
|
|
@@ -293,11 +294,13 @@ Componente de **filtro por texto** con chips de filtros configurables (por ejemp
|
|
|
293
294
|
|
|
294
295
|
- `filters: FilterItem[]` (requerido) – Filtros disponibles de texto.
|
|
295
296
|
- `clearTrigger: number = 0` – Al incrementar este valor desde el padre se limpian todos los filtros.
|
|
297
|
+
- `initialValues: Record<string, string> = {}` – Valores a restaurar al inicializar, donde la clave es el `FilterItem.value` y el valor es el texto. Al limpiar un chip individualmente el valor inicial queda descartado y no se restaura automáticamente.
|
|
296
298
|
|
|
297
299
|
**Outputs:**
|
|
298
300
|
|
|
299
301
|
- `filterSelected: EventEmitter<{ filter: string; value: string }>` – Emite el filtro y el valor aplicado.
|
|
300
302
|
- `valueChange: EventEmitter<string | null>` – Emite el valor actual del filtro de texto.
|
|
303
|
+
- `enterPressed: EventEmitter<void>` – Emite al presionar Enter.
|
|
301
304
|
|
|
302
305
|
**Ejemplo de uso:**
|
|
303
306
|
|
|
@@ -305,6 +308,7 @@ Componente de **filtro por texto** con chips de filtros configurables (por ejemp
|
|
|
305
308
|
<lib-input-text-filter
|
|
306
309
|
[filters]="textFilters"
|
|
307
310
|
[clearTrigger]="clearVersion"
|
|
311
|
+
[initialValues]="{ name: 'Juan', email: 'juan@example.com' }"
|
|
308
312
|
(filterSelected)="onTextFilter($event)"
|
|
309
313
|
(valueChange)="onTextValueChange($event)"
|
|
310
314
|
></lib-input-text-filter>
|
|
@@ -322,18 +326,22 @@ Componente de **filtro numérico** con múltiples chips (ej. "monto mínimo", "m
|
|
|
322
326
|
**Inputs:**
|
|
323
327
|
|
|
324
328
|
- `filters: FilterItem[]` (requerido) – Filtros numéricos.
|
|
325
|
-
- `clearTrigger: number = 0` – Limpia filtros al
|
|
329
|
+
- `clearTrigger: number = 0` – Limpia todos los filtros al incrementar.
|
|
330
|
+
- `initialValues: Record<string, string> = {}` – Valores numéricos a restaurar al inicializar, donde la clave es el `FilterItem.value`. Al limpiar un chip individualmente el valor inicial queda descartado y no se restaura automáticamente.
|
|
326
331
|
|
|
327
332
|
**Outputs:**
|
|
328
333
|
|
|
329
334
|
- `filterSelected: EventEmitter<{ filter: string; value: string }>` – Filtro seleccionado y valor.
|
|
330
335
|
- `valueChange: EventEmitter<string | null>` – Valor numérico aplicado.
|
|
336
|
+
- `enterPressed: EventEmitter<void>` – Emite al presionar Enter.
|
|
331
337
|
|
|
332
338
|
**Ejemplo de uso:**
|
|
333
339
|
|
|
334
340
|
```html
|
|
335
341
|
<lib-input-number-filter
|
|
336
342
|
[filters]="numberFilters"
|
|
343
|
+
[clearTrigger]="clearVersion"
|
|
344
|
+
[initialValues]="{ id: '42' }"
|
|
337
345
|
(filterSelected)="onNumberFilter($event)"
|
|
338
346
|
></lib-input-number-filter>
|
|
339
347
|
```
|
|
@@ -350,22 +358,28 @@ Componente de **filtro basado en select** con chips. Permite seleccionar una opc
|
|
|
350
358
|
**Inputs:**
|
|
351
359
|
|
|
352
360
|
- `filters: FilterItem[]` (requerido) – Deben incluir `options` con `{ label, value }`.
|
|
353
|
-
- `clearTrigger: number = 0` – Limpia filtros.
|
|
361
|
+
- `clearTrigger: number = 0` – Limpia todos los filtros al incrementar.
|
|
362
|
+
- `initialValues: Record<string, string> = {}` – Valores a restaurar al inicializar, donde la clave es el `FilterItem.value` y el valor es el **value** de la opción (no el label). El componente busca automáticamente el label correspondiente para mostrarlo en el chip. Al limpiar un chip individualmente el valor inicial queda descartado y no se restaura automáticamente.
|
|
354
363
|
|
|
355
364
|
**Outputs:**
|
|
356
365
|
|
|
357
366
|
- `filterSelected: EventEmitter<{ filter: string; value: string }>` – Filtro e identificador de opción seleccionada.
|
|
358
367
|
- `valueChange: EventEmitter<string | null>` – Valor del select actual.
|
|
368
|
+
- `enterPressed: EventEmitter<void>` – Emite al presionar Enter.
|
|
359
369
|
|
|
360
370
|
**Ejemplo de uso:**
|
|
361
371
|
|
|
362
372
|
```html
|
|
363
373
|
<lib-input-select-filter
|
|
364
374
|
[filters]="statusFilters"
|
|
375
|
+
[clearTrigger]="clearVersion"
|
|
376
|
+
[initialValues]="{ status: 'ACTIVE' }"
|
|
365
377
|
(filterSelected)="onStatusFilter($event)"
|
|
366
378
|
></lib-input-select-filter>
|
|
367
379
|
```
|
|
368
380
|
|
|
381
|
+
> `initialValues` recibe el value de la opción (ej. `'ACTIVE'`), no el label (`'Activo'`). El componente resuelve el label buscando en las `options` del filtro correspondiente.
|
|
382
|
+
|
|
369
383
|
---
|
|
370
384
|
|
|
371
385
|
### 8. `lib-select-custom-search` (SelectCustomSearch)
|
|
@@ -448,11 +462,23 @@ Componente de **tabla dinámica** con soporte de ordenamiento, acciones por fila
|
|
|
448
462
|
- `statusToneMap: StatusToneMap` – Mapa de estado normalizado → tono visual (`success`, `error`, `warning`, `info`, `neutral`).
|
|
449
463
|
- `statusEnumMap: Record<string, string>` – Traduce el valor crudo del estado (ej. `'ACTIVE'`) a la etiqueta que se muestra (ej. `'Activo'`). La resolución del tono usa la etiqueta traducida.
|
|
450
464
|
|
|
465
|
+
**Inputs:**
|
|
466
|
+
|
|
467
|
+
- `columns: TableColumn[]` (requerido) – Definición de columnas.
|
|
468
|
+
- `data: TableRow[]` (requerido) – Datos a mostrar.
|
|
469
|
+
- `actions: TableAction[] | ((row: TableRow) => TableAction[])` – Acciones por fila principal.
|
|
470
|
+
- `showActions: boolean = true` – Muestra/oculta columna de acciones en filas principales.
|
|
471
|
+
- `subColumns: SubColumn[]` – Columnas de las sub-filas expandibles.
|
|
472
|
+
- `subActions: TableAction[] | ((row: TableRow) => TableAction[])` – Acciones por sub-fila. Se muestran con el mismo menú contextual que las filas principales.
|
|
473
|
+
- `showSubActions: boolean = false` – Muestra/oculta la columna de acciones en sub-filas.
|
|
474
|
+
- `statusToneMap: StatusToneMap` – Mapa de estado normalizado → tono visual.
|
|
475
|
+
- `statusEnumMap: Record<string, string>` – Traduce el valor crudo del estado a la etiqueta visible.
|
|
476
|
+
|
|
451
477
|
**Tipos de columna (`type`):**
|
|
452
478
|
|
|
453
479
|
| Tipo | Descripción |
|
|
454
480
|
|---|---|
|
|
455
|
-
| `text` | Texto plano (default) |
|
|
481
|
+
| `text` | Texto plano (default). Aplica `autoWidth` automáticamente. |
|
|
456
482
|
| `number` | Número formateado |
|
|
457
483
|
| `money` | Valor monetario con formato |
|
|
458
484
|
| `date` | Fecha formateada |
|
|
@@ -461,11 +487,52 @@ Componente de **tabla dinámica** con soporte de ordenamiento, acciones por fila
|
|
|
461
487
|
| `status` | Chip de estado con color basado en `statusToneMap` |
|
|
462
488
|
| `grade` | Chip de grado con color semáforo automático (verde ≤0.9, naranja ≤2.9, rojo ≤4, gris >4). Muestra el valor con sufijo `°` |
|
|
463
489
|
| `icon-button` | Botón con ícono clicable |
|
|
464
|
-
| `email` | Email en minúsculas |
|
|
490
|
+
| `email` | Email en minúsculas. Aplica `autoWidth` automáticamente. |
|
|
491
|
+
|
|
492
|
+
**Propiedades de ancho por columna:**
|
|
493
|
+
|
|
494
|
+
| Propiedad | Tipo | Default | Descripción |
|
|
495
|
+
|---|---|---|---|
|
|
496
|
+
| `autoWidth` | `boolean` | `true` para `text`/`email` | Ajusta el ancho al contenido hasta `maxWidth`. Pasar `false` para desactivarlo en tipos `text`/`email`. |
|
|
497
|
+
| `maxWidth` | `number` | `200` | Ancho máximo en px cuando `autoWidth` está activo. |
|
|
498
|
+
| `compact` | `boolean` | `false` | Comprime la columna al mínimo posible, ajustándose exactamente al contenido sin límite de ancho. Útil para columnas de ícono o estado corto. |
|
|
499
|
+
|
|
500
|
+
```ts
|
|
501
|
+
// Columna que no crece más de 150px
|
|
502
|
+
{ key: 'placa', label: 'PLACA', type: 'text', maxWidth: 150 }
|
|
503
|
+
|
|
504
|
+
// Columna de tipo text que NO usa autoWidth (ocupa todo el espacio disponible)
|
|
505
|
+
{ key: 'descripcion', label: 'DESCRIPCIÓN', type: 'text', autoWidth: false }
|
|
506
|
+
|
|
507
|
+
// Columna compacta: se ajusta exactamente al contenido
|
|
508
|
+
{ key: 'grado', label: 'GRADO', type: 'grade', compact: true }
|
|
509
|
+
```
|
|
465
510
|
|
|
466
511
|
**Outputs:**
|
|
467
512
|
|
|
468
|
-
- `optionSelected: EventEmitter<{ action: string; row: TableRow }>` – Emite la acción seleccionada y la fila.
|
|
513
|
+
- `optionSelected: EventEmitter<{ action: string; row: TableRow }>` – Emite la acción seleccionada y la fila principal.
|
|
514
|
+
- `subOptionSelected: EventEmitter<{ action: string; row: TableRow }>` – Emite la acción seleccionada y la sub-fila.
|
|
515
|
+
- `iconAction: EventEmitter<{ action: string; row: TableRow }>` – Emite al hacer clic en un `icon-button`.
|
|
516
|
+
|
|
517
|
+
**Sub-filas con acciones (`subActions` + `showSubActions`):**
|
|
518
|
+
|
|
519
|
+
```ts
|
|
520
|
+
subActions: TableAction[] = [
|
|
521
|
+
{ key: 'view', icon: 'icon-view', label: 'Ver detalle' },
|
|
522
|
+
{ key: 'edit', icon: 'icon-edit', label: 'Editar' },
|
|
523
|
+
];
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
```html
|
|
527
|
+
<lib-table
|
|
528
|
+
[columns]="columns"
|
|
529
|
+
[data]="rows"
|
|
530
|
+
[subColumns]="subColumns"
|
|
531
|
+
[subActions]="subActions"
|
|
532
|
+
[showSubActions]="true"
|
|
533
|
+
(subOptionSelected)="onSubAction($event)"
|
|
534
|
+
/>
|
|
535
|
+
```
|
|
469
536
|
|
|
470
537
|
**Ejemplo con columna `grade`:**
|
|
471
538
|
|
|
@@ -838,9 +905,36 @@ Encabezado de sección con título, botones de acción configurables y grupo de
|
|
|
838
905
|
- `exportButtonLabel: string = 'Exportar CSV'`
|
|
839
906
|
- `exportButtonIcon: string = 'icon-export'`
|
|
840
907
|
- `showButtonBack: boolean = false`
|
|
908
|
+
- `initialFilters: Record<string, string | number | Date | null> = {}` — estado previo de filtros para restaurar al volver a la pantalla. La estructura es la misma que emite `filtersChange`. Soporta todos los tipos de filtro: texto, número, select (por value) y fecha.
|
|
841
909
|
|
|
842
910
|
> Los botones secundario y de exportación se agrupan automáticamente al final de la fila del título.
|
|
843
911
|
|
|
912
|
+
**Restaurar filtros previos (`initialFilters`):**
|
|
913
|
+
|
|
914
|
+
Patrón típico para preservar filtros al navegar entre pantallas:
|
|
915
|
+
|
|
916
|
+
```ts
|
|
917
|
+
// En el componente padre
|
|
918
|
+
savedFilters = signal<Record<string, string | number | Date | null>>({});
|
|
919
|
+
|
|
920
|
+
onFiltersChange(filters: Record<string, string | number | Date | null>) {
|
|
921
|
+
this.savedFilters.set(filters);
|
|
922
|
+
}
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
```html
|
|
926
|
+
<lib-title-filters
|
|
927
|
+
title="Comparendos"
|
|
928
|
+
[filtersConfig]="filtersConfig"
|
|
929
|
+
[initialFilters]="savedFilters()"
|
|
930
|
+
(filtersChange)="onFiltersChange($event)"
|
|
931
|
+
(applyFilters)="onApply()"
|
|
932
|
+
(clearFilters)="savedFilters.set({})"
|
|
933
|
+
/>
|
|
934
|
+
```
|
|
935
|
+
|
|
936
|
+
> Al hacer clic en "Borrar Filtros" todos los filtros se limpian, incluyendo los valores iniciales. Al limpiar un chip individual el valor inicial de ese filtro también queda descartado.
|
|
937
|
+
|
|
844
938
|
**Outputs:**
|
|
845
939
|
|
|
846
940
|
- `filtersChange: Record<string, string | number | Date | null>`
|
|
@@ -857,7 +951,8 @@ Encabezado de sección con título, botones de acción configurables y grupo de
|
|
|
857
951
|
|---|---|
|
|
858
952
|
| `icon-download` | Descargar |
|
|
859
953
|
| `icon-upload` | Cargar / subir |
|
|
860
|
-
| `icon-export` | Exportar tabla |
|
|
954
|
+
| `icon-export` | Exportar tabla / exportar CSV |
|
|
955
|
+
| `icon-add` | Agregar / nuevo registro |
|
|
861
956
|
|
|
862
957
|
**Ejemplo — con botón secundario y botón de exportar:**
|
|
863
958
|
|
|
@@ -1446,6 +1541,7 @@ Componente de **filtro de hora** con chips configurables y selector AM/PM desple
|
|
|
1446
1541
|
|
|
1447
1542
|
- `filters: FilterItem[]` (requerido) – Filtros de hora disponibles.
|
|
1448
1543
|
- `clearTrigger: number = 0` – Al incrementar este valor desde el padre se limpian todos los filtros.
|
|
1544
|
+
- `initialValues: Record<string, string> = {}` – Horas a restaurar al inicializar en formato `HH:mm` (24 h), donde la clave es el `FilterItem.value`. Al limpiar un chip individualmente el valor inicial queda descartado y no se restaura automáticamente.
|
|
1449
1545
|
|
|
1450
1546
|
**Outputs:**
|
|
1451
1547
|
|
|
@@ -1459,6 +1555,7 @@ Componente de **filtro de hora** con chips configurables y selector AM/PM desple
|
|
|
1459
1555
|
<lib-input-time-filter
|
|
1460
1556
|
[filters]="timeFilters"
|
|
1461
1557
|
[clearTrigger]="clearVersion"
|
|
1558
|
+
[initialValues]="{ startTime: '08:00', endTime: '17:00' }"
|
|
1462
1559
|
(filterSelected)="onTimeFilter($event)"
|
|
1463
1560
|
(valueChange)="onTimeChange($event)"
|
|
1464
1561
|
></lib-input-time-filter>
|
|
@@ -1466,8 +1563,8 @@ Componente de **filtro de hora** con chips configurables y selector AM/PM desple
|
|
|
1466
1563
|
|
|
1467
1564
|
```ts
|
|
1468
1565
|
timeFilters: FilterItem[] = [
|
|
1469
|
-
{ label: 'Hora inicio', value: 'startTime', type: 'time' },
|
|
1470
|
-
{ label: 'Hora fin', value: 'endTime', type: 'time' },
|
|
1566
|
+
{ label: 'Hora inicio', value: 'startTime', type: 'time', placeholder: 'Hora inicio' },
|
|
1567
|
+
{ label: 'Hora fin', value: 'endTime', type: 'time', placeholder: 'Hora fin' },
|
|
1471
1568
|
];
|
|
1472
1569
|
```
|
|
1473
1570
|
|