tldraw/components/editor.tsx

70 lines
1.6 KiB
TypeScript
Raw Normal View History

import useKeyboardEvents from 'hooks/useKeyboardEvents'
import useLoadOnMount from 'hooks/useLoadOnMount'
import Canvas from './canvas/canvas'
import StatusBar from './status-bar'
import Toolbar from './toolbar'
import CodePanel from './code-panel/code-panel'
import ControlsPanel from './controls-panel/controls-panel'
import ToolsPanel from './tools-panel/tools-panel'
import StylePanel from './style-panel/style-panel'
import { useSelector } from 'state'
import styled from 'styles'
2021-05-09 13:04:42 +00:00
export default function Editor() {
2021-05-12 11:27:33 +00:00
useKeyboardEvents()
useLoadOnMount()
2021-05-12 11:27:33 +00:00
2021-05-26 21:47:46 +00:00
const hasControls = useSelector(
(s) => Object.keys(s.data.codeControls).length > 0
)
2021-05-09 13:04:42 +00:00
return (
2021-05-17 10:01:11 +00:00
<Layout>
<Canvas />
2021-05-17 10:01:11 +00:00
<LeftPanels>
<CodePanel />
2021-05-26 21:47:46 +00:00
{hasControls && <ControlsPanel />}
2021-05-17 10:01:11 +00:00
</LeftPanels>
2021-05-26 10:34:10 +00:00
<RightPanels>
<StylePanel />
</RightPanels>
<ToolsPanel />
<StatusBar />
2021-05-17 10:01:11 +00:00
</Layout>
2021-05-09 13:04:42 +00:00
)
}
2021-05-17 10:01:11 +00:00
const Layout = styled('div', {
position: 'fixed',
2021-05-17 10:01:11 +00:00
top: 0,
left: 0,
bottom: 0,
right: 0,
display: 'grid',
2021-05-29 14:06:23 +00:00
gridTemplateRows: '1fr auto 40px',
gridTemplateColumns: 'minmax(50%, 400px) 1fr auto',
2021-05-17 10:01:11 +00:00
gridTemplateAreas: `
2021-05-26 10:34:10 +00:00
"leftPanels main rightPanels"
"tools tools tools"
2021-05-26 10:34:10 +00:00
"statusbar statusbar statusbar"
2021-05-17 10:01:11 +00:00
`,
})
const LeftPanels = styled('main', {
display: 'grid',
gridArea: 'leftPanels',
gridTemplateRows: '1fr auto',
2021-05-17 10:01:11 +00:00
padding: 8,
gap: 8,
})
2021-05-26 10:34:10 +00:00
const RightPanels = styled('main', {
display: 'grid',
gridArea: 'rightPanels',
gridTemplateRows: 'auto',
height: 'fit-content',
justifyContent: 'flex-end',
2021-05-26 10:34:10 +00:00
padding: 8,
gap: 8,
})