pixelon 0.7.5 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,19 +16,39 @@ $chat-component-prefix: "px-chat-";
16
16
 
17
17
  // Colores del tema chat
18
18
  --chat-color-primary: var(--chat-color-black);
19
+ --chat-color-on-primary: var(--chat-color-white);
20
+ --chat-color-primary-dark: #262626;
19
21
  --chat-color-secondary: #343541;
22
+ --chat-color-secondary-dark: #24242f;
23
+ --chat-color-accent: #3b82f6;
24
+ --chat-color-accent-dark: #2563eb;
20
25
  --chat-color-background: #ffffff;
21
26
  --chat-color-background-alt: #f7f7f8;
27
+ --chat-color-background-secondary: #f7f7f8;
28
+ --chat-color-bg-secondary: #f3f4f6;
29
+ --chat-color-background-hover: #eef0f2;
22
30
  --chat-color-text: #2d2d2d;
31
+ --chat-color-text-primary: #111827;
23
32
  --chat-color-text-secondary: #6b7280;
33
+ --chat-color-text-muted: #6b7280;
24
34
  --chat-color-text-inverse: #ffffff;
25
35
  --chat-color-border: #e5e7eb;
36
+ --chat-color-border-strong: #d1d5db;
37
+ --chat-color-surface: #ffffff;
38
+ --chat-color-surface-hover: #f3f4f6;
39
+ // Wash genérico para hovers/estados sobre una superficie que puede ser cualquiera (no siempre
40
+ // --chat-color-surface): evita que cada componente tenga que definir su propio par claro/oscuro.
41
+ --chat-color-overlay-hover: rgba(0, 0, 0, 0.04);
42
+ --chat-color-overlay-hover-strong: rgba(0, 0, 0, 0.08);
43
+ --chat-color-surface-muted: #e5e7eb;
26
44
 
27
45
  // Colores de estado del chat
28
46
  --chat-color-success: #10b981;
47
+ --chat-color-success-bg: rgba(22, 163, 74, 0.08);
29
48
  --chat-color-error: #ef4444;
30
49
  --chat-color-warning: #f59e0b;
31
50
  --chat-color-info: #3b82f6;
51
+ --chat-color-danger: #dc2626;
32
52
 
33
53
  // SPEC-015 — el aviso encima del input no se pinta con el color plano de estado: ese color es
34
54
  // para un filo o un icono, no para un fondo bajo texto. Cada tipo lleva su par tinte/texto,
@@ -59,8 +79,10 @@ $chat-component-prefix: "px-chat-";
59
79
  --chat-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
60
80
  --chat-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
61
81
  --chat-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
82
+ --chat-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.15), 0 8px 10px -6px rgb(0 0 0 / 0.1);
62
83
 
63
84
  // Espaciado del chat
85
+ --chat-spacing-xxs: 0.125rem;
64
86
  --chat-spacing-xs: 0.25rem;
65
87
  --chat-spacing-sm: 0.5rem;
66
88
  --chat-spacing-md: 1rem;
@@ -82,6 +104,7 @@ $chat-component-prefix: "px-chat-";
82
104
  --chat-font-size-xs: 0.75rem;
83
105
  --chat-font-size-sm: 0.875rem;
84
106
  --chat-font-size-base: 1rem;
107
+ --chat-font-size-md: 1rem;
85
108
  --chat-font-size-lg: 1.125rem;
86
109
  --chat-font-size-xl: 1.25rem;
87
110
  --chat-font-size-2xl: 1.5rem;
@@ -98,23 +121,53 @@ $chat-component-prefix: "px-chat-";
98
121
  --chat-line-height-relaxed: 1.75;
99
122
  }
100
123
 
