Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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