Поддержка
Поля

Панель

Группировка полей в визуальный блок на странице записи с раскладкой по сетке

Группирует несколько полей в единый визуальный блок. В отличие от Stack, Panel добавляется в fields() ресурса и используется на странице просмотра/редактирования.

app/Frame/Resources/UserResource.php
Panel::make('Authorization', [
    Phone::make('phone', 'Phone'),
    Email::make('email', 'Email'),
    Password::make('password', 'Password'),
])

Первый аргумент — заголовок панели. Второй — массив полей.

Раскладка внутри формы

Страница редактирования использует 12-колоночную адаптивную сетку. Панели можно разложить по колонкам и рядам этой сетки методами colSpan() и rowSpan().

colSpan() — позиция по столбцам

Принимает Frame\Core\Span::make($from, $to) на каждый брейкпоинт. Границы включительные$from и $to указывают первую и последнюю занятую колонку сетки из 12.

use Frame\Core\Span;
use Frame\Laravel\Fields\Panel;

return [
    Panel::make('Основное', [
        Text::make('title', 'Заголовок'),
        Textarea::make('description', 'Описание'),
    ])
        ->colSpan(md: Span::make(1, 8)),       // cols 1..8 — 8 колонок слева

    Panel::make('Публикация', [
        DateTime::make('published_at', 'Дата'),
    ])
        ->colSpan(md: Span::make(9, 12)),      // cols 9..12 — 4 колонки справа
];

На мобильных (без xs) панели занимают полную ширину одна под другой; начиная с md — рядом.

rowSpan() — растяжение по строкам

Panel::make('Детали', [...])
    ->colSpan(md: Span::make(1, 8))
    ->rowSpan(md: Span::make(1, 2)),    // растянуть на 2 ряда

Panel::make('Настройки', [...])
    ->colSpan(md: Span::make(9, 12)),

Panel::make('История', [...])
    ->colSpan(md: Span::make(9, 12)),

Левая панель займёт первые два ряда по высоте, справа поместятся две панели друг под другом.

Брейкпоинты

Оба метода принимают именованные параметры:

xs
?Span
< 640px — мобильные
sm
?Span
≥ 640px
md
?Span
≥ 768px — базовый для адаптивных раскладок
lg
?Span
≥ 1024px
xl
?Span
≥ 1280px
xl2
?Span
≥ 1536px

null означает «не задано, наследуется от меньшего».

Ширина полей внутри панели

Метод grid() задаёт ширину отдельного поля внутри панели (сколько из 12 колонок поля панели оно занимает). Это НЕ раскладка самих панелей.

Panel::make('Публикация', [
    DateTime::make('published_at', 'Дата')
        ->grid(md: 6),            // половина ширины панели на md+

    Toggle::make('is_published', 'Опубликовано')
        ->grid(md: 6),            // вторая половина
]),

Поля без grid() занимают всю ширину панели.

grid() и colSpan()/rowSpan() — разные механизмы. Первый — для размещения полей внутри панели. Второй — для размещения самой панели в общей сетке формы.

Инфолист и шаги мастера

Дополнительные методы панели используются в Infolist (табличная раскладка) и в форме-мастере (панель = шаг).

icon
string $icon → self
Иконка панели рядом с заголовком.
asTable
bool $val = true → self
Табличная раскладка панели в Infolist: значения выводятся строками таблицы «подпись → значение» вместо вертикального списка.
description
string $val → self
Текст-пояснение под заголовком панели. Особенно полезен для шагов мастера.
optional
bool $val = true → self
Помечает панель как необязательный шаг — в режиме мастера такой шаг можно пропустить.
showWhen
string $fieldName → self
Условная панель/шаг: отображается только когда указанное поле заполнено. Применяется для ветвления шагов мастера.
Panel::make('Привязка', [
    MorphTo::make('addressable', [OfficeResource::class], 'Сущность'),
])
    ->description('К чему привязать адрес (необязательно)')
    ->optional()
    ->showWhen('country')