You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

quick-color-select.tsx 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
  2. import { DropdownMenuIconTriggerButton } from 'components/shared'
  3. import { strokes } from 'state/shape-styles'
  4. import state, { useSelector } from 'state'
  5. import { BoxIcon, StyleDropdownItem, StyleDropdownContent } from './shared'
  6. import { useTheme } from 'next-themes'
  7. import { ColorStyle } from 'types'
  8. function handleColorChange(color: ColorStyle): void {
  9. state.send('CHANGED_STYLE', { color })
  10. }
  11. export default function QuickColorSelect(): JSX.Element {
  12. const color = useSelector((s) => s.values.selectedStyle.color)
  13. const { theme } = useTheme()
  14. return (
  15. <DropdownMenu.Root dir="ltr">
  16. <DropdownMenuIconTriggerButton label="Color">
  17. <BoxIcon fill={strokes[theme][color]} stroke={strokes[theme][color]} />
  18. </DropdownMenuIconTriggerButton>
  19. <DropdownMenu.Content sideOffset={8}>
  20. <DropdownMenu.DropdownMenuRadioGroup
  21. value={color}
  22. onValueChange={handleColorChange}
  23. as={StyleDropdownContent}
  24. >
  25. {Object.keys(strokes[theme]).map((colorStyle: ColorStyle) => (
  26. <DropdownMenu.DropdownMenuRadioItem
  27. as={StyleDropdownItem}
  28. key={colorStyle}
  29. title={colorStyle}
  30. value={colorStyle}
  31. >
  32. <BoxIcon
  33. fill={strokes[theme][colorStyle]}
  34. stroke={strokes[theme][colorStyle]}
  35. />
  36. </DropdownMenu.DropdownMenuRadioItem>
  37. ))}
  38. </DropdownMenu.DropdownMenuRadioGroup>
  39. </DropdownMenu.Content>
  40. </DropdownMenu.Root>
  41. )
  42. }