{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "device-mockup-zoom", "title": "Device Mockup Zoom", "description": "Pull back from a UI to reveal it inside a device frame.", "dependencies": [ "remotion" ], "files": [ { "path": "registry/remocn/device-mockup-zoom/index.tsx", "content": "\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Easing, interpolate, useCurrentFrame, useVideoConfig } from \"remotion\";\n\nexport interface DeviceMockupZoomProps {\n children?: ReactNode;\n device?: \"laptop\" | \"phone\";\n frameColor?: string;\n screenColor?: string;\n background?: string;\n speed?: number;\n className?: string;\n}\n\nconst FONT_FAMILY =\n \"var(--font-geist-sans), -apple-system, BlinkMacSystemFont, sans-serif\";\n\nfunction DefaultScreen() {\n return (\n \n Your UI\n \n );\n}\n\nexport function DeviceMockupZoom({\n children,\n device = \"laptop\",\n frameColor = \"#1f1f1f\",\n screenColor = \"#0a0a0a\",\n background = \"#fafafa\",\n speed = 1,\n className,\n}: DeviceMockupZoomProps) {\n const frame = useCurrentFrame() * speed;\n const { durationInFrames } = useVideoConfig();\n\n const scale = interpolate(frame, [0, durationInFrames], [2, 1], {\n extrapolateRight: \"clamp\",\n easing: Easing.bezier(0.22, 1, 0.36, 1),\n });\n\n const screen = children ?? ;\n\n return (\n \n \n {device === \"laptop\" ? (\n
\n {/* Screen body */}\n \n \n {screen}\n
\n \n {/* Base */}\n \n \n \n ) : (\n \n \n {screen}\n \n \n \n )}\n \n \n );\n}\n", "type": "registry:component", "target": "components/remocn/device-mockup-zoom.tsx" } ], "type": "registry:component" }