tldraw/components/style-panel/quick-color-select.tsx

46 lines
1.6 KiB
TypeScript
Raw Normal View History

import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
2021-07-14 13:45:24 +00:00
import { DropdownMenuIconTriggerButton } from 'components/shared'
import { strokes } from 'state/shape-styles'
import state, { useSelector } from 'state'
2021-07-14 13:45:24 +00:00
import { BoxIcon, StyleDropdownItem, StyleDropdownContent } from './shared'
import { useTheme } from 'next-themes'
import { ColorStyle } from 'types'
function handleColorChange(color: ColorStyle): void {
state.send('CHANGED_STYLE', { color })
}
2021-06-21 21:35:28 +00:00
export default function QuickColorSelect(): JSX.Element {
const color = useSelector((s) => s.values.selectedStyle.color)
2021-07-10 20:39:29 +00:00
const { theme } = useTheme()
return (
<DropdownMenu.Root dir="ltr">
2021-07-14 13:45:24 +00:00
<DropdownMenuIconTriggerButton label="Color">
<BoxIcon fill={strokes[theme][color]} stroke={strokes[theme][color]} />
</DropdownMenuIconTriggerButton>
2021-07-14 15:46:00 +00:00
<DropdownMenu.Content sideOffset={8}>
2021-07-14 13:45:24 +00:00
<DropdownMenu.DropdownMenuRadioGroup
value={color}
onValueChange={handleColorChange}
2021-07-14 15:46:00 +00:00
as={StyleDropdownContent}
2021-07-14 13:45:24 +00:00
>
{Object.keys(strokes[theme]).map((colorStyle: ColorStyle) => (
<DropdownMenu.DropdownMenuRadioItem
as={StyleDropdownItem}
key={colorStyle}
title={colorStyle}
value={colorStyle}
>
<BoxIcon
fill={strokes[theme][colorStyle]}
stroke={strokes[theme][colorStyle]}
/>
</DropdownMenu.DropdownMenuRadioItem>
))}
</DropdownMenu.DropdownMenuRadioGroup>
</DropdownMenu.Content>
</DropdownMenu.Root>
)
}