← 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