Ballmac UI home

Tablet Frame

A modern tablet drawn in CSS: brushed aluminum frame, thin glass bezel, front camera, status bar and home indicator. Landscape or portrait with the same proportions; children render as the screen at tablet resolution, scaled to fit.

Right-to-left: Hardware buttons and bezels sit on fixed physical edges of the device, so the frame keeps its shape; the screen content you place inside follows the page direction.

9:41 AMThu Oct 1

Good morning, Alex

Here is how the store is doing this week.

Search

Revenue

$48,920

+12.4%

Active users

8,214

+5.1%

Conversion

3.8%

+0.6%

Sales, last 12 weeks

Weekly

Installation

$ pnpm dlx shadcn@latest add @ballmac/tablet-frame

Usage

import { TabletFrame } from "@/components/ballmac/tablet-frame"

The full example is in the Code tab above.

Examples

Portrait reader

9:41 AMThu Oct 1
Library

Chapter 3

The long way around the lake

By the time the fog lifted, the ferry had already crossed twice. Maren stood at the rail with her coat buttoned to the chin, watching the far shore resolve from a grey smudge into a line of small, lit windows.

She had promised herself she would not look at the letter again. It lay folded in her pocket, soft at the creases, as if it had already been read a hundred times by someone else.

Some distances are only measured in what you chose not to say.

The ferry horn sounded once, low and patient, and the whole lake seemed to lean toward the sound.

42 of 31813%

API reference

PropTypeDefault
children

Screen content, laid out below the status bar. Ignored when `src` or `videoSrc` is set.

React.ReactNode—
orientation

Which way the tablet is held. The frame keeps the real aspect ratio either way.

"landscape" | "portrait""landscape"
variant

Finish of the aluminum frame. "auto" is silver in light mode and space black in dark mode.

"auto" | "silver" | "black""auto"
src

Image shown on the screen, cropped to fill it.

string—
alt

Alternative text for `src`.

string""
videoSrc

Video shown on the screen: muted, looping, and paused under reduced motion.

string—
poster

Poster image for `videoSrc`.

string—
screenWidth

Width in CSS pixels that the screen content is laid out at (1194 landscape or 834 portrait match an 11" tablet); it is then scaled to fit. Omit to lay content out at the frame's actual size.

number—
statusBar

Show the status bar (time, date, Wi-Fi, battery).

booleantrue
time

Time shown in the status bar.

string"9:41 AM"
date

Date shown next to the time.

string"Thu Oct 1"
homeIndicator

Show the home indicator bar at the bottom of the screen.

booleantrue
screenClassName

Class names for the screen element (inside the bezel). Use "dark" to give the screen its own theme.

string—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
StaticPurely visual: the frame adds no focusable elements and hides its decoration from assistive tech
Reduced motionVideo on the screen is not autoplayed

Use with AI

Wrap a tablet screen in <TabletFrame screenWidth={1194}>: children render below a status bar at 1194 CSS px wide (834 in portrait) and are scaled to the frame's width. Set the width with className; the height follows the aspect ratio. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Tablet Frame (@ballmac/tablet-frame) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Showing a dashboard or app on a landing page
  • Pairing with phone-frame and laptop-frame in a device lineup

Not for

  • Phone-sized screens (phone-frame, android-frame)
  • Real screenshots that already include a bezel

Registry JSON: https://ui.ballmac.com/r/tablet-frame.json

Credits

Free to use in personal and commercial projects.