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.
- iatoolkit/services/branding_service.py +56 -18
- iatoolkit/services/history_service.py +1 -1
- iatoolkit/static/js/chat_history.js +1 -1
- iatoolkit/static/js/chat_main.js +1 -1
- iatoolkit/static/styles/chat_iatoolkit.css +125 -402
- iatoolkit/static/styles/chat_modal.css +50 -39
- iatoolkit/templates/chat.html +30 -19
- iatoolkit/templates/chat_modals.html +9 -9
- {iatoolkit-0.10.1.dist-info → iatoolkit-0.11.0.dist-info}/METADATA +1 -1
- {iatoolkit-0.10.1.dist-info → iatoolkit-0.11.0.dist-info}/RECORD +12 -12
- {iatoolkit-0.10.1.dist-info → iatoolkit-0.11.0.dist-info}/WHEEL +0 -0
- {iatoolkit-0.10.1.dist-info → iatoolkit-0.11.0.dist-info}/top_level.txt +0 -0
|
@@ -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
|
-
#
|
|
20
|
-
"header_background_color": "#FFFFFF",
|
|
21
|
-
"header_text_color": "#6C757D",
|
|
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
|
|
28
|
-
"
|
|
29
|
-
"
|
|
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
|
-
#
|
|
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 {'
|
|
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>×</span>
|
iatoolkit/static/js/chat_main.js
CHANGED
|
@@ -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;
|
|
131
|
-
border: 1px solid #ddd;
|
|
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
|
-
|
|
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;
|
|
130
|
+
min-width: fit-content;
|
|
149
131
|
width: fit-content;
|
|
150
132
|
margin-top: 10px;
|
|
151
133
|
display: flex;
|
|
152
|
-
align-items: flex-start;
|
|
153
|
-
gap: 12px;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
border:
|
|
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;
|
|
165
|
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
|
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;
|
|
170
|
-
font-size: 1.2em;
|
|
171
|
-
padding-top: 2px;
|
|
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;
|
|
233
|
-
color: #202123;
|
|
157
|
+
background: #f8f9fa;
|
|
158
|
+
color: #202123;
|
|
234
159
|
border: 1px solid #d1d5db;
|
|
235
|
-
transition:
|
|
160
|
+
transition: all 0.3s ease-in-out;
|
|
236
161
|
}
|
|
237
162
|
|
|
238
163
|
#question:focus {
|
|
239
164
|
outline: none;
|
|
240
|
-
border-color: #
|
|
241
|
-
box-shadow: 0 0
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
367
|
-
|
|
368
|
-
|
|
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
|
-
|
|
372
|
-
|
|
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;
|
|
441
|
-
border-color: #198754 !important;
|
|
442
|
-
border-width: 2px !important;
|
|
443
|
-
color: #0a5833 !important;
|
|
444
|
-
font-weight: 500 !important;
|
|
445
|
-
box-shadow: 0 1px 4px rgba(25, 135, 84, 0.2) !important;
|
|
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;
|
|
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;
|
|
458
|
-
transform: translateY(-50%);
|
|
459
|
-
z-index: 5;
|
|
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;
|
|
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;
|
|
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;
|
|
520
|
-
background-color: #495057;
|
|
521
|
-
padding-left: 1.5rem;
|
|
522
|
-
transition: all 0.15s ease-in-out;
|
|
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;
|
|
528
|
-
color: #ffffff;
|
|
529
|
-
font-weight: 600;
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
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;
|
|
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;
|
|
326
|
+
z-index: 5;
|
|
555
327
|
padding: 0.25rem 0.5rem;
|
|
556
|
-
color: #6c757d;
|
|
328
|
+
color: #6c757d;
|
|
557
329
|
background-color: transparent;
|
|
558
330
|
}
|
|
559
331
|
|
|
560
332
|
#clear-selection-button:hover {
|
|
561
|
-
color: #212529;
|
|
333
|
+
color: #212529;
|
|
562
334
|
}
|
|
563
335
|
|
|
564
336
|
|
|
@@ -588,27 +360,9 @@
|
|
|
588
360
|
font-weight: bold;
|
|
589
361
|
}
|
|
590
362
|
|
|
591
|
-
|
|
592
|
-
#history-content .table td:nth-child(
|
|
593
|
-
|
|
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;
|
|
642
|
-
gap: 5px;
|
|
643
|
-
margin-bottom: 15px;
|
|
644
|
-
padding-top: 5px;
|
|
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;
|
|
650
|
-
color: #adb5bd;
|
|
651
|
-
cursor: pointer;
|
|
652
|
-
transition: color 0.2s, transform 0.2s;
|
|
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);
|
|
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';
|
|
668
|
-
content: "\F586";
|
|
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";
|
|
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;
|
|
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
|
-
/*
|
|
6
|
-
.
|
|
7
|
-
|
|
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
|
-
/*
|
|
49
|
-
.thead-
|
|
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(
|
|
60
|
-
|
|
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 {
|
iatoolkit/templates/chat.html
CHANGED
|
@@ -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
|
-
<
|
|
12
|
-
{{ branding.
|
|
13
|
-
|
|
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
|
|
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:
|
|
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:
|
|
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
|
-
<!--
|
|
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:
|
|
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="
|
|
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-
|
|
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>
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
68
|
-
iatoolkit/static/js/chat_main.js,sha256=
|
|
69
|
-
iatoolkit/static/styles/chat_iatoolkit.css,sha256=
|
|
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=
|
|
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=
|
|
80
|
-
iatoolkit/templates/chat_modals.html,sha256=
|
|
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.
|
|
108
|
-
iatoolkit-0.
|
|
109
|
-
iatoolkit-0.
|
|
110
|
-
iatoolkit-0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|