a tool for shared writing and social publishing
at refactor/pub-settings 32 lines 846 B view raw
1import { type ReactNode } from "react"; 2 3export function ToggleGroup<T extends string>(props: { 4 value: T; 5 onChange: (value: T) => void; 6 options: { value: T; label: ReactNode }[]; 7 className?: string; 8 optionClassName?: string; 9}) { 10 return ( 11 <div 12 className={`flex gap-1 p-1 bg-accent-1 rounded-lg text-sm ${props.className || ""}`} 13 > 14 {props.options.map((option) => ( 15 <button 16 key={option.value} 17 type="button" 18 className={`px-1 rounded-md ${ 19 props.value === option.value 20 ? "bg-accent-2 font-bold text-accent-1" 21 : "bg-transparent text-accent-2" 22 } 23 ${props.optionClassName} 24 `} 25 onClick={() => props.onChange(option.value)} 26 > 27 {option.label} 28 </button> 29 ))} 30 </div> 31 ); 32}