Skip to main content

email Field Type

type: 'email' renders an email address as plain text. Adding renderAs: 'link' upgrades it to a clickable mailto: link — the link renderer auto-detects the @ symbol and builds the mailto: URL automatically.

Core Examples​

Basic Email Field​

Name, role, and email address displayed as plain text in table mode.

Name
Role
Email
Aurora ChenDesign Leadaurora.chen@company.com
Mateo SilvaPlatform Engineermateo.silva@company.com
Priya NairOperationspriya.nair@company.com
{ key: 'email', label: 'Email', type: 'email' }

Adding renderAs: 'link' renders the address as an <a href="mailto:..."> element. No url option is needed — the link renderer detects the @ and builds the mailto: URL automatically.

Email addresses rendered as clickable mailto links. Opens the default mail client.

Name
Role
Email
Aurora ChenDesign Leadaurora.chen@company.com
Mateo SilvaPlatform Engineermateo.silva@company.com
Priya NairOperationspriya.nair@company.com
{
key: 'email',
label: 'Email',
type: 'email',
renderAs: 'link',
renderAsOptions: { newTab: true },
}

Formatter​

formatter transforms the raw value before display. Common uses: normalize casing, extract the domain, or mask the local part for privacy.

Email normalized to lowercase; domain extracted into a separate column using the same key with a different formatter.

Name
Email (normalized)
Domain
Aurora Chenaurora.chen@company.comcompany.com
Mateo Silvamateo.silva@company.comcompany.com
Priya Nairpriya.nair@company.comcompany.com
{
key: 'email',
label: 'Email (normalized)',
type: 'email',
formatter: (value) => String(value ?? '').toLowerCase().trim(),
},
{
key: 'email',
label: 'Domain',
type: 'text',
formatter: (value) => String(value ?? '').split('@')[1] ?? '',
},

Condition​

condition receives the full entity and returns true to show the field or false to hide it entirely. Evaluated per row.

Email link is hidden for Priya (role: Operations). Aurora and Mateo show clickable mailto links.

Name
Role
Email
Aurora ChenDesign Leadaurora.chen@company.com
Mateo SilvaPlatform Engineermateo.silva@company.com
Priya NairOperations
{
key: 'email',
label: 'Email',
type: 'email',
renderAs: 'link',
condition: (entity) => entity.role !== 'Operations',
}

Field Options Reference​

OptionTypeDefaultEffect
keystringrequiredEntity property to read the value from.
labelstringunsetColumn header or card label.
type'email'—Renders as plain text. Use renderAs: 'link' for a clickable mailto: link.
wraptrue, falseinherited from ItemConfig.wrapfalse: single line, clips with ellipsis in card modes. true: wraps — uses forced word-breaking since email strings have no natural break points.
formatter(value, entity) => unknownunsetTransforms the raw value before display. Does not mutate the entity.
condition(entity) => booleanunsetHides the field for rows where the function returns false.
renderAs'link'unsetRenders as a clickable <a> element. Auto-generates mailto: URL from the value.
renderAsOptionsLinkRenderAsOptionsunsetOptions forwarded to the link renderer (e.g. newTab, text, url).
widthCSS length or numberunsetSets column width in table mode.
align'left', 'center', 'right''left'Text alignment in table mode.
showLabeltrue, falsetrue when label is setShows or hides the label in card/grid layouts.

Caveats​

  • email shares the same base renderer as text, textarea, and url — it outputs <span className="field-text"> when rendered as plain text.
  • wrap: true applies forced word-breaking (CSS overflow-wrap: break-word) for email fields specifically, since addresses like very.long.name@subdomain.company.com have no natural break points.
  • renderAs: 'link' bypasses the type rendering entirely — the link renderer handles the output. The type: 'email' declaration still matters for semantic correctness and future tooling.
  • No client-side email format validation is performed. Invalid values render as plain text.

Why email vs text?​

They render identically today without renderAs: 'link'. The distinction matters for:

Automatic mailto detection — renderAs: 'link' on a type: 'email' field automatically prefixes mailto:. On a type: 'text' field, you would need to provide the url option manually.

Forced word-breaking — wrap: true on email applies overflow-wrap: break-word to handle the absence of natural break points. type: 'text' uses natural word boundaries only.

Forward compatibility — future inline editing will render a <input type="email"> for email fields and a <input type="text"> for text fields.

See Also​