new Vue({ el: '#app', data: { isDragging: false, videoPreview: null, soundDescription: '', selectedFile: null }, methods: { handleFileDrop(e) { this.isDragging = false; const file = e.dataTransfer.files[0]; if (file && file.type.startsWith('video/')) { this.handleFile(file); } else { alert('Please upload a video file (MP4, MOV, or AVI)'); } }, handleFileSelect(e) { const file = e.target.files[0]; if (file) { this.handleFile(file); } }, handleFile(file) { if (file.size > 100 * 1024 * 1024) { // 100MB limit alert('File size must be less than 100MB'); return; } const validTypes = ['video/mp4', 'video/quicktime', 'video/x-msvideo']; if (!validTypes.includes(file.type)) { alert('Please upload a valid video file (MP4, MOV, or AVI)'); return; } this.selectedFile = file; this.videoPreview = URL.createObjectURL(file); } }, beforeDestroy() { // Clean up video preview URL if (this.videoPreview) { URL.revokeObjectURL(this.videoPreview); } } });