101
- // Tema oscuro del chat
124
+ // Tema oscuro del chat — SPEC-157: negro real (no el gris de ChatGPT que había antes),
125
+ // y COMPLETO: cubre también los tokens que antes vivían solo del fallback hex de cada
126
+ // componente (surface, text-primary/-muted, danger, on-primary, border-strong...), para que
127
+ // activar `data-theme="dark"` cambie de verdad todo el chat y no solo la mitad tokenizada.
102
128
  [data-theme="dark"] {
103
- --chat-color-background: #343541;
104
- --chat-color-background-alt: #444654;
105
- --chat-color-text: #ffffff;
106
- --chat-color-text-secondary: #9ca3af;
107
- --chat-color-border: #4b5563;
108
-
109
- --chat-color-user-bg: #444654;
110
- --chat-color-assistant-bg: #343541;
111
- --chat-color-input-bg: #40414f;
112
- --chat-color-input-border: #4b5563;
129
+ --chat-color-background: #000000;
130
+ --chat-color-background-alt: #0a0a0a;
131
+ --chat-color-background-secondary: #0a0a0a;
132
+ --chat-color-bg-secondary: #111111;
133
+ --chat-color-background-hover: #1a1a1a;
134
+ --chat-color-text: #f5f5f2;
135
+ --chat-color-text-primary: #f5f5f2;
136
+ --chat-color-text-secondary: #9ba0a8;
137
+ --chat-color-text-muted: #9ba0a8;
138
+ --chat-color-border: rgba(245, 245, 242, 0.14);
139
+ --chat-color-border-strong: rgba(245, 245, 242, 0.24);
140
+ --chat-color-surface: #111111;
141
+ --chat-color-surface-hover: #1a1a1a;
142
+ --chat-color-surface-muted: rgba(245, 245, 242, 0.08);
143
+ --chat-color-overlay-hover: rgba(245, 245, 242, 0.06);
144
+ --chat-color-overlay-hover-strong: rgba(245, 245, 242, 0.12);
145
+
146
+ // El negro y el blanco se invierten: lo que era "primario" (negro sobre fondo blanco) pasa a
147
+ // ser blanco sobre fondo negro. Todo componente que pinta con --chat-color-primary como FONDO
148
+ // (ChatHeader, Button primario, Avatar, Loader) usa --chat-color-on-primary para el texto/ícono
149
+ // que va encima — así el par se invierte junto con el fondo, en vez de quedar blanco-sobre-blanco.
150
+ --chat-color-primary: #ffffff;
151
+ --chat-color-on-primary: #000000;
152
+ --chat-color-text-inverse: #000000;
153
+ --chat-color-primary-dark: #e5e5e5;
154
+ --chat-color-secondary: #9ba0a8;
155
+ --chat-color-secondary-dark: #c2c7d0;
156
+ --chat-color-accent: #60a5fa;
157
+ --chat-color-accent-dark: #93c5fd;
158
+
159
+ --chat-color-danger: #f87171;
160
+ --chat-color-success-bg: rgba(22, 163, 74, 0.22);
161
+
162
+ --chat-color-user-bg: #111111;
163
+ --chat-color-assistant-bg: #000000;
164
+ --chat-color-input-bg: #0a0a0a;
165
+ --chat-color-input-border: rgba(245, 245, 242, 0.18);
113
166
  --chat-color-input-focus: #ffffff;
114
167
 
115
168
  // En oscuro el compositor aclara sobre el fondo, que es como se separa aqui.
116
- --chat-color-composer-bg: #40414f;
117
- --chat-color-composer-bg-focus: #4a4b59;
169
+ --chat-color-composer-bg: #111111;
170
+ --chat-color-composer-bg-focus: #1a1a1a;
118
171
 
119
172
  // En oscuro el tinte oscurece y el texto aclara: al reves que en claro, mismo contraste.
120
173
  --chat-color-notice-success-bg: #1c3b33;
@@ -125,4 +178,98 @@ $chat-component-prefix: "px-chat-";
125
178
  --chat-color-notice-warning-text: #fcd34d;
126
179
  --chat-color-notice-info-bg: #26334d;
127
180
  --chat-color-notice-info-text: #93c5fd;
181
+
182
+ // Sombras oscuras no se ven sobre negro puro: se reemplazan por un borde sutil de luz.
183
+ --chat-shadow-sm: inset 0 0 0 1px rgba(245, 245, 242, 0.08);
184
+ --chat-shadow-md: inset 0 0 0 1px rgba(245, 245, 242, 0.1);
185
+ --chat-shadow-lg: inset 0 0 0 1px rgba(245, 245, 242, 0.12);
186
+ --chat-shadow-xl: inset 0 0 0 1px rgba(245, 245, 242, 0.14);
187
+
188
+ // --px-color-* (prefijo compartido con lumi, definido en global.scss): solo se sobreescribe
189
+ // AQUÍ, adentro de [data-theme="dark"] del chat — lumi nunca fija ese atributo, así que sus
190
+ // componentes (RecordCard, ScrollToEnd, FieldValue, CardList) no se ven afectados.
191
+ --px-color-primary: #f5f5f2;
192
+ --px-color-text: #f5f5f2;
193
+ --px-color-text-muted: rgba(245, 245, 242, 0.5);
194
+ --px-color-surface: #111111;
195
+ --px-color-surface-hover: #1a1a1a;
196
+ --px-color-surface-muted: rgba(245, 245, 242, 0.08);
197
+ --px-color-border: rgba(245, 245, 242, 0.14);
198
+ --px-color-border-strong: rgba(245, 245, 242, 0.24);
199
+ --px-color-success: #4ade80;
200
+ --px-color-warning: #fb923c;
201
+ --px-color-warning-bg: rgba(251, 146, 60, 0.14);
202
+ --px-color-danger: #f87171;
203
+ --px-color-danger-bg: rgba(248, 113, 113, 0.14);
204
+ --px-color-danger-border: rgba(248, 113, 113, 0.35);
205
+ }
206
+
207
+ // `theme="system"` (Chat/ChatWidget): sin `data-theme` explícito en la raíz del chat, se sigue
208
+ // la preferencia del SO — escapado al propio nodo del chat (no `:root`/`<html>`), para que dos
209
+ // chats en la misma página puedan tener cada uno su propio `theme` sin pisarse.
210
+ // Mismos valores que el bloque de arriba — mantenerlos sincronizados si uno cambia.
211
+ @media (prefers-color-scheme: dark) {
212
+ .#{$chat-component-prefix}layout:not([data-theme]),
213
+ .#{$chat-component-prefix}widget:not([data-theme]) {
214
+ --chat-color-background: #000000;
215
+ --chat-color-background-alt: #0a0a0a;
216
+ --chat-color-background-secondary: #0a0a0a;
217
+ --chat-color-bg-secondary: #111111;
218
+ --chat-color-background-hover: #1a1a1a;
219
+ --chat-color-text: #f5f5f2;
220
+ --chat-color-text-primary: #f5f5f2;
221
+ --chat-color-text-secondary: #9ba0a8;
222
+ --chat-color-text-muted: #9ba0a8;
223
+ --chat-color-border: rgba(245, 245, 242, 0.14);
224
+ --chat-color-border-strong: rgba(245, 245, 242, 0.24);
225
+ --chat-color-surface: #111111;
226
+ --chat-color-surface-hover: #1a1a1a;
227
+ --chat-color-surface-muted: rgba(245, 245, 242, 0.08);
228
+ --chat-color-overlay-hover: rgba(245, 245, 242, 0.06);
229
+ --chat-color-overlay-hover-strong: rgba(245, 245, 242, 0.12);
230
+ --chat-color-primary: #ffffff;
231
+ --chat-color-on-primary: #000000;
232
+ --chat-color-text-inverse: #000000;
233
+ --chat-color-primary-dark: #e5e5e5;
234
+ --chat-color-secondary: #9ba0a8;
235
+ --chat-color-secondary-dark: #c2c7d0;
236
+ --chat-color-accent: #60a5fa;
237
+ --chat-color-accent-dark: #93c5fd;
238
+ --chat-color-danger: #f87171;
239
+ --chat-color-success-bg: rgba(22, 163, 74, 0.22);
240
+ --chat-color-user-bg: #111111;
241
+ --chat-color-assistant-bg: #000000;
242
+ --chat-color-input-bg: #0a0a0a;
243
+ --chat-color-input-border: rgba(245, 245, 242, 0.18);
244
+ --chat-color-input-focus: #ffffff;
245
+ --chat-color-composer-bg: #111111;
246
+ --chat-color-composer-bg-focus: #1a1a1a;
247
+ --chat-color-notice-success-bg: #1c3b33;
248
+ --chat-color-notice-success-text: #6ee7b7;
249
+ --chat-color-notice-error-bg: #43272a;
250
+ --chat-color-notice-error-text: #fca5a5;
251
+ --chat-color-notice-warning-bg: #40341f;
252
+ --chat-color-notice-warning-text: #fcd34d;
253
+ --chat-color-notice-info-bg: #26334d;
254
+ --chat-color-notice-info-text: #93c5fd;
255
+ --chat-shadow-sm: inset 0 0 0 1px rgba(245, 245, 242, 0.08);
256
+ --chat-shadow-md: inset 0 0 0 1px rgba(245, 245, 242, 0.1);
257
+ --chat-shadow-lg: inset 0 0 0 1px rgba(245, 245, 242, 0.12);
258
+ --chat-shadow-xl: inset 0 0 0 1px rgba(245, 245, 242, 0.14);
259
+
260
+ --px-color-primary: #f5f5f2;
261
+ --px-color-text: #f5f5f2;
262
+ --px-color-text-muted: rgba(245, 245, 242, 0.5);
263
+ --px-color-surface: #111111;
264
+ --px-color-surface-hover: #1a1a1a;
265
+ --px-color-surface-muted: rgba(245, 245, 242, 0.08);
266
+ --px-color-border: rgba(245, 245, 242, 0.14);
267
+ --px-color-border-strong: rgba(245, 245, 242, 0.24);
268
+ --px-color-success: #4ade80;
269
+ --px-color-warning: #fb923c;
270
+ --px-color-warning-bg: rgba(251, 146, 60, 0.14);
271
+ --px-color-danger: #f87171;
272
+ --px-color-danger-bg: rgba(248, 113, 113, 0.14);
273
+ --px-color-danger-border: rgba(248, 113, 113, 0.35);
274
+ }
128
275
  }
