File Upload Component
Axiom01 provides styling for native file input elements and a flexible structure for creating custom drag-and-drop file upload areas. This component is designed to be user-friendly and visually consistent with the framework's aesthetic.
File Upload Component
Axiom01 provides styling for native file input elements and a flexible structure for creating custom drag-and-drop file upload areas. This component is designed to be user-friendly and visually consistent with the framework's aesthetic.
Basic File Input
No file chosen
Code Example (Basic File Input)
<div class="file-upload-container">
<label for="basic-file-input" class="button primary">Choose File</label>
<input type="file" id="basic-file-input">
<p id="basic-file-name">No file chosen</p>
</div>
<script>
document.getElementById('basic-file-input').addEventListener('change', function() {
const fileName = this.files.length > 0 ? this.files[0].name : 'No file chosen';
document.getElementById('basic-file-name').textContent = fileName;
});
</script>
Drag-and-Drop File Upload Area
Drag & drop files here, or
Code Example (Drag-and-Drop)
<div class="file-upload-container" id="drop-area">
<i class="fas fa-cloud-upload-alt"></i>
<p>Drag & drop files here, or <label for="drop-file-input">browse</label></p>
<input type="file" id="drop-file-input" multiple>
<ul class="file-list" id="uploaded-files"></ul>
</div>
<script>
const dropArea = document.getElementById('drop-area');
const dropFileInput = document.getElementById('drop-file-input');
const uploadedFilesList = document.getElementById('uploaded-files');
;['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
dropArea.addEventListener(eventName, preventDefaults, false);
});
function preventDefaults (e) {
e.preventDefault();
e.stopPropagation();
}
;['dragenter', 'dragover'].forEach(eventName => {
dropArea.addEventListener(eventName, () => dropArea.classList.add('highlight'), false);
});
;['dragleave', 'drop'].forEach(eventName => {
dropArea.addEventListener(eventName, () => dropArea.classList.remove('highlight'), false);
});
dropArea.addEventListener('drop', handleDrop, false);
dropFileInput.addEventListener('change', () => handleFiles(dropFileInput.files));
function handleDrop(e) {
const dt = e.dataTransfer;
const files = dt.files;
handleFiles(files);
}
function handleFiles(files) {
for (const file of files) {
const listItem = document.createElement('li');
listItem.innerHTML = `
<span class="file-name">${file.name}</span>
<button class="remove-file">×</button>
`;
uploadedFilesList.appendChild(listItem);
listItem.querySelector('.remove-file').addEventListener('click', () => listItem.remove());
}
}
</script>
Usage Guidelines
For custom file upload areas, the .file-upload-container class provides a styled drop zone. You'll need JavaScript to handle the drag-and-drop events, process file selections, and display file names or previews. The example above provides a basic JavaScript implementation for this.
Remember to handle server-side file uploads securely and provide clear feedback to the user about upload progress and success/failure.