@heroelc/fsociety 0.0.1
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/README.md +63 -0
- package/fesm2022/heroelc-fsociety.mjs +389 -0
- package/fesm2022/heroelc-fsociety.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/alert/alert.component.d.ts +33 -0
- package/lib/badge/badge.component.d.ts +39 -0
- package/lib/experience-card/experience-card.component.d.ts +52 -0
- package/lib/fsociety.component.d.ts +5 -0
- package/lib/fsociety.service.d.ts +6 -0
- package/lib/profile-card/profile-card.component.d.ts +65 -0
- package/package.json +51 -0
- package/public-api.d.ts +8 -0
- package/src/styles/_index.scss +2 -0
- package/src/styles/_mixins.scss +0 -0
- package/src/styles/_tokens.scss +472 -0
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// fsociety · _tokens.scss
|
|
3
|
+
// Color scale engine + alias tokens de estado
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// USO:
|
|
7
|
+
// @use 'tokens' as t;
|
|
8
|
+
// background: t.$primary-base;
|
|
9
|
+
// background: var(--fs-primary-hover); // CSS custom properties
|
|
10
|
+
//
|
|
11
|
+
// ESCALA:
|
|
12
|
+
// 50 → muted (badge bg, alert sutil, chip bg)
|
|
13
|
+
// 100 → subtle (hover bg ghost, row highlight)
|
|
14
|
+
// 200 → tint (selected bg, focus ring fill)
|
|
15
|
+
// 300 → light (borders en elementos claros)
|
|
16
|
+
// 400 → soft (íconos, placeholders, disabled)
|
|
17
|
+
// 500 → base (color principal del token)
|
|
18
|
+
// 600 → hover (hover en solid buttons)
|
|
19
|
+
// 700 → active (pressed / active state)
|
|
20
|
+
// 800 → emphasis (texto sobre fondos del mismo color)
|
|
21
|
+
// 900 → contrast (texto dark, headings sobre tint/muted)
|
|
22
|
+
// =============================================================================
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
// -----------------------------------------------------------------------------
|
|
26
|
+
// 1. CONFIGURACIÓN — colores base de la librería
|
|
27
|
+
// -----------------------------------------------------------------------------
|
|
28
|
+
|
|
29
|
+
$fs-primary-hex: #2563eb !default;
|
|
30
|
+
$fs-secondary-hex: #0ea5e9 !default;
|
|
31
|
+
$fs-tertiary-hex: #22d3ee !default;
|
|
32
|
+
$fs-neutral-hex: #64748b !default;
|
|
33
|
+
$fs-success-hex: #22c55e !default;
|
|
34
|
+
$fs-warning-hex: #f59e0b !default;
|
|
35
|
+
$fs-danger-hex: #f43f5e !default;
|
|
36
|
+
|
|
37
|
+
// Color de mezcla para stops oscuros (en vez de negro puro)
|
|
38
|
+
$fs-dark-mix: #0f172a !default;
|
|
39
|
+
$fs-light-mix: #ffffff !default;
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
// -----------------------------------------------------------------------------
|
|
43
|
+
// 2. FUNCIÓN PRINCIPAL — generate-scale()
|
|
44
|
+
// -----------------------------------------------------------------------------
|
|
45
|
+
//
|
|
46
|
+
// Genera un color interpolado dentro de la escala de 10 stops.
|
|
47
|
+
// Los stops 50-400 mezclan hacia blanco (más suave que usar lighten()).
|
|
48
|
+
// El stop 500 es el color base puro.
|
|
49
|
+
// Los stops 600-900 mezclan hacia $fs-dark-mix para oscurecer con más riqueza.
|
|
50
|
+
//
|
|
51
|
+
// @param $base — color hex base
|
|
52
|
+
// @param $stop — número del stop: 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
|
|
53
|
+
// @return color
|
|
54
|
+
|
|
55
|
+
@function generate-scale($base, $stop) {
|
|
56
|
+
@if $stop == 50 { @return mix($fs-light-mix, $base, 92%); }
|
|
57
|
+
@if $stop == 100 { @return mix($fs-light-mix, $base, 80%); }
|
|
58
|
+
@if $stop == 200 { @return mix($fs-light-mix, $base, 64%); }
|
|
59
|
+
@if $stop == 300 { @return mix($fs-light-mix, $base, 44%); }
|
|
60
|
+
@if $stop == 400 { @return mix($fs-light-mix, $base, 22%); }
|
|
61
|
+
@if $stop == 500 { @return $base; }
|
|
62
|
+
@if $stop == 600 { @return mix($fs-dark-mix, $base, 16%); }
|
|
63
|
+
@if $stop == 700 { @return mix($fs-dark-mix, $base, 34%); }
|
|
64
|
+
@if $stop == 800 { @return mix($fs-dark-mix, $base, 54%); }
|
|
65
|
+
@if $stop == 900 { @return mix($fs-dark-mix, $base, 72%); }
|
|
66
|
+
|
|
67
|
+
@warn "generate-scale(): stop #{$stop} no válido. Usá: 50 100 200 300 400 500 600 700 800 900";
|
|
68
|
+
@return $base;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// -----------------------------------------------------------------------------
|
|
73
|
+
// 3. MIXIN — emit-scale()
|
|
74
|
+
// -----------------------------------------------------------------------------
|
|
75
|
+
//
|
|
76
|
+
// Emite todas las CSS custom properties de una escala completa.
|
|
77
|
+
// Se usa internamente en :root para registrar los tokens.
|
|
78
|
+
//
|
|
79
|
+
// @param $name — nombre del token: 'primary' | 'secondary' | etc.
|
|
80
|
+
// @param $base — color hex base
|
|
81
|
+
|
|
82
|
+
@mixin emit-scale($name, $base) {
|
|
83
|
+
--fs-#{$name}-50: #{generate-scale($base, 50)};
|
|
84
|
+
--fs-#{$name}-100: #{generate-scale($base, 100)};
|
|
85
|
+
--fs-#{$name}-200: #{generate-scale($base, 200)};
|
|
86
|
+
--fs-#{$name}-300: #{generate-scale($base, 300)};
|
|
87
|
+
--fs-#{$name}-400: #{generate-scale($base, 400)};
|
|
88
|
+
--fs-#{$name}-500: #{generate-scale($base, 500)};
|
|
89
|
+
--fs-#{$name}-600: #{generate-scale($base, 600)};
|
|
90
|
+
--fs-#{$name}-700: #{generate-scale($base, 700)};
|
|
91
|
+
--fs-#{$name}-800: #{generate-scale($base, 800)};
|
|
92
|
+
--fs-#{$name}-900: #{generate-scale($base, 900)};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
// -----------------------------------------------------------------------------
|
|
97
|
+
// 4. MIXIN — emit-alias-tokens()
|
|
98
|
+
// -----------------------------------------------------------------------------
|
|
99
|
+
//
|
|
100
|
+
// Emite los alias semánticos que apuntan a los stops de la escala.
|
|
101
|
+
// Estos son los tokens que se usan en los componentes.
|
|
102
|
+
// NUNCA uses los stops numerados directamente en componentes —
|
|
103
|
+
// usá siempre los alias para que el theming funcione.
|
|
104
|
+
//
|
|
105
|
+
// @param $name — nombre del token: 'primary' | 'secondary' | etc.
|
|
106
|
+
|
|
107
|
+
@mixin emit-alias-tokens($name) {
|
|
108
|
+
// Estados interactivos
|
|
109
|
+
--fs-#{$name}-muted: var(--fs-#{$name}-50); // badge bg, chip, alert sutil
|
|
110
|
+
--fs-#{$name}-subtle: var(--fs-#{$name}-100); // ghost hover bg, row hover
|
|
111
|
+
--fs-#{$name}-tint: var(--fs-#{$name}-200); // selected bg, focus fill
|
|
112
|
+
--fs-#{$name}-light: var(--fs-#{$name}-300); // borders sobre fondos claros
|
|
113
|
+
--fs-#{$name}-soft: var(--fs-#{$name}-400); // íconos, placeholder, disabled
|
|
114
|
+
--fs-#{$name}-base: var(--fs-#{$name}-500); // color principal
|
|
115
|
+
--fs-#{$name}-hover: var(--fs-#{$name}-600); // hover en solid buttons
|
|
116
|
+
--fs-#{$name}-active: var(--fs-#{$name}-700); // pressed / active
|
|
117
|
+
--fs-#{$name}-emphasis: var(--fs-#{$name}-800); // texto sobre fondos del mismo color
|
|
118
|
+
--fs-#{$name}-contrast: var(--fs-#{$name}-900); // texto dark, headings sobre muted/tint
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
// -----------------------------------------------------------------------------
|
|
123
|
+
// 5. VARIABLES SASS — acceso directo en tiempo de compilación
|
|
124
|
+
// -----------------------------------------------------------------------------
|
|
125
|
+
//
|
|
126
|
+
// Para usar en valores de mixins, @each, maps, cálculos SCSS.
|
|
127
|
+
// No disponibles como CSS custom properties.
|
|
128
|
+
|
|
129
|
+
$primary-muted: generate-scale($fs-primary-hex, 50);
|
|
130
|
+
$primary-subtle: generate-scale($fs-primary-hex, 100);
|
|
131
|
+
$primary-tint: generate-scale($fs-primary-hex, 200);
|
|
132
|
+
$primary-light: generate-scale($fs-primary-hex, 300);
|
|
133
|
+
$primary-soft: generate-scale($fs-primary-hex, 400);
|
|
134
|
+
$primary-base: generate-scale($fs-primary-hex, 500);
|
|
135
|
+
$primary-hover: generate-scale($fs-primary-hex, 600);
|
|
136
|
+
$primary-active: generate-scale($fs-primary-hex, 700);
|
|
137
|
+
$primary-emphasis: generate-scale($fs-primary-hex, 800);
|
|
138
|
+
$primary-contrast: generate-scale($fs-primary-hex, 900);
|
|
139
|
+
|
|
140
|
+
$secondary-muted: generate-scale($fs-secondary-hex, 50);
|
|
141
|
+
$secondary-subtle: generate-scale($fs-secondary-hex, 100);
|
|
142
|
+
$secondary-tint: generate-scale($fs-secondary-hex, 200);
|
|
143
|
+
$secondary-light: generate-scale($fs-secondary-hex, 300);
|
|
144
|
+
$secondary-soft: generate-scale($fs-secondary-hex, 400);
|
|
145
|
+
$secondary-base: generate-scale($fs-secondary-hex, 500);
|
|
146
|
+
$secondary-hover: generate-scale($fs-secondary-hex, 600);
|
|
147
|
+
$secondary-active: generate-scale($fs-secondary-hex, 700);
|
|
148
|
+
$secondary-emphasis: generate-scale($fs-secondary-hex, 800);
|
|
149
|
+
$secondary-contrast: generate-scale($fs-secondary-hex, 900);
|
|
150
|
+
|
|
151
|
+
$tertiary-muted: generate-scale($fs-tertiary-hex, 50);
|
|
152
|
+
$tertiary-subtle: generate-scale($fs-tertiary-hex, 100);
|
|
153
|
+
$tertiary-tint: generate-scale($fs-tertiary-hex, 200);
|
|
154
|
+
$tertiary-light: generate-scale($fs-tertiary-hex, 300);
|
|
155
|
+
$tertiary-soft: generate-scale($fs-tertiary-hex, 400);
|
|
156
|
+
$tertiary-base: generate-scale($fs-tertiary-hex, 500);
|
|
157
|
+
$tertiary-hover: generate-scale($fs-tertiary-hex, 600);
|
|
158
|
+
$tertiary-active: generate-scale($fs-tertiary-hex, 700);
|
|
159
|
+
$tertiary-emphasis: generate-scale($fs-tertiary-hex, 800);
|
|
160
|
+
$tertiary-contrast: generate-scale($fs-tertiary-hex, 900);
|
|
161
|
+
|
|
162
|
+
$neutral-muted: generate-scale($fs-neutral-hex, 50);
|
|
163
|
+
$neutral-subtle: generate-scale($fs-neutral-hex, 100);
|
|
164
|
+
$neutral-tint: generate-scale($fs-neutral-hex, 200);
|
|
165
|
+
$neutral-light: generate-scale($fs-neutral-hex, 300);
|
|
166
|
+
$neutral-soft: generate-scale($fs-neutral-hex, 400);
|
|
167
|
+
$neutral-base: generate-scale($fs-neutral-hex, 500);
|
|
168
|
+
$neutral-hover: generate-scale($fs-neutral-hex, 600);
|
|
169
|
+
$neutral-active: generate-scale($fs-neutral-hex, 700);
|
|
170
|
+
$neutral-emphasis: generate-scale($fs-neutral-hex, 800);
|
|
171
|
+
$neutral-contrast: generate-scale($fs-neutral-hex, 900);
|
|
172
|
+
|
|
173
|
+
$success-muted: generate-scale($fs-success-hex, 50);
|
|
174
|
+
$success-base: generate-scale($fs-success-hex, 500);
|
|
175
|
+
$success-hover: generate-scale($fs-success-hex, 600);
|
|
176
|
+
$success-active: generate-scale($fs-success-hex, 700);
|
|
177
|
+
$success-contrast: generate-scale($fs-success-hex, 900);
|
|
178
|
+
|
|
179
|
+
$warning-muted: generate-scale($fs-warning-hex, 50);
|
|
180
|
+
$warning-base: generate-scale($fs-warning-hex, 500);
|
|
181
|
+
$warning-hover: generate-scale($fs-warning-hex, 600);
|
|
182
|
+
$warning-active: generate-scale($fs-warning-hex, 700);
|
|
183
|
+
$warning-contrast: generate-scale($fs-warning-hex, 900);
|
|
184
|
+
|
|
185
|
+
$danger-muted: generate-scale($fs-danger-hex, 50);
|
|
186
|
+
$danger-base: generate-scale($fs-danger-hex, 500);
|
|
187
|
+
$danger-hover: generate-scale($fs-danger-hex, 600);
|
|
188
|
+
$danger-active: generate-scale($fs-danger-hex, 700);
|
|
189
|
+
$danger-contrast: generate-scale($fs-danger-hex, 900);
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
// -----------------------------------------------------------------------------
|
|
193
|
+
// 6. TOKENS DE TIPOGRAFÍA
|
|
194
|
+
// -----------------------------------------------------------------------------
|
|
195
|
+
|
|
196
|
+
$fs-font-sans: 'Inter', 'Segoe UI', system-ui, sans-serif !default;
|
|
197
|
+
$fs-font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace !default;
|
|
198
|
+
$fs-font-serif: 'Georgia', serif !default;
|
|
199
|
+
|
|
200
|
+
$fs-text-xs: 0.75rem; // 12px
|
|
201
|
+
$fs-text-sm: 0.875rem; // 14px
|
|
202
|
+
$fs-text-base: 1rem; // 16px
|
|
203
|
+
$fs-text-lg: 1.125rem; // 18px
|
|
204
|
+
$fs-text-xl: 1.25rem; // 20px
|
|
205
|
+
$fs-text-2xl: 1.5rem; // 24px
|
|
206
|
+
$fs-text-3xl: 1.875rem; // 30px
|
|
207
|
+
|
|
208
|
+
$fs-font-regular: 400;
|
|
209
|
+
$fs-font-medium: 500;
|
|
210
|
+
$fs-font-semi: 600;
|
|
211
|
+
$fs-font-bold: 700;
|
|
212
|
+
|
|
213
|
+
$fs-leading-tight: 1.25;
|
|
214
|
+
$fs-leading-normal: 1.5;
|
|
215
|
+
$fs-leading-relaxed: 1.75;
|
|
216
|
+
|
|
217
|
+
$fs-tracking-tight: -0.025em;
|
|
218
|
+
$fs-tracking-normal: 0em;
|
|
219
|
+
$fs-tracking-wide: 0.05em;
|
|
220
|
+
$fs-tracking-wider: 0.1em;
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
// -----------------------------------------------------------------------------
|
|
224
|
+
// 7. TOKENS DE ESPACIADO
|
|
225
|
+
// -----------------------------------------------------------------------------
|
|
226
|
+
|
|
227
|
+
$fs-space-1: 0.25rem; // 4px
|
|
228
|
+
$fs-space-2: 0.5rem; // 8px
|
|
229
|
+
$fs-space-3: 0.75rem; // 12px
|
|
230
|
+
$fs-space-4: 1rem; // 16px
|
|
231
|
+
$fs-space-5: 1.25rem; // 20px
|
|
232
|
+
$fs-space-6: 1.5rem; // 24px
|
|
233
|
+
$fs-space-8: 2rem; // 32px
|
|
234
|
+
$fs-space-10: 2.5rem; // 40px
|
|
235
|
+
$fs-space-12: 3rem; // 48px
|
|
236
|
+
$fs-space-16: 4rem; // 64px
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
// -----------------------------------------------------------------------------
|
|
240
|
+
// 8. TOKENS DE BORDER RADIUS
|
|
241
|
+
// -----------------------------------------------------------------------------
|
|
242
|
+
|
|
243
|
+
$fs-radius-sm: 4px;
|
|
244
|
+
$fs-radius-md: 6px;
|
|
245
|
+
$fs-radius-lg: 8px;
|
|
246
|
+
$fs-radius-xl: 12px;
|
|
247
|
+
$fs-radius-2xl: 16px;
|
|
248
|
+
$fs-radius-full: 9999px;
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
// -----------------------------------------------------------------------------
|
|
252
|
+
// 9. TOKENS DE TRANSICIÓN
|
|
253
|
+
// -----------------------------------------------------------------------------
|
|
254
|
+
|
|
255
|
+
$fs-duration-fast: 100ms;
|
|
256
|
+
$fs-duration-normal: 200ms;
|
|
257
|
+
$fs-duration-slow: 350ms;
|
|
258
|
+
|
|
259
|
+
$fs-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
|
|
260
|
+
$fs-ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
261
|
+
$fs-ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
262
|
+
$fs-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
263
|
+
|
|
264
|
+
$fs-transition-base: all $fs-duration-normal $fs-ease-default;
|
|
265
|
+
$fs-transition-colors: background-color $fs-duration-fast $fs-ease-default,
|
|
266
|
+
border-color $fs-duration-fast $fs-ease-default,
|
|
267
|
+
color $fs-duration-fast $fs-ease-default;
|
|
268
|
+
$fs-transition-transform: transform $fs-duration-normal $fs-ease-bounce;
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
// -----------------------------------------------------------------------------
|
|
272
|
+
// 10. TOKENS DE ELEVACIÓN (box-shadow)
|
|
273
|
+
// -----------------------------------------------------------------------------
|
|
274
|
+
|
|
275
|
+
$fs-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
|
|
276
|
+
$fs-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.04);
|
|
277
|
+
$fs-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.08), 0 4px 6px rgba(0, 0, 0, 0.04);
|
|
278
|
+
$fs-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.09), 0 8px 10px rgba(0, 0, 0, 0.04);
|
|
279
|
+
$fs-shadow-none: none;
|
|
280
|
+
|
|
281
|
+
// Focus ring — siempre del color del token activo
|
|
282
|
+
@mixin focus-ring($color: $primary-base, $offset: 2px) {
|
|
283
|
+
outline: none;
|
|
284
|
+
box-shadow: 0 0 0 $offset white, 0 0 0 ($offset + 2px) $color;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
// -----------------------------------------------------------------------------
|
|
289
|
+
// 11. TOKENS DE Z-INDEX
|
|
290
|
+
// -----------------------------------------------------------------------------
|
|
291
|
+
|
|
292
|
+
$fs-z-base: 0;
|
|
293
|
+
$fs-z-raised: 10;
|
|
294
|
+
$fs-z-dropdown: 100;
|
|
295
|
+
$fs-z-sticky: 200;
|
|
296
|
+
$fs-z-overlay: 300;
|
|
297
|
+
$fs-z-modal: 400;
|
|
298
|
+
$fs-z-toast: 500;
|
|
299
|
+
$fs-z-tooltip: 600;
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
// -----------------------------------------------------------------------------
|
|
303
|
+
// 12. REGISTRO EN :root — CSS Custom Properties
|
|
304
|
+
// -----------------------------------------------------------------------------
|
|
305
|
+
//
|
|
306
|
+
// Esto emite TODAS las variables CSS disponibles en runtime.
|
|
307
|
+
// Los componentes Angular usan var(--fs-primary-hover) etc.
|
|
308
|
+
|
|
309
|
+
:root {
|
|
310
|
+
// Escalas completas (stops numéricos — uso interno / debugging)
|
|
311
|
+
@include emit-scale('primary', $fs-primary-hex);
|
|
312
|
+
@include emit-scale('secondary', $fs-secondary-hex);
|
|
313
|
+
@include emit-scale('tertiary', $fs-tertiary-hex);
|
|
314
|
+
@include emit-scale('neutral', $fs-neutral-hex);
|
|
315
|
+
@include emit-scale('success', $fs-success-hex);
|
|
316
|
+
@include emit-scale('warning', $fs-warning-hex);
|
|
317
|
+
@include emit-scale('danger', $fs-danger-hex);
|
|
318
|
+
|
|
319
|
+
// Alias tokens de estado (USO EN COMPONENTES)
|
|
320
|
+
@include emit-alias-tokens('primary');
|
|
321
|
+
@include emit-alias-tokens('secondary');
|
|
322
|
+
@include emit-alias-tokens('tertiary');
|
|
323
|
+
@include emit-alias-tokens('neutral');
|
|
324
|
+
@include emit-alias-tokens('success');
|
|
325
|
+
@include emit-alias-tokens('warning');
|
|
326
|
+
@include emit-alias-tokens('danger');
|
|
327
|
+
|
|
328
|
+
// Tipografía
|
|
329
|
+
--fs-font-sans: #{$fs-font-sans};
|
|
330
|
+
--fs-font-mono: #{$fs-font-mono};
|
|
331
|
+
--fs-font-serif: #{$fs-font-serif};
|
|
332
|
+
|
|
333
|
+
// Radios
|
|
334
|
+
--fs-radius-sm: #{$fs-radius-sm};
|
|
335
|
+
--fs-radius-md: #{$fs-radius-md};
|
|
336
|
+
--fs-radius-lg: #{$fs-radius-lg};
|
|
337
|
+
--fs-radius-xl: #{$fs-radius-xl};
|
|
338
|
+
--fs-radius-full: #{$fs-radius-full};
|
|
339
|
+
|
|
340
|
+
// Transiciones
|
|
341
|
+
--fs-duration-fast: #{$fs-duration-fast};
|
|
342
|
+
--fs-duration-normal: #{$fs-duration-normal};
|
|
343
|
+
--fs-duration-slow: #{$fs-duration-slow};
|
|
344
|
+
|
|
345
|
+
// Elevaciones
|
|
346
|
+
--fs-shadow-sm: #{$fs-shadow-sm};
|
|
347
|
+
--fs-shadow-md: #{$fs-shadow-md};
|
|
348
|
+
--fs-shadow-lg: #{$fs-shadow-lg};
|
|
349
|
+
|
|
350
|
+
// Espaciado
|
|
351
|
+
--fs-space-1: #{$fs-space-1};
|
|
352
|
+
--fs-space-2: #{$fs-space-2};
|
|
353
|
+
--fs-space-3: #{$fs-space-3};
|
|
354
|
+
--fs-space-4: #{$fs-space-4};
|
|
355
|
+
--fs-space-6: #{$fs-space-6};
|
|
356
|
+
--fs-space-8: #{$fs-space-8};
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
// -----------------------------------------------------------------------------
|
|
361
|
+
// 13. OVERRIDE DE TEMA — theming por aplicación
|
|
362
|
+
// -----------------------------------------------------------------------------
|
|
363
|
+
//
|
|
364
|
+
// Para sobreescribir los colores base en una app consumidora:
|
|
365
|
+
//
|
|
366
|
+
// // en styles.scss de tu app Angular:
|
|
367
|
+
// @use '@fsociety/tokens' with (
|
|
368
|
+
// $fs-primary-hex: #7c3aed, // purple
|
|
369
|
+
// $fs-secondary-hex: #0891b2,
|
|
370
|
+
// $fs-tertiary-hex: #0d9488,
|
|
371
|
+
// );
|
|
372
|
+
//
|
|
373
|
+
// Todos los tokens se regeneran automáticamente con la nueva escala.
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
// -----------------------------------------------------------------------------
|
|
377
|
+
// 14. DARK MODE
|
|
378
|
+
// -----------------------------------------------------------------------------
|
|
379
|
+
|
|
380
|
+
@media (prefers-color-scheme: dark) {
|
|
381
|
+
:root {
|
|
382
|
+
// En dark mode los alias invierten su lógica visual:
|
|
383
|
+
// el "muted" que era casi blanco pasa a ser casi negro,
|
|
384
|
+
// y el "contrast" que era muy oscuro pasa a ser casi blanco.
|
|
385
|
+
|
|
386
|
+
@include emit-scale('primary', $fs-primary-hex);
|
|
387
|
+
@include emit-scale('secondary', $fs-secondary-hex);
|
|
388
|
+
@include emit-scale('tertiary', $fs-tertiary-hex);
|
|
389
|
+
@include emit-scale('neutral', $fs-neutral-hex);
|
|
390
|
+
@include emit-scale('success', $fs-success-hex);
|
|
391
|
+
@include emit-scale('warning', $fs-warning-hex);
|
|
392
|
+
@include emit-scale('danger', $fs-danger-hex);
|
|
393
|
+
|
|
394
|
+
// Alias invertidos para dark
|
|
395
|
+
--fs-primary-muted: var(--fs-primary-900);
|
|
396
|
+
--fs-primary-subtle: var(--fs-primary-800);
|
|
397
|
+
--fs-primary-tint: var(--fs-primary-700);
|
|
398
|
+
--fs-primary-light: var(--fs-primary-600);
|
|
399
|
+
--fs-primary-soft: var(--fs-primary-400);
|
|
400
|
+
--fs-primary-base: var(--fs-primary-500);
|
|
401
|
+
--fs-primary-hover: var(--fs-primary-400);
|
|
402
|
+
--fs-primary-active: var(--fs-primary-300);
|
|
403
|
+
--fs-primary-emphasis: var(--fs-primary-200);
|
|
404
|
+
--fs-primary-contrast: var(--fs-primary-50);
|
|
405
|
+
|
|
406
|
+
--fs-secondary-muted: var(--fs-secondary-900);
|
|
407
|
+
--fs-secondary-subtle: var(--fs-secondary-800);
|
|
408
|
+
--fs-secondary-tint: var(--fs-secondary-700);
|
|
409
|
+
--fs-secondary-light: var(--fs-secondary-600);
|
|
410
|
+
--fs-secondary-soft: var(--fs-secondary-400);
|
|
411
|
+
--fs-secondary-base: var(--fs-secondary-500);
|
|
412
|
+
--fs-secondary-hover: var(--fs-secondary-400);
|
|
413
|
+
--fs-secondary-active: var(--fs-secondary-300);
|
|
414
|
+
--fs-secondary-emphasis: var(--fs-secondary-200);
|
|
415
|
+
--fs-secondary-contrast: var(--fs-secondary-50);
|
|
416
|
+
|
|
417
|
+
--fs-tertiary-muted: var(--fs-tertiary-900);
|
|
418
|
+
--fs-tertiary-subtle: var(--fs-tertiary-800);
|
|
419
|
+
--fs-tertiary-tint: var(--fs-tertiary-700);
|
|
420
|
+
--fs-tertiary-light: var(--fs-tertiary-600);
|
|
421
|
+
--fs-tertiary-soft: var(--fs-tertiary-400);
|
|
422
|
+
--fs-tertiary-base: var(--fs-tertiary-500);
|
|
423
|
+
--fs-tertiary-hover: var(--fs-tertiary-400);
|
|
424
|
+
--fs-tertiary-active: var(--fs-tertiary-300);
|
|
425
|
+
--fs-tertiary-emphasis: var(--fs-tertiary-200);
|
|
426
|
+
--fs-tertiary-contrast: var(--fs-tertiary-50);
|
|
427
|
+
|
|
428
|
+
--fs-neutral-muted: var(--fs-neutral-900);
|
|
429
|
+
--fs-neutral-subtle: var(--fs-neutral-800);
|
|
430
|
+
--fs-neutral-base: var(--fs-neutral-500);
|
|
431
|
+
--fs-neutral-hover: var(--fs-neutral-400);
|
|
432
|
+
--fs-neutral-active: var(--fs-neutral-300);
|
|
433
|
+
--fs-neutral-contrast: var(--fs-neutral-50);
|
|
434
|
+
|
|
435
|
+
--fs-danger-muted: var(--fs-danger-900);
|
|
436
|
+
--fs-danger-base: var(--fs-danger-500);
|
|
437
|
+
--fs-danger-hover: var(--fs-danger-400);
|
|
438
|
+
--fs-danger-contrast: var(--fs-danger-50);
|
|
439
|
+
|
|
440
|
+
--fs-success-muted: var(--fs-success-900);
|
|
441
|
+
--fs-success-base: var(--fs-success-500);
|
|
442
|
+
--fs-success-hover: var(--fs-success-400);
|
|
443
|
+
--fs-success-contrast: var(--fs-success-50);
|
|
444
|
+
|
|
445
|
+
--fs-warning-muted: var(--fs-warning-900);
|
|
446
|
+
--fs-warning-base: var(--fs-warning-500);
|
|
447
|
+
--fs-warning-hover: var(--fs-warning-400);
|
|
448
|
+
--fs-warning-contrast: var(--fs-warning-50);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Soporte para clase manual [data-theme="dark"] en Angular
|
|
453
|
+
[data-theme='dark'] {
|
|
454
|
+
@extend :root; // hereda todo el bloque de dark mode arriba si se necesita
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// ---------------------------------------------------------------------------
|
|
458
|
+
// 15. TOKENS DE COMPONENTE
|
|
459
|
+
// ---------------------------------------------------------------------------
|
|
460
|
+
|
|
461
|
+
:root {
|
|
462
|
+
// fs-tabs
|
|
463
|
+
--fs-tab-bg: #0d1117;
|
|
464
|
+
--fs-tab-color: rgba(255, 255, 255, 0.40);
|
|
465
|
+
--fs-tab-color-hover: rgba(255, 255, 255, 0.70);
|
|
466
|
+
--fs-tab-color-active: #ffffff;
|
|
467
|
+
--fs-tab-border: rgba(255, 255, 255, 0.08);
|
|
468
|
+
--fs-tab-hover-bg: rgba(255, 255, 255, 0.03);
|
|
469
|
+
--fs-tab-indicator-from: var(--fs-primary-base);
|
|
470
|
+
--fs-tab-indicator-to: var(--fs-tertiary-base);
|
|
471
|
+
--fs-tab-indicator-glow: rgba(34, 211, 238, 0.45);
|
|
472
|
+
}
|