Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Simple List Entry Laravel Package

thiktak/filament-simple-list-entry

A lightweight Filament package that adds a SimpleListEntry infolist component for rendering array data as clean, compact lists. Drop it into Filament resources to show simple items without custom Blade views, keeping admin detail pages tidy and easy to scan.

View on GitHub
Deep Wiki
Context7

Getting Started

Install the package into a Laravel app already running Filament v3 (this plugin was published September 2023, during the v3 era):

composer require thiktak/filament-simple-list-entry

There is no service provider registration step required beyond Laravel's package auto-discovery, and no ->plugin() entry in your Panel provider. This is a single Infolist component, not a full plugin.

Where to look first:

  1. vendor/thiktak/filament-simple-list-entry/src/ — confirm the exact class namespace and constructor signature before wiring it up. The convention across Thiktak packages is Thiktak\FilamentSimpleListEntry\Infolists\Components\SimpleListEntry.
  2. vendor/thiktak/filament-simple-list-entry/resources/views/ — the Blade view is where rendering actually happens. Read it once so you know what markup and CSS classes you inherit.
  3. vendor/thiktak/filament-simple-list-entry/composer.json — check the filament/filament constraint. This tells you the highest Filament version it was tested against.

First use case — display an array-cast column as a bullet list inside a resource infolist:

use Thiktak\FilamentSimpleListEntry\Infolists\Components\SimpleListEntry;

public static function infolist(Infolist $infolist): Infolist
{
    return $infolist->schema([
        SimpleListEntry::make('tags'),
    ]);
}

The component reads $record->tags, expects an array, and renders each element as a list item. Make sure your model casts the attribute ('tags' => 'array' or AsArrayObject::class) — the entry will not explode a comma-separated string for you.

Implementation Patterns

Pair it with a KeyValue or Repeatable entry for a full "record summary" section. The component plays well inside a Section alongside standard entries:

Section::make('Metadata')
    ->schema([
        TextEntry::make('status')->badge(),
        SimpleListEntry::make('permissions'),
        SimpleListEntry::make('webhooks'),
    ])
    ->columns(2),

Normalize the state yourself when the source data is not a clean array. The component is deliberately dumb — it iterates state. Use formatStateUsing/state to shape it:

SimpleListEntry::make('roles')
    ->state(fn ($record) => $record->roles->pluck('name')->all()),

Map to display strings when elements are objects or enums. If your cast yields Collection of models or backed enums, reduce to strings first:

SimpleListEntry::make('tags')
    ->state(fn ($record) => collect($record->tags)
        ->map(fn ($tag) => is_object($tag) ? $tag->label : $tag)
        ->all()),

Use it as the detail view for a ->multiple() form field. Anything stored as JSON array (tags, aliases, feature flags) round-trips nicely: the form field writes the array, the infolist entry displays it, and you avoid writing a custom Column or Blade partial.

Custom rendering via view override. If the default <ul><li> markup is not what you need (e.g. you want badges), point the entry at your own view and keep the iteration logic:

SimpleListEntry::make('tags')
    ->view('filament.infolists.entries.tag-list'),

Copy the package view as a starting point, then change the li to x-filament::badge. This is the intended extension point — the component is small on purpose.

Gotchas and Tips

Unmaintained since September 2023 — treat it as a code snippet, not a dependency. With zero dependents on Packagist and a single release, you will not get Filament v4 compatibility fixes. Before adopting, diff the composer.json constraint; if it pins ^3.0, lock your Filament minor version or vendor the component class into your app.

No null/string coercion. Passing null, a raw JSON string, or a Collection where the view expects array typically produces either an empty list or a foreach warning. Guard at the call site:

SimpleListEntry::make('tags')
    ->state(fn ($record) => (array) ($record->tags ?? [])),

Empty arrays render an empty <ul>, not a placeholder. Filament's ->placeholder() generally applies to the entry's overall state, and this component's state is always "present" (an array). If you need "— None —", conditionally return ['—'] or hide the entry with ->hidden(fn ($record) => blank($record->tags)).

Debug state before debugging the view. The fastest way to figure out why nothing shows is ->state(fn ($record) => dd($record->tags)) on the entry. Nine times out of ten the model cast is missing or the attribute name is a relationship rather than a column.

Escape assumptions. The default view typically uses {{ $item }} (escaped). If you are tempted to allow HTML per item, you are re-implementing Htmlable-aware formatting — prefer pre-formatting the array into plain strings, or use formatStateUsing on each element upstream.

No badge, icon, or separator API. Unlike TextEntry/BadgeEntry, there are no fluent ->badge(), ->icon(), or ->separator() methods. Anything beyond a plain list requires the view override described above. Do not expect it to compose with Filament's HasColor/HasIcon traits.

Styling inherits Filament's prose classes inconsistently across panels. If list bullets disappear, it is usually your panel's Tailwind config purging list-disc because the package view is not in your content paths. Add the vendor view path to tailwind.config.js:

content: [
    './vendor/thiktak/filament-simple-list-entry/resources/views/**/*.blade.php',
],

Pin it in composer.json with an exact constraint ("thiktak/filament-simple-list-entry": "1.0.*"). With one release and no dependents, a silent rename or namespace move is plausible; an exact pin makes upgrade failures loud rather than mysterious.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core