iatoolkit 0.10.1__py3-none-any.whl → 0.11.0__py3-none-any.whl

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.
@@ -16,39 +16,49 @@ class BrandingService:
16
16
  Define los estilos de branding por defecto para la aplicación.
17
17
  """
18
18
  self._default_branding = {
19
- # Colores del contenedor del encabezado
20
- "header_background_color": "#FFFFFF", # Fondo blanco por defecto
21
- "header_text_color": "#6C757D", # Color de texto 'muted' de Bootstrap
22
-
23
- # Estilos para el texto primario (ej. nombre de la compañía)
19
+ # --- Estilos del Encabezado Principal ---
20
+ "header_background_color": "#FFFFFF",
21
+ "header_text_color": "#6C757D",
24
22
  "primary_font_weight": "bold",
25
23
  "primary_font_size": "1rem",
24
+ "secondary_font_weight": "600",
25
+ "secondary_font_size": "0.875rem",
26
+ "tertiary_font_weight": "normal",
27
+ "tertiary_font_size": "0.75rem",
28
+ "tertiary_opacity": "0.8",
29
+
30
+ # Estilos Globales de la Marca ---
31
+ "brand_primary_color": "#0d6efd", # Azul de Bootstrap por defecto
32
+ "brand_secondary_color": "#6c757d", # Gris de Bootstrap por defecto
33
+ "brand_text_on_primary": "#FFFFFF", # Texto blanco sobre color primario
34
+ "brand_text_on_secondary": "#FFFFFF", # Texto blanco sobre color secundario
35
+
36
+ # Estilos para Alertas de Error ---
37
+ "brand_danger_color": "#dc3545", # Rojo principal para alertas
38
+ "brand_danger_bg": "#f8d7da", # Fondo rojo pálido
39
+ "brand_danger_text": "#842029", # Texto rojo oscuro
40
+ "brand_danger_border": "#f5c2c7", # Borde rojo intermedio
26
41
 
27
- # Estilos para el texto secundario (ej. ID de usuario)
28
- "secondary_font_weight": "600", # Semibold
29
- "secondary_font_size": "0.875rem" # Equivale a la clase 'small' de Bootstrap
42
+ # Estilos para Alertas Informativas ---
43
+ "brand_info_bg": "#cff4fc", # Fondo celeste pálido
44
+ "brand_info_text": "#055160", # Texto azul oscuro
45
+ "brand_info_border": "#b6effb",
30
46
 
47
+ # Color para el botón de Enviar ---
48
+ "send_button_color": "#212529" # Gris oscuro/casi negro por defecto
31
49
  }
32
50
 
33
51
  def get_company_branding(self, company: Company | None) -> dict:
34
52
  """
35
53
  Retorna los estilos de branding finales para una compañía,
36
54
  fusionando los valores por defecto con los personalizados.
