A studio-lit 3D phone mockup that frames any image or content

| Name | Type | Default | Description |
|---|---|---|---|
image | string | "/demo-media/abstract-spectrum.webp" | Image shown on the screen. |
alt | string | "Device screen" | Alt text for the screen image. |
children | ReactNode | undefined | Custom screen content. Replaces the image. |
finish | "titanium" | "black" | "silver" | "gold" | "blue" | "black" | Metal finish of the frame and buttons. |
frameColor | string | undefined | Custom metal colour. Overrides the finish. Highlights and shades are derived from it. |
screenColor | string | "#000000" | Screen colour behind the content. |
shadowColor | string | "#0b0c16" | Colour of the contact shadow on the page. |
orientation | "portrait" | "landscape" | "portrait" | Holds the phone upright or sideways. The content stays upright and the change animates. |
width | number | string | undefined | Width of the phone body in px or any CSS length. Overrides scale. |
scale | number | 0.5 | Size as a fraction of a 35.6rem wide phone. Used when width is not set. |
rotateX | number | 0 | Resting tilt forward or back, in degrees. |
rotateY | number | 0 | Resting turn to the side, in degrees. Shows the side buttons. |
rotateZ | number | 0 | Resting lean on the page, in degrees. |
tilt | number | 10 | How far the phone turns toward the pointer, in degrees. |
float | number | 1 | Strength of the slow idle sway while the pointer is away. |
lift | number | 1 | How far the phone rises off the page on hover. The shadow softens to match. |
drag | boolean | true | Drag to spin the phone. It keeps its momentum, then springs back. |
reflection | number | 1 | Strength of the glass reflection. It moves with the angle of the phone. |
shadow | number | 1 | Strength of the contact shadow. |
bezel | number | 1 | Thickness of the black border around the screen. The corners stay concentric. |
island | boolean | true | Shows the Dynamic Island. |
isScrollable | boolean | false | Lets tall content scroll inside the screen, with smooth wheel scrolling. |
interactive | boolean | true | Turns the hover tilt, drag and tap nudges on or off. A tap nudges the side you touch. |
intro | boolean | true | Rises into place and wakes the screen when it first appears. |
paused | boolean | false | Freezes the idle sway. Reduced-motion users get a still phone. |
className | string | undefined | Classes for the root element. |
style | CSSProperties | undefined | Inline styles for the root element. |
ref | HTMLDivElement | undefined | The root element. |
imagestringImage shown on the screen.
"/demo-media/abstract-spectrum.webp"altstringAlt text for the screen image.
"Device screen"childrenReactNodeCustom screen content. Replaces the image.
undefinedfinish"titanium" | "black" | "silver" | "gold" | "blue"Metal finish of the frame and buttons.
"black"frameColorstringCustom metal colour. Overrides the finish. Highlights and shades are derived from it.
undefinedscreenColorstringScreen colour behind the content.
"#000000"shadowColorstringColour of the contact shadow on the page.
"#0b0c16"orientation"portrait" | "landscape"Holds the phone upright or sideways. The content stays upright and the change animates.
"portrait"widthnumber | stringWidth of the phone body in px or any CSS length. Overrides scale.
undefinedscalenumberSize as a fraction of a 35.6rem wide phone. Used when width is not set.
0.5rotateXnumberResting tilt forward or back, in degrees.
0rotateYnumberResting turn to the side, in degrees. Shows the side buttons.
0rotateZnumberResting lean on the page, in degrees.
0tiltnumberHow far the phone turns toward the pointer, in degrees.
10floatnumberStrength of the slow idle sway while the pointer is away.
1liftnumberHow far the phone rises off the page on hover. The shadow softens to match.
1dragbooleanDrag to spin the phone. It keeps its momentum, then springs back.
truereflectionnumberStrength of the glass reflection. It moves with the angle of the phone.
1shadownumberStrength of the contact shadow.
1bezelnumberThickness of the black border around the screen. The corners stay concentric.
1islandbooleanShows the Dynamic Island.
trueisScrollablebooleanLets tall content scroll inside the screen, with smooth wheel scrolling.
falseinteractivebooleanTurns the hover tilt, drag and tap nudges on or off. A tap nudges the side you touch.
trueintrobooleanRises into place and wakes the screen when it first appears.
truepausedbooleanFreezes the idle sway. Reduced-motion users get a still phone.
falseclassNamestringClasses for the root element.
undefinedstyleCSSPropertiesInline styles for the root element.
undefinedrefHTMLDivElementThe root element.
undefined