@@ -74,16 +74,30 @@ $lumi-component-prefix: "px-lumi-";
74
74
  --lumi-color-secondary: #e5e7eb; // Gris claro para secondary
75
75
  --lumi-color-background: #ffffff; // Fondo blanco
76
76
  --lumi-color-background-alt: #f7f7f8; // Fondo alternativo
77
+ --lumi-color-background-hover: rgba(0, 0, 0, 0.05); // Wash de hover sobre superficie variable
77
78
  --lumi-color-text: #2d2d2d; // Texto oscuro
78
79
  --lumi-color-text-secondary: #6b7280; // Texto secundario
79
80
  --lumi-color-text-inverse: #ffffff; // Texto inverso (en botones primarios)
80
81
  --lumi-color-border: #e5e7eb; // Bordes sutiles
82
+ // 2026-09-28 — variante fuerte, igual que ya existe en el dominio chat (--chat-color-border-strong):
83
+ // para separaciones que sí tienen que notarse (un drawer encima de la página, no un hairline
84
+ // decorativo). No existía; varios componentes ya la referenciaban con fallback y por eso nunca
85
+ // se veía distinta de --lumi-color-border.
86
+ --lumi-color-border-strong: #d1d5db;
81
87
 
82
88
  // Colores de estado clásicos
