Skip to content

Theming

Livewire Simple Tables provides a flexible theming system that allows you to customize the appearance of your tables. This guide explains how to use and customize themes.

Default Theme

By default, Livewire Simple Tables uses a theme that is designed to work well with Tailwind CSS. This theme provides a clean, modern look for your tables.

Customization Methods

There are three main ways to customize the appearance of your tables:

  1. Override style properties directly in your table component
  2. Create a custom theme class
  3. Override specific theme elements using the style properties from HasTheme trait

Method 1: Customizing Theme Elements in Component

The simplest way to customize your table's appearance is by overriding style properties directly in your table component. All style properties in the HasTheme trait have the _Stl suffix:

Table Content Style

You can customize the style of the table content:

php
public string $tableContent_Stl = 'min-w-full divide-y divide-gray-200';

Table Row Style

You can customize the style of the table rows:

php
public string $tableTr_Stl = 'hover:bg-gray-50';

Table Body Style

You can customize the style of the table body:

php
public string $tableTbody_Stl = 'bg-white divide-y divide-gray-200';

Table Header Style

You can customize the style of the table header:

php
public string $tableThead_Stl = 'bg-gray-100';

Table Header Cell Style

You can customize the style of the table header cells:

php
public string $tableTh_Stl = 'px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider';

Table Cell Style

You can customize the style of the table cells:

php
public string $tableTd_Stl = 'px-6 py-4 whitespace-nowrap text-sm text-gray-500';

No Records Message Style

You can customize the style of the "no records found" message cell:

php
public string $tableTdNoRecords_Stl = 'whitespace-nowrap px-6 py-4 text-sm text-gray-500 text-center';

Sort Icon Style

You can customize the style of the sort icons:

php
public string $tableSortIcon_Stl = 'size-4';

Pagination Container Style

You can customize the style of the pagination container:

php
public string $paginationContainer_Stl = 'mt-4 w-full bg-white rounded p-1';

Pagination Sticky Style

You can customize the style of the sticky pagination:

php
public string $paginationSticky_Stl = 'sticky bottom-2 flex w-full';

Method 2: Creating Custom Themes

For more advanced theming, you can create a custom theme class that implements \TiagoSpem\SimpleTables\Themes\ThemeInterface or extends the DefaultTheme class:

php
<?php

namespace App\Themes;

use TiagoSpem\SimpleTables\Themes\DefaultTheme;

class CustomTheme extends DefaultTheme
{
    public function getStyles(): array
    {
        // Get the parent styles
        $styles = parent::getStyles();
        
        // Override specific styles
        $styles['table']['container'] = 'overflow-x-auto bg-blue-50 rounded-lg shadow-md';
        $styles['table']['th'] = 'whitespace-nowrap px-3 py-2 text-sm font-bold text-blue-900 [&>:first-child]:flex [&>:first-child]:items-center [&>:first-child]:gap-2';
        
        return $styles;
    }
}

Then register your custom theme in the config/simple-tables.php file:

php
'theme' => \App\Themes\CustomTheme::class,

Method 3: Using HasTheme Trait Style Properties

The HasTheme trait provides a set of public string properties that you can use to override specific style elements without creating a custom theme class. These properties follow the naming pattern of {element}_Stl:

php
class UsersTable extends SimpleTableComponent
{
    // Override specific theme styles
    public string $tableContent_Stl        = 'min-w-full divide-y divide-gray-200';
    public string $tableTr_Stl             = 'hover:bg-blue-50';
    public string $tableTbody_Stl          = 'bg-white divide-y divide-gray-200';
    public string $tableThead_Stl          = 'bg-gray-100';
    public string $tableTh_Stl             = 'px-6 py-3 text-left text-xs font-semibold text-blue-800 uppercase tracking-wider';
    public string $tableTd_Stl             = 'px-6 py-4 whitespace-nowrap text-sm text-gray-700';
    public string $tableTdNoRecords_Stl    = 'whitespace-nowrap px-6 py-4 text-sm text-center italic';
    public string $tableSortIcon_Stl       = 'size-4 text-blue-500';
    public string $tableBooleanIcon_Stl    = 'size-6';
    public string $actionButton_Stl        = 'inline-block cursor-pointer rounded-md bg-blue-600 px-2 py-1 text-sm font-semibold text-white shadow-sm hover:bg-blue-500';
    public string $dropdownContent_Stl     = 'z-40 w-56 fixed overflow-auto rounded-md bg-white shadow-lg ring-1 ring-blue/5 focus:outline-none';
    public string $dropdownOption_Stl      = 'hover:bg-blue-50 transition group flex items-center px-3 py-1.5 text-sm text-blue-700 cursor-pointer outline-none focus:outline-none';
    public string $paginationContainer_Stl = 'mt-4 w-full bg-white rounded p-2';
    public string $paginationSticky_Stl    = 'sticky bottom-2 flex w-full';
    
    // Rest of your table component...
}

Available Theme Properties

PropertyDescription
$tableContent_StlStyle for the table content
$tableTr_StlStyle for table rows
$tableTbody_StlStyle for the table body
$tableThead_StlStyle for the table header
$tableTh_StlStyle for table header cells
$tableTd_StlStyle for table cells
$tableTdNoRecords_StlStyle for the "no records" message
$tableTrHeader_StlStyle for header rows
$tableSortIcon_StlStyle for sort icons
$tableBooleanIcon_StlStyle for boolean icons
$actionButton_StlStyle for action buttons
$dropdownContent_StlStyle for dropdown content containers
$dropdownOption_StlStyle for dropdown options
$paginationContainer_StlStyle for the pagination container
$paginationSticky_StlStyle for sticky pagination

Complete Example

Here's a complete example of a table with custom styling:

php
<?php

namespace App\Livewire;

use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use TiagoSpem\SimpleTables\Column;
use TiagoSpem\SimpleTables\SimpleTableComponent;

class UsersTable extends SimpleTableComponent
{
    // Advanced styling with the HasTheme trait properties
    public string $tableThead_Stl = 'bg-indigo-50';
    public string $tableTh_Stl = 'px-6 py-3 text-left text-xs font-medium text-indigo-700 uppercase tracking-wider';
    public string $tableTr_Stl = 'hover:bg-indigo-50 transition-colors';
    public string $paginationContainer_Stl = 'mt-4 w-full bg-white shadow rounded p-2';
    
    public function columns(): array
    {
        return [
            Column::text('ID', 'id'),
            Column::text('Name', 'name')->sortable()->searchable(),
            Column::text('Email', 'email')->searchable(),
            Column::text('Created At', 'created_at')->sortable(),
        ];
    }
    
    public function datasource(): Builder
    {
        return User::query();
    }
}

Next Steps

Now that you understand how to customize the appearance of your tables, you might want to explore:

  • Advanced Usage - Learn about more complex table configurations
  • Mutations - Transform how data is displayed in your tables
  • Components - Explore the various components available in Livewire Simple Tables