Design System
Components

NewCard

The “New on etisalat” story tile — a rounded picture frame with a New card badge and a caption, ringed in a gradient when selected.

Figma description · .new-on-eand-stateOpen in Figma ↗

This component has no description in Figma yet.

New card

Smiles Unlimited

New card

eLife TV, now in 4K

Props
import SwiftUI
import EandTokens

// new-on-eand: a 137×224 Story column, no surface. A 4pt-padded frame (r24) around a
// r20 image; selected adds a 2pt gradient ring that does not move the image. "New card"
// md badge at 12,12; a centred body/md caption, 12pt below.
struct NewCard: View {
  let title: String; let image: Image
  var selected = false
  var body: some View {
    VStack(spacing: EandSpacing.md) {
      ZStack(alignment: .topLeading) {
        image.resizable().scaledToFill()
          .clipShape(RoundedRectangle(cornerRadius: EandRadius.radius7))
          .padding(EandSpacing.xs)
          .overlay {
            if selected {
              // Ring stops: legacy Light Green #47cb6c (no token), midnight, brand red.
              RoundedRectangle(cornerRadius: EandRadius.radius8).strokeBorder(
                LinearGradient(stops: [
                  .init(color: Color(hex: "#47cb6c"), location: 0),
                  .init(color: EandColor.midnight1000, location: 0.56),
                  .init(color: EandColor.red1000, location: 1),
                ], startPoint: .bottomLeading, endPoint: .topTrailing),
                lineWidth: EandBorder.lg)
            }
          }
        OfferBadge(text: "New card").padding(EandSpacing.md)
      }
      Text(title).font(.system(size: EandTypography.bodyMd.size))
        .multilineTextAlignment(.center).lineLimit(2)
        .padding(.horizontal, EandSpacing.md)
    }
    .frame(width: 137, height: EandSection.bodyHeightRow3)
  }
}

When to use

  • Use in a "New on etisalat" carousel, in a Section of size md, to announce new services and content. Set selected on the last card in the carousel; Figma shows the ring there for three days.
  • Don't use for offers with a price (use DealCard) or for general tiles (use GeneralCard).

Anatomy

  • Frame — image in a rounded frame that fills the height above the caption.
  • Badge — the md "New card" badge at the top start. badge (on by default) is independent of selected.
  • Ring — selected draws a 2px gradient ring around the frame without shrinking the image.
  • Caption — title in body/md, centred, up to two lines.

The tile has no surface of its own; only the picture frame is rounded.

<NewCard image={<img src={cover} alt="" />} title="etisalat money" selected />
<NewCard image={<img src={cover} alt="" />} title="Stream on etisalat tv" badge={false} />

Props

PropTypeDefaultDescription
badge?booleantrueFigma badge — the "New card" badge. Independent of selected; on by default.
image?ReactNode—
selected?boolean—Figma selected axis — the gradient ring (the last carousel card, for three days).
title?ReactNodeNew on e&
width?string | number137

Design

Figma source: .new-on-eand-state — etisalat Consumer App DSL V1.2

  • 137 × 224 (row-3), with 12px (spacing/md) between the frame and the caption.
  • Frame: a 24px radius (border-radius/8) and 4px padding (spacing/xs) around an image container at a 20px radius (border-radius/7).
  • Badge at 12, 12 (spacing/md).
  • Ring: a 37° gradient from #47cb6c through #191329 at 56% to #e00800. Its three stops are legacy colour styles with no V1.2 token, so they are literals.

On this page