iatoolkit 0.8.1__py3-none-any.whl → 0.63.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 +8 -34
- iatoolkit/base_company.py +14 -3
- iatoolkit/common/routes.py +83 -52
- iatoolkit/common/session_manager.py +0 -1
- iatoolkit/common/util.py +0 -27
- iatoolkit/iatoolkit.py +61 -46
- iatoolkit/infra/llm_client.py +7 -8
- iatoolkit/infra/openai_adapter.py +1 -1
- iatoolkit/infra/redis_session_manager.py +48 -2
- iatoolkit/repositories/database_manager.py +17 -2
- iatoolkit/repositories/models.py +31 -6
- iatoolkit/repositories/profile_repo.py +7 -2
- iatoolkit/services/auth_service.py +188 -0
- iatoolkit/services/branding_service.py +147 -0
- iatoolkit/services/dispatcher_service.py +10 -40
- iatoolkit/services/excel_service.py +15 -15
- iatoolkit/services/history_service.py +3 -12
- iatoolkit/services/jwt_service.py +15 -24
- iatoolkit/services/onboarding_service.py +43 -0
- iatoolkit/services/profile_service.py +97 -44
- iatoolkit/services/query_service.py +124 -81
- iatoolkit/services/tasks_service.py +1 -1
- iatoolkit/services/user_feedback_service.py +67 -31
- iatoolkit/services/user_session_context_service.py +112 -54
- iatoolkit/static/images/fernando.jpeg +0 -0
- iatoolkit/static/js/{chat_feedback.js → chat_feedback_button.js} +6 -11
- iatoolkit/static/js/chat_history_button.js +126 -0
- iatoolkit/static/js/chat_logout_button.js +36 -0
- iatoolkit/static/js/chat_main.js +130 -220
- iatoolkit/static/js/chat_onboarding_button.js +97 -0
- iatoolkit/static/js/chat_prompt_manager.js +94 -0
- iatoolkit/static/js/chat_reload_button.js +52 -0
- iatoolkit/static/styles/chat_iatoolkit.css +329 -507
- iatoolkit/static/styles/chat_modal.css +95 -56
- iatoolkit/static/styles/landing_page.css +182 -0
- iatoolkit/static/styles/onboarding.css +169 -0
- iatoolkit/system_prompts/query_main.prompt +3 -12
- iatoolkit/templates/_company_header.html +20 -0
- iatoolkit/templates/_login_widget.html +40 -0
- iatoolkit/templates/base.html +8 -3
- iatoolkit/templates/change_password.html +54 -37
- iatoolkit/templates/chat.html +149 -66
- iatoolkit/templates/chat_modals.html +47 -18
- iatoolkit/templates/error.html +41 -8
- iatoolkit/templates/forgot_password.html +37 -24
- iatoolkit/templates/index.html +140 -0
- iatoolkit/templates/login_simulation.html +34 -0
- iatoolkit/templates/onboarding_shell.html +105 -0
- iatoolkit/templates/signup.html +64 -66
- iatoolkit/views/base_login_view.py +81 -0
- iatoolkit/views/change_password_view.py +23 -12
- iatoolkit/views/external_login_view.py +61 -28
- iatoolkit/views/{file_store_view.py → file_store_api_view.py} +9 -2
- iatoolkit/views/forgot_password_view.py +23 -13
- iatoolkit/views/history_api_view.py +52 -0
- iatoolkit/views/home_view.py +58 -25
- iatoolkit/views/index_view.py +14 -0
- iatoolkit/views/init_context_api_view.py +68 -0
- iatoolkit/views/llmquery_api_view.py +45 -0
- iatoolkit/views/login_simulation_view.py +81 -0
- iatoolkit/views/login_view.py +118 -34
- iatoolkit/views/logout_api_view.py +45 -0
- iatoolkit/views/{prompt_view.py → prompt_api_view.py} +7 -7
- iatoolkit/views/signup_view.py +38 -29
- iatoolkit/views/{tasks_view.py → tasks_api_view.py} +10 -36
- iatoolkit/views/tasks_review_api_view.py +55 -0
- iatoolkit/views/{user_feedback_view.py → user_feedback_api_view.py} +16 -31
- iatoolkit/views/verify_user_view.py +13 -8
- {iatoolkit-0.8.1.dist-info → iatoolkit-0.63.4.dist-info}/METADATA +2 -2
- iatoolkit-0.63.4.dist-info/RECORD +113 -0
- {iatoolkit-0.8.1.dist-info → iatoolkit-0.63.4.dist-info}/top_level.txt +0 -1
- iatoolkit/common/auth.py +0 -200
- iatoolkit/static/images/arrow_up.png +0 -0
- iatoolkit/static/images/diagrama_iatoolkit.jpg +0 -0
- iatoolkit/static/images/logo_clinica.png +0 -0
- iatoolkit/static/images/logo_iatoolkit.png +0 -0
- iatoolkit/static/images/logo_maxxa.png +0 -0
- iatoolkit/static/images/logo_notaria.png +0 -0
- iatoolkit/static/images/logo_tarjeta.png +0 -0
- iatoolkit/static/images/logo_umayor.png +0 -0
- iatoolkit/static/images/upload.png +0 -0
- iatoolkit/static/js/chat_history.js +0 -117
- iatoolkit/templates/home.html +0 -201
- iatoolkit/templates/login.html +0 -43
- iatoolkit/views/chat_token_request_view.py +0 -98
- iatoolkit/views/chat_view.py +0 -51
- iatoolkit/views/download_file_view.py +0 -58
- iatoolkit/views/external_chat_login_view.py +0 -88
- iatoolkit/views/history_view.py +0 -57
- iatoolkit/views/llmquery_view.py +0 -65
- iatoolkit/views/tasks_review_view.py +0 -83
- iatoolkit-0.8.1.dist-info/RECORD +0 -175
- tests/__init__.py +0 -5
- tests/common/__init__.py +0 -0
- tests/common/test_auth.py +0 -279
- tests/common/test_routes.py +0 -42
- tests/common/test_session_manager.py +0 -59
- tests/common/test_util.py +0 -444
- tests/companies/__init__.py +0 -5
- tests/conftest.py +0 -36
- tests/infra/__init__.py +0 -5
- tests/infra/connectors/__init__.py +0 -5
- tests/infra/connectors/test_google_drive_connector.py +0 -107
- tests/infra/connectors/test_local_file_connector.py +0 -85
- tests/infra/connectors/test_s3_connector.py +0 -95
- tests/infra/test_call_service.py +0 -92
- tests/infra/test_database_manager.py +0 -59
- tests/infra/test_gemini_adapter.py +0 -137
- tests/infra/test_google_chat_app.py +0 -68
- tests/infra/test_llm_client.py +0 -165
- tests/infra/test_llm_proxy.py +0 -122
- tests/infra/test_mail_app.py +0 -94
- tests/infra/test_openai_adapter.py +0 -105
- tests/infra/test_redis_session_manager_service.py +0 -117
- tests/repositories/__init__.py +0 -5
- tests/repositories/test_database_manager.py +0 -87
- tests/repositories/test_document_repo.py +0 -76
- tests/repositories/test_llm_query_repo.py +0 -340
- tests/repositories/test_models.py +0 -38
- tests/repositories/test_profile_repo.py +0 -142
- tests/repositories/test_tasks_repo.py +0 -76
- tests/repositories/test_vs_repo.py +0 -107
- tests/services/__init__.py +0 -5
- tests/services/test_dispatcher_service.py +0 -274
- tests/services/test_document_service.py +0 -181
- tests/services/test_excel_service.py +0 -208
- tests/services/test_file_processor_service.py +0 -121
- tests/services/test_history_service.py +0 -164
- tests/services/test_jwt_service.py +0 -255
- tests/services/test_load_documents_service.py +0 -112
- tests/services/test_mail_service.py +0 -70
- tests/services/test_profile_service.py +0 -379
- tests/services/test_prompt_manager_service.py +0 -190
- tests/services/test_query_service.py +0 -243
- tests/services/test_search_service.py +0 -39
- tests/services/test_sql_service.py +0 -160
- tests/services/test_tasks_service.py +0 -252
- tests/services/test_user_feedback_service.py +0 -389
- tests/services/test_user_session_context_service.py +0 -132
- tests/views/__init__.py +0 -5
- tests/views/test_change_password_view.py +0 -191
- tests/views/test_chat_token_request_view.py +0 -188
- tests/views/test_chat_view.py +0 -98
- tests/views/test_download_file_view.py +0 -149
- tests/views/test_external_chat_login_view.py +0 -120
- tests/views/test_external_login_view.py +0 -102
- tests/views/test_file_store_view.py +0 -128
- tests/views/test_forgot_password_view.py +0 -142
- tests/views/test_history_view.py +0 -336
- tests/views/test_home_view.py +0 -61
- tests/views/test_llm_query_view.py +0 -154
- tests/views/test_login_view.py +0 -114
- tests/views/test_prompt_view.py +0 -111
- tests/views/test_signup_view.py +0 -140
- tests/views/test_tasks_review_view.py +0 -104
- tests/views/test_tasks_view.py +0 -130
- tests/views/test_user_feedback_view.py +0 -214
- tests/views/test_verify_user_view.py +0 -110
- {iatoolkit-0.8.1.dist-info → iatoolkit-0.63.4.dist-info}/WHEEL +0 -0
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
/* ######################################################### */
|
|
2
1
|
/* Estilos generales para modales */
|
|
3
|
-
/* ######################################################### */
|
|
4
2
|
|
|
5
|
-
/* Separación del icono y el título del modal */
|
|
6
|
-
.icon-spaced {
|
|
7
|
-
margin-right: 10px;
|
|
8
|
-
}
|
|
9
3
|
|
|
10
4
|
/* Título del modal */
|
|
11
5
|
.modal-title{
|
|
@@ -13,12 +7,6 @@
|
|
|
13
7
|
font-weight: bold;
|
|
14
8
|
}
|
|
15
9
|
|
|
16
|
-
/* Texto del modal */
|
|
17
|
-
.text-muted{
|
|
18
|
-
font-size:16px;
|
|
19
|
-
text-align: justify;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
10
|
/* Estilos del header del modal*/
|
|
23
11
|
.modal-header {
|
|
24
12
|
display: flex;
|
|
@@ -32,6 +20,7 @@
|
|
|
32
20
|
margin: 0;
|
|
33
21
|
padding: 0;
|
|
34
22
|
flex: 1;
|
|
23
|
+
color: inherit;
|
|
35
24
|
}
|
|
36
25
|
|
|
37
26
|
/* Estilos del botón de cerrar del modal*/
|
|
@@ -41,55 +30,78 @@
|
|
|
41
30
|
margin-left: auto;
|
|
42
31
|
}
|
|
43
32
|
|
|
44
|
-
/*
|
|
45
|
-
|
|
46
|
-
|
|
33
|
+
/* Estilos del header del modal con branding */
|
|
34
|
+
.modal-header.branded {
|
|
35
|
+
background-color: var(--brand-modal-header-bg);
|
|
36
|
+
color: var(--brand-modal-header-text);
|
|
37
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
38
|
+
}
|
|
39
|
+
.modal-header.branded .btn-close {
|
|
40
|
+
filter: invert(1) grayscale(100%) brightness(200%); /* Hace el botón de cerrar visible en fondos oscuros */
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Estilos para botones con branding */
|
|
44
|
+
.btn-branded-primary {
|
|
45
|
+
background-color: var(--brand-primary-color);
|
|
46
|
+
border-color: var(--brand-primary-color);
|
|
47
|
+
color: var(--brand-text-on-primary);
|
|
48
|
+
}
|
|
49
|
+
.btn-branded-primary:hover {
|
|
50
|
+
background-color: var(--brand-text-on-primary);
|
|
51
|
+
color: var(--brand-primary-color);
|
|
52
|
+
border-color: var(--brand-primary-color);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.btn-branded-secondary {
|
|
56
|
+
background-color: var(--brand-secondary-color);
|
|
57
|
+
border-color: var(--brand-secondary-color);
|
|
58
|
+
color: var(--brand-text-on-secondary);
|
|
59
|
+
}
|
|
60
|
+
.btn-branded-secondary:hover {
|
|
61
|
+
background-color: var(--brand-text-on-secondary);
|
|
62
|
+
color: var(--brand-secondary-color);
|
|
63
|
+
border-color: var(--brand-secondary-color);
|
|
64
|
+
}
|
|
47
65
|
|
|
48
|
-
/*
|
|
49
|
-
.thead-
|
|
66
|
+
/* Modal de historial */
|
|
67
|
+
.thead-branded th {
|
|
68
|
+
background-color: #e9ecef; /* Un gris claro estándar de Bootstrap */
|
|
69
|
+
color: #212529; /* El color de texto oscuro por defecto */
|
|
50
70
|
font-size: 16px;
|
|
51
71
|
font-weight: bold;
|
|
52
72
|
}
|
|
53
73
|
|
|
54
|
-
/*
|
|
55
|
-
#
|
|
56
|
-
|
|
74
|
+
/* Evita el salto de línea en la celda de la fecha */
|
|
75
|
+
#historyModal .date-cell {
|
|
76
|
+
white-space: nowrap;
|
|
57
77
|
}
|
|
58
78
|
|
|
59
|
-
|
|
60
|
-
|
|
79
|
+
.col-min,
|
|
80
|
+
.col-icon {
|
|
81
|
+
width: 1%;
|
|
82
|
+
white-space: nowrap;
|
|
61
83
|
}
|
|
62
84
|
|
|
63
|
-
|
|
64
|
-
|
|
85
|
+
/* Estilo para el icono de copiar/editar en cada fila */
|
|
86
|
+
#historyModal .copy-query-icon {
|
|
87
|
+
color: var(--brand-secondary-color, #6c757d); /* Usa el color secundario de la marca */
|
|
88
|
+
text-decoration: none;
|
|
89
|
+
opacity: 0.6;
|
|
90
|
+
transition: opacity 0.2s ease-in-out;
|
|
65
91
|
}
|
|
66
92
|
|
|
67
|
-
|
|
68
|
-
/*
|
|
69
|
-
/*
|
|
70
|
-
|
|
71
|
-
/* 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%;
|
|
93
|
+
#historyModal .copy-query-icon:hover {
|
|
94
|
+
opacity: 1; /* El icono se vuelve completamente opaco al pasar el ratón */
|
|
95
|
+
cursor: pointer; /* Asegura que el cursor cambie a una mano */
|
|
81
96
|
}
|
|
82
97
|
|
|
83
|
-
/*
|
|
84
|
-
.rating-stars
|
|
85
|
-
text-align: center;
|
|
86
|
-
margin: 2px 0 0 0;
|
|
98
|
+
/* Modal de feedback */
|
|
99
|
+
.rating-stars {
|
|
87
100
|
display: flex;
|
|
88
|
-
flex-direction: row;
|
|
89
101
|
justify-content: center;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
102
|
+
gap: 5px;
|
|
103
|
+
margin-bottom: 15px;
|
|
104
|
+
padding-top: 5px;
|
|
93
105
|
}
|
|
94
106
|
|
|
95
107
|
/* Estilos de las estrellas del modal de feedback */
|
|
@@ -101,16 +113,35 @@
|
|
|
101
113
|
margin: 0 2px;
|
|
102
114
|
}
|
|
103
115
|
|
|
104
|
-
|
|
116
|
+
.star::before {
|
|
117
|
+
content: '★';
|
|
118
|
+
}
|
|
119
|
+
|
|
105
120
|
.star:hover,
|
|
106
121
|
.star.active,
|
|
107
122
|
.star.hover-active {
|
|
108
123
|
color: #ffc107;
|
|
109
124
|
}
|
|
110
125
|
|
|
111
|
-
|
|
126
|
+
.icon-spaced {
|
|
127
|
+
margin-right: 10px;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.text-muted{
|
|
131
|
+
font-size:16px;
|
|
132
|
+
text-align: justify;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.feedback-text{
|
|
136
|
+
font-size: 16px;
|
|
137
|
+
}
|
|
138
|
+
|
|
112
139
|
/* Modal de listado de archivos */
|
|
113
|
-
/*
|
|
140
|
+
/* Estilos del nombre del archivo del modal de archivos y ordenar icono */
|
|
141
|
+
.file-name-modal {
|
|
142
|
+
flex: 1;
|
|
143
|
+
margin-right: 10px;
|
|
144
|
+
}
|
|
114
145
|
|
|
115
146
|
/* Para el icono de eliminar del modal */
|
|
116
147
|
.remove-file-btn i {
|
|
@@ -124,13 +155,21 @@
|
|
|
124
155
|
align-items: center;
|
|
125
156
|
}
|
|
126
157
|
|
|
127
|
-
/* Estilos del nombre del archivo del modal de archivos y ordenar icono */
|
|
128
|
-
.file-name-modal {
|
|
129
|
-
flex: 1;
|
|
130
|
-
margin-right: 10px;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
158
|
/* Estilos del botón de eliminar del modal de archivos y ordenar icono */
|
|
134
159
|
.remove-file-btn {
|
|
135
160
|
flex-shrink: 0;
|
|
136
|
-
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* Estilos para alertas informativas personalizadas */
|
|
164
|
+
.alert-branded-info {
|
|
165
|
+
background-color: var(--brand-info-bg);
|
|
166
|
+
color: var(--brand-info-text);
|
|
167
|
+
border-color: var(--brand-info-border);
|
|
168
|
+
}
|
|
169
|
+
.alert-branded-info strong,
|
|
170
|
+
.alert-branded-info .alert-link {
|
|
171
|
+
color: inherit;
|
|
172
|
+
}
|
|
173
|
+
.alert-branded-info .bi { /* Asegura que los iconos también tomen el color */
|
|
174
|
+
color: inherit;
|
|
175
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/* static/styles/landing_page.css */
|
|
2
|
+
|
|
3
|
+
/* --- Variables y Estilos Globales --- */
|
|
4
|
+
:root {
|
|
5
|
+
--website-primary-color: #4A55A2;
|
|
6
|
+
--website-primary-color-dark: #3A448A;
|
|
7
|
+
--website-gradient-start: #4A55A2;
|
|
8
|
+
--website-gradient-end: #7895CB;
|
|
9
|
+
--website-dark-text: #212529;
|
|
10
|
+
--website-light-bg: #f8f9fa;
|
|
11
|
+
--website-muted-text: #6c757d;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
body {
|
|
15
|
+
background-color: #fff;
|
|
16
|
+
color: var(--website-dark-text);
|
|
17
|
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* --- Encabezado Propio (sin usar .navbar) --- */
|
|
21
|
+
.website-header {
|
|
22
|
+
margin-top: 1rem;
|
|
23
|
+
padding: 1rem 1.5rem; /* Padding vertical y horizontal */
|
|
24
|
+
border-radius: 0.5rem;
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
|
|
28
|
+
/* Estilos de color (se mantienen) */
|
|
29
|
+
background-color: var(--website-primary-color);
|
|
30
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.website-brand {
|
|
34
|
+
font-weight: 700;
|
|
35
|
+
font-size: 1.75rem;
|
|
36
|
+
color: #ffffff;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* --- Sección Principal (Hero) --- */
|
|
40
|
+
.hero-section {
|
|
41
|
+
padding: 2rem 0 1rem; /* Ajustado: 5rem arriba, 0 a los lados, 2.5rem abajo */
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.hero-title {
|
|
45
|
+
font-size: 3rem;
|
|
46
|
+
font-weight: 800;
|
|
47
|
+
line-height: 1.2;
|
|
48
|
+
margin-bottom: 1.5rem;
|
|
49
|
+
}
|
|
50
|
+
.gradient-text {
|
|
51
|
+
background: linear-gradient(90deg, var(--website-gradient-start), var(--website-gradient-end));
|
|
52
|
+
-webkit-background-clip: text;
|
|
53
|
+
-webkit-text-fill-color: transparent;
|
|
54
|
+
background-clip: text;
|
|
55
|
+
text-fill-color: transparent;
|
|
56
|
+
}
|
|
57
|
+
.hero-bullets {
|
|
58
|
+
list-style: none;
|
|
59
|
+
padding-left: 0;
|
|
60
|
+
font-size: 1.1rem;
|
|
61
|
+
}
|
|
62
|
+
.hero-bullets li {
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
gap: 0.75rem;
|
|
66
|
+
margin-bottom: 1rem;
|
|
67
|
+
color: var(--website-muted-text);
|
|
68
|
+
}
|
|
69
|
+
.hero-bullets .bi {
|
|
70
|
+
color: var(--website-primary-color);
|
|
71
|
+
font-size: 1.5rem;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* --- Botón de Llamada a la Acción (CTA) --- */
|
|
75
|
+
.hero-section .btn-primary {
|
|
76
|
+
background-color: var(--website-primary-color);
|
|
77
|
+
border-color: var(--website-primary-color);
|
|
78
|
+
transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
|
|
79
|
+
}
|
|
80
|
+
.hero-section .btn-primary:hover {
|
|
81
|
+
background-color: var(--website-primary-color-dark);
|
|
82
|
+
border-color: var(--website-primary-color-dark);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.bg-light h3 {
|
|
86
|
+
color: var(--website-primary-color);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.features-section {
|
|
90
|
+
padding: 5rem 0;
|
|
91
|
+
background-color: var(--website-light-bg);
|
|
92
|
+
}
|
|
93
|
+
.feature-item {
|
|
94
|
+
background-color: #fff;
|
|
95
|
+
padding: 2rem;
|
|
96
|
+
border-radius: 0.75rem;
|
|
97
|
+
border: 1px solid #e9ecef;
|
|
98
|
+
height: 100%;
|
|
99
|
+
transition: all 0.3s ease;
|
|
100
|
+
}
|
|
101
|
+
.feature-item:hover {
|
|
102
|
+
transform: translateY(-5px);
|
|
103
|
+
box-shadow: 0 8px 25px rgba(0,0,0,0.08);
|
|
104
|
+
}
|
|
105
|
+
.feature-icon {
|
|
106
|
+
font-size: 2.5rem;
|
|
107
|
+
margin-bottom: 1rem;
|
|
108
|
+
color: var(--website-primary-color);
|
|
109
|
+
}
|
|
110
|
+
.feature-item h3 {
|
|
111
|
+
font-weight: 600;
|
|
112
|
+
margin-bottom: 0.5rem;
|
|
113
|
+
}
|
|
114
|
+
.feature-item p {
|
|
115
|
+
color: var(--website-muted-text);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Estilo especial para la caja de Open Source */
|
|
119
|
+
.opensource-box {
|
|
120
|
+
background: var(--website-dark-text);
|
|
121
|
+
color: #fff;
|
|
122
|
+
padding: 2rem;
|
|
123
|
+
border-radius: 0.75rem;
|
|
124
|
+
height: 100%;
|
|
125
|
+
display: flex;
|
|
126
|
+
flex-direction: column;
|
|
127
|
+
justify-content: space-between;
|
|
128
|
+
border: 1px solid transparent;
|
|
129
|
+
transition: all 0.3s ease;
|
|
130
|
+
}
|
|
131
|
+
.opensource-box:hover {
|
|
132
|
+
transform: translateY(-5px);
|
|
133
|
+
box-shadow: 0 8px 25px rgba(0,0,0,0.15);
|
|
134
|
+
}
|
|
135
|
+
.opensource-icon .bi-github {
|
|
136
|
+
font-size: 2.5rem;
|
|
137
|
+
margin-bottom: 1rem;
|
|
138
|
+
}
|
|
139
|
+
.opensource-box h3 {
|
|
140
|
+
font-weight: 600;
|
|
141
|
+
}
|
|
142
|
+
.opensource-box p {
|
|
143
|
+
color: #ced4da;
|
|
144
|
+
margin-bottom: 1.5rem;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* --- Sección del Autor --- */
|
|
148
|
+
.author-section {
|
|
149
|
+
background-color: #fff;
|
|
150
|
+
}
|
|
151
|
+
.author-card {
|
|
152
|
+
background-color: var(--website-light-bg);
|
|
153
|
+
border-radius: 0.75rem;
|
|
154
|
+
border: 1px solid #e9ecef;
|
|
155
|
+
}
|
|
156
|
+
.author-card h5 {
|
|
157
|
+
color: var(--website-primary-color);
|
|
158
|
+
font-weight: 600;
|
|
159
|
+
}
|
|
160
|
+
.author-bio {
|
|
161
|
+
color: var(--website-muted-text);
|
|
162
|
+
line-height: 1.6;
|
|
163
|
+
}
|
|
164
|
+
.author-linkedin {
|
|
165
|
+
text-decoration: none;
|
|
166
|
+
color: #0077b5;
|
|
167
|
+
font-weight: 500;
|
|
168
|
+
transition: opacity 0.2s;
|
|
169
|
+
}
|
|
170
|
+
.author-linkedin:hover {
|
|
171
|
+
opacity: 0.8;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* --- Footer --- */
|
|
175
|
+
.landing-footer {
|
|
176
|
+
background-color: var(--website-light-bg);
|
|
177
|
+
color: var(--website-muted-text);
|
|
178
|
+
padding: 2rem 0;
|
|
179
|
+
text-align: center;
|
|
180
|
+
margin-top: 4rem;
|
|
181
|
+
border-top: 1px solid #e9ecef;
|
|
182
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/* static/css/onboarding.css */
|
|
2
|
+
|
|
3
|
+
/* Fuente base para ambos contextos */
|
|
4
|
+
.ob-root {
|
|
5
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* Tarjeta */
|
|
9
|
+
.ob-card {
|
|
10
|
+
background-color: #fff;
|
|
11
|
+
border-radius: 12px;
|
|
12
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.1);
|
|
13
|
+
padding: 30px;
|
|
14
|
+
width: 90%;
|
|
15
|
+
max-width: 450px;
|
|
16
|
+
text-align: center;
|
|
17
|
+
transition: opacity 0.3s ease-in-out;
|
|
18
|
+
margin: 0 auto;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Contenido de tarjeta */
|
|
22
|
+
.ob-icon {
|
|
23
|
+
font-size: 40px;
|
|
24
|
+
color: var(--brand-primary-color, #FF5100);
|
|
25
|
+
margin-bottom: 15px;
|
|
26
|
+
}
|
|
27
|
+
.ob-title {
|
|
28
|
+
font-size: 1.25rem;
|
|
29
|
+
color: #333;
|
|
30
|
+
margin-bottom: 10px;
|
|
31
|
+
}
|
|
32
|
+
.ob-text {
|
|
33
|
+
font-size: 0.95rem;
|
|
34
|
+
color: #666;
|
|
35
|
+
line-height: 1.5;
|
|
36
|
+
min-height: 60px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Navegación */
|
|
40
|
+
.ob-nav {
|
|
41
|
+
display: flex;
|
|
42
|
+
justify-content: space-between;
|
|
43
|
+
align-items: center;
|
|
44
|
+
margin-top: 20px;
|
|
45
|
+
}
|
|
46
|
+
.ob-btn {
|
|
47
|
+
background-color: var(--brand-secondary-color, #06326B);
|
|
48
|
+
border: none;
|
|
49
|
+
color: var(--brand-text-on-secondary, #FFFFFF);
|
|
50
|
+
border-radius: 50%;
|
|
51
|
+
width: 40px;
|
|
52
|
+
height: 40px;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
transition: opacity 0.2s;
|
|
55
|
+
display: inline-flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
}
|
|
59
|
+
.ob-btn:hover { opacity: 0.85; }
|
|
60
|
+
|
|
61
|
+
/* Dots */
|
|
62
|
+
.ob-dots {
|
|
63
|
+
display: flex;
|
|
64
|
+
gap: 8px;
|
|
65
|
+
}
|
|
66
|
+
.ob-dots > div {
|
|
67
|
+
width: 10px;
|
|
68
|
+
height: 10px;
|
|
69
|
+
border-radius: 50%;
|
|
70
|
+
background-color: #ddd;
|
|
71
|
+
transition: background-color 0.3s;
|
|
72
|
+
}
|
|
73
|
+
.ob-dots > div.active {
|
|
74
|
+
background-color: var(--brand-primary-color, #FF5100);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Encabezado reutilizable (si se usa) */
|
|
78
|
+
.ob-brand-header {
|
|
79
|
+
font-size: 2rem;
|
|
80
|
+
font-weight: 700;
|
|
81
|
+
margin-bottom: 24px;
|
|
82
|
+
color: var(--brand-secondary-color, #06326B);
|
|
83
|
+
text-align: center;
|
|
84
|
+
}
|
|
85
|
+
.ob-brand-header .brand-name {
|
|
86
|
+
color: var(--brand-primary-color, #FF5100);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Utilidades */
|
|
90
|
+
.ob-fade {
|
|
91
|
+
transition: opacity 0.5s ease-in-out;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Responsivo */
|
|
95
|
+
@media (max-width: 420px) {
|
|
96
|
+
.ob-card { padding: 24px; }
|
|
97
|
+
.ob-icon { font-size: 34px; }
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Overlay a pantalla completa */
|
|
101
|
+
.onboarding-shell-root {
|
|
102
|
+
position: relative;
|
|
103
|
+
height: calc(100vh - 0px);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Centrado vertical y horizontal del contenido del loader */
|
|
107
|
+
#loader-wrapper {
|
|
108
|
+
position: absolute; inset: 0;
|
|
109
|
+
background-color: #f4f7f6;
|
|
110
|
+
z-index: 1000;
|
|
111
|
+
display: flex; align-items: center; justify-content: center;
|
|
112
|
+
padding: 20px; box-sizing: border-box;
|
|
113
|
+
transition: opacity 0.5s ease-in-out;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* Pila vertical: header + tarjeta + banda de carga */
|
|
117
|
+
.ob-stack {
|
|
118
|
+
width: 100%;
|
|
119
|
+
max-width: 520px; /* ligeramente más que la tarjeta para respiración */
|
|
120
|
+
display: flex;
|
|
121
|
+
flex-direction: column;
|
|
122
|
+
align-items: stretch; /* la tarjeta ocupa el ancho */
|
|
123
|
+
gap: 16px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* Header de marca consistente */
|
|
127
|
+
.ob-brand-header {
|
|
128
|
+
font-size: 2rem;
|
|
129
|
+
font-weight: 700;
|
|
130
|
+
margin: 0;
|
|
131
|
+
color: var(--brand-secondary-color, #06326B);
|
|
132
|
+
text-align: center;
|
|
133
|
+
}
|
|
134
|
+
.ob-brand-header .brand-name {
|
|
135
|
+
color: var(--brand-primary-color, #FF5100);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* Banda de estado integrada visualmente con la tarjeta */
|
|
139
|
+
.ob-loading-band {
|
|
140
|
+
display: flex;
|
|
141
|
+
align-items: center;
|
|
142
|
+
justify-content: center;
|
|
143
|
+
gap: 12px;
|
|
144
|
+
padding: 12px 14px;
|
|
145
|
+
background: #ffffff;
|
|
146
|
+
border-radius: 12px;
|
|
147
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.08);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* Spinner */
|
|
151
|
+
.spinner {
|
|
152
|
+
width: 28px; height: 28px;
|
|
153
|
+
border: 4px solid rgba(0,0,0,0.1);
|
|
154
|
+
border-top-color: var(--brand-primary-color, #FF5100);
|
|
155
|
+
border-radius: 50%;
|
|
156
|
+
animation: spin 1s linear infinite;
|
|
157
|
+
}
|
|
158
|
+
@keyframes spin { to { transform: rotate(360deg); } }
|
|
159
|
+
|
|
160
|
+
#loading-status p {
|
|
161
|
+
font-size: 0.95rem;
|
|
162
|
+
font-weight: 500;
|
|
163
|
+
color: #555;
|
|
164
|
+
margin: 0;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* Iframe contenedor */
|
|
168
|
+
#content-container { width: 100%; height: 100%; }
|
|
169
|
+
#content-container iframe { width: 100%; height: 100%; border: none; }
|
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
Eres un asistente que responde preguntas o ejecuta tareas según el contexto de la empresa.
|
|
2
2
|
|
|
3
3
|
### **Nombre de la empresa**
|
|
4
|
-
## Nombre: {{company
|
|
4
|
+
## Nombre: {{company}}, tambien se conoce como {{ company_short_name }}
|
|
5
5
|
|
|
6
6
|
### ** Información del usuario que esta consultando este chat**
|
|
7
|
-
|
|
7
|
+
- Identificador unico de usuario: {{ user_identifier }}
|
|
8
8
|
- Nombre: {{ user_fullname }}
|
|
9
9
|
- Email: {{ user_email }}
|
|
10
10
|
- Tipo de usuario: {% if user_is_local %}Interno{% else %}Externo{% endif %}
|
|
11
|
-
-
|
|
11
|
+
- Rol de usuario: {{ user_rol }}
|
|
12
12
|
|
|
13
|
-
{% if user_name %}
|
|
14
|
-
El usuario que consulta se identifica con la variable `user_name` y tiene el
|
|
15
|
-
siguiente valor: {{ user_name }}.
|
|
16
|
-
|
|
17
|
-
Este usuario tiene el rol: {{ user_rol }} en el producto {{ user_product }}.
|
|
18
|
-
|
|
19
|
-
{% else %}
|
|
20
|
-
El usuario que consulta se identifica como: {{ user_id }}
|
|
21
|
-
{% endif %}
|
|
22
13
|
|
|
23
14
|
## Servicios de datos (function calls) disponibles en {{company.name}}:
|
|
24
15
|
{% for service in service_list %}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{# El div principal ahora es un contenedor y tiene los estilos y clases de alineación #}
|
|
2
|
+
<div class="custom-company-header container d-flex justify-content-between align-items-center">
|
|
3
|
+
|
|
4
|
+
{% if company_short_name and branding %}
|
|
5
|
+
<a href="{{ url_for('home', company_short_name=company_short_name) }}"
|
|
6
|
+
class="brand-name"
|
|
7
|
+
style="{{ branding.primary_text_style }}">
|
|
8
|
+
{{ branding.name }} IA
|
|
9
|
+
</a>
|
|
10
|
+
{% else %}
|
|
11
|
+
<span class="brand-name">
|
|
12
|
+
IAToolkit
|
|
13
|
+
</span>
|
|
14
|
+
{% endif %}
|
|
15
|
+
|
|
16
|
+
{# Texto "Powered by" con enlace a iatoolkit.com #}
|
|
17
|
+
<span class="powered-by">
|
|
18
|
+
Powered by <a href="{{ url_for('index') }}" rel="noopener noreferrer" class="iatoolkit-link">IAToolkit</a>
|
|
19
|
+
</span>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<div class="branded-form-container">
|
|
2
|
+
<!-- 1. Encabezado de Marketing -->
|
|
3
|
+
<div class="text-center mb-4">
|
|
4
|
+
<p class="text-muted widget-intro-text">
|
|
5
|
+
Ingresa tus credenciales o registrate para acceder a la plataforma de {{ branding.name }}.
|
|
6
|
+
</p>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<!-- 2. Formulario de Inicio de Sesión -->
|
|
10
|
+
<form id="login-form"
|
|
11
|
+
action="{{ url_for('login', company_short_name=company_short_name) }}"
|
|
12
|
+
method="post">
|
|
13
|
+
<div class="mb-3">
|
|
14
|
+
<label for="email" class="form-label d-block">Correo Electrónico</label>
|
|
15
|
+
<input type="email" id="email" name="email" class="form-control"
|
|
16
|
+
required value="{{ form_data.email if form_data is defined else '' }}">
|
|
17
|
+
</div>
|
|
18
|
+
<div class="mb-3">
|
|
19
|
+
<label for="password" class="form-label d-block">Contraseña</label>
|
|
20
|
+
<input type="password" id="password" name="password"
|
|
21
|
+
class="form-control" required>
|
|
22
|
+
</div>
|
|
23
|
+
<button type="submit" class="btn btn-branded-primary w-100 fw-bold py-2">
|
|
24
|
+
Iniciar Sesión
|
|
25
|
+
</button>
|
|
26
|
+
</form>
|
|
27
|
+
|
|
28
|
+
<!-- 3. Nueva Sección de Registro más Atractiva -->
|
|
29
|
+
<div class="mt-4 pt-3 text-center" style="border-top: 1px solid #e0e0e0;">
|
|
30
|
+
<span class="text-muted small">¿Eres nuevo aquí?</span>
|
|
31
|
+
<a href="{{ url_for('signup', company_short_name=company_short_name) }}" id="signup-link" class="fw-bold ms-1 text-decoration-none" style="color: var(--brand-primary-color);">Crea una cuenta gratis</a>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- 4. Enlace de Recuperación de Contraseña (más sutil) -->
|
|
35
|
+
<div class="text-center mt-2">
|
|
36
|
+
<a href="{{ url_for('forgot_password', company_short_name=company_short_name) }}" class="text-decoration-none text-muted" style="font-size: 0.8rem;">
|
|
37
|
+
¿Olvidaste tu contraseña?
|
|
38
|
+
</a>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
iatoolkit/templates/base.html
CHANGED
|
@@ -9,15 +9,20 @@
|
|
|
9
9
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet">
|
|
10
10
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/filepond/dist/filepond.min.css">
|
|
11
11
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">
|
|
12
|
-
<link rel="stylesheet" href="{{ url_for('static', filename='styles/chat_iatoolkit.css') }}">
|
|
13
|
-
<link rel="stylesheet" href="{{ url_for('static', filename='styles/
|
|
14
|
-
<link rel="stylesheet" href="{{ url_for('static', filename='styles/
|
|
12
|
+
<link rel="stylesheet" href="{{ url_for('static', filename='styles/chat_iatoolkit.css', _external=True) }}">
|
|
13
|
+
<link rel="stylesheet" href="{{ url_for('static', filename='styles/onboarding.css', _external=True) }}">
|
|
14
|
+
<link rel="stylesheet" href="{{ url_for('static', filename='styles/chat_modal.css', _external=True) }}">
|
|
15
|
+
<link rel="stylesheet" href="{{ url_for('static', filename='styles/llm_output.css', _external=True) }}">
|
|
16
|
+
|
|
17
|
+
{% block styles %}{% endblock %}
|
|
15
18
|
</head>
|
|
16
19
|
<body class="d-flex flex-column p-3" style="min-height: 100vh;">
|
|
20
|
+
|
|
17
21
|
<main class="d-flex flex-column flex-grow-1">
|
|
18
22
|
{% block content %}{% endblock %}
|
|
19
23
|
</main>
|
|
20
24
|
|
|
25
|
+
|
|
21
26
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
|
|
22
27
|
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
|
|
23
28
|
<script src="https://cdn.jsdelivr.net/npm/filepond/dist/filepond.min.js"></script>
|