shadcn.io is not affiliated with official shadcn/ui
Alternating Device Frame Rows Features Block for React Aria
Two alternating rows for a transit app, each pairing a sentence with a phone drawn as a ring on a hairline floor: the trip planner with line chips and the live arrivals with countdowns.
Installation
Overview
A features section for React with React Aria that shows a mobile app on a phone. Two rows share one page column: a badge, a heading, a sentence and a text link on one side, and a phone on the other, the sides swapping from row to row. The phone is built from CSS alone: its bezel is a ring, with no notch art, and it stands on a hairline floor inside a frame with + marks on its corners, so it never runs flush to the page's rails. The first screen is a trip planner with line chips and journey times; the second is a live arrivals list with a countdown per line. Both are drawn in greyscale from theme tokens. For consumer apps, mobile products and any feature that is best shown in a hand-held frame.
FAQ
How do I draw my own screens?
Each screen is a small component (PlannerScreen, ArrivalsScreen) that renders inside the shared Phone, which supplies the bezel, the status bar and the room for a tab bar. Fill it with your own rows, and change the data lists at the top of the file (JOURNEYS, ARRIVALS, LINE_CHIPS) to change what they show.
Why are the phones hidden from screen readers?
They are pictures of the product, not content: the heading and sentence beside each one say what it shows. The phone is marked as decorative and holds no links or buttons, so Tab moves from one row's link to the next.
Where do the links go?
Each row ends in a text link (href="#"): point it at the matching page. The arrow slides on hover and mirrors in a right-to-left layout. There is no button in this block, so no Shine Button.
Does it follow my theme?
Yes. The bezel, the screen and the floor use theme tokens only, so they are light on a light page and dark on a dark one in any preset. The one selected chip and the first arrival use the foreground colour as their accent.