File size: 1,146 Bytes
4002561
78dd858
 
 
 
 
 
 
 
 
4002561
 
 
78dd858
 
 
4002561
78dd858
 
 
 
4002561
78dd858
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { useId, type SelectHTMLAttributes } from 'react'

interface Props extends SelectHTMLAttributes<HTMLSelectElement> {
  /** Optional label rendered above the select */
  label?: string
  /** Options: array of {value, label} */
  options: { value: string; label: string }[]
}

export default function RetroSelect({ label, options, className = '', ...rest }: Props) {
  const generatedId = useId()
  const selectId = rest.id ?? generatedId

  return (
    <div className="flex flex-col gap-[2px]">
      {label && (
        <label htmlFor={selectId} className="text-retro-xs font-retro font-medium text-retro-black">
          {label}
        </label>
      )}
      <select
        id={selectId}
        className={`
          px-2 py-[3px]
          text-retro-sm font-retro
          bg-retro-white text-retro-black
          border border-retro-black
          shadow-retro-well
          cursor-pointer
          ${className}
        `}
        {...rest}
      >
        {options.map((opt) => (
          <option key={opt.value} value={opt.value}>
            {opt.label}
          </option>
        ))}
      </select>
    </div>
  )
}