OGE logoOGE

Card

<oge-card> is a content surface with an optional header, full-bleed media, an action row and a footer — one component, not a sub-component army. The sections are attribute slots ([ogeCardMedia], [ogeCardActions], [ogeCardFooter]…) and everything else projected is the content.

There is no WAI-ARIA card pattern, so the card renders no role and no interactive wrapper of its own; add role="article" or role="region" on the host where the context calls for it.

attribute slots no role signals RTL zoneless

Basics

Simple titles come from the header / subheader inputs (the PrimeNG names — a title input would double as a native tooltip). The default projection is the content; no marker element to remember.

header subheader ogeCardActions
Mountains
Alps, 2026

Four days above the tree line, one pass a day.

last action → —

Chrome presets

stylingMode is the house word with the layout family's values plus Material's raised: outlined (default), raised, filled, flat. raised rests on the --oge-shadow-card token, so a theme re-tunes elevation without touching the component.

stylingMode --oge-shadow-card
outlined

The outlined chrome preset.

raised

The raised chrome preset.

filled

The filled chrome preset.

flat

The flat chrome preset.

Density

size is the family's density preset (sm / md / lg): it scales the section padding and type ramp together, and --oge-card-pad is the per-card escape hatch.

size --oge-card-pad
sm

The sm density.

Default

The md density.

lg

The lg density.

Media

[ogeCardMedia] is full-bleed — it touches the card edges while the sections around it keep the padding. Size it with your own CSS (aspect-ratio, block-size); there is deliberately no aspectRatio input. The heading stays before the media in DOM order.

ogeCardMedia full-bleed
Mountains
Alps, 2026

Media renders edge to edge, clipped by the card radius.

Horizontal

orientation="horizontal" turns the card into a two-column grid: the media spans the inline-start column and --oge-card-media-size sets its width. Kendo is the only reference with an orientation input at all.

orientation --oge-card-media-size
Mountains
Alps, 2026

The media column follows the writing mode, so it mirrors in RTL with no flag to set.

Header slots

The header row renders only when it has something to show — titles, an [ogeCardAvatar] or [ogeCardHeaderActions]. Header actions are real controls in the Tab sequence; the card never wraps them in anything interactive.

ogeCardAvatar ogeCardHeaderActions
R. Aydın
3 hours ago

Reached the ridge before the weather turned.

Actions alignment

align on the actions row is the Kendo superset: start (the Material/Kendo default), center, end, and stretched — every action takes equal width.

align stretched
Draft

Unsaved changes.

[ogeCardFooter] is a divided strip on the header surface — metadata rather than commands. [ogeCardSeparator] on an <hr> draws a full-bleed hairline inside the padded content.

ogeCardFooter ogeCardSeparator
Weekly report

Generated from last week's data.


12 pages, 4 charts.

Status & loading

severity draws a status rail on the inline-start edge — the toast's rail idiom on a static surface. loading swaps the content and action row for a shimmer skeleton and marks the card aria-busy; header, media and footer keep the footprint while the data arrives.

severity loading aria-busy
Deploy failed
build #412

The e2e stage timed out after 20 minutes.

Weekly report
loading…

Clickable cards, accessibly

There is no clickable input, on purpose: wrapping the whole card in a link or button is the nested-interactive axe violation the moment a second control appears, and a screen reader reads the entire card as one link name. The accessible pattern is one primary <a> in the content with a CSS-stretched hit area — and [interactive] is its visual half: a hover/focus-within lift with no role, tabindex or wrapper of its own.

no clickable input stretched link
Mountains
Alps, 2026

Four days above the tree line.

Read the full report

last action → —

Configuration

provideOgeCardConfig() carries stylingMode and orientation defaults; instance inputs win. There is no messages block, deliberately — the card renders no user-facing strings and no interactive chrome of its own.

provideOgeCardConfig
Raised by default

What every card looks like under provideOgeCardConfig({ stylingMode: 'raised' }).