| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 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 styled from "styles"
import StylePanel from "./style-panel/style-panel"
import { useSelector } from "state"
export default function Editor() {
  useKeyboardEvents()
  useLoadOnMount()
  const hasControls = useSelector(
    (s) => Object.keys(s.data.codeControls).length > 0
  )
  return (
    <Layout>
      <Canvas />
      <StatusBar />
      <Toolbar />
      <LeftPanels>
        <CodePanel />
        {hasControls && <ControlsPanel />}
      </LeftPanels>
      <RightPanels>
        <StylePanel />
      </RightPanels>
    </Layout>
  )
}
const Layout = styled("div", {
  position: "fixed",
  top: 0,
  left: 0,
  bottom: 0,
  right: 0,
  display: "grid",
  gridTemplateRows: "40px 1fr 40px",
  gridTemplateColumns: "minmax(50%, 400px) 1fr auto",
  gridTemplateAreas: `
    "toolbar toolbar toolbar"
    "leftPanels main rightPanels"
    "statusbar statusbar statusbar"
  `,
})
const LeftPanels = styled("main", {
  display: "grid",
  gridArea: "leftPanels",
  gridTemplateRows: "1fr auto",
  padding: 8,
  gap: 8,
})
const RightPanels = styled("main", {
  display: "grid",
  gridArea: "rightPanels",
  gridTemplateRows: "auto",
  height: "fit-content",
  justifyContent: "flex-end",
  padding: 8,
  gap: 8,
})
 |