| import Logo from './Logo' |
|
|
| const STARTERS = [ |
| { title: 'Todo list with local storage', prompt: 'Build a todo list with add, complete, and delete actions, persisted to localStorage.' }, |
| { title: 'Pomodoro timer with sound', prompt: 'Build a Pomodoro timer (25 min work / 5 min break) with start, pause, reset, and a soft chime when the interval ends.' }, |
| { title: 'Markdown editor with preview', prompt: 'Build a side-by-side markdown editor: textarea on the left, live rendered preview on the right.' }, |
| { title: 'Landing page for a coffee shop', prompt: 'Build a single-page landing page for a coffee shop: hero with tagline, three featured drinks as cards, and a footer.' }, |
| ] |
|
|
| export default function EmptyState({ onPick }) { |
| return ( |
| <div className="flex flex-col items-center justify-center h-full px-6 text-center fade-in"> |
| <div className="mb-4" style={{ filter: 'drop-shadow(0 0 20px var(--accent-glow))' }}> |
| <Logo size={56} /> |
| </div> |
| |
| <h1 |
| className="text-[26px] font-semibold tracking-tight" |
| style={{ |
| background: 'linear-gradient(135deg, var(--accent-hi), var(--live))', |
| WebkitBackgroundClip: 'text', |
| WebkitTextFillColor: 'transparent', |
| }} |
| > |
| Tesseract |
| </h1> |
| <p className="mt-1 text-[13px]" style={{ color: 'var(--text-dim)' }}> |
| Describe what you want. See it render live. |
| </p> |
| |
| <div className="grid grid-cols-1 sm:grid-cols-2 gap-2 mt-7 w-full max-w-md"> |
| {STARTERS.map((s) => ( |
| <button |
| key={s.title} |
| onClick={() => onPick(s.prompt)} |
| className="text-left p-3 rounded-lg border transition-all hover:scale-[1.02]" |
| style={{ |
| background: 'var(--surface)', |
| borderColor: 'var(--border-2)', |
| color: 'var(--text)', |
| }} |
| onMouseEnter={(e) => { |
| e.currentTarget.style.borderColor = 'var(--accent)' |
| e.currentTarget.style.boxShadow = '0 0 0 1px var(--accent-bg)' |
| }} |
| onMouseLeave={(e) => { |
| e.currentTarget.style.borderColor = 'var(--border-2)' |
| e.currentTarget.style.boxShadow = 'none' |
| }} |
| > |
| <div className="text-[12.5px] font-medium">{s.title}</div> |
| <div className="text-[11px] mt-0.5 line-clamp-2" style={{ color: 'var(--text-dim)' }}> |
| {s.prompt} |
| </div> |
| </button> |
| ))} |
| </div> |
| |
| <div className="mt-7 flex items-center gap-3 text-[10.5px] mono" style={{ color: 'var(--text-faint)' }}> |
| <span><kbd className="px-1.5 py-0.5 rounded border" style={{ borderColor: 'var(--border-2)' }}>⌘K</kbd> palette</span> |
| <span><kbd className="px-1.5 py-0.5 rounded border" style={{ borderColor: 'var(--border-2)' }}>⌘B</kbd> sidebar</span> |
| <span><kbd className="px-1.5 py-0.5 rounded border" style={{ borderColor: 'var(--border-2)' }}>⌘/</kbd> mode</span> |
| </div> |
| </div> |
| ) |
| } |
|
|