mrshanebarron/file-upload

File upload component for Laravel - supports Livewire and Vue

Installs: 11

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

Language:Vue

pkg:composer/mrshanebarron/file-upload

v1.0.4 2025-12-21 03:57 UTC

This package is auto-updated.

Last update: 2025-12-24 23:14:01 UTC


README

A drag-and-drop file upload component for Laravel applications. Supports multiple files, size validation, and progress display. Works with Livewire and Vue 3.

Installation

composer require mrshanebarron/file-upload

Livewire Usage

Basic Usage

<livewire:sb-file-upload wire:model="files" />

Single File

<livewire:sb-file-upload
    wire:model="document"
    :multiple="false"
/>

With Validation

<livewire:sb-file-upload
    wire:model="images"
    accept="image/*"
    :max-size="5242880"
/>

Livewire Props

Prop Type Default Description
wire:model array [] Selected files
multiple boolean true Allow multiple files
accept string '*' Accepted file types
max-size number null Max file size in bytes

Vue 3 Usage

Setup

import { SbFileUpload } from './vendor/sb-file-upload';
app.component('SbFileUpload', SbFileUpload);

Basic Usage

<template>
  <SbFileUpload v-model="files" />
</template>

<script setup>
import { ref } from 'vue';
const files = ref([]);
</script>

Image Upload

<template>
  <SbFileUpload
    v-model="images"
    accept="image/*"
    :max-size="5 * 1024 * 1024"
    @error="handleError"
  />
</template>

<script setup>
import { ref } from 'vue';

const images = ref([]);

const handleError = ({ file, message }) => {
  alert(message);
};
</script>

Document Upload

<template>
  <div class="space-y-4">
    <label class="block text-sm font-medium">Upload Documents</label>
    <SbFileUpload
      v-model="documents"
      accept=".pdf,.doc,.docx"
      :max-size="10485760"
    />
    <p class="text-xs text-gray-500">PDF, DOC, DOCX up to 10MB each</p>
  </div>
</template>

Vue Props

Prop Type Default Description
modelValue Array [] Array of File objects
multiple Boolean true Allow multiple files
accept String '*' File type filter (MIME or extensions)
maxSize Number null Maximum file size in bytes

Events

Event Payload Description
update:modelValue File[] Files changed
error { file, message } Validation error

Features

  • Drag and Drop: Visual drop zone
  • File Browser: Click to browse files
  • Multiple Files: Upload many files at once
  • Size Validation: Reject oversized files
  • Type Filtering: Accept specific file types
  • File Preview: Show selected files with sizes
  • Remove Files: Click to remove individual files
  • Progress Display: Show upload progress

Styling

Uses Tailwind CSS:

  • Dashed border drop zone
  • Blue highlight on drag over
  • File list with icons
  • Remove buttons on hover

Requirements

  • PHP 8.1+
  • Laravel 10, 11, or 12
  • Tailwind CSS 3.x

License

MIT License