- Add Skeleton base component with variants: text, rectangular, circular - Add SkeletonText for multi-line text placeholders - Add SkeletonCard for card-shaped loading states - Add SkeletonTable for table loading with configurable rows/columns - Add SkeletonAvatar for avatar placeholders (sm/md/lg/xl) - Add SkeletonButton for button placeholders - Add shimmer animation to Tailwind config - Add comprehensive tests (21 tests passing) - Export all components from common/index.ts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
178 lines
5.5 KiB
JavaScript
178 lines
5.5 KiB
JavaScript
/** @type {import('tailwindcss').Config} */
|
|
export default {
|
|
content: [
|
|
'./index.html',
|
|
'./src/**/*.{js,ts,jsx,tsx}',
|
|
],
|
|
darkMode: 'class', // Habilitar dark mode con clase
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
// Colores de marca ISEM (via CSS variables para theming)
|
|
primary: {
|
|
50: 'var(--color-brand-primary-50)',
|
|
100: 'var(--color-brand-primary-100)',
|
|
200: 'var(--color-brand-primary-200)',
|
|
300: 'var(--color-brand-primary-300)',
|
|
400: 'var(--color-brand-primary-400)',
|
|
500: 'var(--color-brand-primary-500)',
|
|
600: 'var(--color-brand-primary-600)',
|
|
700: 'var(--color-brand-primary-700)',
|
|
800: 'var(--color-brand-primary-800)',
|
|
900: 'var(--color-brand-primary-900)',
|
|
DEFAULT: 'var(--color-primary)',
|
|
},
|
|
secondary: {
|
|
50: 'var(--color-brand-secondary-50)',
|
|
100: 'var(--color-brand-secondary-100)',
|
|
200: 'var(--color-brand-secondary-200)',
|
|
300: 'var(--color-brand-secondary-300)',
|
|
400: 'var(--color-brand-secondary-400)',
|
|
500: 'var(--color-brand-secondary-500)',
|
|
600: 'var(--color-brand-secondary-600)',
|
|
700: 'var(--color-brand-secondary-700)',
|
|
800: 'var(--color-brand-secondary-800)',
|
|
900: 'var(--color-brand-secondary-900)',
|
|
DEFAULT: 'var(--color-secondary)',
|
|
},
|
|
// Colores semánticos
|
|
success: {
|
|
light: 'var(--color-success-light)',
|
|
DEFAULT: 'var(--color-success)',
|
|
dark: 'var(--color-success-dark)',
|
|
},
|
|
warning: {
|
|
light: 'var(--color-warning-light)',
|
|
DEFAULT: 'var(--color-warning)',
|
|
dark: 'var(--color-warning-dark)',
|
|
},
|
|
danger: {
|
|
light: 'var(--color-danger-light)',
|
|
DEFAULT: 'var(--color-danger)',
|
|
dark: 'var(--color-danger-dark)',
|
|
},
|
|
info: {
|
|
light: 'var(--color-info-light)',
|
|
DEFAULT: 'var(--color-info)',
|
|
dark: 'var(--color-info-dark)',
|
|
},
|
|
// Colores contextuales (cambian con tema)
|
|
background: {
|
|
DEFAULT: 'var(--color-background)',
|
|
subtle: 'var(--color-background-subtle)',
|
|
muted: 'var(--color-background-muted)',
|
|
emphasis: 'var(--color-background-emphasis)',
|
|
},
|
|
foreground: {
|
|
DEFAULT: 'var(--color-foreground)',
|
|
muted: 'var(--color-foreground-muted)',
|
|
subtle: 'var(--color-foreground-subtle)',
|
|
},
|
|
border: {
|
|
DEFAULT: 'var(--color-border)',
|
|
subtle: 'var(--color-border-subtle)',
|
|
emphasis: 'var(--color-border-emphasis)',
|
|
},
|
|
surface: {
|
|
card: 'var(--color-surface-card)',
|
|
popover: 'var(--color-surface-popover)',
|
|
modal: 'var(--color-surface-modal)',
|
|
},
|
|
// Colores de construcción (EVM, HSE)
|
|
evm: {
|
|
green: 'var(--color-evm-green)',
|
|
yellow: 'var(--color-evm-yellow)',
|
|
red: 'var(--color-evm-red)',
|
|
},
|
|
project: {
|
|
planning: 'var(--color-project-planning)',
|
|
active: 'var(--color-project-active)',
|
|
paused: 'var(--color-project-paused)',
|
|
completed: 'var(--color-project-completed)',
|
|
cancelled: 'var(--color-project-cancelled)',
|
|
},
|
|
hse: {
|
|
critical: 'var(--color-hse-critical)',
|
|
high: 'var(--color-hse-high)',
|
|
medium: 'var(--color-hse-medium)',
|
|
low: 'var(--color-hse-low)',
|
|
},
|
|
},
|
|
fontFamily: {
|
|
sans: [
|
|
'Inter',
|
|
'system-ui',
|
|
'-apple-system',
|
|
'BlinkMacSystemFont',
|
|
'Segoe UI',
|
|
'Roboto',
|
|
'Helvetica Neue',
|
|
'Arial',
|
|
'sans-serif',
|
|
],
|
|
mono: [
|
|
'JetBrains Mono',
|
|
'Fira Code',
|
|
'Consolas',
|
|
'Monaco',
|
|
'monospace',
|
|
],
|
|
},
|
|
borderRadius: {
|
|
DEFAULT: 'var(--radius)',
|
|
sm: 'var(--radius-sm)',
|
|
md: 'var(--radius-md)',
|
|
lg: 'var(--radius-lg)',
|
|
xl: 'var(--radius-xl)',
|
|
'2xl': 'var(--radius-2xl)',
|
|
'3xl': 'var(--radius-3xl)',
|
|
},
|
|
boxShadow: {
|
|
sm: 'var(--shadow-sm)',
|
|
DEFAULT: 'var(--shadow)',
|
|
md: 'var(--shadow-md)',
|
|
lg: 'var(--shadow-lg)',
|
|
xl: 'var(--shadow-xl)',
|
|
'2xl': 'var(--shadow-2xl)',
|
|
inner: 'var(--shadow-inner)',
|
|
},
|
|
zIndex: {
|
|
dropdown: 'var(--z-dropdown)',
|
|
sticky: 'var(--z-sticky)',
|
|
fixed: 'var(--z-fixed)',
|
|
'modal-backdrop': 'var(--z-modal-backdrop)',
|
|
modal: 'var(--z-modal)',
|
|
popover: 'var(--z-popover)',
|
|
tooltip: 'var(--z-tooltip)',
|
|
toast: 'var(--z-toast)',
|
|
},
|
|
transitionDuration: {
|
|
0: 'var(--duration-0)',
|
|
75: 'var(--duration-75)',
|
|
100: 'var(--duration-100)',
|
|
150: 'var(--duration-150)',
|
|
200: 'var(--duration-200)',
|
|
300: 'var(--duration-300)',
|
|
500: 'var(--duration-500)',
|
|
700: 'var(--duration-700)',
|
|
1000: 'var(--duration-1000)',
|
|
},
|
|
transitionTimingFunction: {
|
|
'ease-in': 'var(--ease-in)',
|
|
'ease-out': 'var(--ease-out)',
|
|
'ease-in-out': 'var(--ease-in-out)',
|
|
},
|
|
animation: {
|
|
shimmer: 'shimmer 1.5s infinite',
|
|
},
|
|
keyframes: {
|
|
shimmer: {
|
|
'0%': { backgroundPosition: '200% 0' },
|
|
'100%': { backgroundPosition: '-200% 0' },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
plugins: [],
|
|
};
|