ToggleGroupInput.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import * as ToggleGroup from '@radix-ui/react-toggle-group'
  2. import { TablerIcon } from '../icons'
  3. export interface ToggleGroupInputOption {
  4. value: string
  5. icon: string
  6. }
  7. interface ToggleGroupInputProps extends React.HTMLAttributes<HTMLElement> {
  8. options: ToggleGroupInputOption[]
  9. value: string
  10. onValueChange: (value: string) => void
  11. }
  12. interface ToggleGroupMultipleInputProps extends React.HTMLAttributes<HTMLElement> {
  13. options: ToggleGroupInputOption[]
  14. value: string[]
  15. onValueChange: (value: string[]) => void
  16. }
  17. export function ToggleGroupInput({ options, value, onValueChange }: ToggleGroupInputProps) {
  18. return (
  19. <ToggleGroup.Root
  20. className="tl-toggle-group-input"
  21. type="single"
  22. value={value}
  23. onValueChange={onValueChange}
  24. >
  25. {options.map(option => {
  26. return (
  27. <ToggleGroup.Item
  28. className="tl-toggle-group-input-button"
  29. key={option.value}
  30. value={option.value}
  31. disabled={option.value === value}
  32. >
  33. <TablerIcon name={option.icon} />
  34. </ToggleGroup.Item>
  35. )
  36. })}
  37. </ToggleGroup.Root>
  38. )
  39. }
  40. export function ToggleGroupMultipleInput({
  41. options,
  42. value,
  43. onValueChange,
  44. }: ToggleGroupMultipleInputProps) {
  45. return (
  46. <ToggleGroup.Root
  47. className="tl-toggle-group-input"
  48. type="multiple"
  49. value={value}
  50. onValueChange={onValueChange}
  51. >
  52. {options.map(option => {
  53. return (
  54. <ToggleGroup.Item
  55. className="tl-toggle-group-input-button"
  56. key={option.value}
  57. value={option.value}
  58. >
  59. <TablerIcon name={option.icon} />
  60. </ToggleGroup.Item>
  61. )
  62. })}
  63. </ToggleGroup.Root>
  64. )
  65. }