83
89
  --lumi-color-success: #10b981; // Verde éxito
84
- --lumi-color-error: #ef4444; // Rojo error
90
+ --lumi-color-error: #ef4444; // Rojo error
85
91
  --lumi-color-warning: #f59e0b; // Amarillo advertencia
86
92
  --lumi-color-info: #3b82f6; // Azul información
93
+ // SPEC-157 — tinte de fondo para texto de error/éxito (mismos valores que chat, para que un
94
+ // aviso se vea igual en las dos partes del producto).
95
+ --lumi-color-error-bg: #fdecec;
96
+ --lumi-color-success-bg: #e8f7f1;
97
+ // SPEC-157 — alias real: varios componentes usaban --lumi-color-danger(-bg) como fantasma con
98
+ // fallback (#dc2626/#ff4d4f/#ef4444 según el archivo) — mismo color que --lumi-color-error.
99
+ --lumi-color-danger: var(--lumi-color-error);
100
+ --lumi-color-danger-bg: var(--lumi-color-error-bg);
87
101
 
88
102
  // Espaciado del sistema
89
103
  --lumi-spacing-xs: 0.25rem; // 4px
@@ -292,6 +306,35 @@ $lumi-component-prefix: "px-lumi-";
292
306
  --lumi-color-background: #2e2a1a; // Fondo dorado oscuro
