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.

editor.tsx 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import useKeyboardEvents from 'hooks/useKeyboardEvents'
  2. import useLoadOnMount from 'hooks/useLoadOnMount'
  3. import Canvas from './canvas/canvas'
  4. import StatusBar from './status-bar'
  5. import Toolbar from './toolbar'
  6. import CodePanel from './code-panel/code-panel'
  7. import ControlsPanel from './controls-panel/controls-panel'
  8. import ToolsPanel from './tools-panel/tools-panel'
  9. import StylePanel from './style-panel/style-panel'
  10. import { useSelector } from 'state'
  11. import styled from 'styles'
  12. export default function Editor() {
  13. useKeyboardEvents()
  14. useLoadOnMount()
  15. const hasControls = useSelector(
  16. (s) => Object.keys(s.data.codeControls).length > 0
  17. )
  18. return (
  19. <Layout>
  20. <Canvas />
  21. <LeftPanels>
  22. <CodePanel />
  23. {hasControls && <ControlsPanel />}
  24. </LeftPanels>
  25. <RightPanels>
  26. <StylePanel />
  27. </RightPanels>
  28. <ToolsPanel />
  29. <StatusBar />
  30. </Layout>
  31. )
  32. }
  33. const Layout = styled('div', {
  34. position: 'fixed',
  35. top: 0,
  36. left: 0,
  37. bottom: 0,
  38. right: 0,
  39. height: '100%',
  40. width: '100%',
  41. display: 'grid',
  42. gridTemplateRows: '1fr auto 144px',
  43. gridTemplateColumns: 'minmax(0, 720px) 1fr auto',
  44. gridTemplateAreas: `
  45. "leftPanels main rightPanels"
  46. "tools tools tools"
  47. "statusbar statusbar statusbar"
  48. `,
  49. })
  50. const LeftPanels = styled('main', {
  51. display: 'grid',
  52. gridArea: 'leftPanels',
  53. gridTemplateRows: '1fr auto',
  54. padding: 8,
  55. gap: 8,
  56. })
  57. const RightPanels = styled('main', {
  58. gridArea: 'rightPanels',
  59. padding: 8,
  60. // display: 'grid',
  61. // gridTemplateRows: 'auto',
  62. // height: 'fit-content',
  63. // justifyContent: 'flex-end',
  64. // gap: 8,
  65. })