@edc-motor/ui 0.4.16 → 0.4.18

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edc-motor/ui",
3
- "version": "0.4.16",
3
+ "version": "0.4.18",
4
4
  "description": "EdC Motor — componentes públicos Vue 3 + tokens SCSS para webs de juegos de mesa (paquete fuente: lo compila el consumidor con Vite)",
5
5
  "license": "GPL-3.0-only",
6
6
  "type": "module",
package/scss/_tokens.scss CHANGED
@@ -112,3 +112,16 @@ $input-border: $border;
112
112
  $input-border-hover: $border-strong;
113
113
  $input-border-focus: $accent-500;
114
114
  $input-focus-ring: $focus-ring;
115
+
116
+ // ---------------------------------------------------------
117
+ // Texto que CONTRASTA con un fondo arbitrario (el acento elegido en
118
+ // Ajustes, el color de una acción…): el navegador resuelve claro u oscuro
119
+ // según la luminosidad REAL del fondo (relative color syntax): blanco puro
120
+ // bajo L≈49.44 y negro puro por encima — el umbral donde el contraste real
121
+ // cambia de bando. La primera declaración es el FALLBACK (texto oscuro)
122
+ // para navegadores sin `lch(from …)`.
123
+ // ---------------------------------------------------------
124
+ @mixin contrast-text($bg) {
125
+ color: #111827;
126
+ color: lch(from #{$bg} calc((49.44 - l) * infinity) 0 0);
127
+ }
@@ -49,13 +49,16 @@
49
49
  }
50
50
  }
51
51
 
52
+ // Relleno de color: el texto NO es fijo — claro u oscuro según el fondo
53
+ // real (contrast-text de tokens), que el acento lo elige el usuario.
52
54
  &--primary {
53
55
  background: $color-accent;
54
- color: #fff;
56
+ @include contrast-text($color-accent);
55
57
 
56
58
  // Hover bien visible: accent-600 apenas se distingue del 500.
57
59
  &:hover:not(:disabled) {
58
60
  background: color-mix(in srgb, $color-accent 72%, black);
61
+ @include contrast-text(color-mix(in srgb, $color-accent 72%, black));
59
62
  }
60
63
  }
61
64
 
@@ -94,23 +97,16 @@
94
97
  }
95
98
  }
96
99
 
97
- .edc-button--danger {
98
- background: $danger;
99
- color: #fff;
100
- &:hover:not(:disabled) { background: color-mix(in srgb, $danger 72%, black); }
101
- }
102
- .edc-button--success {
103
- background: $success;
104
- color: #06281a;
105
- &:hover:not(:disabled) { background: color-mix(in srgb, $success 72%, black); }
106
- }
107
- .edc-button--info {
108
- background: $info;
109
- color: #fff;
110
- &:hover:not(:disabled) { background: color-mix(in srgb, $info 72%, black); }
111
- }
112
- .edc-button--warning {
113
- background: $warning;
114
- color: #2b2005;
115
- &:hover:not(:disabled) { background: color-mix(in srgb, $warning 72%, black); }
100
+ // Variantes semánticas rellenas: mismo criterio que --primary, el texto lo
101
+ // decide el fondo (antes iba fijado a mano y a veces no contrastaba).
102
+ @each $variant, $color in (danger: $danger, success: $success, info: $info, warning: $warning) {
103
+ .edc-button--#{$variant} {
104
+ background: $color;
105
+ @include contrast-text($color);
106
+
107
+ &:hover:not(:disabled) {
108
+ background: color-mix(in srgb, #{$color} 72%, black);
109
+ @include contrast-text(color-mix(in srgb, #{$color} 72%, black));
110
+ }
111
+ }
116
112
  }
@@ -277,9 +277,11 @@
277
277
 
278
278
  // El "fondo" de los estados cruzados es la SUPERFICIE ($surface, el
279
279
  // segundo tono), no el fondo de página puro: menos negro / menos blanco.
280
+ // Relleno de acento: el texto lo decide el FONDO (contrast-text), no el
281
+ // tema — con acentos claros, $text-1 del tema oscuro no se leía.
280
282
  &--primary {
281
283
  background: $accent-500;
282
- color: $text-1;
284
+ @include contrast-text($accent-500);
283
285
 
284
286
  &:hover {
285
287
  background: $surface;
@@ -293,7 +295,7 @@
293
295
 
294
296
  &:hover {
295
297
  background: $accent-500;
296
- color: $text-1;
298
+ @include contrast-text($accent-500);
297
299
  }
298
300
  }
299
301
  }
@@ -116,8 +116,43 @@
116
116
  }
117
117
 
118
118
  // Variante compacta (bloque related): tarjetas y huecos más contenidos.
119
+ // El bloque trae SIEMPRE 6 ítems y es el grid quien decide cuántos enseña
120
+ // para que la rejilla salga siempre completa, sin filas cojas:
121
+ // 4 en 2×2 (estrecho) → 6 en 3×2 (md) → 4 en 4×1 (lg) → 5 en 5×1 (xl).
119
122
  &--compact &__grid {
120
123
  gap: $space-3;
124
+ grid-template-columns: repeat(2, minmax(0, 1fr));
125
+
126
+ @media (min-width: $bp-md) {
127
+ grid-template-columns: repeat(3, minmax(0, 1fr));
128
+ }
129
+
130
+ @media (min-width: $bp-lg) {
131
+ grid-template-columns: repeat(4, minmax(0, 1fr));
132
+ }
133
+
134
+ @media (min-width: $bp-xl) {
135
+ grid-template-columns: repeat(5, minmax(0, 1fr));
136
+ }
137
+ }
138
+
139
+ // Qué huecos se ven en cada tramo (los demás, ocultos): 4 → 6 → 4 → 5.
140
+ &--compact &__slot:nth-child(n + 5) {
141
+ display: none;
142
+
143
+ @media (min-width: $bp-md) {
144
+ display: block;
145
+ }
146
+
147
+ @media (min-width: $bp-lg) {
148
+ display: none;
149
+ }
150
+ }
151
+
152
+ &--compact &__slot:nth-child(5) {
153
+ @media (min-width: $bp-xl) {
154
+ display: block;
155
+ }
121
156
  }
122
157
 
123
158
  &--compact &__fallback {