PHPackages                             bbs-lab/nova-items-field - 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. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. bbs-lab/nova-items-field

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

bbs-lab/nova-items-field
========================

A modern Laravel Nova field for managing a sortable list of scalar values (tags, emails, steps…) stored as JSON.

v1.0.0(1mo ago)06[6 PRs](https://github.com/BBS-Lab/nova-items-field/pulls)MITPHPPHP ^8.4CI passing

Since Jun 1Pushed 1mo agoCompare

[ Source](https://github.com/BBS-Lab/nova-items-field)[ Packagist](https://packagist.org/packages/bbs-lab/nova-items-field)[ Docs](https://github.com/BBS-Lab/nova-items-field)[ RSS](/packages/bbs-lab-nova-items-field/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (17)Versions (15)Used By (0)

Nova Items Field
================

[](#nova-items-field)

[![Latest Version on Packagist](https://camo.githubusercontent.com/145ebf7157f53847d8406788ad5c2817f64c0c83a85262b259cd45fe84faa76b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6262732d6c61622f6e6f76612d6974656d732d6669656c642e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/bbs-lab/nova-items-field)[![Tests](https://camo.githubusercontent.com/219ca3e012dcec78660ff74b84a4d05e6e99ca7fcd21437a18dce5e270baa16d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f4242532d4c61622f6e6f76612d6974656d732d6669656c642f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/BBS-Lab/nova-items-field/actions)[![Total Downloads](https://camo.githubusercontent.com/601de7cd9ec113ec8594033de82ac10ee85e24ed5a41db3fbdfaec1ee5c8256c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6262732d6c61622f6e6f76612d6974656d732d6669656c642e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/bbs-lab/nova-items-field)

A modern [Laravel Nova 5](https://nova.laravel.com) field for managing a **list of scalar values**(tags, emails, steps, bullet points…) stored as JSON in a single column.

It is a complete, modernized rewrite of [`blendbyte/nova-items-field`](https://github.com/blendbyte/nova-items-field)(itself a fork of `dillingham/nova-items-field`): same feature set, a cleaner API, a polished UI, first-class validation, internationalization, and **100% test coverage** on both the PHP and the JavaScript side.

Features
--------

[](#features)

- 🎛️ Two display modes: **structured rows** (numbered, drag-to-reorder) or **chips/tags**
- ✅ First-class validation: array-level `rules()` **and** per-item `itemRules()` with inline, per-row error messages
- 🔢 `min()` / `max()` item constraints
- 🧲 Drag-and-drop reordering, scrollable lists, custom input types, datalist suggestions
- 🌍 Localized labels (English &amp; French out of the box, publishable)
- 🧩 Dependent fields (`dependsOn`) and copy-to-clipboard support
- 👀 Tailored index &amp; detail rendering: count badge with tooltip, chips overflow, or truncated list
- 🧪 100% PHP coverage, 100% JS coverage, mutation tested, PHPStan level 8

Screenshots
-----------

[](#screenshots)

**Create / edit form** — structured rows and chips modes together, with inline add controls and drag handles:

[![Create form](art/form.png)](art/form.png)

**Detail view** — readonly chips and an ordered list, in Nova's native field layout:

[![Detail view](art/detail.png)](art/detail.png)

**Index view** — count badge (with a hover tooltip), chips overflow and truncated list across the table:

[![Index view](art/index.png)](art/index.png)

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

[](#requirements)

- PHP `^8.4`
- Laravel Nova `^5.0`
- Laravel `^11.0 || ^12.0 || ^13.0`

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

[](#installation)

Because Nova is a paid, private package, make sure your application is already authenticated against `nova.laravel.com`, then:

```
composer require bbs-lab/nova-items-field
```

The field auto-registers via Laravel package discovery. Optionally publish the config and translations:

```
php artisan vendor:publish --tag=nova-items-field-config
php artisan vendor:publish --tag=nova-items-field-translations
```

Add an array cast to the underlying model attribute (a `json`/`text` column):

```
protected $casts = [
    'tags' => 'array',
];
```

Quick start
-----------

[](#quick-start)

```
use BBSLab\NovaItemsField\Items;

public function fields(NovaRequest $request): array
{
    return [
        Items::make('Tags')
            ->chips()
            ->suggestions(['laravel', 'nova', 'vue'])
            ->rules('max:10')
            ->itemRules('string', 'max:255'),
    ];
}
```

Usage
-----

[](#usage)

### Display modes

[](#display-modes)

```
Items::make('Steps');            // structured numbered rows (default)
Items::make('Tags')->chips();    // chips / tags
```

### Reordering, sizing &amp; input

[](#reordering-sizing--input)

```
Items::make('Steps')
    ->draggable()                // drag handle to reorder
    ->min(1)->max(10)            // bounds (validated + reflected in the UI)
    ->maxHeight(300)             // scrollable list (px)
    ->inputType('email')         // any HTML input type
    ->placeholder('Add a step…')
    ->fullWidth();
```

### Buttons

[](#buttons)

```
Items::make('Tags')
    ->addButtonLabel('Add a tag')
    ->deleteButtonLabel('Remove')
    ->addButtonPosition('top')   // 'top' or 'bottom' (default)
    ->hideAddButton();           // hide the add control entirely
```

### Validation

[](#validation)

`rules()` validates the **list as a whole**; `itemRules()` validates **each item**. Failures are shown inline, per row:

```
Items::make('Emails')
    ->rules('required', 'max:5')   // the list: required, at most 5 items
    ->itemRules('email');          // each item must be a valid email
```

### Index &amp; detail rendering

[](#index--detail-rendering)

```
// Index (table cell) — defaults to a count badge with a hover tooltip:
Items::make('Tags')->indexAsChips();  // first chips + "+N" overflow
Items::make('Tags')->indexAsList();   // truncated, comma-joined text

// Detail — mirrors the form mode (list or chips); or summarize:
Items::make('Steps')->detailsAsTotal();
```

### Dependent fields &amp; clipboard

[](#dependent-fields--clipboard)

```
use Laravel\Nova\Fields\FormData;
use Laravel\Nova\Http\Requests\NovaRequest;

Items::make('Tags')
    ->copyable()
    ->dependsOn('has_tags', function (Items $field, NovaRequest $request, FormData $formData) {
        $formData->boolean('has_tags') ? $field->show() : $field->hide();
    });
```

Migrating from `blendbyte/nova-items-field`
-------------------------------------------

[](#migrating-from-blendbytenova-items-field)

The API was modernized — there are **no compatibility aliases**. Update your field definitions:

`blendbyte/nova-items-field``bbs-lab/nova-items-field``NovaItemsField\Items``BBSLab\NovaItemsField\Items``->values([...])``->suggestions([...])``->createButtonValue('Add')``->addButtonLabel('Add')``->deleteButtonValue('x')``->deleteButtonLabel('x')``->hideCreateButton()``->hideAddButton()``->listFirst()``->addButtonPosition('top')``->rules([null => '...', '*' => '...'])``->rules('...')` + `->itemRules('...')``asHtml` (broken upstream)removed — use Nova's native `displayUsing()`Local development
-----------------

[](#local-development)

This package ships an embedded Nova application (via [Orchestra Workbench](https://github.com/orchestral/workbench)) so you can exercise the field in a real Nova instance:

```
composer install
npm install
npm run build
composer serve        # boots Nova at http://localhost:8000/nova
```

Quality &amp; testing
---------------------

[](#quality--testing)

GateCommandPHP tests (100% cov)`composer test-coverage`Mutation testing`composer test-mutation`Static analysis (L8)`composer analyse`Code style`composer format`JS tests (100% cov)`npm run test:coverage`Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security
--------

[](#security)

Please review [our security policy](SECURITY.md) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Big Boss Studio](https://github.com/BBS-Lab)
- Original work by [blendbyte](https://github.com/blendbyte/nova-items-field) and [dillingham](https://github.com/dillingham/nova-items-field)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance92

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 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.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

53d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/5689944?v=4)[Mikaël Popowicz](/maintainers/mikaelpopowicz)[@mikaelpopowicz](https://github.com/mikaelpopowicz)

![](https://www.gravatar.com/avatar/c1edc17683ed39a2cc6dbe453c2c5aaa63468fc5b54f13941f260ebe260da211?d=identicon)[Kezho](/maintainers/Kezho)

---

Top Contributors

[![mikaelpopowicz](https://avatars.githubusercontent.com/u/5689944?v=4)](https://github.com/mikaelpopowicz "mikaelpopowicz (5 commits)")

---

Tags

jsonlaraveltagsnovanova-fieldRepeateritemsbbs

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/bbs-lab-nova-items-field/health.svg)

```
[![Health](https://phpackages.com/badges/bbs-lab-nova-items-field/health.svg)](https://phpackages.com/packages/bbs-lab-nova-items-field)
```

###  Alternatives

[defstudio/telegraph

A laravel facade to interact with Telegram Bots

813336.8k3](/packages/defstudio-telegraph)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M347](/packages/psalm-plugin-laravel)[harris21/laravel-fuse

Circuit breaker for Laravel queue jobs. Protect your workers from cascading failures.

45955.7k](/packages/harris21-laravel-fuse)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5022.6k](/packages/simplestats-io-laravel-client)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.8k](/packages/rawilk-profile-filament-plugin)[api-platform/laravel

API Platform support for Laravel

58174.6k17](/packages/api-platform-laravel)

PHPackages © 2026

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