filahq/statify-easy-widget

Build Filament stat widgets from Eloquent models with a fluent API.
Install
composer require filahq/statify-easy-widget
PHP:^8.3
License:MIT
Last Updated:Mar 18, 2026
Links: GitHub  ·  Packagist
Maintainer: imknight

Statify Easy Widget

Build Filament stat widgets from Eloquent models with a fluent API.

Installation

composer require filahq/statify-easy-widget

The core package only requires Filament widgets. If you want to register the optional StatifyEasyWidgetPlugin with a Filament panel, install full Filament too:

composer require filament/filament

Statify Easy Widget supports both Filament 4 and Filament 5.

Usage

Extend EasyStatsWidget and define your stats in a stats() method using the fluent Stat builder:

use FilaHQ\StatifyEasyWidget\Builder\Stat;
use FilaHQ\StatifyEasyWidget\Widgets\EasyStatsWidget;

class RevenueStatsWidget extends EasyStatsWidget
{
    protected function stats(): array
    {
        return [
            Stat::make('Revenue Today')
                ->model(Order::class)
                ->attribute('total')
                ->where('created_at', '>=', today())
                ->sum()
                ->prefix('$')
                ->color('success')
                ->description('+12% from yesterday')
                ->chartLastDays(7),

            Stat::make('Users Today')
                ->model(User::class)
                ->where('created_at', '>=', today())
                ->count()
                ->color('info')
                ->chartLastDays(30),

            Stat::make('Avg Order Value')
                ->model(Order::class)
                ->attribute('total')
                ->where('created_at', '>=', now()->startOfMonth())
                ->avg()
                ->prefix('$')
                ->suffix(' avg'),
        ];
    }
}

Register the widget in your Filament panel as you normally would:

$panel->widgets([
    RevenueStatsWidget::class,
]);

Builder API

Query

Method Description
model(string $class) Eloquent model class to query
attribute(string $column) Column to aggregate (required for sum, avg, min, max)
where(string $column, mixed $value) Adds a = condition
where(string $column, string $operator, mixed $value) Adds a condition with explicit operator
count() Aggregate: row count
sum() Aggregate: column sum
avg() Aggregate: column average
min() Aggregate: column minimum
max() Aggregate: column maximum

Multiple where() calls accumulate — all conditions are applied to the query.

Decoration

Method Description
prefix(string $prefix) Prepended to the computed value (e.g. '$')
suffix(string $suffix) Appended to the computed value (e.g. ' users')
color(string $color) Filament color ('success', 'danger', 'warning', 'info', etc.)
icon(string|BackedEnum $icon) Heroicon name or Heroicon enum case
description(string $description) Secondary label shown below the value
chart(array $data) Static array of numeric values for the sparkline
chartLastDays(int $days, string $dateColumn = 'created_at') Generates a sparkline from the last N days of model data

Chart

chartLastDays() automatically builds a sparkline by running the same aggregate for each of the last N days. The same where() conditions are applied per day, scoped to that day's date range.

// Sparkline from the last 7 days, using created_at (default)
->chartLastDays(7)

// Sparkline from the last 30 days, using a custom date column
->chartLastDays(30, 'completed_at')

If both chart() and chartLastDays() are set, the static chart() array takes precedence.

Filament Plugin (optional)

If you want to register the plugin with your Filament panel, install filament/filament and then register:

use FilaHQ\StatifyEasyWidget\StatifyEasyWidgetPlugin;

$panel->plugin(StatifyEasyWidgetPlugin::make());

Statify Compatibility

Widgets built with EasyStatsWidget are compatible with the filahq/statify package out of the box. Register them normally and they can be exposed through the Statify API.

composer require filahq/statify

License

MIT