37
-
38
- Args:
39
- company: El objeto Company, que puede contener un dict de branding.
40
-
41
- Returns:
42
- Un diccionario con todos los estilos de branding listos para usar en la plantilla.
43
55
  """
44
- # Empezamos con una copia de los valores por defecto
45
56
  final_branding_values = self._default_branding.copy()
46
57
 
47
- # Si la compañía existe y tiene branding personalizado, lo fusionamos.
48
58
  if company and company.branding:
49
59
  final_branding_values.update(company.branding)
50
60
 
51
- # Construimos las cadenas de estilo completas
61
+ # --- CONSTRUCCIÓN DE ESTILOS Y VARIABLES CSS ---
52
62
  header_style = (
53
63
  f"background-color: {final_branding_values['header_background_color']}; "
54
64
  f"color: {final_branding_values['header_text_color']};"
@@ -61,10 +71,38 @@ class BrandingService:
61
71
  f"font-weight: {final_branding_values['secondary_font_weight']}; "
62
72
  f"font-size: {final_branding_values['secondary_font_size']};"
63
73
  )
74
+ tertiary_text_style = (
75
+ f"font-weight: {final_branding_values['tertiary_font_weight']}; "
76
+ f"font-size: {final_branding_values['tertiary_font_size']}; "
77
+ f"opacity: {final_branding_values['tertiary_opacity']};"
78
+ )
79
+
80
+ # Generamos el bloque de variables CSS
81
+ css_variables = f"""
82
+ :root {{
83
+ --brand-primary-color: {final_branding_values['brand_primary_color']};
84
+ --brand-secondary-color: {final_branding_values['brand_secondary_color']};
85
+ --brand-text-on-primary: {final_branding_values['brand_text_on_primary']};
86
+ --brand-text-on-secondary: {final_branding_values['brand_text_on_secondary']};
87
+ --brand-modal-header-bg: {final_branding_values['header_background_color']};
88
+ --brand-modal-header-text: {final_branding_values['header_text_color']};
89
+ --brand-danger-color: {final_branding_values['brand_danger_color']};
90
+ --brand-danger-bg: {final_branding_values['brand_danger_bg']};
91
+ --brand-danger-text: {final_branding_values['brand_danger_text']};
92
+ --brand-danger-border: {final_branding_values['brand_danger_border']};
93
+ --brand-info-bg: {final_branding_values['brand_info_bg']};
94
+ --brand-info-text: {final_branding_values['brand_info_text']};
95
+ --brand-info-border: {final_branding_values['brand_info_border']};
96
+
97
+ }}
98
+ """
64
99
 
65
100
  return {
66
101
  "name": company.name if company else "IAToolkit",
67
102
  "header_style": header_style,
68
103
  "primary_text_style": primary_text_style,
69
- "secondary_text_style": secondary_text_style
104
+ "secondary_text_style": secondary_text_style,
105
+ "tertiary_text_style": tertiary_text_style,
106
+ "header_text_color": final_branding_values['header_text_color'],
107
+ "css_variables": css_variables
70
108
  }
@@ -36,7 +36,7 @@ class HistoryService:
36
36
  history = self.llm_query_repo.get_history(company, user_identifier)
37
37
 
38
38
  if not history:
39
- return {'error': 'No se pudo obtener el historial'}
39
+ return {'message': 'Historial vacio actualmente', 'history': []}
40
40
 
41
41
  history_list = [query.to_dict() for query in history]
42
42
 
@@ -41,7 +41,7 @@ $(document).ready(function () {
41
41
  } catch (error) {
42
42
  console.error("Error al cargar historial:", error);
43
43
  const errorHtml = `
44
- <div class="alert alert-danger alert-dismissible show" role="alert">
44
+ <div class="alert alert-branded-danger alert-dismissible show" role="alert">
45
45
  <strong>Error al cargar el historial:</strong> ${error.message}
46
46
  <button type="button" class="close" data-dismiss="alert">
47
47
  <span>&times;</span>
@@ -322,7 +322,7 @@ const displayUserMessage = function(message, isEditable, originalQuestion) {
322
322
  userMessage.append(messageText);
323
323
 
324
324
  if (isEditable) {
325
- const editIcon = $('<i>').addClass('bi bi-pencil-fill edit-icon').attr('title', 'Edit query').on('click', function () {
325
+ const editIcon = $('<i>').addClass('p-2 bi bi-pencil-fill edit-icon').attr('title', 'Edit query').on('click', function () {
326
326
  $('#question').val(originalQuestion).focus();
327
327
  autoResizeTextarea($('#question')[0]);
328
328
  updateSendButtonState();
@@ -1,3 +1,34 @@
1
+ /* Customización de variables de Bootstrap */
2
+ :root {
3
+ --bs-tooltip-bg: #495057; /* Gris carbón, más claro y profesional */
4
+ --bs-tooltip-opacity: 0.95; /* Ligeramente más opaco para mejor legibilidad */
5
+ }
6
+
7
+ .alert-branded-danger {
8
+ background-color: var(--brand-danger-bg);
9
+ color: var(--brand-danger-text);
10
+ border-color: var(--brand-danger-border);
11
+ }
12
+ /* Asegura que el texto fuerte y los enlaces dentro de la alerta también tomen el color correcto */
13
+ .alert-branded-danger strong,
14
+ .alert-branded-danger .alert-link {
15
+ color: inherit;
16
+ }
17
+
18
+
19
+ /* esta clase defines los atributos de cada bloque */
20
+ .chat-block {
21
+ padding: 1rem; /* Equivalente a p-3 de Bootstrap */
22
+ border: 1px solid #dee2e6; /* Borde estándar y sutil */
23
+ border-radius: 0.375rem; /* Borde redondeado estándar de Bootstrap */
24
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06); /* Sombra suave y unificada */
25
+ }
26
+
27
+ /* Estilo para la sección del encabezado */
28
+ .company-section {
29
+ border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
30
+ }
31
+
1
32
  /* Spinner */
2
33
  .spinning {
3
34
  animation: spin 1s linear infinite;
@@ -16,6 +47,7 @@
16
47
  overflow-y: auto;
17
48
  display: flex;
18
49
  flex-direction: column;
50
+ background-color: #fff; /* Fondo blanco para el contenedor del chat */
19
51
  }
20
52
  .answer-section, .error-section, .document-section {
21
53
  max-width: 100%;
@@ -23,14 +55,6 @@
23
55
  margin-bottom: 10px;
24
56
  }
25
57
 
26
- .input-container {
27
- flex: 1;
28
- display: flex;
29
- /* Organiza los elementos internos (la fila de inputs y el textarea) uno sobre otro */
30
- flex-direction: column;
31
-
32
- }
33
-
34
58
  /* Estilos para el modal de archivos y ordenar icono */
35
59
  .list-group-item {
36
60
  display: flex;
@@ -64,52 +88,13 @@
64
88
  margin-left: auto;
65
89
  }
66
90
 
67
- /* Titulo del modal */
68
- .modal-title {
69
- font-size: 1.5rem;
70
- font-weight: bold;
71
- }
72
-
73
-
74
91
  /* Para el icono de eliminar del modal */
75
92
  .remove-file-btn i {
76
93
  color: #c82333
77
94
  }
78
95
 
79
- /* Modern Header Mejorado */
80
- .modern-header {
81
- display: flex;
82
- justify-content: space-between;
83
- align-items: center;
84
- padding: 12px 30px; /* Espaciado optimizado */
85
- background: linear-gradient(90deg, #3388ff, #003399); /* Azul más claro al inicio */
86
- color: #ffffff; /* Texto blanco */
87
- box-shadow: 0 3px 5px rgba(0, 0, 0, 0.08); /* Sombra más sutil */
88
- position: sticky;
89
- top: 0;
90
- z-index: 1000;
91
- border-bottom: 1px solid rgba(255, 255, 255, 0.2); /* Línea blanca sutil abajo */
92
- }
93
-
94
- /* Ajustar el contenedor del logo */
95
- .modern-header .logo-section {
96
- display: flex;
97
- align-items: center; /* Centra verticalmente la imagen dentro del header */
98
- max-height: 100%; /* Asegura que siga el tamaño del contenedor */
99
- }
100
-
101
- /* Estilo general para la imagen del logo */
102
- .modern-header .logo-section img {
103
- max-height: 60px; /* Ajusta el tamaño máximo del logo */
104
- max-width: 100%; /* Evita desbordamiento horizontal */
105
- height: auto; /* Mantiene la proporción de la imagen */
106
- object-fit: contain; /* Evita deformaciones */
107
- }
108
-
109
-
110
96
  /* Estilo del mensaje ingresado por el usuario */
111
97
  #chat-container .message {
112
- /* Propiedades de layout y forma (se mantienen del original) */
113
98
  margin-top: 10px;
114
99
  max-width: 75%;
115
100
  min-width: fit-content;
@@ -120,15 +105,13 @@
120
105
  align-items: center;
121
106
  align-self: flex-end;
122
107
  text-align: left;
123
-
124
- /* Propiedades estéticas (adoptadas de .llm-output) */
125
108
  padding: 15px;
126
109
  font-family: Arial, sans-serif;
127
110
  font-size: 15px;
128
111
  line-height: 1.5;
129
112
  color: #333;
130
- background-color: #ffffff; /* Fondo blanco para consistencia */
131
- border: 1px solid #ddd; /* Borde sutil como en las tablas */
113
+ background-color: #ffffff;
114
+ border: 1px solid #ddd;
132
115
  }
133
116
 
134
117
 
@@ -142,177 +125,50 @@
142
125
  }
143
126
 
144
127
  .error-section {
145
- /* Layout y Alineación (Burbuja a la izquierda) */
146
- align-self: flex-start; /* Alinea a la izquierda, como los mensajes del asistente */
128
+ align-self: flex-start;
147
129
  max-width: 75%;
148
- min-width: fit-content; /* Se ajusta al contenido mínimo */
130
+ min-width: fit-content;
149
131
  width: fit-content;
150
132
  margin-top: 10px;
151
133
  display: flex;
152
- align-items: flex-start; /* Alinea el ícono con la primera línea de texto */
153
- gap: 12px; /* Un espaciado más generoso entre el ícono y el texto */
154
-
155
- /* Estilo Visual de Burbuja de Error */
156
- background-color: #fff0f0; /* Un rojo muy pálido y suave */
157
- color: #5c0f0f; /* Texto en un rojo oscuro para buena legibilidad */
158
- border: 1px solid #ffcccc; /* Borde en un tono de rojo ligeramente más oscuro */
159
- padding: 12px 18px; /* Espaciado interno optimizado */
160
- border-radius: 0 12px 12px 12px; /* Forma de burbuja (esquina superior izquierda recta) */
134
+ align-items: flex-start;
135
+ gap: 12px;
136
+ background-color: #fff0f0;
137
+ color: #5c0f0f;
138
+ border: 1px solid #ffcccc;
139
+ padding: 12px 18px;
140
+ border-radius: 0 12px 12px 12px;
161
141
  font-family: Arial, sans-serif;
162
142
  font-size: 15px;
163
143
  line-height: 1.5;
164
- word-wrap: break-word; /* Mantenemos el ajuste de texto */
165
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); /* Sombra muy sutil para darle profundidad */
144
+ word-wrap: break-word;
145
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
166
146
  }
167
147
 
168
148
  .error-section i {
169
- color: #d32f2f; /* Un rojo más vibrante para el ícono, para que destaque */
170
- font-size: 1.2em; /* Ícono un poco más grande para mayor impacto visual */
171
- padding-top: 2px; /* Pequeño ajuste para alinear visualmente mejor con el texto */
172
- }
173
-
174
-
175
- .list-unstyled {
176
- margin: 0;
177
- padding: 0;
178
- list-style: none;
179
- }
180
-
181
- /* Ajustes generales para la sección de validación */
182
- .document-section {
183
- display: flex;
184
- border-radius: 15px;
185
- margin-top: 10px;
186
- padding: 10px;
187
- text-align: left;
188
- background-color: #ffffff; /* Fondo blanco */
189
- flex-direction: column; /* Asegura que las filas se apilen verticalmente */
190
- max-width: 70%;
191
- border: 1px solid #d6d6d6; /* Borde neutro */
192
- }
193
-
194
- .row {
195
- display: flex;
196
- flex-wrap: nowrap; /* Evitar que los elementos salten de línea */
197
- }
198
-
199
- .col-auto {
200
- display: inline-block; /* Asegura que ocupen solo el ancho necesario */
201
- }
202
-
203
- .document-section .rejection-reasons {
204
- flex: 1;
205
- margin-top: 10px;
206
- margin-left: 25px;
207
- display: block;
208
- }
209
-
210
- .rejection-reasons ul {
211
- margin-left: 15px; /* Sangría para las listas */
212
- padding: 0;
213
- list-style: disc; /* Estilo de punto para las viñetas */
214
- }
215
-
216
- .document-section ul {
217
- margin-left: 10px; /* Sangría para listas */
218
- padding: 0;
219
- list-style: disc inside; /* Estilo de viñetas alineadas */
220
- }
221
-
222
-
223
- .input-container {
224
- width: 100%;
225
- display: flex;
226
- justify-content: center;
149
+ color: #d32f2f;
150
+ font-size: 1.2em;
151
+ padding-top: 2px;
227
152
  }
228
153
 
229
154
  #question {
230
155
  width: 100%;
231
156
  font-size: 15px;
232
- background: #f8f9fa; /* Fondo gris claro */
233
- color: #202123; /* Texto oscuro */
157
+ background: #f8f9fa;
158
+ color: #202123;
234
159
  border: 1px solid #d1d5db;
235
- transition: border-color 0.2s ease-in-out;
160
+ transition: all 0.3s ease-in-out;
236
161
  }
237
162
 
238
163
  #question:focus {
239
164
  outline: none;
240
- border-color: #0084ff; /* Azul vibrante */
241
- box-shadow: 0 0 5px rgba(0, 132, 255, 0.3);
242
- }
243
-
244
-
245
- .filepond--panel {
246
- padding: 0; /* Elimina cualquier relleno adicional del contenedor */
247
- }
248
-
249
- /* bordered drop area */
250
- .filepond--panel-root {
251
- background-color: transparent;
252
- }
253
-
254
- /* Contenedor de los archivos cargados (FilePond) */
255
- .filepond-container {
256
- width: 100%; /* Se estira todo lo que pueda */
257
- border: 2px dashed #adb5bd; /* Gris, igual al textarea */
258
- border-radius: 5px; /* Igual que el textarea */
259
- padding: 10px;
260
- min-height: 70px; /* Mantiene altura mínima */
261
- max-height: 200px; /* Evita que crezca demasiado */
262
- overflow-y: auto; /* Permite scroll si es necesario */
263
- background-color: #f8f9fa; /* Gris claro, igual al textarea */
264
- display: flex;
265
- align-items: center;
266
- justify-content: center;
267
- text-align: center;
268
- color: #6c757d; /* Color de prompt_llm.txt sutil */
269
- }
270
-
271
- .filepond--item {
272
- width: calc(40% - 0.5em);/* Ancho dinámico basado en el contenido */
273
- border-radius: 5px; /* Bordes curvados */
274
- text-align: left; /* Alinea el prompt_llm.txt a la izquierda */
275
- white-space: nowrap; /* Evita dividir el prompt_llm.txt en varias líneas */
276
- overflow: hidden; /* Oculta cualquier desbordamiento */
277
- text-overflow: ellipsis; /* Muestra puntos suspensivos si el prompt_llm.txt es muy largo */
278
- }
279
-
280
- .filepond--drop-label {
281
- display: none; /* Opcional: Oculta el mensaje de arrastrar y soltar si no lo necesitas */
282
- }
283
-
284
- /* the text color of the file status and info labels */
285
- .filepond--file {
286
- color: black;
287
- background-color: #d1e3f1;
288
- }
289
-
290
- .custom-confirm-button {
291
- background-color: #0066cc;
292
- color: white; /* Color del prompt_llm.txt */
293
- border: none; /* Sin borde */
294
- box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); /* Sombra */
295
- }
296
-
297
- .custom-confirm-button:hover {
298
- background-color: #0066cc; /* Color al pasar el mouse */
299
- }
300
-
301
- .custom-cancel-button {
302
- background-color: #dc3545; /* Color de fondo (rojo) */
303
- color: white; /* Color del prompt_llm.txt */
304
- }
305
-
306
- .custom-cancel-button:hover {
307
- background-color: #c82333; /* Color al pasar el mouse */
165
+ border-color: #80bdff;
166
+ box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
308
167
  }
309
168
 
310
169
  /* 1. La caja principal que envuelve toda el área de entrada */
311
170
  .input-area {
312
171
  background-color: #f8f9fa;
313
- padding: 10px;
314
- border-radius: 10px;
315
- box-shadow: 0 -2px 5px rgba(0,0,0,0.05);
316
172
  }
317
173
 
318
174
  /* 2. La barra "cápsula" que envuelve el texto y los iconos */
@@ -320,7 +176,7 @@
320
176
  background-color: #ffffff;
321
177
  border: 1px solid #dee2e6;
322
178
  border-radius: 1.5rem;
323
- padding: 0.25rem 0.5rem;
179
+ padding: 0.1rem 0.5rem;
324
180
  transition: all 0.2s ease-in-out;
325
181
  }
326
182
 
@@ -330,6 +186,16 @@
330
186
  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
331
187
  }
332
188
 
189
+ #prompt-assistant-collapse .card {
190
+ border-radius: 1.5rem; /* Mismo radio que el chat-input-bar */
191
+ border: 1px solid #dee2e6; /* Mismo borde que el chat-input-bar */
192
+ box-shadow: none; /* Eliminamos la sombra por defecto del card */
193
+ }
194
+
195
+ #prompt-assistant-collapse.show .card {
196
+ margin-bottom: 12px !important; /* Anula el mb-2 (8px) para añadir un poco más de espacio */
197
+ }
198
+
333
199
  /* 4. El textarea "invisible" en el centro */
334
200
  .chat-textarea {
335
201
  flex-grow: 1;
@@ -341,17 +207,20 @@
341
207
  min-height: 38px;
342
208
  }
343
209
 
344
- /* 5. Estilo UNIFICADO para todos los iconos de acción secundarios */
210
+ /* 5. NUEVO Estilo UNIFICADO para los enlaces de iconos de acción */
211
+ .action-icon-style {
212
+ color: #6c757d; /* Color gris estándar por defecto */
213
+ transition: opacity 0.2s ease-in-out;
214
+ }
215
+ .action-icon-style:hover {
216
+ opacity: 0.75; /* Efecto hover sutil */
217
+ }
345
218
  .action-icon-style i {
346
- color: #6c757d; /* Color gris estándar DIRECTAMENTE al icono */
347
- font-size: 1.5rem; /* Tamaño uniforme */
219
+ font-size: 1.5rem;
348
220
  vertical-align: middle;
349
- transition: color 0.2s ease-in-out;
350
- }
351
- .action-icon-style:hover i {
352
- color: #343a40; /* El color del icono cambia en hover */
353
221
  }
354
- /* Aplica también a los iconos de la barra de entrada */
222
+
223
+ /* Aplica a los iconos de la barra de entrada inferior */
355
224
  .chat-input-bar .d-flex a i {
356
225
  font-size: 1.5rem;
357
226
  vertical-align: middle;
@@ -362,14 +231,13 @@
362
231
  color: #343a40;
363
232
  }
364
233
 
365
-
366
- /* 6. Anulación de color y tamaño para el botón de ENVIAR */
367
- .send-button-icon i {
368
- color: #0d6efd !important; /* Azul (importante para anular) */
369
- font-size: 1.7rem !important; /* Ligeramente más grande para mayor énfasis */
234
+ /* 6. Anulación específica para el botón de ENVIAR usando su ID (Máxima Prioridad) */
235
+ #send-button i {
236
+ color: var(--brand-send-button-color); /* Usa la variable de branding */
237
+ font-size: 1.7rem; /* Ligeramente más grande */
370
238
  }
371
- .send-button-icon:hover i {
372
- color: #0b5ed7 !important; /* Azul más oscuro en hover */
239
+ #send-button:hover i {
240
+ filter: brightness(85%); /* Efecto hover genérico que funciona con cualquier color */
373
241
  }
374
242
 
375
243
  /* 7. Estilo para el botón de enviar cuando está deshabilitado */
@@ -384,181 +252,85 @@
384
252
  }
385
253
  }
386
254
 
387
- .edit-icon {
388
- margin-left: 8px; /* Ajusta según el espacio deseado */
389
- }
390
-
391
- .message:hover .edit-icon {
392
- color: #007bff; /* Un color azul que contrasta bien con el fondo blanco */
393
- }
394
-
395
- #chat-container {
396
- background-color: #fff; /* Fondo blanco para el contenedor del chat */
397
- box-shadow: 0 0 10px rgba(0,0,0,0.1); /* Sombra sutil */
398
- }
399
-
400
- #question {
401
- transition: box-shadow 0.3s ease-in-out;
402
- }
403
-
404
- #question:focus {
405
- border-color: #80bdff;
406
- box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
407
- }
408
-
409
-
410
255
  .filepond--credits {
411
256
  display: none; /* Ocultar créditos de FilePond */
412
257
  }
413
258
 
414
- /* Si FilePond sigue mostrando algo, intentar ocultarlo más agresivamente. */
415
- /* Se accede al contenedor principal de FilePond que se crea automáticamente */
416
- .filepond--root {
417
- display: none;
418
- visibility: hidden;
419
- height: 0;
420
- width: 0;
421
- overflow: hidden;
422
- position: absolute; /* Sacarlo del flujo del documento */
423
- left: -9999px; /* Moverlo fuera de la pantalla */
424
- }
425
-
426
- /* Estilos para la barra de tareas*/
427
- .company-section {
428
- padding: 10px;
429
- background-color: #f8f9fa;
430
- border-radius: 10px;
431
- border: 1px solid #e9ecef;
432
- margin-right: 10px;
433
- margin-bottom: 5px;
434
- text-align: right
435
- }
436
-
437
-
438
259
  /* Estilo para el input de datos específicos cuando tiene contenido */
439
260
  .specific-data-input.has-content {
440
- background-color: #e9f3ed !important; /* Fondo verde muy pálido */
441
- border-color: #198754 !important; /* Borde en verde 'success' */
442
- border-width: 2px !important; /* Borde más grueso */
443
- color: #0a5833 !important; /* Texto en verde oscuro */
444
- font-weight: 500 !important; /* Fuente un poco más gruesa */
445
- box-shadow: 0 1px 4px rgba(25, 135, 84, 0.2) !important; /* Sombra sutil y más suave */
261
+ background-color: #e9f3ed !important;
262
+ border-color: #198754 !important;
263
+ border-width: 2px !important;
264
+ color: #0a5833 !important;
265
+ font-weight: 500 !important;
266
+ box-shadow: 0 1px 4px rgba(25, 135, 84, 0.2) !important;
446
267
  }
447
268
 
448
269
  /* Ajuste para la etiqueta flotante */
449
270
  .specific-data-input.has-content + label {
450
- color: #0a5833 !important; /* Aseguramos que el color de la etiqueta coincida */
271
+ color: #0a5833 !important;
451
272
  }
452
273
 
453
274
  /* Estilo para el botón de limpiar */
454
275
  .clear-specific-data-button {
455
276
  position: absolute;
456
277
  top: 50%;
457
- right: 15px; /* Lo mueve desde la derecha */
458
- transform: translateY(-50%); /* Lo centra verticalmente */
459
- z-index: 5; /* Se asegura de que esté por encima del input */
278
+ right: 15px;
279
+ transform: translateY(-50%);
280
+ z-index: 5;
460
281
  padding: 0.25rem 0.5rem;
461
282
  color: #6c757d;
462
283
  background-color: transparent;
463
- border: none; /* Aseguramos que no tenga borde */
284
+ border: none;
464
285
  }
465
286
 
466
287
  .clear-specific-data-button:hover {
467
288
  color: #212529;
468
289
  }
469
290
 
470
-
471
- /* Estilo personalizado para un input más suave */
472
- .form-control-soft {
473
- background-color: #f8f9fa; /* Fondo gris muy claro, como en la opción 2 */
474
- border-color: #dee2e6; /* Un borde inicial muy sutil */
475
- transition: all 0.2s ease-in-out; /* Transición suave para los efectos */
476
- }
477
-
478
- /* Efecto al hacer clic (focus) */
479
- .form-control-soft:focus {
480
- border-color: #198754; /* El borde toma el color verde 'success' de Bootstrap */
481
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); /* Resplandor a juego con el borde verde */
482
- color: #000;
483
- }
484
-
485
- .btn-dropdown-soft {
486
- background-color: #f8f9fa; /* Mismo fondo gris claro que el input */
487
- border: 1px solid #dee2e6; /* Borde inicial sutil */
488
- color: #495057; /* Color de texto estándar */
489
- transition: all 0.2s ease-in-out; /* Transición suave */
490
- height: 100%; /* Asegura que tenga la misma altura que el input de al lado */
491
- }
492
-
493
- /* Efecto cuando el menú está abierto (similar al :focus del input) */
494
- .btn-dropdown-soft[aria-expanded="true"] {
495
- background-color: #ffffff;
496
- border-color: #198754; /* Borde verde 'success' */
497
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); /* Resplandor verde */
498
- }
499
-
500
- /* Pequeño ajuste al pasar el ratón para que no cambie de color a menos que esté activo */
501
- .btn-dropdown-soft:hover {
502
- background-color: #f8f9fa;
503
- border-color: #ced4da;
504
- }
505
-
506
- /* 2. Estilo para el menú desplegable y sus ítems */
507
291
  .dropdown-menu-soft {
508
292
  background-color: #f8f9fa;
509
293
  border-color: #dee2e6;
510
294
  }
511
295
 
512
- /* Estilo y efecto para cada opción de la lista */
513
296
  .dropdown-menu-soft .dropdown-item {
514
- transition: all 0.15s ease-in-out; /* Transición para el efecto hover */
297
+ transition: all 0.15s ease-in-out;
515
298
  }
516
299
 
517
300
  .dropdown-menu-soft .dropdown-item:hover,
518
301
  .dropdown-menu-soft .dropdown-item:focus {
519
- color: #ffffff; /* Nuevo color de texto: blanco */
520
- background-color: #495057; /* Nuevo color de fondo: verde oscuro */
521
- padding-left: 1.5rem; /* Mantenemos el efecto de indentación */
522
- transition: all 0.15s ease-in-out; /* Mantenemos la transición suave */
302
+ color: #ffffff;
303
+ background-color: #495057;
304
+ padding-left: 1.5rem;
305
+ transition: all 0.15s ease-in-out;
523
306
  }
524
307
 
525
- /* Estilo para las cabeceras de las categorías dentro del menú */
526
308
  .dropdown-menu-soft .dropdown-header {
527
- background-color: #495057; /* Gris oscuro estándar de Bootstrap, muy legible */
528
- color: #ffffff; /* Texto en blanco para un contraste nítido */
529
- font-weight: 600; /* Grosor semibold, ideal para este contraste */
530
-
531
- /* Pequeños ajustes para un look pulido */
532
- margin: 4px; /* Un pequeño margen para que "respire" */
533
- padding: 0.4rem 1rem; /* Espaciado interno equilibrado */
534
- border-radius: 4px; /* Bordes sutilmente redondeados */
535
- font-size: 0.85rem; /* Tamaño de fuente ajustado */
536
- text-transform: none; /* Texto en formato normal para una apariencia más limpia */
309
+ background-color: #495057;
310
+ color: #ffffff;
311
+ font-weight: 600;
312
+ margin: 4px;
313
+ padding: 0.4rem 1rem;
314
+ border-radius: 4px;
315
+ font-size: 0.85rem;
316
+ text-transform: none;
537
317
  letter-spacing: normal;
538
- border-bottom: none; /* Nos aseguramos de quitar cualquier línea inferior */
539
- }
540
-
541
-
542
- /* Estilo para el texto de placeholder */
543
- .form-control-soft::placeholder {
544
- color: #6c757d; /* Color de texto gris estándar */
545
- opacity: 1;
318
+ border-bottom: none;
546
319
  }
547
320
 
548
321
  #clear-selection-button {
549
322
  position: absolute;
550
323
  top: 50%;
551
- /* Lo movemos 45px desde la derecha para que no se superponga con la flecha del dropdown */
552
324
  right: 45px;
553
325
  transform: translateY(-50%);
554
- z-index: 5; /* Asegura que esté por encima del botón principal */
326
+ z-index: 5;
555
327
  padding: 0.25rem 0.5rem;
556
- color: #6c757d; /* Color gris estándar */
328
+ color: #6c757d;
557
329
  background-color: transparent;
558
330
  }
559
331
 
560
332
  #clear-selection-button:hover {
561
- color: #212529; /* Se oscurece un poco al pasar el mouse */
333
+ color: #212529;
562
334
  }
563
335
 
564
336
 
@@ -588,27 +360,9 @@
588
360
  font-weight: bold;
589
361
  }
590
362
 
591
- /* Control de ancho de columnas en la tabla del historial */
592
- #history-content .table td:nth-child(1) {
593
- width: 5%; /* Columna del número */
594
- }
595
-
596
- #history-content .table td:nth-child(2) {
597
- width: 20%; /* Columna de la fecha */
598
- }
599
-
600
- #history-content .table td:nth-child(3) {
601
- width: auto; /* Columna de la consulta - ocupa el resto */
602
- }
603
-
604
- /* Botones de feedback y historial */
605
- .buttons-container {
606
- display: flex;
607
- justify-content: center;
608
- align-items: center;
609
- width: 100%;
610
- gap: 12px;
611
- }
363
+ #history-content .table td:nth-child(1) { width: 5%; }
364
+ #history-content .table td:nth-child(2) { width: 20%; }
365
+ #history-content .table td:nth-child(3) { width: auto; }
612
366
 
613
367
  /* Contenedor de calificación con estrellas */
614
368
  .rating-container {
@@ -634,68 +388,37 @@
634
388
  }
635
389
 
636
390
  /* --- ESTILOS PARA EL WIDGET DE ESTRELLAS DE FEEDBACK --- */
637
-
638
- /* Contenedor para alinear las estrellas y darles espacio */
639
391
  .rating-stars {
640
392
  display: flex;
641
- justify-content: center; /* Centra las estrellas en el modal */
642
- gap: 5px; /* Espacio entre las estrellas */
643
- margin-bottom: 15px; /* Espacio debajo de las estrellas */
644
- padding-top: 5px; /* Espacio superior para que no se peguen al texto */
393
+ justify-content: center;
394
+ gap: 5px;
395
+ margin-bottom: 15px;
396
+ padding-top: 5px;
645
397
  }
646
-
647
- /* Estilo base para cada estrella */
648
398
  .star {
649
- font-size: 2rem; /* Tamaño de las estrellas */
650
- color: #adb5bd; /* Color de las estrellas inactivas (gris) */
651
- cursor: pointer; /* Cursor de mano para indicar que son clickeables */
652
- transition: color 0.2s, transform 0.2s; /* Transición suave para el color y el tamaño */
399
+ font-size: 2rem;
400
+ color: #adb5bd;
401
+ cursor: pointer;
402
+ transition: color 0.2s, transform 0.2s;
653
403
  }
654
-
655
- /* Efecto visual al pasar el mouse por encima */
656
404
  .star:hover {
657
- transform: scale(1.15); /* Agranda un poco la estrella */
405
+ transform: scale(1.15);
658
406
  }
659
-
660
- /*
661
- * La magia principal ocurre aquí.
662
- * Usamos el pseudo-elemento ::before para controlar qué ícono de Bootstrap se muestra.
663
- */
664
-
665
- /* Por defecto, todas las estrellas muestran el ícono de estrella VACÍA (`bi-star`) */
666
407
  .star::before {
667
- font-family: 'bootstrap-icons'; /* Asegúrate de que la fuente de íconos esté disponible */
668
- content: "\F586"; /* Código Unicode para el ícono `bi-star` */
408
+ font-family: 'bootstrap-icons';
409
+ content: "\F586";
669
410
  font-style: normal;
670
411
  font-weight: normal;
671
412
  line-height: 1;
672
413
  -webkit-font-smoothing: antialiased;
673
414
  }
674
-
675
- /* Cuando una estrella tiene la clase .active (seleccionada) o .hover-active (bajo el cursor)... */
676
415
  .star.active::before,
677
416
  .star.hover-active::before {
678
- content: "\F587"; /* ...cambia el contenido al ícono de estrella LLENA (`bi-star-fill`) */
417
+ content: "\F587";
679
418
  }
680
-
681
- /* Color para las estrellas seleccionadas o bajo el cursor */
682
419
  .star.active,
683
420
  .star.hover-active {
684
- color: #ffc107; /* Color dorado estándar de Bootstrap */
685
- }
686
-
687
- /*
688
- * para que la altura de un boton coincida con la altura de un componente .form-floating
689
- */
690
- .btn-form-floating-height {
691
- height: calc(3.5rem + 2px) !important;
421
+ color: #ffc107;
692
422
  }
693
423
 
694
424
 
695
- /* Estilo específico para el botón de Enviar */
696
- .send-button-icon i {
697
- color: #0d6efd; /* Azul de Bootstrap */
698
- }
699
- .send-button-icon:hover i {
700
- color: #0b5ed7; /* Azul más oscuro en hover */
701
- }
@@ -2,10 +2,51 @@
2
2
  /* Estilos generales para modales */
3
3
  /* ######################################################### */
4
4
 
5
- /* Separación del icono y el título del modal */
6
- .icon-spaced {
7
- margin-right: 10px;
5
+ /* Estilos del header del modal con branding */
6
+ .modal-header.branded {
7
+ background-color: var(--brand-modal-header-bg);
8
+ color: var(--brand-modal-header-text);
9
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
10
+ }
11
+ .modal-header.branded .btn-close {
12
+ filter: invert(1) grayscale(100%) brightness(200%); /* Hace el botón de cerrar visible en fondos oscuros */
13
+ }
14
+
15
+ /* Estilos para botones con branding */
16
+ .btn-branded-primary {
17
+ background-color: var(--brand-primary-color);
18
+ border-color: var(--brand-primary-color);
19
+ color: var(--brand-text-on-primary);
20
+ }
21
+ .btn-branded-primary:hover {
22
+ filter: brightness(90%);
23
+ color: var(--brand-text-on-primary);
24
+ }
25
+
26
+ .btn-branded-secondary {
27
+ background-color: var(--brand-secondary-color);
28
+ border-color: var(--brand-secondary-color);
29
+ color: var(--brand-text-on-secondary);
8
30
  }
31
+ .btn-branded-secondary:hover {
32
+ filter: brightness(90%);
33
+ color: var(--brand-text-on-secondary);
34
+ }
35
+
36
+ /* Estilos para alertas informativas personalizadas */
37
+ .alert-branded-info {
38
+ background-color: var(--brand-info-bg);
39
+ color: var(--brand-info-text);
40
+ border-color: var(--brand-info-border);
41
+ }
42
+ .alert-branded-info strong,
43
+ .alert-branded-info .alert-link {
44
+ color: inherit;
45
+ }
46
+ .alert-branded-info .bi { /* Asegura que los iconos también tomen el color */
47
+ color: inherit;
48
+ }
49
+
9
50
 
10
51
  /* Título del modal */
11
52
  .modal-title{
@@ -13,11 +54,6 @@
13
54
  font-weight: bold;
14
55
  }
15
56
 
16
- /* Texto del modal */
17
- .text-muted{
18
- font-size:16px;
19
- text-align: justify;
20
- }
21
57
 
22
58
  /* Estilos del header del modal*/
23
59
  .modal-header {
@@ -45,20 +81,17 @@
45
81
  /* Modal de historial */
46
82
  /* ######################################################### */
47
83
 
48
- /* Estilos cabeceras de tablas */
49
- .thead-dark th{
84
+ /* Encabezado de tabla con branding */
85
+ .thead-branded th {
86
+ background-color: var(--brand-primary-color);
87
+ color: var(--brand-text-on-primary);
50
88
  font-size: 16px;
51
89
  font-weight: bold;
52
90
  }
53
91
 
54
- /* Control de ancho de columnas en la tabla del historial */
55
- #history-content .table td:nth-child(1) {
56
- width: 5%; /* Columna del número */
57
- }
58
92
 
59
- #history-content .table td:nth-child(2) {
60
- width: 23%; /* Columna de la fecha */
61
- }
93
+ #history-content .table td:nth-child(1) { width: 5%; }
94
+ #history-content .table td:nth-child(2) { width: 23%; }
62
95
 
63
96
  #history-content .table td:nth-child(3) {
64
97
  width: auto; /* Columna de la consulta - ocupa el resto */
@@ -69,28 +102,6 @@
69
102
  /* ######################################################### */
70
103
 
71
104
  /* Contenedor de calificación del modal de feedback */
72
- .rating-container {
73
- text-align: center;
74
- margin: 10px 0 0 0;
75
- display: flex;
76
- flex-direction: column;
77
- justify-content: center;
78
- align-items: center;
79
- gap: 5px;
80
- width: 100%;
81
- }
82
-
83
- /* Contenedor de estrellas del modal de feedback */
84
- .rating-stars-container{
85
- text-align: center;
86
- margin: 2px 0 0 0;
87
- display: flex;
88
- flex-direction: row;
89
- justify-content: center;
90
- align-items: center;
91
- gap: 10px;
92
- width: 100%;
93
- }
94
105
 
95
106
  /* Estilos de las estrellas del modal de feedback */
96
107
  .star {
@@ -3,16 +3,26 @@
3
3
  {% block title %}IAToolkit{% endblock %}
4
4
 
5
5
  {% block content %}
6
+
7
+ <style>
8
+ {{ branding.css_variables | safe }}
9
+ </style>
10
+
6
11
  <!-- Sección de encabezado con el usuario conectado -->
7
- <div class="company-section d-flex justify-content-between align-items-center px-3 py-2"
12
+ <div id="company-section" class="company-section d-flex justify-content-between align-items-center px-3 py-2"
8
13
  style="{{ branding.header_style }}">
9
14
 
10
- <!-- Izquierda: Nombre de la Empresa -->
11
- <span style="{{ branding.primary_text_style }}">
12
- {{ branding.name }}
13
- </span>
15
+ <!-- Izquierda: Nombre de la Empresa y atribución "Powered by" -->
16
+ <div class="d-flex align-items-center">
17
+ <span style="{{ branding.primary_text_style }}">
18
+ {{ branding.name }}
19
+ </span>
20
+ <span class="ms-2" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Powered by IAToolkit">
21
+ <i class="bi bi-info-circle" style="color: {{ branding.header_text_color }}; opacity: 0.7; font-size: 0.9rem;"></i>
22
+ </span>
23
+ </div>
14
24
 
15
- <!-- Derecha: Grupo de información y acciones del usuario -->
25
+ <!-- Derecha: Grupo de información y acciones para el usuario -->
16
26
  <div class="d-flex align-items-center">
17
27
  <!-- 1. ID de Usuario -->
18
28
  <span style="{{ branding.secondary_text_style }}">
@@ -24,24 +34,18 @@
24
34
 
25
35
  <!-- 3. Iconos de Acción -->
26
36
  <a href="javascript:void(0);" id="history-button"
27
- class="action-icon-style" title="Historial con mis consultas" style="color: inherit;">
37
+ class="action-icon-style" title="Historial con mis consultas" style="color: {{ branding.header_text_color }};">
28
38
  <i class="bi bi-clock-history"></i>
29
39
  </a>
30
40
  <a href="javascript:void(0);" id="send-feedback-button"
31
- class="ms-3 action-icon-style" title="Tu feedback es muy importante" style="color: inherit;">
41
+ class="ms-3 action-icon-style" title="Tu feedback es muy importante" style="color: {{ branding.header_text_color }};">
32
42
  <i class="bi bi-emoji-smile"></i>
33
43
  </a>
34
44
 
35
- <!-- 4. Powered by (con mayor separación) -->
36
- <span class="text-muted ms-4" style="{{ branding.secondary_text_style }}">
37
- Powered by <strong>IAToolkit</strong>
38
- </span>
39
-
40
-
41
- <!-- 5. Icono de cerrar sesión (al final) -->
45
+ <!-- Icono de cerrar sesión (al final) -->
42
46
  {% if user.email %}
43
47
  <a href="{{ url_for('logout', company_short_name=company_short_name) }}"
44
- class="ms-3 action-icon-style" title="Cerrar sesión" style="color: inherit;">
48
+ class="ms-3 action-icon-style" title="Cerrar sesión" style="color: {{ branding.header_text_color }} !important;">
45
49
  <i class="bi bi-box-arrow-right"></i>
46
50
  </a>
47
51
  {% endif %}
@@ -50,7 +54,7 @@
50
54
  </div>
51
55
 
52
56
  <div id="chat-container"
53
- class="mt-2 p-3 border border-2 rounded flex-grow-1"
57
+ class="chat-block mt-2 flex-grow-1"
54
58
  style="overflow-y: auto;">
55
59
  <div id="chat-messages">
56
60
  <!-- Mensaje de bienvenida estático -->
@@ -65,7 +69,7 @@
65
69
  <input type="file" id="file-upload" class="filepond" data-max-files="5" multiple>
66
70
  </div>
67
71
 
68
- <div class="input-area mt-2 mb-2">
72
+ <div id="input-area" class="input-area chat-block mt-2 mb-2">
69
73
 
70
74
  <!-- 1. Contenido Colapsable del Asistente de prompts -->
71
75
  <div class="collapse" id="prompt-assistant-collapse">
@@ -110,7 +114,7 @@
110
114
  </div>
111
115
 
112
116
  <!-- 2. La Barra de Entrada Principal -->
113
- <div class="chat-input-bar d-flex align-items-center">
117
+ <div id="chat-input-bar" class="chat-input-bar d-flex align-items-center">
114
118
  <!-- Iconos de la izquierda -->
115
119
  <div class="d-flex align-items-center">
116
120
  <!-- BOTÓN PARA CONTROLAR EL COLLAPSE -->
@@ -186,5 +190,12 @@
186
190
  });
187
191
  }
188
192
  });
193
+ document.addEventListener('DOMContentLoaded', function () {
194
+ // Inicializar todos los tooltips de la página
195
+ var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
196
+ var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
197
+ return new bootstrap.Tooltip(tooltipTriggerEl)
198
+ })
199
+ });
189
200
  </script>
190
201
  {% endblock %}
@@ -2,7 +2,7 @@
2
2
  <div class="modal fade" id="uploadedFilesModal" tabindex="-1" aria-labelledby="uploadedFilesModalLabel" aria-hidden="true">
3
3
  <div class="modal-dialog">
4
4
  <div class="modal-content">
5
- <div class="modal-header">
5
+ <div class="modal-header branded">
6
6
  <h5 class="modal-title" id="uploadedFilesModalLabel">Archivos Cargados</h5>
7
7
  <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
8
8
  </div>
@@ -12,7 +12,7 @@
12
12
  </ul>
13
13
  </div>
14
14
  <div class="modal-footer">
15
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
15
+ <button type="button" class="btn btn-branded-secondary" data-bs-dismiss="modal">Cerrar</button>
16
16
  </div>
17
17
  </div>
18
18
  </div>
@@ -22,7 +22,7 @@
22
22
  <div class="modal fade" id="feedbackModal" tabindex="-1" aria-labelledby="feedbackModalLabel" aria-hidden="true">
23
23
  <div class="modal-dialog modal-dialog-centered">
24
24
  <div class="modal-content">
25
- <div class="modal-header">
25
+ <div class="modal-header branded">
26
26
  <h5 class="modal-title" id="feedbackModalLabel">
27
27
  <i class="bi bi-chat-dots me-3"></i>Tu Opinión es Importante
28
28
  </h5>
@@ -52,10 +52,10 @@
52
52
  </div>
53
53
  </div>
54
54
  <div class="modal-footer">
55
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
55
+ <button type="button" class="btn btn-branded-secondary" data-bs-dismiss="modal">
56
56
  <i class="bi bi-x-circle me-1"></i>Cancelar
57
57
  </button>
58
- <button type="button" class="btn btn-primary" id="submit-feedback">
58
+ <button type="button" class="btn btn-branded-primary" id="submit-feedback">
59
59
  <i class="bi bi-send me-1"></i>Enviar
60
60
  </button>
61
61
  </div>
@@ -67,7 +67,7 @@
67
67
  <div class="modal fade" id="historyModal" tabindex="-1" aria-labelledby="historyModalLabel" aria-hidden="true">
68
68
  <div class="modal-dialog modal-lg modal-dialog-centered">
69
69
  <div class="modal-content">
70
- <div class="modal-header">
70
+ <div class="modal-header branded">
71
71
  <h5 class="modal-title" id="historyModalLabel">
72
72
  <i class="bi bi-clock-history me-3"></i>Historial de Consultas
73
73
  </h5>
@@ -85,13 +85,13 @@
85
85
  </div>
86
86
  <div id="history-content" style="display: none;">
87
87
  <!-- Texto explicativo -->
88
- <div class="alert alert-info mb-3" role="alert">
88
+ <div class="alert alert-branded-info mb-3" role="alert">
89
89
  <i class="bi bi-info-circle me-2"></i>
90
90
  <strong>Tip:</strong> Haz clic en cualquier pregunta del historial para copiarla automáticamente al área de texto.
91
91
  </div>
92
92
  <div class="table-responsive">
93
93
  <table class="table table-striped table-hover">
94
- <thead class="thead-dark">
94
+ <thead class="thead-branded">
95
95
  <tr>
96
96
  <th scope="col">#</th>
97
97
  <th scope="col">Fecha</th>
@@ -106,7 +106,7 @@
106
106
  </div>
107
107
  </div>
108
108
  <div class="modal-footer">
109
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
109
+ <button type="button" class="btn btn-branded-secondary" data-bs-dismiss="modal">
110
110
  <i class="bi bi-x-circle me-1"></i>Cerrar
111
111
  </button>
112
112
  </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.10.1
3
+ Version: 0.11.0
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -36,12 +36,12 @@ iatoolkit/repositories/tasks_repo.py,sha256=icVO_r2oPagGnnBhwVFzznnvEEU2EAx-2dlW
36
36
  iatoolkit/repositories/vs_repo.py,sha256=UkpmQQiocgM5IwRBmmWhw3HHzHP6zK1nN3J3TcQgjhc,5300
37
37
  iatoolkit/services/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
38
38
  iatoolkit/services/benchmark_service.py,sha256=CdbFYyS3FHFhNzWQEa9ZNjUlmON10DT1nKNbZQ1EUi8,5880
39
- iatoolkit/services/branding_service.py,sha256=UG-cuVrMmxXRqSxOniDXew52D4WZYH8PZ84DW8EdLuo,2632
39
+ iatoolkit/services/branding_service.py,sha256=OiyH8aRyy3Q3EWZDINXS-y9TkrIt-GcA7cK2esw_7Ws,4899
40
40
  iatoolkit/services/dispatcher_service.py,sha256=ykR1ye6McyCCuaBgwH6r3-PqcLAr4v4ApkPazMSBzbs,14040
41
41
  iatoolkit/services/document_service.py,sha256=nMXrNtbHQuc9pSaten0LvKY0kT8_WngBDmZJUP3jNPw,5936
42
42
  iatoolkit/services/excel_service.py,sha256=CJGhu7cQl9J6y_ZWSJ-M63Xm-RXR9Zs66oOR2NJErZQ,3868
43
43
  iatoolkit/services/file_processor_service.py,sha256=B1sUUhZNFf-rT4_1wrD38GKNoBFMp2g0dYrXYMCWe2E,4122
44
- iatoolkit/services/history_service.py,sha256=JwW958tYTrcdWSP5TRoDgDtBdGCvWIG4fnmHsrXLQ-8,1617
44
+ iatoolkit/services/history_service.py,sha256=ZlYfaSHOcCxxc6ICTnqflaGBlzctpJdNUwXpUPG5xWI,1630
45
45
  iatoolkit/services/jwt_service.py,sha256=YoZ9h7_o9xBko-arNQv4MbcwnxoSWVNj4VbZmMo_QGY,3908
46
46
  iatoolkit/services/load_documents_service.py,sha256=ZpB0BZ3qX1fGJGBtZtMLbFdWWx0hkPoeCS3OqJKwCTs,7291
47
47
  iatoolkit/services/mail_service.py,sha256=2h-fcF3swZDya_o7IpgXkmuj3iEVHVCiHi7oVxU99sQ,2182
@@ -64,11 +64,11 @@ iatoolkit/static/images/logo_umayor.png,sha256=FHr1wvI8uDn1YRbRcLSRLBOc0mYusHx9U
64
64
  iatoolkit/static/images/upload.png,sha256=zh5FiINURpaWZQF86bF_gALBX4W1c4aLp5wPQO9xGXI,296
65
65
  iatoolkit/static/js/chat_feedback.js,sha256=_izl49hFEUZYREcJoaPukpTs0YjDgJYUu-QfPt5Ll2s,4398
66
66
  iatoolkit/static/js/chat_filepond.js,sha256=mzXafm7a506EpM37KATTK3zvAswO1E0KSUY1vKbwuRc,3163
67
- iatoolkit/static/js/chat_history.js,sha256=_bmwmMl9DL37FWJgoSS74j3LSqckD93C6fktB9-PxZk,3901
68
- iatoolkit/static/js/chat_main.js,sha256=zVDERp3_WZBTeP3N-gCf0IVTWbKToUB6L_lUaEi56A8,15149
69
- iatoolkit/static/styles/chat_iatoolkit.css,sha256=ZPQAgLT0HIeXjZC_EY8xACmVdjEp7spdPKFsTTIB-k0,20283
67
+ iatoolkit/static/js/chat_history.js,sha256=4eRLLjP5cn2F0FOWxqT4qMh49R2PDoGu1S3VyevIndw,3909
68
+ iatoolkit/static/js/chat_main.js,sha256=yPBoWuTt2EpukiYJq-FRLmIQ6wC8Gc_kv1qE454W33c,15153
69
+ iatoolkit/static/styles/chat_iatoolkit.css,sha256=R70M2BOhj0lo9gT0pBcjDwAaZwo-lG7agmmgIjwJfi0,9726
70
70
  iatoolkit/static/styles/chat_info.css,sha256=17DbgoNYE21VYWfb5L9-QLCpD2R1idK4imKRLwXtJLY,1058
71
- iatoolkit/static/styles/chat_modal.css,sha256=67qwltu-QS-sU0d_fSeTIiXwcNjfAnQQtmsgStx-ezk,3047
71
+ iatoolkit/static/styles/chat_modal.css,sha256=pE7JY5D63Ds_d2FKdmxym4sevvg-2Mf7yo-gB7KA9vE,3730
72
72
  iatoolkit/static/styles/llm_output.css,sha256=AlxgRSOleeCk2dLAqFWVaQ-jwZiJjcpC5rHuUv3T6VU,2312
73
73
  iatoolkit/system_prompts/format_styles.prompt,sha256=MSMe1qvR3cF_0IbFshn8R0z6Wx6VCHQq1p37rpu5wwk,3576
74
74
  iatoolkit/system_prompts/query_main.prompt,sha256=w_9ybgWgiQH4V_RbAXqsvz0M7oOuiyhxcwf-D0CgfA4,3017
@@ -76,8 +76,8 @@ iatoolkit/system_prompts/sql_rules.prompt,sha256=y4nURVnb9AyFwt-lrbMNBHHtZlhk6kC
76
76
  iatoolkit/templates/about.html,sha256=ciC08grUVz5qLzdzDDqDX31xirg5PrJIRYabWpV9oA8,294
77
77
  iatoolkit/templates/base.html,sha256=LXXB8oPrcBFkf2pLfOSyAaSh66kHbs4SEujpFL3h9Nw,2163
78
78
  iatoolkit/templates/change_password.html,sha256=DFfQSFcZ2YJZNFis2IXfzEKStxTf4i9f4eQ_6GiyNs8,2342
79
- iatoolkit/templates/chat.html,sha256=d0TCeDKEI2fZCepThqRx3xqUDfgnCSFKwdE8Cqq3t5s,8587
80
- iatoolkit/templates/chat_modals.html,sha256=9OtJHRMeBup8zojPnUqSl7Fd5StPdvOZMs2MiJPqVFY,5704
79
+ iatoolkit/templates/chat.html,sha256=IwUbjF5FpRxZEZ8Dz_qe_KTdAgfWatrKTuPhOsXqUlM,9306
80
+ iatoolkit/templates/chat_modals.html,sha256=3CQ430bwhebq6rAJ6Bk12PQDjt9YenqNXm5thC5WP2Y,5771
81
81
  iatoolkit/templates/error.html,sha256=BNF-7z8AYL5vF4ZMUFMrOBt8c85kCFrm9qSHn9EiHWg,540
82
82
  iatoolkit/templates/forgot_password.html,sha256=1lUbKg9CKnQdnySplceY_pibwYne1-mOlM38fqI1kW8,1563
83
83
  iatoolkit/templates/header.html,sha256=179agI7rnYwP_rvJNXIiVde5E8Ec5649_XKq6eew2Hk,1263
@@ -104,7 +104,7 @@ iatoolkit/views/tasks_review_view.py,sha256=keLsLCyOTTlcoIapnB_lbuSvLwrPVZVpBiFC
104
104
  iatoolkit/views/tasks_view.py,sha256=a3anTXrJTTvbQuc6PSpOzidLKQFL4hWa7PI2Cppcz8w,4110
105
105
  iatoolkit/views/user_feedback_view.py,sha256=G37zmP8P4LvZrSymNJ5iFXhLZg1A3BEwRfTpH1Iam5w,2652
106
106
  iatoolkit/views/verify_user_view.py,sha256=a3q4wHJ8mKAEmgbNTOcnX4rMikROjOR3mHvCr30qGGA,2351
107
- iatoolkit-0.10.1.dist-info/METADATA,sha256=HQjVa4XstjTkOTiSsiQan7QknkV0o1T_NPKsLC2iv2g,9301
108
- iatoolkit-0.10.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
109
- iatoolkit-0.10.1.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
110
- iatoolkit-0.10.1.dist-info/RECORD,,
107
+ iatoolkit-0.11.0.dist-info/METADATA,sha256=RT3k8OHHUmr7MPpEeS2pTCfQROC2lgQ1nFjGLA2nLCU,9301
108
+ iatoolkit-0.11.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
109
+ iatoolkit-0.11.0.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
110
+ iatoolkit-0.11.0.dist-info/RECORD,,