Spaces:
Running
Running
import React from 'react' | |
interface ExampleVariantSelectorProps { | |
variantKeys: string[] | |
selectedVariant: string | |
setSelectedVariant: (v: string) => void | |
} | |
const ExampleVariantSelector: React.FC<ExampleVariantSelectorProps> = ({ | |
variantKeys, | |
selectedVariant, | |
setSelectedVariant, | |
}) => { | |
// Keyboard shortcut for variant switching (keys 1-N) | |
React.useEffect(() => { | |
const handler = (e: KeyboardEvent) => { | |
if (document.activeElement && (document.activeElement as HTMLElement).tagName === 'INPUT') | |
return | |
const idx = parseInt(e.key, 10) | |
if (!isNaN(idx) && idx > 0 && idx <= variantKeys.length) { | |
setSelectedVariant(variantKeys[idx - 1]) | |
} | |
} | |
window.addEventListener('keydown', handler) | |
return () => window.removeEventListener('keydown', handler) | |
}, [variantKeys, setSelectedVariant]) | |
return ( | |
<fieldset className="fieldset w-full p-4 rounded border border-gray-700 bg-base-200 "> | |
<legend className="fieldset-legend font-semibold">Variants</legend> | |
<div className="mb-2 flex gap-4 flex-wrap"> | |
{variantKeys.map((variant, idx) => ( | |
<label key={variant} className="flex items-center gap-1 cursor-pointer"> | |
<input | |
type="radio" | |
name={`variant-selector`} | |
value={variant} | |
checked={selectedVariant === variant} | |
onChange={() => setSelectedVariant(variant)} | |
/> | |
<span className="text-xs font-semibold"> | |
{variant} <span className="opacity-60">[{idx + 1}]</span> | |
</span> | |
</label> | |
))} | |
</div> | |
</fieldset> | |
) | |
} | |
export default ExampleVariantSelector | |