diff --git a/src/components/Panel.tsx b/src/components/Panel.tsx new file mode 100644 index 000000000..4ecbe3fbb --- /dev/null +++ b/src/components/Panel.tsx @@ -0,0 +1,30 @@ +import React, { useState } from "react"; + +interface PanelProps { + title: string; + defaultCollapsed?: boolean; +} + +export const Panel: React.FC = ({ + title, + children, + defaultCollapsed = false +}) => { + const [collapsed, setCollapsed] = useState(defaultCollapsed); + return ( +
+

{title}

+ + {!collapsed &&
{children}
} +
+ ); +}; diff --git a/src/components/panels/PanelCanvas.tsx b/src/components/panels/PanelCanvas.tsx index f647e63c4..3cff5d3cd 100644 --- a/src/components/panels/PanelCanvas.tsx +++ b/src/components/panels/PanelCanvas.tsx @@ -1,6 +1,7 @@ import React from "react"; import { ColorPicker } from "../ColorPicker"; +import { Panel } from "../Panel"; interface PanelCanvasProps { viewBackgroundColor: string; @@ -14,8 +15,7 @@ export const PanelCanvas: React.FC = ({ onClearCanvas }) => { return ( - <> -

Canvas

+
Canvas Background Color
= ({ Clear canvas
- +
); }; diff --git a/src/components/panels/PanelExport.tsx b/src/components/panels/PanelExport.tsx index 9c36aba2e..81bee94ca 100644 --- a/src/components/panels/PanelExport.tsx +++ b/src/components/panels/PanelExport.tsx @@ -1,5 +1,6 @@ import React from "react"; import { EditableText } from "../EditableText"; +import { Panel } from "../Panel"; interface PanelExportProps { projectName: string; @@ -21,8 +22,7 @@ export const PanelExport: React.FC = ({ onExportAsPNG }) => { return ( - <> -

Export

+
Name
{projectName && ( @@ -47,6 +47,6 @@ export const PanelExport: React.FC = ({
- +
); }; diff --git a/src/components/panels/PanelSelection.tsx b/src/components/panels/PanelSelection.tsx index 57eb3e56b..26acaeaab 100644 --- a/src/components/panels/PanelSelection.tsx +++ b/src/components/panels/PanelSelection.tsx @@ -1,4 +1,5 @@ import React from "react"; +import { Panel } from "../Panel"; interface PanelSelectionProps { onBringForward: React.MouseEventHandler; @@ -14,8 +15,7 @@ export const PanelSelection: React.FC = ({ onSendToBack }) => { return ( - <> -

Selection

+
- +
); }; diff --git a/src/components/panels/PanelTools.tsx b/src/components/panels/PanelTools.tsx index b6345a08c..4ab9db1a7 100644 --- a/src/components/panels/PanelTools.tsx +++ b/src/components/panels/PanelTools.tsx @@ -2,6 +2,7 @@ import React from "react"; import { SHAPES } from "../../shapes"; import { capitalizeString } from "../../utils"; +import { Panel } from "../Panel"; interface PanelToolsProps { activeTool: string; @@ -13,8 +14,7 @@ export const PanelTools: React.FC = ({ onToolChange }) => { return ( - <> -

Shapes

+
{SHAPES.map(({ value, icon }) => ( ))}
- +
); }; diff --git a/src/index.tsx b/src/index.tsx index 45905f0ac..691ac16f0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -43,6 +43,7 @@ import { PanelSelection } from "./components/panels/PanelSelection"; import { PanelColor } from "./components/panels/PanelColor"; import { PanelExport } from "./components/panels/PanelExport"; import { PanelCanvas } from "./components/panels/PanelCanvas"; +import { Panel } from "./components/Panel"; const { elements } = createScene(); const { history } = createHistory(); @@ -381,7 +382,7 @@ class App extends React.Component<{}, AppState> { }} /> {someElementIsSelected(elements) && ( -
+ { -
+ )}