mrshanebarron/empty-state
Empty state placeholder component for Laravel - supports Livewire and Vue
13
| Install | |
|---|---|
composer require mrshanebarron/empty-state |
|
| Latest Version: | v1.0.4 |
| PHP: | ^8.1 |
| License: | MIT |
| Last Updated: | Dec 21, 2025 |
| Links: | GitHub · Packagist |
Maintainer: mrshanebarron
Empty State
An empty state placeholder component for Laravel applications. Displays friendly messages when content is missing. Works with Livewire and Vue 3.
Installation
composer require mrshanebarron/empty-state
Livewire Usage
Basic Usage
<livewire:sb-empty-state
title="No items found"
description="Get started by creating your first item."
/>
With Icon
<livewire:sb-empty-state
title="No messages"
description="Your inbox is empty."
icon="inbox"
/>
With Action Button
<livewire:sb-empty-state
title="No projects"
description="Create a project to get started."
action-text="Create Project"
action-url="/projects/create"
/>
Livewire Props
| Prop | Type | Default | Description |
|---|---|---|---|
title |
string | 'No items' |
Main heading |
description |
string | null |
Subtext description |
icon |
string | null |
Icon name/type |
action-text |
string | null |
Button text |
action-url |
string | null |
Button link |
Vue 3 Usage
Setup
import { SbEmptyState } from './vendor/sb-empty-state';
app.component('SbEmptyState', SbEmptyState);
Basic Usage
<template>
<SbEmptyState
title="No results found"
description="Try adjusting your search or filters."
/>
</template>
With Icon
<template>
<SbEmptyState
title="No notifications"
description="You're all caught up!"
icon="bell"
/>
</template>
With Action
<template>
<SbEmptyState
title="No team members"
description="Invite your team to collaborate."
action-text="Invite Team"
@action="openInviteModal"
/>
</template>
<script setup>
const openInviteModal = () => {
// Handle action
};
</script>
Conditional Rendering
<template>
<div v-if="items.length > 0">
<!-- List items -->
</div>
<SbEmptyState
v-else
title="No items yet"
description="Create your first item to get started."
action-text="Create Item"
@action="createItem"
/>
</template>
Custom Slot Content
<template>
<SbEmptyState title="Custom Content">
<template #icon>
<MyCustomIcon class="w-12 h-12 text-gray-400" />
</template>
<template #description>
<p class="text-gray-500">
Need help? <a href="/docs" class="text-blue-500">Read the docs</a>
</p>
</template>
<template #action>
<div class="flex gap-2">
<button class="btn-primary">Create</button>
<button class="btn-secondary">Import</button>
</div>
</template>
</SbEmptyState>
</template>
Vue Props
| Prop | Type | Default | Description |
|---|---|---|---|
title |
String | 'No items' |
Heading text |
description |
String | null |
Description text |
icon |
String | null |
Icon identifier |
actionText |
String | null |
Action button text |
actionUrl |
String | null |
Action link URL |
Events
| Event | Description |
|---|---|
action |
Button clicked (when no actionUrl) |
Slots
| Slot | Description |
|---|---|
icon |
Custom icon content |
description |
Custom description content |
action |
Custom action buttons |
Common Use Cases
- Empty search results
- No data in tables
- Empty inbox/notifications
- New user onboarding
- Filtered results with no matches
Styling
Uses Tailwind CSS:
- Centered layout
- Gray icon
- Large title text
- Muted description
- Primary action button
Requirements
- PHP 8.1+
- Laravel 10, 11, or 12
- Tailwind CSS 3.x
License
MIT License