@telcomdev/ui 0.1.16 → 0.1.18

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
@@ -76,13 +76,114 @@ el borde outline permanecen visibles en todos los estados.
76
76
  />
77
77
  ```
78
78
 
79
- Ambos controles usan `TdSelectOption<T>`, son compatibles con formularios
80
- Angular y muestran su panel mediante Angular CDK Overlay.
79
+ Ambos controles son compatibles con formularios Angular y muestran su panel
80
+ mediante Angular CDK Overlay.
81
+
82
+ `td-autocomplete-select` soporta dos formas de trabajo:
83
+
84
+ ### Modo estándar
85
+
86
+ Usa `TdSelectOption<T>` cuando ya tienes opciones normalizadas:
87
+
88
+ ```ts
89
+ readonly proveedores = [
90
+ { value: 1, label: 'AMERICA MOVIL PERU S.A.C.', description: '20467534026' },
91
+ ];
92
+
93
+ proveedorId: number | null = 1;
94
+ ```
95
+
96
+ ```html
97
+ <td-autocomplete-select
98
+ label="Proveedor"
99
+ [options]="proveedores"
100
+ [(ngModel)]="proveedorId"
101
+ />
102
+ ```
103
+
104
+ ### Modo mapeado
105
+
106
+ Usa `valueKey`, `labelKey` y, opcionalmente, `descriptionKey`, `iconKey` o
107
+ `disabledKey` cuando quieres consumir DTOs reales sin mapearlos manualmente:
108
+
109
+ ```ts
110
+ readonly proveedores = [
111
+ {
112
+ proveedorId: 1,
113
+ tipoDocumentoIdentidadId: 4,
114
+ numeroDocumento: '20467534026',
115
+ nombre: 'AMERICA MOVIL PERU S.A.C.',
116
+ },
117
+ ];
118
+
119
+ proveedorId: number | null = 1;
120
+ ```
121
+
122
+ ```html
123
+ <td-autocomplete-select
124
+ label="Proveedor"
125
+ [options]="proveedores"
126
+ valueKey="proveedorId"
127
+ labelKey="nombre"
128
+ descriptionKey="numeroDocumento"
129
+ [(ngModel)]="proveedorId"
130
+ />
131
+ ```
132
+
133
+ Si el valor llega antes que las opciones, o las opciones llegan antes que el
134
+ valor, el texto visible se sincroniza automáticamente. Esta sincronización no
135
+ emite `selectionChange`; ese evento se reserva para selección o limpieza
136
+ realizada por el usuario.
81
137
 
82
138
  El comportamiento predeterminado durante el scroll es `reposition`, por lo que
83
139
  el panel permanece unido al control. Puede cambiarse con
84
140
  `scrollBehavior="close"`.
85
141
 
142
+ ## File Upload
143
+
144
+ Selector de archivos con soporte para formularios Angular, drag and drop,
145
+ validación de formatos y previsualización de imágenes/PDF mediante el visor de
146
+ archivos de la librería.
147
+
148
+ ### Variante input
149
+
150
+ ```html
151
+ <td-file-upload
152
+ label="Logo del proveedor"
153
+ variant="input"
154
+ accept="image/*"
155
+ [maxSizeMb]="2"
156
+ [(ngModel)]="logo"
157
+ />
158
+ ```
159
+
160
+ ```ts
161
+ logo: File | null = null;
162
+ ```
163
+
164
+ ### Variante dropzone con preview
165
+
166
+ ```html
167
+ <td-file-upload
168
+ label="Adjuntos del expediente"
169
+ description="Arrastra contrato, evidencia o documentos."
170
+ accept="image/*,.pdf,.xml,.xlsx,.zip"
171
+ [multiple]="true"
172
+ [maxFiles]="5"
173
+ [maxSizeMb]="8"
174
+ [(ngModel)]="adjuntos"
175
+ (filesChange)="actualizarArchivos($event)"
176
+ (rejected)="mostrarRechazos($event)"
177
+ />
178
+ ```
179
+
180
+ ```ts
181
+ adjuntos: File[] = [];
182
+ ```
183
+
184
+ Cuando `multiple` está desactivado el valor del formulario es `File | null`.
185
+ Cuando `multiple` está activado el valor es `File[]`.
186
+
86
187
  ## Tabs
87
188
 
88
189
  ```html
@@ -401,6 +502,41 @@ También funciona con formularios tradicionales:
401
502
  <td-checkbox label="Principal" [formControl]="controlPrincipal" />
402
503
  ```
403
504
 
505
+ ## Radio Button
506
+
507
+ `TdRadioGroup` permite selección única tipada y mantiene compatibilidad con
508
+ Signal Forms, `ngModel` y Reactive Forms.
509
+
510
+ ```html
511
+ <td-radio-group
512
+ label="Tipo de documento"
513
+ [options]="tiposDocumento"
514
+ [(ngModel)]="tipoDocumento"
515
+ />
516
+ ```
517
+
518
+ ```ts
519
+ readonly tiposDocumento = [
520
+ { value: 'dni', label: 'DNI' },
521
+ { value: 'ruc', label: 'RUC' },
522
+ { value: 'ce', label: 'Carné de extranjería' },
523
+ ];
524
+
525
+ tipoDocumento: 'dni' | 'ruc' | 'ce' | null = 'ruc';
526
+ ```
527
+
528
+ También cuenta con variante tipo tarjeta:
529
+
530
+ ```html
531
+ <td-radio-group
532
+ label="Canal de notificación"
533
+ variant="card"
534
+ direction="horizontal"
535
+ [options]="canales"
536
+ [formField]="fields.canal"
537
+ />
538
+ ```
539
+
404
540
  Con Signal Forms no se necesita una variable intermedia ni eventos manuales. El
405
541
  modelo debe inicializar el campo como `true` o `false`, nunca como `null`.
406
542