mddev31/filament-dynamic-dashboard
InteractsWithPageFilters trait now receive the active filters at mount and on every live filter-bar change (edit or reset).A full rewrite of the layout, persistence, and rendering pipeline. Layouts are now JSON files, the canvas runs on GridStack, widget sizes live on the widget class, and the host app no longer needs Tailwind/Vite setup. See the Upgrading from v1.x section of the README before running php artisan migrate.
dashboard_grids and dashboard_grid_blocks tables are dropped; dashboards.dashboard_grid_id is removed; dashboard_widgets.columns, ordering, dashboard_grid_block_id are removed.dashboards.template_key, dashboards.is_personal, dashboards.created_by, dashboard_widgets.section_slug / x / y / w / h. The upgrade_dynamic_dashboard_tables_to_v2 migration handles the conversion (intentionally not reversible — back up first); the new personal-dashboard columns are folded into the same migration so the upgrade path stays a single step.DynamicWidget interface gains six static size methods (getDynamicDashboardDefaultWidth, …DefaultHeight, …MinWidth, …MaxWidth, …MinHeight, …MaxHeight). Add use HasSizeDefaults; for a one-line fix on existing widgets.DynamicDashboard::getColumns() and widgetsGrid() methods removed — layout now driven by the dashboard's template_key and a JSON template.(x, y, section) come from GridStack.php artisan filament:assets to publish the GridStack + dashboard bundle. The Tailwind [@source](https://github.com/source) directive previously required in theme.css is no longer needed.dashboard_columns and widget_columns removed (replaced by template_paths and default_template).config('filament-dynamic-dashboard.template_paths') and the package's preset directory. 8 shipped presets — Standard, Split, Trio, Quad, Sidebar, Report, Showcase, KPI — each with an SVG thumbnail next to its JSON.DashboardTemplate and DashboardSection value objects; TemplateRegistry service (all(), enabled(), find(), default(), previewSvg()).HasSizeDefaults and HasEmptySettings traits — drop-in defaults for the contract's size + settings methods.template_paths, default_template, disabled_templates (hide presets from the manager's selector without breaking existing dashboards).dynamic-dashboard:widget-resized Livewire event — widget classes can react via #[On(...)] to re-render their content after a resize. The package also broadcasts a native window.resize event on every GridStack resizestop/dragstop, so ApexCharts, Chart.js, ECharts, and Plotly auto-fit out of the box.section_slug + (x, y) atomically.template_key changes: widgets in orphan sections move to the new template's first section.editWidget and deleteWidget Filament actions mounted from Blade via $wire.mountAction().canDisplay() enforces ownership at the top; editors cannot bypass. The creator is captured on creating via auth()->id() and a saving hook backfills legacy globals when they're flipped to personal.OutlinedUser icon, the current dashboard still wins the green check.Duplicate action re-assigns created_by to the duplicator via the model's creating hook so a copied personal dashboard belongs to the right user.default_personal (bool, default false) — controls whether the Personal dashboard toggle is on by default in the create form.template_key + a JSON template file.HasSizeDefaults trait), not on the DB row.DashboardGrid, DashboardGridBlock Eloquent models.DynamicDashboard::getColumns(), widgetsGrid(), and the seven block/ordering helper methods.[@source](https://github.com/source) setup instructions (no longer needed; assets are served by Filament).uniqid() key on DashboardManager to prevent component remounting on every renderLazyLoadingViolationException when Laravel strict mode is enabled (Model::shouldBeStrict())edit for dashboard editing across all 23 languagestr)showWidgetLoader() on dashboard and optional showLoader() per widgetsettings state path for cleaner data handling$dynamicDashboardWidgetId and $dynamicDashboardWidgetTitle propertieswidgetsGrid() method to customize the dashboard grid layoutDynamicDashboard) extending Filament PageDynamicWidget interface for user-configurable widgetsgetDefaultFilterSchema()) and resolver (resolveFilterDefaults())models.dashboard, models.widget)How can I help you explore Laravel packages today?