Skip to content

Panels

A Panel is Reshape's read-only detail view — a bordered list of label/value rows for displaying a record, as opposed to editing one. If Forms are for input and Tables are for lists, Panels are for the "show" screen in between.

A customer's detail panel

Structure

web/src/components/ui/panel/Panel is the container; PanelItem renders each bordered row (a responsive label / value grid); PanelLabel/PanelValue are the individual pieces if you need to compose a row by hand. Most of the time you won't reach for those directly — you'll use one of the typed field components below instead.

Every field accepts a copyable prop — pass it a string and a copy-to-clipboard button appears next to the value. When the underlying value is null, fields render an em-dash (components/emdash.vue) instead of leaving a blank row, so panels never look broken when data is missing.

Field Types

Reshape ships with a variety of panel field components (components/ui/panel/fields/):

Panel Field

PanelField : label?, copyable?, class?, labelClass?, valueClass?

The generic escape hatch when nothing else fits — pass a label and put whatever you need in the default slot (e.g. a status badge component instead of plain text).

Text Field

TextField : label?, value, copyable?

Boolean Field

BooleanField : label?, value, copyable?

Renders a yes/no indicator.

Date Field

DateField : label?, value, copyable?

Date Time Field

DateTimeField : label?, value, copyable?

Url Field

UrlField : label?, value, text?, copyable?

Renders a clickable link.

Color Field

ColorField : label?, value, copyable?

Renders a color swatch.

Code Field

CodeField : label?, value, copyable?

Monospace, for identifiers and raw values.

Excerpt Field

ExcerptField : label?, value, limit? (default 160), copyable?

Truncated long text.

Image Field

ImageField : label?, value, alt?, copyable?, class?

Renders a thumbnail.

Country Field

CountryField : label?, code, name, copyable?

Timezone Field

TimezoneField : label?, name, copyable?

Industry Field

IndustryField : label?, name, description?, copyable?

Type Field

TypeField : label?, name, description?, copyable?

Panels sit alongside a few sibling components worth knowing about when you're building a detail page: components/ui/card/* for the surrounding layout, components/ui/dialog/* and the shared confirm-dialog.vue for confirmations, and components/ui/sheet/* for slide-over panels — none of which are "Panel" in the sense of this page, despite the similar name. See the Customers detail page for a full working example combining a Panel with an actions card.