IIIF-Studio / frontend /src /components /retro /RetroIcon.tsx
Claude
feat(frontend): Sprint Fix 4 — React Router, accessibility, translations
4002561 unverified
Raw
History Blame Contribute Delete
1.44 kB
interface Props {
/** Label displayed below the icon */
label: string
/** Emoji or text character used as the icon glyph */
glyph: string
/** Click handler */
onClick?: () => void
/** If true, renders in selected/highlighted state */
selected?: boolean
/** Extra CSS classes */
className?: string
}
export default function RetroIcon({
label,
glyph,
onClick,
selected = false,
className = '',
}: Props) {
return (
<button
type="button"
onClick={onClick}
aria-label={label}
className={`
flex flex-col items-center gap-1
p-2 w-[80px]
cursor-pointer select-none
${className}
`}
>
{/* Icon box */}
<div
className={`
w-[48px] h-[48px]
flex items-center justify-center
border border-retro-black
text-[24px] leading-none
${selected
? 'bg-retro-black text-retro-white'
: 'bg-retro-white text-retro-black hover:bg-retro-light'
}
shadow-retro-outset
`}
>
{glyph}
</div>
{/* Label */}
<span
className={`
text-retro-xs text-center leading-tight
max-w-full break-words
${selected
? 'bg-retro-select text-retro-select-text px-1'
: 'text-retro-black'
}
`}
>
{label}
</span>
</button>
)
}