PHPackages                             jegex/filament-tab-repeater - 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. jegex/filament-tab-repeater

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

jegex/filament-tab-repeater
===========================

Custom form repeater with tabs UI for FilamentPHP. This package extends the native `Filament\\Forms\\Components\\Repeater` to display items as tabs instead of a list.

027Blade

Since Apr 7Pushed 2mo agoCompare

[ Source](https://github.com/jegex/filament-tab-repeater)[ Packagist](https://packagist.org/packages/jegex/filament-tab-repeater)[ RSS](/packages/jegex-filament-tab-repeater/feed)WikiDiscussions master Synced 2w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Filament Tab Repeater
=====================

[](#filament-tab-repeater)

Custom form repeater with tabs UI for FilamentPHP. This package extends the native `Filament\Forms\Components\Repeater` to display items as tabs instead of a list.

Features
--------

[](#features)

- **Tab UI** - Each repeater item is displayed as a clickable tab
- **Horizontal &amp; Vertical** - Support for horizontal or vertical tab orientation
- **Scrollable** - Tabs can scroll when there are too many
- **Contained** - Support for contained layout style
- **Native Repeater Features** - All native repeater features still work (clone, delete, reorder, validation, relationships, etc.)
- **Auto Active Tab** - Latest tab automatically becomes active after adding an item
- **Consistent UI** - Uses native `` component for UI consistency

Installation
------------

[](#installation)

This package is already installed via composer path repository. If not, run:

```
composer require jegex/filament-tab-repeater
```

Usage
-----

[](#usage)

### Basic Usage

[](#basic-usage)

```
use Jegex\FilamentTabRepeater\Forms\Components\TabRepeater;

TabRepeater::make('sections')
    ->schema([
        TextInput::make('title')->required(),
        Textarea::make('content'),
    ])
    ->itemLabel(fn (array $state): ?string => $state['title'] ?? 'New Section'),
```

### Vertical Tabs

[](#vertical-tabs)

```
TabRepeater::make('sections')
    ->schema([...])
    ->vertical()
    ->itemLabel(fn (array $state): ?string => $state['title'] ?? 'New Section'),
```

### Non-Scrollable Tabs

[](#non-scrollable-tabs)

```
TabRepeater::make('sections')
    ->schema([...])
    ->scrollable(false)
    ->itemLabel(fn (array $state): ?string => $state['title'] ?? 'New Section'),
```

### Full Example

[](#full-example)

```
use Jegex\FilamentTabRepeater\Forms\Components\TabRepeater;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\Select;

TabRepeater::make('sections')
    ->schema([
        TextInput::make('title')
            ->live(onBlur: true)
            ->required(),
        Select::make('type')
            ->options([
                'text' => 'Text',
                'image' => 'Image',
                'video' => 'Video',
            ])
            ->live(),
        Textarea::make('content'),
    ])
    ->vertical(false)
    ->scrollable(false)
    ->cloneable()
    ->itemLabel(fn (array $state): ?string => $state['title'] ?? 'New Section')
    ->columnSpanFull(),
```

API Reference
-------------

[](#api-reference)

### Methods

[](#methods)

MethodDescriptionDefault`vertical(bool|Closure $condition = true)`Set tab orientation to vertical`false``isVertical()`Check if tabs are vertical-`scrollable(bool|Closure $condition = true)`Set whether tabs are scrollable`true``isScrollable()`Check if tabs are scrollable-`contained(bool|Closure $condition = true)`Set contained layout (from `CanBeContained` trait)-`isContained()`Check if contained-### Inherited from Native Repeater

[](#inherited-from-native-repeater)

All methods from `Filament\Forms\Components\Repeater` are available:

MethodDescription`schema(array $schema)`Child form fields`itemLabel(string|Closure|null $label)`Label for each tab`cloneable()`Enable clone feature`reorderableWithButtons()`Enable reorder with up/down buttons`reorderableWithDragAndDrop()`Enable reorder with drag &amp; drop`collapsible()`Enable collapsible items`minItems(int $count)`Minimum items`maxItems(int $count)`Maximum items`defaultItems(int $count)`Default items`addable()`Enable add feature`deletable()`Enable delete feature`relationship(string $relationship)`Eloquent relationshipHow It Works
------------

[](#how-it-works)

This package uses the native `` component for rendering tabs. Each repeater item is displayed as a tab, and the item content is displayed as a tab panel.

The active tab is managed by Alpine.js with `x-data` and `x-init`. Every time Livewire re-renders (after add/delete), `x-init` runs again and sets `activeTab` to the last item key.

Package Structure
-----------------

[](#package-structure)

```
src/
├── Forms/Components/
│   └── TabRepeater.php          # Main component class
├── FilamentTabRepeaterPlugin.php
└── FilamentTabRepeaterServiceProvider.php

resources/
├── views/components/
│   └── tab-repeater.blade.php   # Blade view
└── css/
    └── tab-repeater.css         # Custom styles

```

Requirements
------------

[](#requirements)

- PHP 8.3+
- Laravel 13+
- Filament v5+

License
-------

[](#license)

MIT

###  Health Score

22

—

LowBetter than 21% of packages

Maintenance56

Moderate activity, may be stable

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity12

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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://avatars.githubusercontent.com/u/219070132?v=4)[jegex](/maintainers/jegex)[@jegex](https://github.com/jegex)

---

Top Contributors

[![jegex](https://avatars.githubusercontent.com/u/219070132?v=4)](https://github.com/jegex "jegex (1 commits)")

### Embed Badge

![Health badge](/badges/jegex-filament-tab-repeater/health.svg)

```
[![Health](https://phpackages.com/badges/jegex-filament-tab-repeater/health.svg)](https://phpackages.com/packages/jegex-filament-tab-repeater)
```

###  Alternatives

[ejsmont-artur/php-circuit-breaker

PHP Circuit Breaker component

168993.3k4](/packages/ejsmont-artur-php-circuit-breaker)[yangm97/elementor-pro

It’s about time for a live page builder, with no limits of design. A page builder that delivers high-end page designs and advanced capabilities, never before seen on WordPress. It’s time for Elementor Page Builder.

5014.2k](/packages/yangm97-elementor-pro)[shjia/taobao_spider

淘宝、天猫商品爬虫

161.2k](/packages/shjia-taobao-spider)

PHPackages © 2026

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