123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- import {
- CircleIcon,
- CursorArrowIcon,
- DividerHorizontalIcon,
- DotIcon,
- LineHeightIcon,
- LockClosedIcon,
- LockOpen1Icon,
- Pencil1Icon,
- Pencil2Icon,
- SewingPinIcon,
- SquareIcon,
- } from '@radix-ui/react-icons'
- import { IconButton } from 'components/shared'
- import React from 'react'
- import state, { useSelector } from 'state'
- import styled from 'styles'
- import { ShapeType } from 'types'
- import UndoRedo from './undo-redo'
- import Zoom from './zoom'
-
- const selectSelectTool = () => state.send('SELECTED_SELECT_TOOL')
- const selectDrawTool = () => state.send('SELECTED_DRAW_TOOL')
- const selectDotTool = () => state.send('SELECTED_DOT_TOOL')
- const selectCircleTool = () => state.send('SELECTED_CIRCLE_TOOL')
- const selectEllipseTool = () => state.send('SELECTED_ELLIPSE_TOOL')
- const selectRayTool = () => state.send('SELECTED_RAY_TOOL')
- const selectLineTool = () => state.send('SELECTED_LINE_TOOL')
- const selectPolylineTool = () => state.send('SELECTED_POLYLINE_TOOL')
- const selectRectangleTool = () => state.send('SELECTED_RECTANGLE_TOOL')
- const selectToolLock = () => state.send('TOGGLED_TOOL_LOCK')
-
- export default function ToolsPanel() {
- const activeTool = useSelector((state) =>
- state.whenIn({
- selecting: 'select',
- dot: ShapeType.Dot,
- circle: ShapeType.Circle,
- ellipse: ShapeType.Ellipse,
- ray: ShapeType.Ray,
- line: ShapeType.Line,
- polyline: ShapeType.Polyline,
- rectangle: ShapeType.Rectangle,
- draw: ShapeType.Draw,
- })
- )
-
- const isToolLocked = useSelector((s) => s.data.settings.isToolLocked)
-
- const isPenLocked = useSelector((s) => s.data.settings.isPenLocked)
-
- return (
- <OuterContainer>
- <Zoom />
- <Flex>
- <Container>
- <IconButton
- name="select"
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectSelectTool}
- isActive={activeTool === 'select'}
- >
- <CursorArrowIcon />
- </IconButton>
- </Container>
- <Container>
- <IconButton
- name={ShapeType.Draw}
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectDrawTool}
- isActive={activeTool === ShapeType.Draw}
- >
- <Pencil1Icon />
- </IconButton>
- <IconButton
- name={ShapeType.Rectangle}
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectRectangleTool}
- isActive={activeTool === ShapeType.Rectangle}
- >
- <SquareIcon />
- </IconButton>
- <IconButton
- name={ShapeType.Circle}
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectCircleTool}
- isActive={activeTool === ShapeType.Circle}
- >
- <CircleIcon />
- </IconButton>
- <IconButton
- name={ShapeType.Ellipse}
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectEllipseTool}
- isActive={activeTool === ShapeType.Ellipse}
- >
- <CircleIcon transform="rotate(-45) scale(1, .8)" />
- </IconButton>
- <IconButton
- name={ShapeType.Line}
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectLineTool}
- isActive={activeTool === ShapeType.Line}
- >
- <DividerHorizontalIcon transform="rotate(-45)" />
- </IconButton>
- <IconButton
- name={ShapeType.Ray}
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectRayTool}
- isActive={activeTool === ShapeType.Ray}
- >
- <SewingPinIcon transform="rotate(-135)" />
- </IconButton>
- <IconButton
- name={ShapeType.Dot}
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectDotTool}
- isActive={activeTool === ShapeType.Dot}
- >
- <DotIcon />
- </IconButton>
- </Container>
- <Container>
- <IconButton
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectToolLock}
- >
- {isToolLocked ? <LockClosedIcon /> : <LockOpen1Icon />}
- </IconButton>
- {isPenLocked && (
- <IconButton
- size={{ '@sm': 'small', '@md': 'large' }}
- onClick={selectToolLock}
- >
- <Pencil2Icon />
- </IconButton>
- )}
- </Container>
- </Flex>
- <UndoRedo />
- </OuterContainer>
- )
- }
-
- const OuterContainer = styled('div', {
- position: 'fixed',
- bottom: 40,
- left: 0,
- right: 0,
- padding: '0 8px 12px 8px',
- width: '100%',
- display: 'flex',
- alignItems: 'center',
- justifyContent: 'center',
- flexWrap: 'wrap',
- gap: 16,
- zIndex: 200,
- })
-
- const Flex = styled('div', {
- display: 'flex',
- '& > *:nth-child(n+2)': {
- marginLeft: 16,
- },
- })
-
- const Container = styled('div', {
- position: 'relative',
- backgroundColor: '$panel',
- borderRadius: '4px',
- overflow: 'hidden',
- border: '1px solid $border',
- pointerEvents: 'all',
- userSelect: 'none',
- height: '100%',
- display: 'flex',
- padding: 4,
-
- '& svg': {
- strokeWidth: 0,
- },
- })
|