PHP code example of laraveldaily / filawidgets
1. Go to this page and download the library: Download laraveldaily/filawidgets library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
laraveldaily / filawidgets example snippets
use LaravelDaily\FilaWidgets\Data\BreakdownItemData;
use LaravelDaily\FilaWidgets\Data\BreakdownWidgetData;
use LaravelDaily\FilaWidgets\Widgets\BreakdownWidget;
class RevenueByRegionWidget extends BreakdownWidget
{
protected ?string $widgetLabel = 'Revenue by Region';
protected ?int $itemLimit = 4;
protected bool $groupOther = true;
protected function getData(): BreakdownWidgetData
{
// Your query logic here
return new BreakdownWidgetData(items: [
new BreakdownItemData('United States', 27378.77, previousValue: 23120.50),
new BreakdownItemData('Germany', 17230.02, previousValue: 13520.00),
new BreakdownItemData('Lithuania', 11989.15, previousValue: 8840.30),
], description: 'Country mix for last 30 days');
}
}
public function getWidgets(): array
{
return [RevenueByRegionWidget::class];
}
protected function getHeaderWidgets(): array
{
return [
RevenueByRegionWidget::make(['range' => 'last_30_days']),
];
}
use LaravelDaily\FilaWidgets\Data\SparklineTableRowData;
use LaravelDaily\FilaWidgets\Data\SparklineTableWidgetData;
use LaravelDaily\FilaWidgets\Support\SparklineSeries;
use LaravelDaily\FilaWidgets\Widgets\SparklineTableWidget;
class RevenuePulseWidget extends SparklineTableWidget
{
protected ?string $widgetLabel = 'Revenue Pulse';
protected function getData(): SparklineTableWidgetData
{
$dateRange = DashboardDateRange::fromFilter($this->getRangeFilter());
[$currentStart, $currentEnd] = $dateRange->currentPeriod();
[$previousStart, $previousEnd] = $dateRange->previousPeriod();
$baseQuery = Order::query()->where('status', OrderStatus::Completed);
return SparklineTableWidgetData::fromRows(
new SparklineTableRowData(
label: 'Revenue',
value: (float) (clone $baseQuery)->whereBetween('created_at', [$currentStart, $currentEnd])->sum('amount'),
previousValue: (float) (clone $baseQuery)->whereBetween('created_at', [$previousStart, $previousEnd])->sum('amount'),
sparkline: SparklineSeries::daily($currentStart, $currentEnd, clone $baseQuery, 'SUM(amount)'),
format: 'currency',
),
new SparklineTableRowData(
label: 'Orders',
value: (float) (clone $baseQuery)->whereBetween('created_at', [$currentStart, $currentEnd])->count(),
previousValue: (float) (clone $baseQuery)->whereBetween('created_at', [$previousStart, $previousEnd])->count(),
sparkline: SparklineSeries::daily($currentStart, $currentEnd, clone $baseQuery, 'COUNT(*)'),
format: 'number',
precision: 0,
),
);
}
}
use LaravelDaily\FilaWidgets\Support\SparklineSeries;
$series = SparklineSeries::daily(
start: $start, // CarbonInterface
end: $end, // CarbonInterface
query: Order::query()->where(...), // Eloquent Builder (cloned internally)
aggregate: 'SUM(amount)', // Raw SQL aggregate
dateColumn: 'created_at', // Column to group by (default)
precision: 2, // Decimal rounding (default)
);
// Returns: [0.0, 150.50, 0.0, 320.00, ...] (one float per day)
use LaravelDaily\FilaWidgets\Data\BreakdownItemData;
use LaravelDaily\FilaWidgets\Data\BreakdownWidgetData;
use LaravelDaily\FilaWidgets\Widgets\BreakdownWidget;
class RevenueByRegionWidget extends BreakdownWidget
{
protected ?string $widgetLabel = 'Revenue by Region';
protected ?int $itemLimit = 4;
protected bool $groupOther = true;
protected function getData(): BreakdownWidgetData
{
$dateRange = DashboardDateRange::fromFilter($this->getRangeFilter());
[$currentStart, $currentEnd] = $dateRange->currentPeriod();
[$previousStart, $previousEnd] = $dateRange->previousPeriod();
$currentItems = $this->totalsByCountry($currentStart, $currentEnd);
$previousItems = $this->totalsByCountry($previousStart, $previousEnd);
$items = $currentItems
->keys()
->merge($previousItems->keys())
->unique()
->map(fn (string $country): BreakdownItemData => new BreakdownItemData(
label: $this->countryName($country),
value: (float) ($currentItems[$country] ?? 0),
previousValue: (float) ($previousItems[$country] ?? 0),
))
->sortByDesc(fn (BreakdownItemData $item): float => $item->value)
->values()
->all();
return new BreakdownWidgetData(
items: $items,
description: 'Country mix for ' . strtolower($dateRange->label()),
);
}
}
// From an array of associative arrays
$data = BreakdownWidgetData::fromCollection(
items: $queryResults,
labelKey: 'category_name',
valueKey: 'total_revenue',
previousValueKey: 'previous_revenue',
description: 'Revenue breakdown',
);
// From a keyed collection using closures
$data = BreakdownWidgetData::fromCollection(
items: $totals, // Collection<string, float> e.g. ['US' => 15000, 'DE' => 8000]
labelKey: fn ($value, $key) => $key,
valueKey: fn ($value) => (float) $value,
);
use LaravelDaily\FilaWidgets\Widgets\ProgressWidget;
class RevenueGoalWidget extends ProgressWidget
{
protected ?string $widgetLabel = 'Revenue Goal';
protected float $goal = 50000;
protected int $goalRangeDays = 30;
protected function getCurrentValue(): float
{
$dateRange = DashboardDateRange::fromFilter($this->getRangeFilter());
[$start, $end] = $dateRange->currentPeriod();
return (float) Order::query()
->where('status', OrderStatus::Completed->value)
->whereBetween('created_at', [$start, $end])
->sum('amount');
}
}
use LaravelDaily\FilaWidgets\Widgets\CompletionRateWidget;
class FulfillmentRateWidget extends CompletionRateWidget
{
protected ?string $widgetLabel = 'Fulfillment Rate';
protected function getCounts(): array
{
$dateRange = DashboardDateRange::fromFilter($this->getRangeFilter());
[$start, $end] = $dateRange->currentPeriod();
$completed = Order::query()
->where('status', OrderStatus::Completed->value)
->whereBetween('created_at', [$start, $end])
->count();
$total = Order::query()
->whereBetween('created_at', [$start, $end])
->count();
return ['completed' => $completed, 'total' => $total];
}
protected function getThresholds(): array
{
return [
['threshold' => 50, 'color' => 'danger', 'label' => 'Critical'],
['threshold' => 75, 'color' => 'warning', 'label' => 'Needs attention'],
['threshold' => 100, 'color' => 'success', 'label' => 'Healthy'],
];
}
}
use LaravelDaily\FilaWidgets\Data\HeatmapCalendarWidgetData;
use LaravelDaily\FilaWidgets\Widgets\HeatmapCalendarWidget;
class DailyRevenueWidget extends HeatmapCalendarWidget
{
protected ?string $widgetLabel = 'Daily Revenue';
protected function getData(): HeatmapCalendarWidgetData
{
$dateRange = DashboardDateRange::fromFilter($this->getRangeFilter());
[$start, $end] = $dateRange->currentPeriod();
$entries = Order::query()
->where('status', OrderStatus::Completed)
->whereBetween('created_at', [$start, $end])
->selectRaw('DATE(created_at) as date, SUM(amount) as total')
->groupBy('date')
->orderBy('date')
->pluck('total', 'date')
->map(fn ($value): float => round((float) $value, 2))
->all();
return new HeatmapCalendarWidgetData(
entries: $entries, // ['2026-03-20' => 500.00, ...]
description: 'Daily revenue for ' . strtolower($dateRange->label()),
);
}
protected function getWeeksToShow(): int
{
return 9;
}
}
protected ?int $widgetCacheTtl = 300; // 5 minutes
protected ?string $widgetCacheKey = 'my-widget'; // Optional prefix
bash
php artisan make:filament-theme
bash
php artisan make:filawidget
bash
php artisan make:filawidget RevenueByRegionWidget --type=Breakdown