Github

Surface

A simple container that applies surface background variants.

Default Surface

Use for cards, panels, and grouped content.

Secondary Surface

Great for nested sections and subtle emphasis.

import { Surface } from "@/components/ui/surface";

export function SurfaceDemo() {
	return (
		<div className="grid w-full gap-3 md:grid-cols-2">
			<Surface className="rounded-3xl border p-6">
				<h4 className="font-medium">Default Surface</h4>
				<p className="mt-1 text-muted-foreground text-sm">
					Use for cards, panels, and grouped content.
				</p>
			</Surface>
			<Surface variant="secondary" className="rounded-3xl border p-6">
				<h4 className="font-medium">Secondary Surface</h4>
				<p className="mt-1 text-muted-foreground text-sm">
					Great for nested sections and subtle emphasis.
				</p>
			</Surface>
		</div>
	);
}

Installation

pnpm dlx shadcn@latest add https://herocn.dev/r/surface.json

Usage

import { Surface } from "@/components/ui/surface"
<Surface className="rounded-3xl p-6">
  Content
</Surface>

Variants

Use the variant prop to change the background style.

Default
Secondary
Tertiary
Transparent
import { Surface } from "@/components/ui/surface";

export function SurfaceVariants() {
	return (
		<div className="grid w-full gap-3 md:grid-cols-2">
			<Surface variant="default" className="rounded-3xl border p-6">
				Default
			</Surface>
			<Surface variant="secondary" className="rounded-3xl border p-6">
				Secondary
			</Surface>
			<Surface variant="tertiary" className="rounded-3xl border p-6">
				Tertiary
			</Surface>
			<Surface variant="transparent" className="rounded-3xl border p-6">
				Transparent
			</Surface>
		</div>
	);
}

RTL

نظرة عامة على المشروع

يُستخدم للبطاقات واللوحات والمحتوى المُجمَّع.

التفاصيل

مناسب للأقسام المتداخلة والتمييز الخفي.

"use client";

import {
	type Translations,
	useTranslation,
} from "@/components/language-selector";
import { Surface } from "@/components/ui/surface";

const translations: Translations = {
	en: {
		dir: "ltr",
		values: {
			cardTitle: "Project Overview",
			cardDescription: "Use for cards, panels, and grouped content.",
			nestedTitle: "Details",
			nestedDescription: "Great for nested sections and subtle emphasis.",
		},
	},
	ar: {
		dir: "rtl",
		values: {
			cardTitle: "نظرة عامة على المشروع",
			cardDescription: "يُستخدم للبطاقات واللوحات والمحتوى المُجمَّع.",
			nestedTitle: "التفاصيل",
			nestedDescription: "مناسب للأقسام المتداخلة والتمييز الخفي.",
		},
	},
	he: {
		dir: "rtl",
		values: {
			cardTitle: "סקירת פרויקט",
			cardDescription: "לשימוש בכרטיסים, פנלים ותוכן מקובץ.",
			nestedTitle: "פרטים",
			nestedDescription: "מצוין לסקציות מקוננות ודגש עדין.",
		},
	},
};

export function SurfaceRtl() {
	const { dir, language, t } = useTranslation(translations, "ar");

	return (
		<div className="grid w-full gap-3 md:grid-cols-2" lang={language} dir={dir}>
			<Surface className="rounded-3xl border p-6">
				<h4 className="font-medium">{t.cardTitle}</h4>
				<p className="mt-1 text-muted-foreground text-sm">
					{t.cardDescription}
				</p>
			</Surface>
			<Surface variant="secondary" className="rounded-3xl border p-6">
				<h4 className="font-medium">{t.nestedTitle}</h4>
				<p className="mt-1 text-muted-foreground text-sm">
					{t.nestedDescription}
				</p>
			</Surface>
		</div>
	);
}

API Reference

Surface

The Surface component accepts all native div props plus the following:

PropTypeDefault