PHPackages                             dacoo/calengrid - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dacoo/calengrid

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dacoo/calengrid
===============

A Filament calendar grid package rendered without a calendar JavaScript library.

01PHP

Since Jun 2Pushed 2w agoCompare

[ Source](https://github.com/dacooasia/calengrid)[ Packagist](https://packagist.org/packages/dacoo/calengrid)[ RSS](/packages/dacoo-calengrid/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Filament Calendar
=================

[](#filament-calendar)

A Filament v5 calendar plugin rendered with PHP, Blade, Livewire, Alpine, and CSS.

This package intentionally does not depend on a calendar-specific JavaScript library. It ships month, week, and day views with server-side layout calculations and a small Alpine module for client-side drag and resize handoff to Livewire.

Quick start (Eloquent-backed events)
------------------------------------

[](#quick-start-eloquent-backed-events)

Subclass `CalendarWidget`, point it at a model, and provide a Filament form schema. That's it — the package queries the model, fills in the calendar, and wires up create / view / edit / delete modals plus drag-and-drop persistence:

```
namespace App\Filament\Widgets;

use App\Models\Event;
use Dacoo\Calengrid\Widgets\CalendarWidget;
use Filament\Forms\Components\{DateTimePicker, TextInput};
use Filament\Schemas\Components\Grid;
use Illuminate\Database\Eloquent\Model;

class EventCalendar extends CalendarWidget
{
    public Model | string | null $model = Event::class;

    public function getFormSchema(): array
    {
        return [
            TextInput::make('title')->required(),
            Grid::make(2)->schema([
                DateTimePicker::make('starts_at')->required(),
                DateTimePicker::make('ends_at')->required(),
            ]),
        ];
    }
}
```

The default `fetchEvents()` queries `$model` for rows whose `starts_at` / `ends_at` overlap the visible window. Column names are overridable: `eventStartColumn()`, `eventEndColumn()`, `eventTitleColumn()`.

What you get for free:

- **+ Create** in the toolbar opens the form schema and saves a new `Event`.
- **Click an event** → view modal of the form schema with **Edit** / **Delete** in the footer.
- **Drag** to move, **resize** the bottom edge to extend → both update the record's start / end columns.

If your events aren't backed by a single Eloquent row (recurring occurrences, synthetic feeds, external APIs), override `fetchEvents()` to build the events yourself, and override `persistEventDrop()` / `persistEventResize()` to plug in your own persistence.

Publishing
----------

[](#publishing)

Both the config and the views are publishable so consumers can override defaults and customize markup without forking the package.

### Config

[](#config)

```
php artisan vendor:publish --tag=calengrid-config
```

Publishes to `config/calengrid.php`. Each setting is documented inline — locale, first day, slot minutes, view limits, date formats, and more.

### Views

[](#views)

```
php artisan vendor:publish --tag=calengrid-views
```

Publishes the Blade templates to `resources/views/vendor/calengrid/`. Laravel will load these in preference to the package's bundled views, so any edits you make there override the originals.

Common targets:

- `widgets/calendar.blade.php` — toolbar and view switcher.
- `widgets/partials/event.blade.php` — event badge markup (title, time label).
- `widgets/partials/month.blade.php`, `week.blade.php`, `day.blade.php` — per-view grids.

> Note: published views are **copies**. They will not pick up upstream changes when the package is updated — re-publish (or diff) after major upgrades.

###  Health Score

21

—

LowBetter than 17% of packages

Maintenance63

Regular maintenance activity

Popularity1

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/dfccf4c121cb40f0ff0832f8a5fbf1cc3416a30d3ee15e922471aa162a1a5aba?d=identicon)[ShaungBhone](/maintainers/ShaungBhone)

---

Top Contributors

[![ShaungBhone](https://avatars.githubusercontent.com/u/56265471?v=4)](https://github.com/ShaungBhone "ShaungBhone (6 commits)")[![claude](https://avatars.githubusercontent.com/u/81847?v=4)](https://github.com/claude "claude (2 commits)")

### Embed Badge

![Health badge](/badges/dacoo-calengrid/health.svg)

```
[![Health](https://phpackages.com/badges/dacoo-calengrid/health.svg)](https://phpackages.com/packages/dacoo-calengrid)
```

###  Alternatives

[fumeapp/modeltyper

Generate TypeScript interfaces from Laravel Models

198321.1k](/packages/fumeapp-modeltyper)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
