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.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 styled from "styles"
  9. import StylePanel from "./style-panel/style-panel"
  10. import { useSelector } from "state"
  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. <StatusBar />
  21. <Toolbar />
  22. <LeftPanels>
  23. <CodePanel />
  24. {hasControls && <ControlsPanel />}
  25. </LeftPanels>
  26. <RightPanels>
  27. <StylePanel />
  28. </RightPanels>
  29. </Layout>
  30. )
  31. }
  32. const Layout = styled("div", {
  33. position: "fixed",
  34. top: 0,
  35. left: 0,
  36. bottom: 0,
  37. right: 0,
  38. display: "grid",
  39. gridTemplateRows: "40px 1fr 40px",
  40. gridTemplateColumns: "minmax(50%, 400px) 1fr auto",
  41. gridTemplateAreas: `
  42. "toolbar toolbar toolbar"
  43. "leftPanels main rightPanels"
  44. "statusbar statusbar statusbar"
  45. `,
  46. })
  47. const LeftPanels = styled("main", {
  48. display: "grid",
  49. gridArea: "leftPanels",
  50. gridTemplateRows: "1fr auto",
  51. padding: 8,
  52. gap: 8,
  53. })
  54. const RightPanels = styled("main", {
  55. display: "grid",
  56. gridArea: "rightPanels",
  57. gridTemplateRows: "auto",
  58. height: "fit-content",
  59. justifyContent: "flex-end",
  60. padding: 8,
  61. gap: 8,
  62. })