293
307
  }
294
308
 
309
+ // === MODO OSCURO ===
310
+ // SPEC-157 (extensión a lumi) — hasta ahora "dark" solo tocaba el calendario; el resto de
311
+ // componentes (DynamicForm, Input, Select, Table...) usan --lumi-color-background/-text/-border/
312
+ // -background-alt/-text-inverse, que nunca tenían override oscuro. Sin esto, activar
313
+ // data-lumi-theme="dark" no cambiaba nada fuera del calendario.
314
+ [data-lumi-theme="dark"] {
315
+ --lumi-color-background: #000000;
316
+ --lumi-color-background-alt: #0a0a0a;
317
+ --lumi-color-background-hover: rgba(245, 245, 242, 0.06);
318
+ --lumi-color-text: #f5f5f2;
319
+ --lumi-color-text-secondary: #9ba0a8;
320
+ // Gris claro (botón "secondary") sobre negro se ve invisible-ish: pasa a una superficie oscura,
321
+ // igual que --chat-color-surface-hover.
322
+ --lumi-color-secondary: rgba(245, 245, 242, 0.08);
323
+ // El primario (violeta #6c63ff) ya tiene contraste suficiente sobre negro — no se invierte, a
324
+ // diferencia del negro/blanco puro del chat. Por eso --lumi-color-text-inverse (el texto que va
325
+ // ENCIMA de un fondo --lumi-color-primary) tampoco se invierte: sigue blanco en los dos modos.
326
+ --lumi-color-border: rgba(245, 245, 242, 0.14);
327
+ --lumi-color-border-strong: rgba(245, 245, 242, 0.24);
328
+ --lumi-color-error-bg: #43272a;
329
+ --lumi-color-success-bg: #1c3b33;
330
+ // SPEC-158 — mismo hueco que --lumi-color-border-strong: solo el *-bg tenía par oscuro, el
331
+ // color de TEXTO (error/éxito directo, sin fondo detrás) se quedaba con el tono de claro
332
+ // (#ef4444/#10b981), que sobre negro pierde contraste. Mismos valores que ya usaba towing-web
333
+ // a mano en LoginPage.css.
334
+ --lumi-color-error: #f87171;
335
+ --lumi-color-success: #4ade80;
336
+ }
337
+
295
338
  // === CALENDARIO DARK MODE ===
296
339
  [data-lumi-theme="dark"],
297
340
  .px-lumi-calendar--dark {
@@ -3,3 +3,26 @@
3
3
  * {
4
4
  box-sizing: border-box;
5
5
  }
6
+
7
+ // SPEC-157 — prefijo compartido `--px-*`: lo consumen componentes de AMBOS dominios (chat:
8
+ // ReactiveCrudItemChat, DeadlineCountdown; lumi: RecordCard, ScrollToEnd, FieldValue, CardList),
9
+ // pero nunca se había definido en ningún :root — cada sitio vivía de su propio fallback hex, y
10
+ // esos fallbacks no siempre coincidían entre sí. Valores aquí = el fallback más usado en el
11
+ // código real, para que definir el token no cambie nada visible en claro. El override para
12
+ // oscuro vive en _chat.scss (solo el chat activa data-theme; lumi no se toca).
13
+ :root {
14
+ --px-color-primary: #111827;
15
+ --px-color-text: #111827;
16
+ --px-color-text-muted: rgba(0, 0, 0, 0.45);
17
+ --px-color-surface: #ffffff;
18
+ --px-color-surface-hover: #f9fafb;
19
+ --px-color-surface-muted: #f9fafb;
20
+ --px-color-border: #e5e7eb;
21
+ --px-color-border-strong: #d1d5db;
22
+ --px-color-success: #16a34a;
23
+ --px-color-warning: #c2410c;
24
+ --px-color-warning-bg: #fff7ed;
25
+ --px-color-danger: #b91c1c;
26
+ --px-color-danger-bg: #fef2f2;
27
+ --px-color-danger-border: #fecaca;
28
+ }