Skip to main content
← Back to Table of Contents

Summary

A specialized grid input based on Filament’s Repeater, optimized for bulk data entry across fixed rows and columns. Unlike a standard repeater, FlexMatrixTable is non-addable and non-deletable, providing a stable spreadsheet-like interface for complex configurations.

Basic usage

Permission Matrix

Custom Column Widths


State & validation

For a compact Select Field column, keep the dropdown the same width as the field with wrapOptionLabels(false). Longer option labels are truncated:

Stored value

The state is an associative array where keys are row IDs and values are arrays of field data from the schema().

Fixed Structure

By default, FlexMatrixTable disables addable(), deletable(), and reorderable(). This ensures the matrix always matches your defined rows().

Configuration API

All methods accept Closure unless noted.

Real-world examples

Feature Availability Matrix


Playground

/admin/flex-fields/flex-matrix-table See Playground for setup.

CSS classes (reference)

Child validation and row identity

Each cell renders the actual field from schema(), including its validation, configuration and independently loaded resources. Required, numeric, range and custom rules belong to those child fields. The table also rejects unknown row keys and row values that are not arrays. Disabled rows disable their child schema; values from those disabled child fields are excluded from saving. Row keys identify nested form paths: use nonempty keys without dots. Descriptions and custom row metadata remain available through getNormalizedRows(). The row and column layout uses the shared matrix stylesheet; the table adds no second JavaScript controller over the child fields.
Last modified on October 16, 2026