ToggleGroupInput.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { TablerIcon } from '../icons'
  2. import { Tooltip } from '../Tooltip'
  3. // @ts-ignore
  4. const LSUI = window.LSUI
  5. export interface ToggleGroupInputOption {
  6. value: string
  7. icon: string
  8. tooltip?: string
  9. }
  10. interface ToggleGroupInputProps extends React.HTMLAttributes<HTMLElement> {
  11. options: ToggleGroupInputOption[]
  12. value: string
  13. onValueChange: (value: string) => void
  14. }
  15. interface ToggleGroupMultipleInputProps extends React.HTMLAttributes<HTMLElement> {
  16. options: ToggleGroupInputOption[]
  17. value: string[]
  18. onValueChange: (value: string[]) => void
  19. }
  20. export function ToggleGroupInput({ options, value, onValueChange }: ToggleGroupInputProps) {
  21. return (
  22. <LSUI.ToggleGroup
  23. type="single"
  24. value={value}
  25. onValueChange={onValueChange}
  26. >
  27. {options.map(option => {
  28. return (
  29. <Tooltip content={option.tooltip} key={option.value}>
  30. <div className="inline-flex">
  31. <LSUI.ToggleGroupItem
  32. className="tl-button"
  33. value={option.value}
  34. disabled={option.value === value}
  35. >
  36. <TablerIcon name={option.icon} />
  37. </LSUI.ToggleGroupItem>
  38. </div>
  39. </Tooltip>
  40. )
  41. })}
  42. </LSUI.ToggleGroup>
  43. )
  44. }
  45. export function ToggleGroupMultipleInput({
  46. options,
  47. value,
  48. onValueChange,
  49. }: ToggleGroupMultipleInputProps) {
  50. return (
  51. <LSUI.ToggleGroup
  52. className="inline-flex"
  53. type="multiple"
  54. value={value}
  55. onValueChange={onValueChange}
  56. >
  57. {options.map(option => {
  58. return (
  59. <LSUI.ToggleGroupItem
  60. className="tl-button"
  61. key={option.value}
  62. value={option.value}
  63. >
  64. <TablerIcon name={option.icon} />
  65. </LSUI.ToggleGroupItem>
  66. )
  67. })}
  68. </LSUI.ToggleGroup>
  69. )
  70. }