@valcis/brand 2.0.4 → 2.1.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.
package/README.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # @valcis/brand
2
2
 
3
- Componentes React de marca **valcis**: Logo SVG y Footer con soporte SSR.
3
+ [![npm version](https://img.shields.io/npm/v/@valcis/brand.svg)](https://www.npmjs.com/package/@valcis/brand)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@valcis/brand.svg)](https://www.npmjs.com/package/@valcis/brand)
5
+ [![bundle size](https://img.shields.io/bundlephobia/minzip/@valcis/brand)](https://bundlephobia.com/package/@valcis/brand)
6
+ [![license](https://img.shields.io/npm/l/@valcis/brand.svg)](https://github.com/valcis/branding_valcis/blob/main/LICENSE)
7
+
8
+ Componentes React de marca **valcis**: Logo SVG, Footer, Spinner, Watermark y tema con soporte SSR.
4
9
 
5
10
  ## Instalación
6
11
 
@@ -21,8 +26,9 @@ import { Logo } from '@valcis/brand';
21
26
  // Completo: >valcis|
22
27
  <Logo variant="full" size={40} />
23
28
 
24
- // Animado con cursor blink
25
- <Logo variant="full" size={32} animated />
29
+ // El logo full viene animado por defecto (cursor blink)
30
+ // Para desactivarlo:
31
+ <Logo variant="full" size={32} animated={false} />
26
32
  ```
27
33
 
28
34
  ### Props
@@ -31,7 +37,7 @@ import { Logo } from '@valcis/brand';
31
37
  |------|------|---------|-------------|
32
38
  | `variant` | `'icon' \| 'full'` | `'icon'` | Variante del logo |
33
39
  | `size` | `number \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `24` | Tamaño en px o preset |
34
- | `animated` | `boolean` | `false` | Animación CSS-only (respeta `prefers-reduced-motion`) |
40
+ | `animated` | `boolean` | `true` (full) / `false` (icon) | Animación CSS-only (respeta `prefers-reduced-motion`) |
35
41
  | `accentColor` | `string` | — | Color de brackets/chevron/cursor |
36
42
  | `textColor` | `string` | — | Color de letras |
37
43
  | `className` | `string` | — | Clase CSS adicional |
@@ -47,6 +53,56 @@ import { Logo } from '@valcis/brand';
47
53
  | `lg` | 32 |
48
54
  | `xl` | 48 |
49
55
 
56
+ ## Spinner
57
+
58
+ Indicador de carga con el logo animado.
59
+
60
+ ```tsx
61
+ import { Spinner } from '@valcis/brand';
62
+
63
+ // Básico
64
+ <Spinner />
65
+
66
+ // Con opciones
67
+ <Spinner size="lg" animation="spin" label="Cargando datos..." />
68
+ ```
69
+
70
+ ### Props
71
+
72
+ | Prop | Tipo | Default | Descripción |
73
+ |------|------|---------|-------------|
74
+ | `size` | `number \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Tamaño |
75
+ | `animation` | `'pulse' \| 'spin' \| 'bounce'` | `'pulse'` | Tipo de animación |
76
+ | `accentColor` | `string` | — | Color de acento |
77
+ | `textColor` | `string` | — | Color de texto |
78
+ | `label` | `string` | `'Cargando...'` | Texto para screen readers |
79
+ | `className` | `string` | — | Clase CSS adicional |
80
+
81
+ ## Watermark
82
+
83
+ Marca de agua posicionable para imágenes o secciones.
84
+
85
+ ```tsx
86
+ import { Watermark } from '@valcis/brand';
87
+
88
+ // El contenedor padre debe tener position: relative
89
+ <div style={{ position: 'relative' }}>
90
+ <img src="foto.jpg" alt="Foto" />
91
+ <Watermark position="bottom-right" opacity={0.3} />
92
+ </div>
93
+ ```
94
+
95
+ ### Props
96
+
97
+ | Prop | Tipo | Default | Descripción |
98
+ |------|------|---------|-------------|
99
+ | `position` | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right' \| 'center'` | `'bottom-right'` | Posición |
100
+ | `opacity` | `number` | `0.3` | Opacidad (0-1) |
101
+ | `size` | `number` | `48` | Tamaño del logo |
102
+ | `rotation` | `number` | `0` | Rotación en grados |
103
+ | `showOnHover` | `boolean` | `false` | Solo visible en hover |
104
+ | `className` | `string` | — | Clase CSS adicional |
105
+
50
106
  ## Footer
51
107
 
52
108
  Footer de atribución con logo, contacto y modos de copyright.
@@ -78,7 +134,7 @@ import { Footer } from '@valcis/brand';
78
134
  | `position` | `'static' \| 'sticky' \| 'fixed'` | `'sticky'` | Posicionamiento CSS |
79
135
  | `padding` | `'compact' \| 'normal' \| 'spacious' \| { x?, y? }` | `'normal'` | Densidad |
80
136
  | `border` | `boolean \| 'top' \| 'bottom' \| 'both' \| 'none'` | `'top'` | Borde separador |
81
- | `accentColor` | `string` | — | Color de acento (texto, links). No afecta al logo |
137
+ | `accentColor` | `string` | — | Color de acento (texto, links) |
82
138
  | `backgroundColor` | `string` | `'transparent'` | Fondo |
83
139
  | `textColor` | `string` | — | Color de texto override |
84
140
  | `as` | `'footer' \| 'div' \| 'section'` | `'div'` | Tag HTML |
@@ -90,10 +146,88 @@ import { Footer } from '@valcis/brand';
90
146
 
91
147
  | Modo | Resultado |
92
148
  |------|-----------|
93
- | `owner` | © 2025 >valcis\| |
94
- | `designer` | © 2025 · Diseñado por >valcis\| |
149
+ | `owner` | © 2026 >valcis\| |
150
+ | `designer` | © 2026 · Diseñado por >valcis\| |
95
151
  | `partner` | Powered by >valcis\| |
96
152
 
153
+ ## useTheme
154
+
155
+ Hook para detectar y controlar dark/light mode.
156
+
157
+ ```tsx
158
+ import { useTheme } from '@valcis/brand';
159
+
160
+ function App() {
161
+ const { theme, isDark, toggleTheme, setTheme } = useTheme();
162
+
163
+ return (
164
+ <div className={isDark ? 'dark' : 'light'}>
165
+ <button onClick={toggleTheme}>
166
+ {isDark ? '☀️' : '🌙'}
167
+ </button>
168
+
169
+ {/* Volver a preferencia del sistema */}
170
+ <button onClick={() => setTheme(null)}>Auto</button>
171
+ </div>
172
+ );
173
+ }
174
+ ```
175
+
176
+ ### Retorno
177
+
178
+ | Propiedad | Tipo | Descripción |
179
+ |-----------|------|-------------|
180
+ | `theme` | `'light' \| 'dark'` | Tema actual |
181
+ | `isDark` | `boolean` | `true` si es dark mode |
182
+ | `isLight` | `boolean` | `true` si es light mode |
183
+ | `setTheme` | `(theme: 'light' \| 'dark' \| null) => void` | Forzar tema (`null` = auto) |
184
+ | `toggleTheme` | `() => void` | Alternar entre light/dark |
185
+
186
+ ## Paleta de colores
187
+
188
+ Colores de marca exportados como constantes.
189
+
190
+ ```tsx
191
+ import { colors, primary, text, cssVariables } from '@valcis/brand';
192
+
193
+ // Usar en estilos
194
+ const style = { color: primary.DEFAULT }; // '#3B82F6'
195
+
196
+ // Paleta completa
197
+ console.log(colors.primary[500]); // '#3B82F6'
198
+ console.log(colors.text.DEFAULT); // '#1E293B'
199
+ console.log(colors.semantic.success); // '#22C55E'
200
+
201
+ // Inyectar CSS custom properties
202
+ const GlobalStyles = () => <style>{cssVariables}</style>;
203
+ ```
204
+
205
+ ### Colores disponibles
206
+
207
+ ```ts
208
+ colors.primary // Azules de marca (50-900, DEFAULT, light, dark)
209
+ colors.text // Colores de texto (DEFAULT, dark, muted, mutedDark)
210
+ colors.background // Fondos (light, dark, muted, mutedDark)
211
+ colors.border // Bordes (light, dark)
212
+ colors.semantic // Semánticos (success, warning, error, info)
213
+ ```
214
+
215
+ ### CSS Custom Properties
216
+
217
+ ```css
218
+ /* Disponibles tras inyectar cssVariables */
219
+ --valcis-primary
220
+ --valcis-primary-light
221
+ --valcis-primary-dark
222
+ --valcis-text
223
+ --valcis-text-muted
224
+ --valcis-bg
225
+ --valcis-bg-muted
226
+ --valcis-border
227
+ --valcis-logo-accent
228
+ --valcis-logo-text
229
+ ```
230
+
97
231
  ## SSR
98
232
 
99
233
  ```tsx
@@ -134,6 +268,29 @@ Para uso sin React, se exportan los paths SVG crudos:
134
268
  import { V_CALLIGRAPHIC_PATH, BRACKET_LEFT_PATH, VIEWBOXES } from '@valcis/brand';
135
269
  ```
136
270
 
271
+ ## Accesibilidad
272
+
273
+ El componente cumple con WCAG 2.2:
274
+
275
+ - **Contraste**: Colores con ratio AA (4.5:1)
276
+ - **Focus visible**: `:focus-visible` con outline
277
+ - **Target size**: Links con área mínima 44x44px
278
+ - **Semántica**: Uso de `<nav>`, `<footer>`, `aria-label`
279
+ - **Logo decorativo**: `aria-hidden="true"` (excepto si se proporciona `ariaLabel`)
280
+ - **Reduced motion**: Animaciones respetan `prefers-reduced-motion`
281
+
282
+ ## Desarrollo
283
+
284
+ ```bash
285
+ npm run build # Build de producción
286
+ npm run dev # Build en modo watch
287
+ npm run lint # Ejecutar ESLint
288
+ npm run lint:fix # Arreglar errores de lint
289
+ npm run format # Formatear con Prettier
290
+ npm test # Ejecutar tests (81 tests)
291
+ npm run test:watch # Tests en modo watch
292
+ ```
293
+
137
294
  ## Licencia
138
295
 
139
296
  MIT
package/dist/index.d.mts CHANGED
@@ -175,4 +175,217 @@ declare const FETCH_TIMEOUT = 2000;
175
175
  declare const CACHE_DURATION: number;
176
176
  declare const CACHE_KEY = "valcis-brand-dev-info";
177
177
 
178
- export { ASPECT_RATIOS, A_PATH, BRACKET_LEFT_PATH, BRACKET_RIGHT_PATH, CACHE_DURATION, CACHE_KEY, CHEVRON_RIGHT_FULL_PATH, CURSOR_PATH, C_PATH, type CopyrightMode, DEFAULT_DEV_INFO, DEV_INFO_URL, type DevInfo, FETCH_TIMEOUT, FULL_GLYPH_OFFSETS, Footer, type FooterProps, I_PATH, L_PATH, Logo, type LogoProps, type LogoSize, type LogoVariant, S_PATH, VIEWBOXES, V_CALLIGRAPHIC_FULL_TRANSFORM, V_CALLIGRAPHIC_PATH, getDevInfo, useDevInfo };
178
+ interface WatermarkProps {
179
+ /** Posición del watermark */
180
+ position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center';
181
+ /** Opacidad (0-1) */
182
+ opacity?: number;
183
+ /** Tamaño del logo */
184
+ size?: number;
185
+ /** Rotación en grados */
186
+ rotation?: number;
187
+ /** Mostrar solo en hover del contenedor padre */
188
+ showOnHover?: boolean;
189
+ /** Clase CSS adicional */
190
+ className?: string;
191
+ }
192
+ /**
193
+ * Watermark - Marca de agua con logo valcis
194
+ *
195
+ * Útil para imágenes, documentos o secciones que requieren atribución.
196
+ * Se posiciona de forma absoluta, el contenedor padre debe tener position: relative.
197
+ */
198
+ declare const Watermark: React.FC<WatermarkProps>;
199
+
200
+ interface SpinnerProps {
201
+ /** Tamaño del spinner */
202
+ size?: number | 'sm' | 'md' | 'lg' | 'xl';
203
+ /** Tipo de animación */
204
+ animation?: 'pulse' | 'spin' | 'bounce';
205
+ /** Color de acento */
206
+ accentColor?: string;
207
+ /** Color del texto/letra */
208
+ textColor?: string;
209
+ /** Texto de carga (accesibilidad) */
210
+ label?: string;
211
+ /** Clase CSS adicional */
212
+ className?: string;
213
+ }
214
+ /**
215
+ * Spinner - Indicador de carga con logo valcis animado
216
+ *
217
+ * Usa el logo icon con diferentes animaciones.
218
+ * Respeta prefers-reduced-motion.
219
+ */
220
+ declare const Spinner: React.FC<SpinnerProps>;
221
+
222
+ type Theme = 'light' | 'dark';
223
+ interface UseThemeResult {
224
+ /** Tema actual */
225
+ theme: Theme;
226
+ /** true si es dark mode */
227
+ isDark: boolean;
228
+ /** true si es light mode */
229
+ isLight: boolean;
230
+ /** Forzar tema manualmente (null = auto) */
231
+ setTheme: (theme: Theme | null) => void;
232
+ /** Alternar entre light y dark */
233
+ toggleTheme: () => void;
234
+ }
235
+ /**
236
+ * Hook para detectar y controlar el tema (dark/light mode)
237
+ *
238
+ * Por defecto detecta la preferencia del sistema (prefers-color-scheme).
239
+ * Permite override manual que persiste en localStorage.
240
+ *
241
+ * @example
242
+ * ```tsx
243
+ * const { theme, isDark, toggleTheme } = useTheme();
244
+ *
245
+ * return (
246
+ * <div className={isDark ? 'dark' : 'light'}>
247
+ * <button onClick={toggleTheme}>
248
+ * {isDark ? '☀️' : '🌙'}
249
+ * </button>
250
+ * </div>
251
+ * );
252
+ * ```
253
+ */
254
+ declare function useTheme(): UseThemeResult;
255
+
256
+ /**
257
+ * Paleta de colores de marca valcis
258
+ *
259
+ * Uso:
260
+ * ```ts
261
+ * import { colors } from '@valcis/brand';
262
+ * console.log(colors.primary.DEFAULT); // '#3B82F6'
263
+ * ```
264
+ */
265
+ /** Colores primarios de marca */
266
+ declare const primary: {
267
+ /** Azul principal */
268
+ readonly DEFAULT: "#3B82F6";
269
+ /** Azul claro (para dark mode) */
270
+ readonly light: "#60A5FA";
271
+ /** Azul oscuro (hover) */
272
+ readonly dark: "#2563EB";
273
+ /** Azul muy claro (backgrounds) */
274
+ readonly 50: "#EFF6FF";
275
+ readonly 100: "#DBEAFE";
276
+ readonly 200: "#BFDBFE";
277
+ readonly 300: "#93C5FD";
278
+ readonly 400: "#60A5FA";
279
+ readonly 500: "#3B82F6";
280
+ readonly 600: "#2563EB";
281
+ readonly 700: "#1D4ED8";
282
+ readonly 800: "#1E40AF";
283
+ readonly 900: "#1E3A8A";
284
+ };
285
+ /** Colores de texto */
286
+ declare const text: {
287
+ /** Texto principal (light mode) */
288
+ readonly DEFAULT: "#1E293B";
289
+ /** Texto principal (dark mode) */
290
+ readonly dark: "#F1F5F9";
291
+ /** Texto secundario (light mode) */
292
+ readonly muted: "#64748B";
293
+ /** Texto secundario (dark mode) */
294
+ readonly mutedDark: "#94A3B8";
295
+ };
296
+ /** Colores de fondo */
297
+ declare const background: {
298
+ /** Fondo claro */
299
+ readonly light: "#FFFFFF";
300
+ /** Fondo oscuro */
301
+ readonly dark: "#0F172A";
302
+ /** Fondo gris claro */
303
+ readonly muted: "#F8FAFC";
304
+ /** Fondo gris oscuro */
305
+ readonly mutedDark: "#1E293B";
306
+ };
307
+ /** Colores de borde */
308
+ declare const border: {
309
+ /** Borde claro */
310
+ readonly light: "#E2E8F0";
311
+ /** Borde oscuro */
312
+ readonly dark: "#334155";
313
+ };
314
+ /** Colores semánticos */
315
+ declare const semantic: {
316
+ readonly success: "#22C55E";
317
+ readonly warning: "#F59E0B";
318
+ readonly error: "#EF4444";
319
+ readonly info: "#3B82F6";
320
+ };
321
+ /** Paleta completa */
322
+ declare const colors: {
323
+ readonly primary: {
324
+ /** Azul principal */
325
+ readonly DEFAULT: "#3B82F6";
326
+ /** Azul claro (para dark mode) */
327
+ readonly light: "#60A5FA";
328
+ /** Azul oscuro (hover) */
329
+ readonly dark: "#2563EB";
330
+ /** Azul muy claro (backgrounds) */
331
+ readonly 50: "#EFF6FF";
332
+ readonly 100: "#DBEAFE";
333
+ readonly 200: "#BFDBFE";
334
+ readonly 300: "#93C5FD";
335
+ readonly 400: "#60A5FA";
336
+ readonly 500: "#3B82F6";
337
+ readonly 600: "#2563EB";
338
+ readonly 700: "#1D4ED8";
339
+ readonly 800: "#1E40AF";
340
+ readonly 900: "#1E3A8A";
341
+ };
342
+ readonly text: {
343
+ /** Texto principal (light mode) */
344
+ readonly DEFAULT: "#1E293B";
345
+ /** Texto principal (dark mode) */
346
+ readonly dark: "#F1F5F9";
347
+ /** Texto secundario (light mode) */
348
+ readonly muted: "#64748B";
349
+ /** Texto secundario (dark mode) */
350
+ readonly mutedDark: "#94A3B8";
351
+ };
352
+ readonly background: {
353
+ /** Fondo claro */
354
+ readonly light: "#FFFFFF";
355
+ /** Fondo oscuro */
356
+ readonly dark: "#0F172A";
357
+ /** Fondo gris claro */
358
+ readonly muted: "#F8FAFC";
359
+ /** Fondo gris oscuro */
360
+ readonly mutedDark: "#1E293B";
361
+ };
362
+ readonly border: {
363
+ /** Borde claro */
364
+ readonly light: "#E2E8F0";
365
+ /** Borde oscuro */
366
+ readonly dark: "#334155";
367
+ };
368
+ readonly semantic: {
369
+ readonly success: "#22C55E";
370
+ readonly warning: "#F59E0B";
371
+ readonly error: "#EF4444";
372
+ readonly info: "#3B82F6";
373
+ };
374
+ };
375
+ /**
376
+ * CSS Custom Properties para usar en estilos
377
+ *
378
+ * Uso:
379
+ * ```css
380
+ * color: var(--valcis-primary);
381
+ * ```
382
+ */
383
+ declare const cssVariables: string;
384
+ type Colors = typeof colors;
385
+ type Primary = typeof primary;
386
+ type Text = typeof text;
387
+ type Background = typeof background;
388
+ type Border = typeof border;
389
+ type Semantic = typeof semantic;
390
+
391
+ export { ASPECT_RATIOS, A_PATH, BRACKET_LEFT_PATH, BRACKET_RIGHT_PATH, type Background, type Border, CACHE_DURATION, CACHE_KEY, CHEVRON_RIGHT_FULL_PATH, CURSOR_PATH, C_PATH, type Colors, type CopyrightMode, DEFAULT_DEV_INFO, DEV_INFO_URL, type DevInfo, FETCH_TIMEOUT, FULL_GLYPH_OFFSETS, Footer, type FooterProps, I_PATH, L_PATH, Logo, type LogoProps, type LogoSize, type LogoVariant, type Primary, S_PATH, type Semantic, Spinner, type SpinnerProps, type Text, type Theme, type UseThemeResult, VIEWBOXES, V_CALLIGRAPHIC_FULL_TRANSFORM, V_CALLIGRAPHIC_PATH, Watermark, type WatermarkProps, background, border, colors, cssVariables, getDevInfo, primary, semantic, text, useDevInfo, useTheme };
package/dist/index.d.ts CHANGED
@@ -175,4 +175,217 @@ declare const FETCH_TIMEOUT = 2000;
175
175
  declare const CACHE_DURATION: number;
176
176
  declare const CACHE_KEY = "valcis-brand-dev-info";
177
177
 
178
- export { ASPECT_RATIOS, A_PATH, BRACKET_LEFT_PATH, BRACKET_RIGHT_PATH, CACHE_DURATION, CACHE_KEY, CHEVRON_RIGHT_FULL_PATH, CURSOR_PATH, C_PATH, type CopyrightMode, DEFAULT_DEV_INFO, DEV_INFO_URL, type DevInfo, FETCH_TIMEOUT, FULL_GLYPH_OFFSETS, Footer, type FooterProps, I_PATH, L_PATH, Logo, type LogoProps, type LogoSize, type LogoVariant, S_PATH, VIEWBOXES, V_CALLIGRAPHIC_FULL_TRANSFORM, V_CALLIGRAPHIC_PATH, getDevInfo, useDevInfo };
178
+ interface WatermarkProps {
179
+ /** Posición del watermark */
180
+ position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center';
181
+ /** Opacidad (0-1) */
182
+ opacity?: number;
183
+ /** Tamaño del logo */
184
+ size?: number;
185
+ /** Rotación en grados */
186
+ rotation?: number;
187
+ /** Mostrar solo en hover del contenedor padre */
188
+ showOnHover?: boolean;
189
+ /** Clase CSS adicional */
190
+ className?: string;
191
+ }
192
+ /**
193
+ * Watermark - Marca de agua con logo valcis
194
+ *
195
+ * Útil para imágenes, documentos o secciones que requieren atribución.
196
+ * Se posiciona de forma absoluta, el contenedor padre debe tener position: relative.
197
+ */
198
+ declare const Watermark: React.FC<WatermarkProps>;
199
+
200
+ interface SpinnerProps {
201
+ /** Tamaño del spinner */
202
+ size?: number | 'sm' | 'md' | 'lg' | 'xl';
203
+ /** Tipo de animación */
204
+ animation?: 'pulse' | 'spin' | 'bounce';
205
+ /** Color de acento */
206
+ accentColor?: string;
207
+ /** Color del texto/letra */
208
+ textColor?: string;
209
+ /** Texto de carga (accesibilidad) */
210
+ label?: string;
211
+ /** Clase CSS adicional */
212
+ className?: string;
213
+ }
214
+ /**
215
+ * Spinner - Indicador de carga con logo valcis animado
216
+ *
217
+ * Usa el logo icon con diferentes animaciones.
218
+ * Respeta prefers-reduced-motion.
219
+ */
220
+ declare const Spinner: React.FC<SpinnerProps>;
221
+
222
+ type Theme = 'light' | 'dark';
223
+ interface UseThemeResult {
224
+ /** Tema actual */
225
+ theme: Theme;
226
+ /** true si es dark mode */
227
+ isDark: boolean;
228
+ /** true si es light mode */
229
+ isLight: boolean;
230
+ /** Forzar tema manualmente (null = auto) */
231
+ setTheme: (theme: Theme | null) => void;
232
+ /** Alternar entre light y dark */
233
+ toggleTheme: () => void;
234
+ }
235
+ /**
236
+ * Hook para detectar y controlar el tema (dark/light mode)
237
+ *
238
+ * Por defecto detecta la preferencia del sistema (prefers-color-scheme).
239
+ * Permite override manual que persiste en localStorage.
240
+ *
241
+ * @example
242
+ * ```tsx
243
+ * const { theme, isDark, toggleTheme } = useTheme();
244
+ *
245
+ * return (
246
+ * <div className={isDark ? 'dark' : 'light'}>
247
+ * <button onClick={toggleTheme}>
248
+ * {isDark ? '☀️' : '🌙'}
249
+ * </button>
250
+ * </div>
251
+ * );
252
+ * ```
253
+ */
254
+ declare function useTheme(): UseThemeResult;
255
+
256
+ /**
257
+ * Paleta de colores de marca valcis
258
+ *
259
+ * Uso:
260
+ * ```ts
261
+ * import { colors } from '@valcis/brand';
262
+ * console.log(colors.primary.DEFAULT); // '#3B82F6'
263
+ * ```
264
+ */
265
+ /** Colores primarios de marca */
266
+ declare const primary: {
267
+ /** Azul principal */
268
+ readonly DEFAULT: "#3B82F6";
269
+ /** Azul claro (para dark mode) */
270
+ readonly light: "#60A5FA";
271
+ /** Azul oscuro (hover) */
272
+ readonly dark: "#2563EB";
273
+ /** Azul muy claro (backgrounds) */
274
+ readonly 50: "#EFF6FF";
275
+ readonly 100: "#DBEAFE";
276
+ readonly 200: "#BFDBFE";
277
+ readonly 300: "#93C5FD";
278
+ readonly 400: "#60A5FA";
279
+ readonly 500: "#3B82F6";
280
+ readonly 600: "#2563EB";
281
+ readonly 700: "#1D4ED8";
282
+ readonly 800: "#1E40AF";
283
+ readonly 900: "#1E3A8A";
284
+ };
285
+ /** Colores de texto */
286
+ declare const text: {
287
+ /** Texto principal (light mode) */
288
+ readonly DEFAULT: "#1E293B";
289
+ /** Texto principal (dark mode) */
290
+ readonly dark: "#F1F5F9";
291
+ /** Texto secundario (light mode) */
292
+ readonly muted: "#64748B";
293
+ /** Texto secundario (dark mode) */
294
+ readonly mutedDark: "#94A3B8";
295
+ };
296
+ /** Colores de fondo */
297
+ declare const background: {
298
+ /** Fondo claro */
299
+ readonly light: "#FFFFFF";
300
+ /** Fondo oscuro */
301
+ readonly dark: "#0F172A";
302
+ /** Fondo gris claro */
303
+ readonly muted: "#F8FAFC";
304
+ /** Fondo gris oscuro */
305
+ readonly mutedDark: "#1E293B";
306
+ };
307
+ /** Colores de borde */
308
+ declare const border: {
309
+ /** Borde claro */
310
+ readonly light: "#E2E8F0";
311
+ /** Borde oscuro */
312
+ readonly dark: "#334155";
313
+ };
314
+ /** Colores semánticos */
315
+ declare const semantic: {
316
+ readonly success: "#22C55E";
317
+ readonly warning: "#F59E0B";
318
+ readonly error: "#EF4444";
319
+ readonly info: "#3B82F6";
320
+ };
321
+ /** Paleta completa */
322
+ declare const colors: {
323
+ readonly primary: {
324
+ /** Azul principal */
325
+ readonly DEFAULT: "#3B82F6";
326
+ /** Azul claro (para dark mode) */
327
+ readonly light: "#60A5FA";
328
+ /** Azul oscuro (hover) */
329
+ readonly dark: "#2563EB";
330
+ /** Azul muy claro (backgrounds) */
331
+ readonly 50: "#EFF6FF";
332
+ readonly 100: "#DBEAFE";
333
+ readonly 200: "#BFDBFE";
334
+ readonly 300: "#93C5FD";
335
+ readonly 400: "#60A5FA";
336
+ readonly 500: "#3B82F6";
337
+ readonly 600: "#2563EB";
338
+ readonly 700: "#1D4ED8";
339
+ readonly 800: "#1E40AF";
340
+ readonly 900: "#1E3A8A";
341
+ };
342
+ readonly text: {
343
+ /** Texto principal (light mode) */
344
+ readonly DEFAULT: "#1E293B";
345
+ /** Texto principal (dark mode) */
346
+ readonly dark: "#F1F5F9";
347
+ /** Texto secundario (light mode) */
348
+ readonly muted: "#64748B";
349
+ /** Texto secundario (dark mode) */
350
+ readonly mutedDark: "#94A3B8";
351
+ };
352
+ readonly background: {
353
+ /** Fondo claro */
354
+ readonly light: "#FFFFFF";
355
+ /** Fondo oscuro */
356
+ readonly dark: "#0F172A";
357
+ /** Fondo gris claro */
358
+ readonly muted: "#F8FAFC";
359
+ /** Fondo gris oscuro */
360
+ readonly mutedDark: "#1E293B";
361
+ };
362
+ readonly border: {
363
+ /** Borde claro */
364
+ readonly light: "#E2E8F0";
365
+ /** Borde oscuro */
366
+ readonly dark: "#334155";
367
+ };
368
+ readonly semantic: {
369
+ readonly success: "#22C55E";
370
+ readonly warning: "#F59E0B";
371
+ readonly error: "#EF4444";
372
+ readonly info: "#3B82F6";
373
+ };
374
+ };
375
+ /**
376
+ * CSS Custom Properties para usar en estilos
377
+ *
378
+ * Uso:
379
+ * ```css
380
+ * color: var(--valcis-primary);
381
+ * ```
382
+ */
383
+ declare const cssVariables: string;
384
+ type Colors = typeof colors;
385
+ type Primary = typeof primary;
386
+ type Text = typeof text;
387
+ type Background = typeof background;
388
+ type Border = typeof border;
389
+ type Semantic = typeof semantic;
390
+
391
+ export { ASPECT_RATIOS, A_PATH, BRACKET_LEFT_PATH, BRACKET_RIGHT_PATH, type Background, type Border, CACHE_DURATION, CACHE_KEY, CHEVRON_RIGHT_FULL_PATH, CURSOR_PATH, C_PATH, type Colors, type CopyrightMode, DEFAULT_DEV_INFO, DEV_INFO_URL, type DevInfo, FETCH_TIMEOUT, FULL_GLYPH_OFFSETS, Footer, type FooterProps, I_PATH, L_PATH, Logo, type LogoProps, type LogoSize, type LogoVariant, type Primary, S_PATH, type Semantic, Spinner, type SpinnerProps, type Text, type Theme, type UseThemeResult, VIEWBOXES, V_CALLIGRAPHIC_FULL_TRANSFORM, V_CALLIGRAPHIC_PATH, Watermark, type WatermarkProps, background, border, colors, cssVariables, getDevInfo, primary, semantic, text, useDevInfo, useTheme };