wooserv/filament-date-time-slots
Filament Date Time Slots provides a Laravel/Filament form field for selecting available dates and times. It helps build booking-style forms with selectable time slots and a simple, native-feeling scheduling workflow.
The v1.1.0 release is a layout/responsiveness release, not an API release. Existing forms keep working — the default layout simply became horizontal and now auto-adapts to its container.
Minimal steps:
composer update the package (no config or migration changes are required per the upgrade notes).php artisan filament:assets) and clear caches (php artisan view:clear, php artisan optimize:clear). Skipping this is the most likely reason "nothing changed" after upgrading.DateTimeSlotPicker::make('due_at')
->label('Appointment')
->required();
vertical() method — the exact FQCN/import and available chainable methods should be confirmed there rather than assumed.First real use case: a booking/appointment field in a Filament resource form. Try it once at full column width (horizontal) and once inside a narrow grid column or on a phone-sized viewport (auto-vertical) so you see both layouts immediately.
Let the default do the work. Horizontal-by-default with automatic vertical fallback covers most forms. Only reach for an explicit mode when the layout is semantically fixed.
Force vertical for constrained contexts — sidebars, modals, relation managers, dashboard widgets, infolist-style narrow columns:
DateTimeSlotPicker::make('due_at')
->vertical();
Control layout with column span, not the method. Because the switch is container-based, the way to guarantee horizontal is to give the field room:
DateTimeSlotPicker::make('due_at')
->columnSpanFull(); // stays horizontal even in a 3-column grid
Conversely, ->columnSpan(1) inside a multi-column grid will flip to vertical on narrower screens — usually the desired behaviour, but be deliberate about it.
Long slot lists. With independent scrolling plus a bounded minimum height for vertical/mobile lists, the field now behaves predictably with dozens of slots. Pair it with a Section or fixed columnSpan when the field sits next to tall siblings so the two don't fight for vertical space.
Reactive forms. Standard Filament chaining applies — use ->live() when another field depends on the chosen slot (e.g. showing duration or price), and keep validation on the field (->required(), ->rules([...])) rather than in the Blade layer. The picker returns a single value; store it in a datetime cast or string column depending on whether the date and slot are combined.
Day-to-day workflow. Build the form at desktop width, then collapse the Filament sidebar / resize to a single-column grid to verify the mobile path. Window resizing alone can be misleading — container queries respond to the field's width, not the viewport.
md:-style viewport breakpoints will report this as a bug. Fix by widening the container (columnSpanFull()), not by resizing.vertical() looks one-way. Nothing in the release notes indicates a horizontal() counterpart, so treat the default/inherited behaviour as horizontal and use container width to get it back. Verify in the source before promising a runtime toggle.How can I help you explore Laravel packages today?