73 lines
2.7 KiB
TypeScript
73 lines
2.7 KiB
TypeScript
'use client';
|
|
|
|
import { GameCard } from '@/components/ui/game-card';
|
|
import { SectionHeader } from '@/components/ui/section-header';
|
|
import { ActionButton } from '@/components/ui/action-button';
|
|
import { Trash2 } from 'lucide-react';
|
|
import { EQUIPMENT_TYPES } from '@/lib/game/data/equipment';
|
|
import type { SavedDesignsProps } from './types';
|
|
import { DebugName } from '@/components/game/debug/debug-context';
|
|
|
|
export function SavedDesigns({
|
|
enchantmentDesigns,
|
|
selectedDesign,
|
|
setSelectedDesign,
|
|
deleteDesign,
|
|
}: SavedDesignsProps) {
|
|
return (
|
|
<DebugName name="SavedDesigns">
|
|
<GameCard variant="default" className="lg:col-span-2">
|
|
<SectionHeader title={`Saved Designs (${enchantmentDesigns.length})`} />
|
|
{enchantmentDesigns.length === 0 ? (
|
|
<div className="text-center text-[var(--text-muted)] py-4">
|
|
No saved designs yet
|
|
</div>
|
|
) : (
|
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3">
|
|
{enchantmentDesigns.map(design => (
|
|
<div
|
|
key={design.id}
|
|
className={`p-3 rounded border cursor-pointer transition-all
|
|
${selectedDesign === design.id
|
|
? 'border-[var(--mana-light)] bg-[var(--mana-light)]/10'
|
|
: 'border-[var(--border-default)] bg-[var(--bg-sunken)]/50 hover:border-[var(--border-default)]'
|
|
}`}
|
|
onClick={() => setSelectedDesign(design.id)}
|
|
role="button"
|
|
tabIndex={0}
|
|
aria-label={`Select design: ${design.name}`}
|
|
>
|
|
<div className="flex justify-between items-start">
|
|
<div>
|
|
<div className="font-semibold text-[var(--text-primary)]">{design.name}</div>
|
|
<div className="text-xs text-[var(--text-muted)]">
|
|
{EQUIPMENT_TYPES[design.equipmentType]?.name}
|
|
</div>
|
|
</div>
|
|
<ActionButton
|
|
size="sm"
|
|
variant="ghost"
|
|
className="h-6 w-6 p-0 text-[var(--text-muted)] hover:text-[var(--color-danger)]"
|
|
onClick={(e) => {
|
|
e.stopPropagation();
|
|
deleteDesign(design.id);
|
|
}}
|
|
aria-label={`Delete design: ${design.name}`}
|
|
>
|
|
<Trash2 className="w-4 h-4" />
|
|
</ActionButton>
|
|
</div>
|
|
<div className="mt-2 text-xs text-[var(--text-muted)]">
|
|
{design.effects.length} effects | {design.totalCapacityUsed} cap
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
</GameCard>
|
|
</DebugName>
|
|
);
|
|
}
|
|
|
|
SavedDesigns.displayName = 'SavedDesigns';
|