Files
Lucy 46360b6827 feat: agregar design system completo con 2 temas (Industrial + Moderno)
- Tokens CSS con variables para ambos temas (dark/light)
- 21 componentes reutilizables (buttons, cards, tables, modals, etc.)
- 10 pantallas POS (login, catálogo, POS, inventario, clientes, facturación, contabilidad, dashboard, configuración, reportes)
- Preview interactivo con selector de tema
- Generado por el equipo de Hugo (Milo-UX, Iris-UI, Zara-Frontend)
2026-04-01 01:41:04 +00:00

486 lines
17 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="es" data-theme="industrial">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nexus Autoparts — Date/Time Pickers</title>
<link rel="stylesheet" href="../tokens/tokens.css">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: var(--font-body); background: var(--color-bg-base); color: var(--color-text-primary); padding: var(--space-8); transition: var(--transition-normal); }
.theme-switcher { position: sticky; top: 0; z-index: var(--z-sticky); display: flex; gap: var(--space-2); padding: var(--space-3) var(--space-4); background: var(--color-bg-elevated); border-bottom: 1px solid var(--color-border); margin: calc(-1 * var(--space-8)); margin-bottom: var(--space-8); }
.theme-switcher button { padding: var(--space-2) var(--space-4); border: 1px solid var(--color-border); background: var(--color-bg-base); color: var(--color-text-primary); border-radius: var(--radius-md); cursor: pointer; font-family: var(--font-body); font-size: var(--text-body-sm); transition: var(--transition-fast); }
.theme-switcher button.active { background: var(--color-primary); color: var(--color-text-inverse); border-color: var(--color-primary); }
h1 { font-family: var(--font-heading); font-size: var(--text-h2); font-weight: var(--heading-weight-primary); margin-bottom: var(--space-2); color: var(--color-text-accent); }
.subtitle { color: var(--color-text-muted); font-size: var(--text-body); margin-bottom: var(--space-8); }
section { margin-bottom: var(--space-10); }
section h2 { font-family: var(--font-heading); font-size: var(--text-h4); font-weight: var(--heading-weight-secondary); color: var(--color-text-secondary); margin-bottom: var(--space-4); padding-bottom: var(--space-2); border-bottom: 1px solid var(--color-border); }
.label { font-size: var(--text-caption); color: var(--color-text-muted); text-transform: uppercase; letter-spacing: var(--tracking-widest); font-weight: var(--font-weight-semibold); margin-bottom: var(--space-2); }
.component-row { display: flex; flex-wrap: wrap; gap: var(--space-6); align-items: flex-start; margin-bottom: var(--space-6); }
/* ====== Date Input ====== */
.date-input-group {
display: flex;
flex-direction: column;
gap: var(--space-1);
}
.date-label {
font-size: var(--text-body-sm);
font-weight: var(--font-weight-semibold);
color: var(--color-text-secondary);
}
.date-input {
padding: var(--space-3) var(--space-4);
background: var(--color-bg-elevated);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
color: var(--color-text-primary);
font-family: var(--font-body);
font-size: var(--text-body-sm);
transition: var(--transition-fast);
min-width: 200px;
}
[data-theme="industrial"] .date-input { border-radius: 0; }
.date-input:focus {
outline: none;
border-color: var(--color-primary);
box-shadow: var(--shadow-focus);
}
/* ====== Calendar Widget ====== */
.calendar {
background: var(--color-bg-elevated);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
box-shadow: var(--shadow-lg);
padding: var(--space-4);
max-width: 320px;
}
[data-theme="industrial"] .calendar {
border-radius: 0;
clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 0 100%);
}
.calendar-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--space-4);
}
.calendar-title {
font-family: var(--font-heading);
font-size: var(--text-body);
font-weight: var(--heading-weight-secondary);
color: var(--color-text-primary);
}
.calendar-nav {
display: flex;
gap: var(--space-1);
}
.calendar-nav-btn {
width: 28px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
background: transparent;
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
color: var(--color-text-muted);
cursor: pointer;
font-size: var(--text-caption);
transition: var(--transition-fast);
}
[data-theme="industrial"] .calendar-nav-btn { border-radius: 0; }
.calendar-nav-btn:hover {
border-color: var(--color-primary);
color: var(--color-primary);
}
.calendar-grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 2px;
text-align: center;
}
.calendar-day-name {
font-size: var(--text-caption);
color: var(--color-text-muted);
font-weight: var(--font-weight-semibold);
text-transform: uppercase;
padding: var(--space-2);
}
.calendar-day {
width: 36px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-md);
font-size: var(--text-body-sm);
color: var(--color-text-secondary);
cursor: pointer;
transition: var(--transition-fast);
border: none;
background: transparent;
font-family: var(--font-body);
}
[data-theme="industrial"] .calendar-day { border-radius: 0; }
.calendar-day:hover {
background: var(--color-primary-muted);
color: var(--color-primary);
}
.calendar-day.today {
border: 1px solid var(--color-primary);
color: var(--color-primary);
font-weight: var(--font-weight-semibold);
}
.calendar-day.selected {
background: var(--color-primary);
color: var(--color-text-inverse);
font-weight: var(--font-weight-semibold);
}
.calendar-day.range {
background: var(--color-primary-muted);
border-radius: 0;
}
.calendar-day.range-start {
background: var(--color-primary);
color: var(--color-text-inverse);
border-radius: var(--radius-md) 0 0 var(--radius-md);
}
.calendar-day.range-end {
background: var(--color-primary);
color: var(--color-text-inverse);
border-radius: 0 var(--radius-md) var(--radius-md) 0;
}
[data-theme="industrial"] .calendar-day.range-start,
[data-theme="industrial"] .calendar-day.range-end {
border-radius: 0;
}
.calendar-day.disabled {
color: var(--color-text-disabled);
cursor: not-allowed;
}
.calendar-day.other-month {
color: var(--color-text-disabled);
opacity: 0.5;
}
.calendar-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: var(--space-3);
padding-top: var(--space-3);
border-top: 1px solid var(--color-border);
}
.calendar-footer-btn {
padding: var(--space-1) var(--space-3);
font-family: var(--font-body);
font-size: var(--text-caption);
font-weight: var(--font-weight-semibold);
border: none;
border-radius: var(--radius-sm);
cursor: pointer;
transition: var(--transition-fast);
}
[data-theme="industrial"] .calendar-footer-btn { border-radius: 0; }
.calendar-today-btn {
background: transparent;
color: var(--color-primary);
}
.calendar-apply-btn {
background: var(--color-primary);
color: var(--color-text-inverse);
}
/* ====== Date Range ====== */
.date-range-wrapper {
display: flex;
align-items: center;
gap: var(--space-3);
}
.date-range-separator {
color: var(--color-text-muted);
font-size: var(--text-body-sm);
}
/* Quick presets */
.date-presets {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
}
.date-preset {
padding: var(--space-2) var(--space-3);
background: var(--color-bg-elevated);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
font-family: var(--font-body);
font-size: var(--text-caption);
color: var(--color-text-secondary);
cursor: pointer;
transition: var(--transition-fast);
}
[data-theme="industrial"] .date-preset { border-radius: 0; }
.date-preset:hover {
border-color: var(--color-primary);
color: var(--color-primary);
}
.date-preset.active {
background: var(--color-primary);
color: var(--color-text-inverse);
border-color: var(--color-primary);
}
</style>
</head>
<body>
<div class="theme-switcher">
<button class="active" onclick="setTheme('industrial')">🔧 Industrial</button>
<button onclick="setTheme('modern')">⚡ Moderno</button>
</div>
<h1>Date / Time Pickers</h1>
<p class="subtitle">Selectores de fecha y hora para reportes, cortes de caja y filtros</p>
<!-- Date Inputs -->
<section>
<h2>Inputs de Fecha y Hora</h2>
<div class="label">Campos nativos con estilo del design system</div>
<div class="component-row">
<div class="date-input-group">
<span class="date-label">Fecha</span>
<input type="date" class="date-input" value="2024-03-15">
</div>
<div class="date-input-group">
<span class="date-label">Hora</span>
<input type="time" class="date-input" value="14:30">
</div>
<div class="date-input-group">
<span class="date-label">Fecha y hora</span>
<input type="datetime-local" class="date-input" value="2024-03-15T14:30">
</div>
</div>
</section>
<!-- Date Range -->
<section>
<h2>Rango de Fechas</h2>
<div class="label">Para reportes y filtros de contabilidad</div>
<div class="date-range-wrapper" style="margin-bottom: var(--space-4);">
<div class="date-input-group">
<span class="date-label">Desde</span>
<input type="date" class="date-input" value="2024-03-01">
</div>
<span class="date-range-separator"></span>
<div class="date-input-group">
<span class="date-label">Hasta</span>
<input type="date" class="date-input" value="2024-03-15">
</div>
</div>
<div class="label">Presets rápidos</div>
<div class="date-presets">
<button class="date-preset">Hoy</button>
<button class="date-preset">Ayer</button>
<button class="date-preset active">Esta semana</button>
<button class="date-preset">Este mes</button>
<button class="date-preset">Mes pasado</button>
<button class="date-preset">Este año</button>
<button class="date-preset">Personalizado</button>
</div>
</section>
<!-- Calendar Widget -->
<section>
<h2>Calendario — Selección Simple</h2>
<div class="label">Widget de calendario para seleccionar una fecha</div>
<div class="calendar">
<div class="calendar-header">
<div class="calendar-nav">
<button class="calendar-nav-btn"></button>
</div>
<span class="calendar-title">Marzo 2024</span>
<div class="calendar-nav">
<button class="calendar-nav-btn"></button>
</div>
</div>
<div class="calendar-grid">
<span class="calendar-day-name">Lu</span>
<span class="calendar-day-name">Ma</span>
<span class="calendar-day-name">Mi</span>
<span class="calendar-day-name">Ju</span>
<span class="calendar-day-name">Vi</span>
<span class="calendar-day-name"></span>
<span class="calendar-day-name">Do</span>
<button class="calendar-day other-month">26</button>
<button class="calendar-day other-month">27</button>
<button class="calendar-day other-month">28</button>
<button class="calendar-day other-month">29</button>
<button class="calendar-day">1</button>
<button class="calendar-day">2</button>
<button class="calendar-day">3</button>
<button class="calendar-day">4</button>
<button class="calendar-day">5</button>
<button class="calendar-day">6</button>
<button class="calendar-day">7</button>
<button class="calendar-day">8</button>
<button class="calendar-day">9</button>
<button class="calendar-day">10</button>
<button class="calendar-day">11</button>
<button class="calendar-day">12</button>
<button class="calendar-day">13</button>
<button class="calendar-day">14</button>
<button class="calendar-day selected">15</button>
<button class="calendar-day">16</button>
<button class="calendar-day">17</button>
<button class="calendar-day">18</button>
<button class="calendar-day">19</button>
<button class="calendar-day">20</button>
<button class="calendar-day">21</button>
<button class="calendar-day">22</button>
<button class="calendar-day">23</button>
<button class="calendar-day">24</button>
<button class="calendar-day">25</button>
<button class="calendar-day">26</button>
<button class="calendar-day">27</button>
<button class="calendar-day">28</button>
<button class="calendar-day">29</button>
<button class="calendar-day">30</button>
<button class="calendar-day">31</button>
</div>
<div class="calendar-footer">
<button class="calendar-footer-btn calendar-today-btn">Hoy</button>
<button class="calendar-footer-btn calendar-apply-btn">Aplicar</button>
</div>
</div>
</section>
<!-- Calendar Range -->
<section>
<h2>Calendario — Rango de Fechas</h2>
<div class="label">Selección de rango para reportes de ventas</div>
<div class="calendar">
<div class="calendar-header">
<div class="calendar-nav">
<button class="calendar-nav-btn"></button>
</div>
<span class="calendar-title">Marzo 2024</span>
<div class="calendar-nav">
<button class="calendar-nav-btn"></button>
</div>
</div>
<div class="calendar-grid">
<span class="calendar-day-name">Lu</span>
<span class="calendar-day-name">Ma</span>
<span class="calendar-day-name">Mi</span>
<span class="calendar-day-name">Ju</span>
<span class="calendar-day-name">Vi</span>
<span class="calendar-day-name"></span>
<span class="calendar-day-name">Do</span>
<button class="calendar-day other-month">26</button>
<button class="calendar-day other-month">27</button>
<button class="calendar-day other-month">28</button>
<button class="calendar-day other-month">29</button>
<button class="calendar-day">1</button>
<button class="calendar-day">2</button>
<button class="calendar-day">3</button>
<button class="calendar-day">4</button>
<button class="calendar-day">5</button>
<button class="calendar-day">6</button>
<button class="calendar-day">7</button>
<button class="calendar-day range-start">8</button>
<button class="calendar-day range">9</button>
<button class="calendar-day range">10</button>
<button class="calendar-day range">11</button>
<button class="calendar-day range">12</button>
<button class="calendar-day range">13</button>
<button class="calendar-day range">14</button>
<button class="calendar-day range-end">15</button>
<button class="calendar-day">16</button>
<button class="calendar-day">17</button>
<button class="calendar-day">18</button>
<button class="calendar-day">19</button>
<button class="calendar-day">20</button>
<button class="calendar-day">21</button>
<button class="calendar-day">22</button>
<button class="calendar-day">23</button>
<button class="calendar-day">24</button>
<button class="calendar-day">25</button>
<button class="calendar-day">26</button>
<button class="calendar-day">27</button>
<button class="calendar-day">28</button>
<button class="calendar-day">29</button>
<button class="calendar-day">30</button>
<button class="calendar-day">31</button>
</div>
<div class="calendar-footer">
<span style="font-size: var(--text-caption); color: var(--color-text-muted);">8 Mar — 15 Mar (8 días)</span>
<button class="calendar-footer-btn calendar-apply-btn">Aplicar</button>
</div>
</div>
</section>
<script>
function setTheme(theme) {
document.documentElement.setAttribute('data-theme', theme);
document.querySelectorAll('.theme-switcher button').forEach(btn => {
btn.classList.toggle('active', btn.textContent.includes(theme === 'industrial' ? 'Industrial' : 'Moderno'));
});
}
</script>
</body>
</html>