TextContentWithImage
Editorial text block paired with supporting imagery. Supports side-by-side, stacked, and overlap layouts for campaigns, brand stories, and collection storytelling.
Best for
Import
import { TextContentWithImage } from "@enadhq/enad-react-sdk/client/storefront"When to use it
Use TextContentWithImage when an editorial section needs both structured copy and a supporting image side by side (or stacked). It works for brand stories, process explanations, collection narratives, and any section where text alone would feel flat but a full Hero would be too heavy.
If the section is text-only, use TextContent. If it needs a full-bleed background image, use Hero.
Composition notes
TextContentWithImage is a slot-recipe component with a few layout decisions:
variantcontrols the overall structure:side-by-side(default),stacked, oroverlap.imagePositioncontrols whether the image appearsfirstorlastin the layout. For side-by-side, this means left or right. For stacked, this means above or below.imagetakes anImageAssetwithsrcandalt.- Text props match
TextContent:preheader,heading,body, plus optionalbuttonLabel/buttonHrefandtextLinkLabel/textLinkHref. colorThemesets the background and text color treatment.
Behavior and theming guidance
The side-by-side layout stacks vertically on mobile and sits in a two-column grid on larger screens. The overlap variant lets the text area partially overlap the image edge for a more editorial feel.
Image radius responds to --enad-image-radius and the gap between image and text responds to --enad-text-content-gap, so the visual density adapts to the active theme.
classNames now exposes stable hooks for both layout anatomy (inner, imageArea, textArea) and copy anatomy (preheader, heading, body, actions). That makes it realistic to produce wildly different implementations — restrained utility sections, serif-heavy editorial spreads, dense campaign rows — while keeping the same accessibility and layout behavior.
The component uses the same heading CSS variables as TextContent and Hero, so editorial tone stays consistent across all text-bearing storefront blocks.
Examples
Live examples you can edit directly in the sandbox.
Brand story section
Use side-by-side layout when a story section needs both editorial copy and a strong image. Flip imagePosition to alternate sides across sections.
Editorial serif vs compact utility copy
Use semantic classNames hooks to push the same layout toward very different brand personalities without replacing the component.
Slots
Component Sets
Preview the first example across the available component-set presets to compare tone, spacing, and structural defaults.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| image | string | — | No description yet. |
| imagePosition | string | — | No description yet. |
| fullWidth | boolean | — | No description yet. |
| variant | string | — | No description yet. |
| preheader | string | — | No description yet. |
| heading | string | — | No description yet. |
| body | string | — | No description yet. |
| buttonLabel | string | — | No description yet. |
| buttonHref | string | — | No description yet. |
| textLinkLabel | string | — | No description yet. |
| textLinkHref | string | — | No description yet. |
| colorTheme | string | — | No description yet. |
| classNames | Partial<Record<import("@enadhq/enad-react-sdk/client/storefront/types").TextContentWithImageSlot, string>> | — | No description yet. Slot keys bodyimageheadingrootinnercopypreheaderactionsimageAreatextArea |
| className | string | — | No description yet. |