iatoolkit 0.3.9__py3-none-any.whl → 0.107.4__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.
Potentially problematic release.
This version of iatoolkit might be problematic. Click here for more details.
- iatoolkit/__init__.py +27 -35
- iatoolkit/base_company.py +3 -35
- iatoolkit/cli_commands.py +18 -47
- iatoolkit/common/__init__.py +0 -0
- iatoolkit/common/exceptions.py +48 -0
- iatoolkit/common/interfaces/__init__.py +0 -0
- iatoolkit/common/interfaces/asset_storage.py +34 -0
- iatoolkit/common/interfaces/database_provider.py +39 -0
- iatoolkit/common/model_registry.py +159 -0
- iatoolkit/common/routes.py +138 -0
- iatoolkit/common/session_manager.py +26 -0
- iatoolkit/common/util.py +353 -0
- iatoolkit/company_registry.py +66 -29
- iatoolkit/core.py +514 -0
- iatoolkit/infra/__init__.py +5 -0
- iatoolkit/infra/brevo_mail_app.py +123 -0
- iatoolkit/infra/call_service.py +140 -0
- iatoolkit/infra/connectors/__init__.py +5 -0
- iatoolkit/infra/connectors/file_connector.py +17 -0
- iatoolkit/infra/connectors/file_connector_factory.py +57 -0
- iatoolkit/infra/connectors/google_cloud_storage_connector.py +53 -0
- iatoolkit/infra/connectors/google_drive_connector.py +68 -0
- iatoolkit/infra/connectors/local_file_connector.py +46 -0
- iatoolkit/infra/connectors/s3_connector.py +33 -0
- iatoolkit/infra/google_chat_app.py +57 -0
- iatoolkit/infra/llm_providers/__init__.py +0 -0
- iatoolkit/infra/llm_providers/deepseek_adapter.py +278 -0
- iatoolkit/infra/llm_providers/gemini_adapter.py +350 -0
- iatoolkit/infra/llm_providers/openai_adapter.py +124 -0
- iatoolkit/infra/llm_proxy.py +268 -0
- iatoolkit/infra/llm_response.py +45 -0
- iatoolkit/infra/redis_session_manager.py +122 -0
- iatoolkit/locales/en.yaml +222 -0
- iatoolkit/locales/es.yaml +225 -0
- iatoolkit/repositories/__init__.py +5 -0
- iatoolkit/repositories/database_manager.py +187 -0
- iatoolkit/repositories/document_repo.py +33 -0
- iatoolkit/repositories/filesystem_asset_repository.py +36 -0
- iatoolkit/repositories/llm_query_repo.py +105 -0
- iatoolkit/repositories/models.py +279 -0
- iatoolkit/repositories/profile_repo.py +171 -0
- iatoolkit/repositories/vs_repo.py +150 -0
- iatoolkit/services/__init__.py +5 -0
- iatoolkit/services/auth_service.py +193 -0
- {services → iatoolkit/services}/benchmark_service.py +7 -7
- iatoolkit/services/branding_service.py +153 -0
- iatoolkit/services/company_context_service.py +214 -0
- iatoolkit/services/configuration_service.py +375 -0
- iatoolkit/services/dispatcher_service.py +134 -0
- {services → iatoolkit/services}/document_service.py +20 -8
- iatoolkit/services/embedding_service.py +148 -0
- iatoolkit/services/excel_service.py +156 -0
- {services → iatoolkit/services}/file_processor_service.py +36 -21
- iatoolkit/services/history_manager_service.py +208 -0
- iatoolkit/services/i18n_service.py +104 -0
- iatoolkit/services/jwt_service.py +80 -0
- iatoolkit/services/language_service.py +89 -0
- iatoolkit/services/license_service.py +82 -0
- iatoolkit/services/llm_client_service.py +438 -0
- iatoolkit/services/load_documents_service.py +174 -0
- iatoolkit/services/mail_service.py +213 -0
- {services → iatoolkit/services}/profile_service.py +200 -101
- iatoolkit/services/prompt_service.py +303 -0
- iatoolkit/services/query_service.py +467 -0
- iatoolkit/services/search_service.py +55 -0
- iatoolkit/services/sql_service.py +169 -0
- iatoolkit/services/tool_service.py +246 -0
- iatoolkit/services/user_feedback_service.py +117 -0
- iatoolkit/services/user_session_context_service.py +213 -0
- iatoolkit/static/images/fernando.jpeg +0 -0
- iatoolkit/static/images/iatoolkit_core.png +0 -0
- iatoolkit/static/images/iatoolkit_logo.png +0 -0
- iatoolkit/static/js/chat_feedback_button.js +80 -0
- iatoolkit/static/js/chat_filepond.js +85 -0
- iatoolkit/static/js/chat_help_content.js +124 -0
- iatoolkit/static/js/chat_history_button.js +110 -0
- iatoolkit/static/js/chat_logout_button.js +36 -0
- iatoolkit/static/js/chat_main.js +401 -0
- iatoolkit/static/js/chat_model_selector.js +227 -0
- iatoolkit/static/js/chat_onboarding_button.js +103 -0
- iatoolkit/static/js/chat_prompt_manager.js +94 -0
- iatoolkit/static/js/chat_reload_button.js +38 -0
- iatoolkit/static/styles/chat_iatoolkit.css +559 -0
- iatoolkit/static/styles/chat_modal.css +133 -0
- iatoolkit/static/styles/chat_public.css +135 -0
- iatoolkit/static/styles/documents.css +598 -0
- iatoolkit/static/styles/landing_page.css +398 -0
- iatoolkit/static/styles/llm_output.css +148 -0
- iatoolkit/static/styles/onboarding.css +176 -0
- iatoolkit/system_prompts/__init__.py +0 -0
- iatoolkit/system_prompts/query_main.prompt +30 -23
- iatoolkit/system_prompts/sql_rules.prompt +47 -12
- iatoolkit/templates/_company_header.html +45 -0
- iatoolkit/templates/_login_widget.html +42 -0
- iatoolkit/templates/base.html +78 -0
- iatoolkit/templates/change_password.html +66 -0
- iatoolkit/templates/chat.html +337 -0
- iatoolkit/templates/chat_modals.html +185 -0
- iatoolkit/templates/error.html +51 -0
- iatoolkit/templates/forgot_password.html +51 -0
- iatoolkit/templates/onboarding_shell.html +106 -0
- iatoolkit/templates/signup.html +79 -0
- iatoolkit/views/__init__.py +5 -0
- iatoolkit/views/base_login_view.py +96 -0
- iatoolkit/views/change_password_view.py +116 -0
- iatoolkit/views/chat_view.py +76 -0
- iatoolkit/views/embedding_api_view.py +65 -0
- iatoolkit/views/forgot_password_view.py +75 -0
- iatoolkit/views/help_content_api_view.py +54 -0
- iatoolkit/views/history_api_view.py +56 -0
- iatoolkit/views/home_view.py +63 -0
- iatoolkit/views/init_context_api_view.py +74 -0
- iatoolkit/views/llmquery_api_view.py +59 -0
- iatoolkit/views/load_company_configuration_api_view.py +49 -0
- iatoolkit/views/load_document_api_view.py +65 -0
- iatoolkit/views/login_view.py +170 -0
- iatoolkit/views/logout_api_view.py +57 -0
- iatoolkit/views/profile_api_view.py +46 -0
- iatoolkit/views/prompt_api_view.py +37 -0
- iatoolkit/views/root_redirect_view.py +22 -0
- iatoolkit/views/signup_view.py +100 -0
- iatoolkit/views/static_page_view.py +27 -0
- iatoolkit/views/user_feedback_api_view.py +60 -0
- iatoolkit/views/users_api_view.py +33 -0
- iatoolkit/views/verify_user_view.py +60 -0
- iatoolkit-0.107.4.dist-info/METADATA +268 -0
- iatoolkit-0.107.4.dist-info/RECORD +132 -0
- iatoolkit-0.107.4.dist-info/licenses/LICENSE +21 -0
- iatoolkit-0.107.4.dist-info/licenses/LICENSE_COMMUNITY.md +15 -0
- {iatoolkit-0.3.9.dist-info → iatoolkit-0.107.4.dist-info}/top_level.txt +0 -1
- iatoolkit/iatoolkit.py +0 -413
- iatoolkit/system_prompts/arquitectura.prompt +0 -32
- iatoolkit-0.3.9.dist-info/METADATA +0 -252
- iatoolkit-0.3.9.dist-info/RECORD +0 -32
- services/__init__.py +0 -5
- services/api_service.py +0 -75
- services/dispatcher_service.py +0 -351
- services/excel_service.py +0 -98
- services/history_service.py +0 -45
- services/jwt_service.py +0 -91
- services/load_documents_service.py +0 -212
- services/mail_service.py +0 -62
- services/prompt_manager_service.py +0 -172
- services/query_service.py +0 -334
- services/search_service.py +0 -32
- services/sql_service.py +0 -42
- services/tasks_service.py +0 -188
- services/user_feedback_service.py +0 -67
- services/user_session_context_service.py +0 -85
- {iatoolkit-0.3.9.dist-info → iatoolkit-0.107.4.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,559 @@
|
|
|
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
|
+
h1, h2, h3, h4, h5, h6 {
|
|
8
|
+
font-family: var(--font-family-sans);
|
|
9
|
+
font-weight: var(--weight-semibold);
|
|
10
|
+
line-height: var(--lh-title);
|
|
11
|
+
margin: 0 0 0.6em;
|
|
12
|
+
/* Se define un color base usando la nueva variable de branding */
|
|
13
|
+
color: var(--brand-text-heading-color);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
ul {
|
|
17
|
+
padding-left: 1.5rem; /* ~24px de indentación para la lista */
|
|
18
|
+
margin-bottom: 1rem; /* Espacio después de que termina la lista */
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
li {
|
|
22
|
+
margin-bottom: 0.5rem;
|
|
23
|
+
padding-left: 0.25rem; /* Pequeño espacio extra entre la viñeta y el texto */
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.text-muted {
|
|
27
|
+
color: #64748b;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Estilos para botones con branding */
|
|
31
|
+
.btn-branded-primary {
|
|
32
|
+
background-color: var(--brand-primary-color);
|
|
33
|
+
border-color: var(--brand-primary-color);
|
|
34
|
+
color: var(--brand-text-on-primary);
|
|
35
|
+
}
|
|
36
|
+
.btn-branded-primary:hover {
|
|
37
|
+
background-color: var(--brand-text-on-primary);
|
|
38
|
+
color: var(--brand-primary-color);
|
|
39
|
+
border-color: var(--brand-primary-color);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.btn-branded-secondary {
|
|
43
|
+
background-color: var(--brand-secondary-color);
|
|
44
|
+
border-color: var(--brand-secondary-color);
|
|
45
|
+
color: var(--brand-text-on-secondary);
|
|
46
|
+
}
|
|
47
|
+
.btn-branded-secondary:hover {
|
|
48
|
+
background-color: var(--brand-text-on-secondary);
|
|
49
|
+
color: var(--brand-secondary-color);
|
|
50
|
+
border-color: var(--brand-secondary-color);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.chat-layout-container {
|
|
54
|
+
display: flex;
|
|
55
|
+
flex-direction: column;
|
|
56
|
+
height: 100dvh;
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
padding-top: 1rem;
|
|
59
|
+
padding-bottom: 0.2rem;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
/* sección del encabezado en el chat principal */
|
|
64
|
+
.company-section {
|
|
65
|
+
border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
|
|
66
|
+
background-color: var(--brand-header-bg);
|
|
67
|
+
color: var(--brand-header-text);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Estilos para el contenedor del chat y mensajes para que exista scroll */
|
|
71
|
+
#chat-container {
|
|
72
|
+
flex-grow: 1;
|
|
73
|
+
overflow-y: auto;
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: column;
|
|
76
|
+
background-color: #fff; /* Fondo blanco para el contenedor del chat */
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* CSS para el chat principal */
|
|
80
|
+
/* esta clase defines los atributos de cada bloque */
|
|
81
|
+
.chat-block {
|
|
82
|
+
padding: 1rem;
|
|
83
|
+
border: 1px solid #dee2e6;
|
|
84
|
+
border-radius: 0.375rem; /* Borde redondeado estándar de Bootstrap */
|
|
85
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.06); /* Sombra suave y unificada */
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* El textarea "invisible" en el centro */
|
|
89
|
+
.chat-textarea {
|
|
90
|
+
flex-grow: 1;
|
|
91
|
+
background: transparent !important;
|
|
92
|
+
border: none !important;
|
|
93
|
+
box-shadow: none !important;
|
|
94
|
+
resize: none;
|
|
95
|
+
max-height: 150px;
|
|
96
|
+
min-height: 38px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* La barra "cápsula" que envuelve el texto y los iconos */
|
|
100
|
+
.chat-input-bar {
|
|
101
|
+
background-color: #ffffff;
|
|
102
|
+
border: 1px solid #dee2e6;
|
|
103
|
+
border-radius: 1rem;
|
|
104
|
+
padding: 0.1rem 0.5rem;
|
|
105
|
+
transition: all 0.2s ease-in-out;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Efecto de foco para toda la barra */
|
|
109
|
+
.chat-input-bar:focus-within {
|
|
110
|
+
border-color: #86b7fe;
|
|
111
|
+
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
|
|
112
|
+
}
|
|
113
|
+
/* La caja principal que envuelve toda el área de entrada */
|
|
114
|
+
.input-area {
|
|
115
|
+
background-color: var(--brand-prompt-assistant-bg, #f8f9fa);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
#question {
|
|
120
|
+
width: 100%;
|
|
121
|
+
font-size: 15px;
|
|
122
|
+
background: #f8f9fa;
|
|
123
|
+
color: #202123;
|
|
124
|
+
border: 1px solid #d1d5db;
|
|
125
|
+
transition: all 0.3s ease-in-out;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
#question:focus {
|
|
129
|
+
outline: none;
|
|
130
|
+
border-color: #80bdff;
|
|
131
|
+
box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Estilo del mensaje ingresado por el usuario */
|
|
135
|
+
#chat-container .message {
|
|
136
|
+
max-width: 75%;
|
|
137
|
+
min-width: fit-content;
|
|
138
|
+
width: fit-content;
|
|
139
|
+
border-radius: 12px 12px 0px 12px;
|
|
140
|
+
word-wrap: break-word;
|
|
141
|
+
display: inline-flex;
|
|
142
|
+
align-items: center;
|
|
143
|
+
align-self: flex-end;
|
|
144
|
+
text-align: left;
|
|
145
|
+
padding-left: 0.5em;
|
|
146
|
+
color: #202123;
|
|
147
|
+
font-family: Arial, sans-serif;
|
|
148
|
+
font-size: 15px;
|
|
149
|
+
line-height: 1.6;
|
|
150
|
+
background-color: #f7f7f8;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.answer-section, .error-section {
|
|
154
|
+
max-width: 100%;
|
|
155
|
+
word-wrap: break-word;
|
|
156
|
+
margin-bottom: 10px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
.answer-section {
|
|
161
|
+
align-self: flex-start;
|
|
162
|
+
max-width: 75%;
|
|
163
|
+
padding: 10px 15px;
|
|
164
|
+
font-family: "Inter", Arial, sans-serif;
|
|
165
|
+
font-size: 15px;
|
|
166
|
+
line-height: 1.6;
|
|
167
|
+
word-wrap: break-word;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.error-section {
|
|
171
|
+
align-self: flex-start;
|
|
172
|
+
max-width: 75%;
|
|
173
|
+
min-width: 250px;
|
|
174
|
+
|
|
175
|
+
color: var(--brand-danger-text, #000000); /* Color de texto de error de la marca */
|
|
176
|
+
background-color: var(--brand-danger-bg, #f8d7da); /* Fondo de error de la marca */
|
|
177
|
+
border: 1px solid var(--brand-danger-border, #f5c2c7); /* Borde de error de la marca */
|
|
178
|
+
font-style: italic;
|
|
179
|
+
font-size: 0.9rem;
|
|
180
|
+
display: flex;
|
|
181
|
+
align-items: center;
|
|
182
|
+
justify-content: start;
|
|
183
|
+
margin: 10px 0;
|
|
184
|
+
padding: 10px 15px; /* Un poco más de padding lateral */
|
|
185
|
+
opacity: 0.9;
|
|
186
|
+
border-radius: 8px; /* Bordes redondeados */
|
|
187
|
+
word-wrap: break-word; /* Asegura que el texto no se desborde */
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.error-section i {
|
|
191
|
+
color: var(--brand-danger-color, #dc3545); /* Color del icono, el rojo principal */
|
|
192
|
+
font-size: 1.2rem; /* Tamaño del icono */
|
|
193
|
+
margin-right: 10px; /* Espacio entre el icono y el texto */
|
|
194
|
+
flex-shrink: 0; /* Evita que el icono se encoja */
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* Estilo para mensajes sutiles del sistema (ej. abortado) */
|
|
198
|
+
.system-message {
|
|
199
|
+
color: var(--brand-secondary-color, #6c757d); /* Usa el color secundario o un gris por defecto */
|
|
200
|
+
font-style: italic;
|
|
201
|
+
font-size: 0.9rem;
|
|
202
|
+
display: flex;
|
|
203
|
+
align-items: center;
|
|
204
|
+
justify-content: start;
|
|
205
|
+
margin: 10px 0;
|
|
206
|
+
padding: 10px;
|
|
207
|
+
opacity: 0.8;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* Spinner */
|
|
211
|
+
.spinning {
|
|
212
|
+
animation: spin 1s linear infinite;
|
|
213
|
+
font-size: 15px; /* Tamaño del ícono */
|
|
214
|
+
display: inline-block;
|
|
215
|
+
}
|
|
216
|
+
#spinner .spinner-border {
|
|
217
|
+
color: var(--brand-primary-color);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@keyframes spin {
|
|
221
|
+
0% { transform: rotate(0deg); }
|
|
222
|
+
100% { transform: rotate(360deg); }
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
/* Estilos para el modal de archivos y ordenar icono */
|
|
227
|
+
.list-group-item {
|
|
228
|
+
display: flex;
|
|
229
|
+
justify-content: space-between;
|
|
230
|
+
align-items: center;
|
|
231
|
+
|
|
232
|
+
border: none;
|
|
233
|
+
/* separador sutil solo en la parte inferior */
|
|
234
|
+
border-bottom: 1px solid #e9ecef; /* Un gris muy claro estándar */
|
|
235
|
+
padding: 0.5rem 0.75rem;
|
|
236
|
+
|
|
237
|
+
/* animación suave para el cambio de fondo */
|
|
238
|
+
transition: background-color 0.2s ease-in-out;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* Al pasar el ratón, cambiamos el fondo para dar feedback */
|
|
242
|
+
.list-group-item:hover {
|
|
243
|
+
background-color: #f8f9fa; /* Un gris de fondo muy sutil */
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* Eliminamos el borde del último elemento para un acabado limpio */
|
|
247
|
+
.list-group-item:last-child {
|
|
248
|
+
border-bottom: none;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.file-name-modal {
|
|
252
|
+
flex: 1;
|
|
253
|
+
margin-right: 10px;
|
|
254
|
+
}
|
|
255
|
+
.remove-file-btn {
|
|
256
|
+
flex-shrink: 0;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
/* Aplica el color secundario de la marca al icono de ver archivos */
|
|
261
|
+
#view-files-button i {
|
|
262
|
+
color: var(--brand-secondary-color, #6c757d);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
#prompt-assistant-collapse .card {
|
|
266
|
+
border-radius: 1rem; /* Mismo radio que el chat-input-bar */
|
|
267
|
+
border: 1px solid var(--brand-prompt-assistant-border, #dee2e6); /* Mismo borde que el chat-input-bar */
|
|
268
|
+
box-shadow: none; /* Eliminamos la sombra por defecto del card */
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
#prompt-assistant-collapse.show .card {
|
|
272
|
+
margin-bottom: 12px !important; /* Anula el mb-2 (8px) para añadir un poco más de espacio */
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
/* Estilo UNIFICADO para los enlaces de iconos de acción */
|
|
277
|
+
.action-icon-style {
|
|
278
|
+
color: #6c757d; /* Color gris estándar por defecto */
|
|
279
|
+
transition: opacity 0.2s ease-in-out;
|
|
280
|
+
}
|
|
281
|
+
.action-icon-style:hover {
|
|
282
|
+
opacity: 0.75; /* Efecto hover sutil */
|
|
283
|
+
}
|
|
284
|
+
.action-icon-style i {
|
|
285
|
+
font-size: 1.5rem;
|
|
286
|
+
vertical-align: middle;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Aplica a los iconos de la barra de entrada inferior */
|
|
290
|
+
.chat-input-bar .d-flex a i {
|
|
291
|
+
font-size: 1.5rem;
|
|
292
|
+
vertical-align: middle;
|
|
293
|
+
color: #6c757d;
|
|
294
|
+
transition: color 0.2s ease-in-out;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/* Anulación específica para el icono de la varita mágica */
|
|
298
|
+
.chat-input-bar a[href="#prompt-assistant-collapse"] i {
|
|
299
|
+
color: var(--brand-prompt-assistant-icon-color, #6c757d);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.chat-input-bar .d-flex a:hover i {
|
|
303
|
+
color: #343a40;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* Anulación específica para el botón de ENVIAR usando su ID (Máxima Prioridad) */
|
|
307
|
+
#send-button i {
|
|
308
|
+
font-size: 1.7rem; /* Ligeramente más grande */
|
|
309
|
+
}
|
|
310
|
+
#send-button:hover i {
|
|
311
|
+
filter: brightness(85%); /* Efecto hover genérico que funciona con cualquier color */
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/* 7. Estilo para el botón de enviar cuando está deshabilitado */
|
|
315
|
+
.send-button-icon.disabled {
|
|
316
|
+
opacity: 0.4;
|
|
317
|
+
pointer-events: none; /* Lo hace no-clicable */
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.filepond--credits {
|
|
321
|
+
display: none; /* Ocultar créditos de FilePond */
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Estilo para el input de datos específicos cuando tiene contenido */
|
|
325
|
+
.specific-data-input.has-content {
|
|
326
|
+
background-color: #e9f3ed !important;
|
|
327
|
+
border-color: #198754 !important;
|
|
328
|
+
border-width: 2px !important;
|
|
329
|
+
color: #0a5833 !important;
|
|
330
|
+
font-weight: 500 !important;
|
|
331
|
+
box-shadow: 0 1px 4px rgba(25, 135, 84, 0.2) !important;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* Ajuste para la etiqueta flotante */
|
|
335
|
+
.specific-data-input.has-content + label {
|
|
336
|
+
color: #0a5833 !important;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/* Estilo para el botón de limpiar */
|
|
340
|
+
.clear-specific-data-button {
|
|
341
|
+
position: absolute;
|
|
342
|
+
top: 50%;
|
|
343
|
+
right: 15px;
|
|
344
|
+
transform: translateY(-50%);
|
|
345
|
+
z-index: 5;
|
|
346
|
+
padding: 0.25rem 0.5rem;
|
|
347
|
+
color: #6c757d;
|
|
348
|
+
background-color: transparent;
|
|
349
|
+
border: none;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.clear-specific-data-button:hover {
|
|
353
|
+
color: #212529;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.dropdown-menu-soft {
|
|
357
|
+
background-color: var(--brand-prompt-assistant-dropdown-bg, #f8f9fa);
|
|
358
|
+
border-color: var(--brand-prompt-assistant-border, #dee2e6);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.dropdown-menu-soft .dropdown-item {
|
|
362
|
+
transition: all 0.15s ease-in-out;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.dropdown-menu-soft .dropdown-item:hover,
|
|
366
|
+
.dropdown-menu-soft .dropdown-item:focus {
|
|
367
|
+
color: var(--brand-prompt-assistant-item-hover-text, #ffffff);
|
|
368
|
+
background-color: var(--brand-prompt-assistant-item-hover-bg, #495057);
|
|
369
|
+
padding-left: 1.5rem;
|
|
370
|
+
transition: all 0.15s ease-in-out;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.dropdown-menu-soft .dropdown-header {
|
|
374
|
+
background-color: var(--brand-prompt-assistant-header-bg, #495057);
|
|
375
|
+
color: var(--brand-prompt-assistant-header-text, #ffffff);
|
|
376
|
+
font-weight: 600;
|
|
377
|
+
margin: 4px;
|
|
378
|
+
padding: 0.4rem 1rem;
|
|
379
|
+
border-radius: 4px;
|
|
380
|
+
font-size: 0.85rem;
|
|
381
|
+
text-transform: none;
|
|
382
|
+
letter-spacing: normal;
|
|
383
|
+
border-bottom: none;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/* estilos para el selector de prompts */
|
|
387
|
+
.prompt-select-button {
|
|
388
|
+
color: #202123;
|
|
389
|
+
border: 2px solid var(--brand-primary-color);
|
|
390
|
+
border-radius: 0.25rem; /* Estilos de botón estándar */
|
|
391
|
+
padding: 0.5rem 1rem;
|
|
392
|
+
cursor: pointer;
|
|
393
|
+
text-align: center;
|
|
394
|
+
font-weight: 500;
|
|
395
|
+
|
|
396
|
+
/* Transición suave para el cambio en hover */
|
|
397
|
+
transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.prompt-select-button:hover {
|
|
401
|
+
background-color: var(--brand-primary-color);
|
|
402
|
+
color: var(--brand-text-on-primary);
|
|
403
|
+
|
|
404
|
+
/* Marca el borde con un glow limpio */
|
|
405
|
+
border-color: var(--brand-primary-color);
|
|
406
|
+
box-shadow: 0 0 0 3px rgba( var(--brand-primary-rgb), 0.25 );
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/* estilo de la x que limpia el prompt seleccionado */
|
|
410
|
+
#clear-selection-button {
|
|
411
|
+
position: absolute;
|
|
412
|
+
top: 50%;
|
|
413
|
+
right: 45px;
|
|
414
|
+
transform: translateY(-50%);
|
|
415
|
+
z-index: 5;
|
|
416
|
+
padding: 0.25rem 0.5rem;
|
|
417
|
+
color: #6c757d;
|
|
418
|
+
background-color: transparent;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
#clear-selection-button:hover {
|
|
422
|
+
color: #ffffff;
|
|
423
|
+
background-color: #6c757d;
|
|
424
|
+
border-radius: 0.25rem;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
#send-button i {
|
|
428
|
+
color: var(--brand-send-button-color);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/* Estilos personalizados para Toastr usando las variables de Branding */
|
|
432
|
+
|
|
433
|
+
/* --- Toast de Información (Usa el color primario de la marca) --- */
|
|
434
|
+
.toast-info {
|
|
435
|
+
/* ¡Importante! Usamos las variables CSS de tu BrandingService */
|
|
436
|
+
background-color: var(--brand-primary-color) !important;
|
|
437
|
+
color: var(--brand-text-on-primary) !important;
|
|
438
|
+
opacity: 0.95 !important;
|
|
439
|
+
}
|
|
440
|
+
.toast-info .toast-progress {
|
|
441
|
+
/* Usamos un color ligeramente más oscuro o una variante,
|
|
442
|
+
pero para simplificar, podemos empezar con el mismo */
|
|
443
|
+
background-color: rgba(0, 0, 0, 0.2) !important;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/* --- Toast de Éxito (Usa el verde por defecto o uno de marca si lo defines) --- */
|
|
447
|
+
.toast-success {
|
|
448
|
+
background-color: #198754 !important; /* Puedes crear una variable --brand-success-color si quieres */
|
|
449
|
+
color: #ffffff !important;
|
|
450
|
+
opacity: 0.95 !important;
|
|
451
|
+
}
|
|
452
|
+
.toast-success .toast-progress {
|
|
453
|
+
background-color: rgba(0, 0, 0, 0.2) !important;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/* --- Toast de Error (Usa el color de peligro de la marca) --- */
|
|
457
|
+
.toast-error{
|
|
458
|
+
background-color: var(--brand-danger-color) !important;
|
|
459
|
+
color: var(--brand-text-on-primary) !important; /* Asumimos texto blanco sobre el color de peligro */
|
|
460
|
+
opacity: 0.95 !important;
|
|
461
|
+
}
|
|
462
|
+
.toast-error .toast-progress {
|
|
463
|
+
background-color: rgba(0, 0, 0, 0.2) !important;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/* Opcional: Estilo para el botón de cierre para que contraste bien */
|
|
467
|
+
.toast-close-button {
|
|
468
|
+
color: var(--brand-text-on-primary) !important;
|
|
469
|
+
text-shadow: none !important;
|
|
470
|
+
}
|
|
471
|
+
.toast-close-button:hover {
|
|
472
|
+
opacity: 0.8;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.alert-branded-danger {
|
|
476
|
+
background-color: var(--brand-danger-bg);
|
|
477
|
+
color: var(--brand-danger-text);
|
|
478
|
+
border-color: var(--brand-danger-border);
|
|
479
|
+
}
|
|
480
|
+
/* Asegura que el texto fuerte y los enlaces dentro de la alerta también tomen el color correcto */
|
|
481
|
+
.alert-branded-danger strong,
|
|
482
|
+
.alert-branded-danger .alert-link {
|
|
483
|
+
color: inherit;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.edit-pencil {
|
|
487
|
+
color: var(--brand-secondary-color, #6c757d); /* Color secundario por defecto */
|
|
488
|
+
cursor: pointer;
|
|
489
|
+
opacity: 0.6;
|
|
490
|
+
text-decoration: none;
|
|
491
|
+
/* Transición suave para todos los cambios (color, opacidad, tamaño) */
|
|
492
|
+
transition: all 0.25s ease-in-out;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.edit-pencil:hover {
|
|
496
|
+
opacity: 1;
|
|
497
|
+
transform: scale(1.2);
|
|
498
|
+
color: var(--brand-primary-color, #4C6A8D);
|
|
499
|
+
cursor: pointer;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/* Popup de selección de modelo LLM - versión minimalista, sin branding de fondo */
|
|
503
|
+
.llm-model-popup {
|
|
504
|
+
background-color: #f9fafb; /* Fondo claro neutro */
|
|
505
|
+
border-radius: 0.5rem;
|
|
506
|
+
border: 1px solid #e5e7eb; /* Borde gris muy suave */
|
|
507
|
+
color: #111827; /* Texto principal en gris casi negro */
|
|
508
|
+
box-shadow: 0 10px 30px rgba(15, 23, 42, 0.12); /* Sombra suave y limpia */
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.llm-model-popup .card-body {
|
|
512
|
+
padding-left: 0.9rem;
|
|
513
|
+
padding-right: 0.9rem;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
.llm-model-popup .llm-model-subtitle {
|
|
517
|
+
font-size: 0.8rem;
|
|
518
|
+
color: #6b7280; /* Gris medio para el subtítulo */
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.llm-model-popup .list-group-item {
|
|
522
|
+
border: none;
|
|
523
|
+
padding-top: 0.4rem;
|
|
524
|
+
padding-bottom: 0.4rem;
|
|
525
|
+
background-color: transparent;
|
|
526
|
+
color: inherit;
|
|
527
|
+
border-radius: 0.35rem;
|
|
528
|
+
transition:
|
|
529
|
+
background-color 0.15s ease-in-out,
|
|
530
|
+
transform 0.1s ease-in-out,
|
|
531
|
+
box-shadow 0.15s ease-in-out;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/* Descripción del modelo: mismo color que el nombre, pero un poco más suave */
|
|
535
|
+
.llm-model-popup .list-group-item .text-muted {
|
|
536
|
+
color: currentColor !important;
|
|
537
|
+
opacity: 0.75;
|
|
538
|
+
font-size: 0.8rem;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/* Hover más visible, pero manteniendo el estilo minimalista */
|
|
542
|
+
.llm-model-popup .list-group-item:hover {
|
|
543
|
+
background-color: #e5e7eb; /* Gris claro para resaltar bien */
|
|
544
|
+
transform: translateX(2px);
|
|
545
|
+
box-shadow: 0 2px 6px rgba(15, 23, 42, 0.12);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/* Item activo: resalta con el primario, pero fondo muy claro */
|
|
549
|
+
.llm-model-popup .list-group-item.active {
|
|
550
|
+
background-color: #eef2ff; /* Azul/gris muy claro tipo focus */
|
|
551
|
+
color: var(--brand-primary-color, #4C6A8D);
|
|
552
|
+
border: 1px solid var(--brand-primary-color, #4C6A8D);
|
|
553
|
+
box-shadow: 0 0 0 1px rgba(37, 99, 235, 0.2);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
.llm-model-popup .list-group-item.active .text-muted {
|
|
557
|
+
color: currentColor !important;
|
|
558
|
+
opacity: 0.85;
|
|
559
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/* Estilos generales para modales */
|
|
2
|
+
|
|
3
|
+
/* Título del modal */
|
|
4
|
+
.modal-title{
|
|
5
|
+
font-size: 20px;
|
|
6
|
+
font-weight: bold;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* Estilos del header del modal*/
|
|
10
|
+
.modal-header {
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: space-between;
|
|
14
|
+
width: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Estilos del título del modal*/
|
|
18
|
+
.modal-header .modal-title {
|
|
19
|
+
margin: 0;
|
|
20
|
+
padding: 0;
|
|
21
|
+
flex: 1;
|
|
22
|
+
color: inherit;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Estilos del botón de cerrar del modal*/
|
|
26
|
+
.modal-header .close {
|
|
27
|
+
margin: 0;
|
|
28
|
+
padding: 0;
|
|
29
|
+
margin-left: auto;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Estilos del header del modal con branding */
|
|
33
|
+
.modal-header.branded {
|
|
34
|
+
background-color: var(--brand-modal-header-bg);
|
|
35
|
+
color: var(--brand-modal-header-text);
|
|
36
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
37
|
+
}
|
|
38
|
+
.modal-header.branded .btn-close {
|
|
39
|
+
filter: invert(1) grayscale(100%) brightness(200%); /* Hace el botón de cerrar visible en fondos oscuros */
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/* Tabla con el resultado del historial */
|
|
44
|
+
.thead-branded th {
|
|
45
|
+
background-color: #e9ecef; /* Un gris claro estándar de Bootstrap */
|
|
46
|
+
color: #212529; /* El color de texto oscuro por defecto */
|
|
47
|
+
font-size: 16px;
|
|
48
|
+
font-weight: bold;
|
|
49
|
+
}
|
|
50
|
+
.col-icon {
|
|
51
|
+
width: 1%;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Modal de feedback */
|
|
55
|
+
.rating-stars {
|
|
56
|
+
display: flex;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
gap: 5px;
|
|
59
|
+
margin-bottom: 15px;
|
|
60
|
+
padding-top: 5px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Estilos de las estrellas del modal de feedback */
|
|
64
|
+
.star {
|
|
65
|
+
font-size: 3rem;
|
|
66
|
+
color: #ddd;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
transition: color 0.2s ease;
|
|
69
|
+
margin: 0 2px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.star::before {
|
|
73
|
+
content: '★';
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.star:hover,
|
|
77
|
+
.star.active,
|
|
78
|
+
.star.hover-active {
|
|
79
|
+
color: var(--brand-primary-color);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* model de help */
|
|
83
|
+
.modal-body .accordion-button:not(.collapsed) {
|
|
84
|
+
background-color: var(--brand-primary-color);
|
|
85
|
+
color: var(--brand-text-on-primary);
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
box-shadow: none;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Estilo para el anillo de foco, aplicado ÚNICAMENTE cuando el botón está CERRADO y tiene foco. */
|
|
91
|
+
.modal-body .accordion-button.collapsed:focus {
|
|
92
|
+
background-color: #fff; /* Asegura fondo blanco al hacer foco en un item cerrado */
|
|
93
|
+
border-color: transparent; /* Evita bordes no deseados */
|
|
94
|
+
/* La única regla que debe estar aquí es la que dibuja el anillo de foco. */
|
|
95
|
+
box-shadow: 0 0 0 0.25rem rgba(var(--brand-primary-color-rgb), 0.25);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.icon-spaced {
|
|
99
|
+
margin-right: 10px;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.text-muted{
|
|
103
|
+
font-size:16px;
|
|
104
|
+
text-align: justify;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.feedback-text{
|
|
108
|
+
font-size: 16px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Modal de listado de archivos */
|
|
112
|
+
/* Estilos del nombre del archivo del modal de archivos y ordenar icono */
|
|
113
|
+
.file-name-modal {
|
|
114
|
+
flex: 1;
|
|
115
|
+
margin-right: 10px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Para el icono de eliminar del modal */
|
|
119
|
+
.remove-file-btn i {
|
|
120
|
+
color: #c82333
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* Estilos para el modal de archivos y ordenar icono */
|
|
124
|
+
.list-group-item {
|
|
125
|
+
display: flex;
|
|
126
|
+
justify-content: space-between;
|
|
127
|
+
align-items: center;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Estilos del botón de eliminar del modal de archivos y ordenar icono */
|
|
131
|
+
.remove-file-btn {
|
|
132
|
+
flex-shrink: 0;
|
|
133
|
+
}
|