Skip to content

Commit 799b8be

Browse files
committed
feat: add Three.js template with interactive SVG preview
1 parent 574adbc commit 799b8be

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

src/admin/pages/AdminTemplatePage.tsx

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,37 @@ const TEMPLATES = [
8585
</svg>
8686
),
8787
},
88+
{
89+
id: 'threejs' as const,
90+
label: 'Three.js',
91+
description: '3D WebGL, interactive, immersive',
92+
preview: (
93+
<svg viewBox="0 0 120 80" className="h-full w-full" aria-hidden="true">
94+
<rect width="120" height="80" fill="#0a0a0f" />
95+
<defs>
96+
<radialGradient id="tj-glow" cx="50%" cy="50%" r="50%">
97+
<stop offset="0%" stopColor="#6366f1" stopOpacity="0.4" />
98+
<stop offset="100%" stopColor="#0a0a0f" stopOpacity="0" />
99+
</radialGradient>
100+
</defs>
101+
<ellipse cx="60" cy="40" rx="40" ry="30" fill="url(#tj-glow)" />
102+
{/* Wireframe cube */}
103+
<polygon points="45,25 75,25 75,55 45,55" fill="none" stroke="#6366f1" strokeOpacity="0.6" strokeWidth="1" />
104+
<polygon points="55,15 85,15 85,45 55,45" fill="none" stroke="#818cf8" strokeOpacity="0.4" strokeWidth="0.8" />
105+
<line x1="45" y1="25" x2="55" y2="15" stroke="#6366f1" strokeOpacity="0.5" strokeWidth="0.8" />
106+
<line x1="75" y1="25" x2="85" y2="15" stroke="#6366f1" strokeOpacity="0.5" strokeWidth="0.8" />
107+
<line x1="75" y1="55" x2="85" y2="45" stroke="#6366f1" strokeOpacity="0.5" strokeWidth="0.8" />
108+
<line x1="45" y1="55" x2="55" y2="45" stroke="#6366f1" strokeOpacity="0.5" strokeWidth="0.8" />
109+
{/* Particles */}
110+
<circle cx="20" cy="20" r="1" fill="#a5b4fc" opacity="0.7" />
111+
<circle cx="100" cy="15" r="1.2" fill="#818cf8" opacity="0.5" />
112+
<circle cx="15" cy="60" r="0.8" fill="#6366f1" opacity="0.6" />
113+
<circle cx="105" cy="65" r="1" fill="#a5b4fc" opacity="0.4" />
114+
<circle cx="30" cy="70" r="1.2" fill="#818cf8" opacity="0.5" />
115+
<circle cx="95" cy="50" r="0.8" fill="#6366f1" opacity="0.6" />
116+
</svg>
117+
),
118+
},
88119
{
89120
id: 'netflix' as const,
90121
label: 'Netflix',
@@ -141,7 +172,7 @@ export function AdminTemplatePage() {
141172
</p>
142173
</div>
143174

144-
<div className="grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-5">
175+
<div className="grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-6">
145176
{TEMPLATES.map(({ id, label, description, preview }) => {
146177
const isActive = (config.template ?? 'hacker') === id
147178
return (

0 commit comments

Comments
 (0)