gentelella
Version:
Gentelella v4 — free admin template. 60 pages, 20 chart variants, fully interactive inbox & kanban, live theme generator, component playground, PWA-ready. Vite 8, vanilla JS, no Bootstrap, no jQuery.
79 lines (71 loc) • 3.64 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload | Gentelella 2026 v4</title>
<link rel="icon" href="../images/favicon.svg" type="image/svg+xml">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<script type="module" src="/src/main-v4.js"></script>
</head>
<body data-shell="admin" data-page="form-upload" data-breadcrumb="Home > Forms > Upload">
<main class="main">
<div class="page-wrapper">
<div class="page-header">
<div class="page-header-row">
<div>
<div class="page-pretitle">Forms</div>
<h1 class="page-title">File upload</h1>
</div>
</div>
</div>
<div class="row col-1">
<div class="card">
<div class="card-header"><div><div class="card-title">Upload files</div><div class="card-subtitle">Drag & drop or click to browse · Max 50 MB per file</div></div></div>
<div class="card-body">
<label class="dropzone" id="dz" for="file">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M12 21V9M6 13l6-6 6 6"/><path d="M3 3h18"/></svg>
<div class="hint">Drop files here or click to browse</div>
<div class="sub">PNG, JPG, PDF up to 50 MB · or paste from clipboard</div>
<input type="file" id="file" multiple style="display:none">
</label>
</div>
</div>
<div class="card">
<div class="card-header">
<div><div class="card-title">Recent uploads</div><div class="card-subtitle">3 files · 4.7 MB</div></div>
<button class="btn btn-outline btn-sm">Clear all</button>
</div>
<div class="card-body" style="padding:8px 16px">
<div class="upload-row">
<div class="icon">PDF</div>
<div><div class="cell-strong">Q4-Report-2025.pdf</div><div style="font-size:11px;color:var(--text-muted)">2.3 MB · uploaded just now</div></div>
<div style="width:120px"><div class="progress-thin"><div class="bar" style="width:100%;background:var(--green)"></div></div></div>
<div><span class="status status-green">Done</span></div>
</div>
<div class="upload-row">
<div class="icon">PNG</div>
<div><div class="cell-strong">hero-mockup-v3.png</div><div style="font-size:11px;color:var(--text-muted)">1.8 MB · uploading…</div></div>
<div style="width:120px"><div class="progress-thin"><div class="bar" style="width:64%;background:var(--primary)"></div></div></div>
<div style="font-size:11.5px;color:var(--text-muted)">64%</div>
</div>
<div class="upload-row">
<div class="icon">CSV</div>
<div><div class="cell-strong">customer-export.csv</div><div style="font-size:11px;color:var(--text-muted)">0.6 MB · queued</div></div>
<div style="width:120px"><div class="progress-thin"><div class="bar" style="width:0%"></div></div></div>
<div><button class="btn btn-outline btn-sm">Cancel</button></div>
</div>
</div>
</div>
</div>
</div>
</main>
<script type="module">
const dz = document.getElementById('dz');
['dragenter', 'dragover'].forEach((e) => dz.addEventListener(e, (ev) => { ev.preventDefault(); dz.classList.add('over'); }));
['dragleave', 'drop'].forEach((e) => dz.addEventListener(e, (ev) => { ev.preventDefault(); dz.classList.remove('over'); }));
</script>
</body>
</html>