Skip to content

Commit d2ee60d

Browse files
Merge pull request #6 from crumblepie/rain/code-editor
Rain/code editor
2 parents 6dbf139 + 3d0731e commit d2ee60d

28 files changed

+1620
-113
lines changed

package-lock.json

+1,231
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+8-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"dev": "NODE_ENV=development webpack server --open & nodemon server/server.js",
1111
"edev": "NODE_ENV=development webpack server & electron .",
1212
"dev-all": "concurrently \"cross-env NODE_ENV=development webpack server\" \"BROWSER=none npm start\" \"wait-on http://localhost:3000 && electron .\"",
13-
"start-app": "webpack serve --hot --mode development"
13+
"start-app": "webpack serve --hot --mode development",
14+
"start-dev": "cross-env NODE_ENV=development webpack serve --hot --host 0.0.0.0 --config=./webpack.dev.config.js --mode development"
1415
},
1516
"keywords": [],
1617
"author": "",
@@ -19,10 +20,12 @@
1920
"@babel/core": "^7.16.7",
2021
"@babel/preset-env": "^7.16.8",
2122
"@babel/preset-react": "^7.16.7",
23+
"@fortawesome/fontawesome-svg-core": "^1.2.36",
2224
"@hot-loader/react-dom": "^17.0.2",
2325
"@monaco-editor/react": "^4.3.1",
2426
"@types/react": "^17.0.38",
2527
"@types/react-dom": "^17.0.11",
28+
"autoprefixer": "^10.4.2",
2629
"babel-jest": "^27.4.6",
2730
"babel-loader": "^8.2.3",
2831
"concurrently": "^7.0.0",
@@ -32,15 +35,18 @@
3235
"electron-reloader": "^1.2.1",
3336
"eslint": "^8.7.0",
3437
"eslint-plugin-react": "^7.28.0",
38+
"file-loader": "^6.2.0",
3539
"html-webpack-plugin": "^5.5.0",
3640
"jest": "^27.4.7",
3741
"monaco-editor": "^0.31.1",
3842
"nodemon": "^2.0.15",
43+
"postcss": "^8.4.5",
3944
"prettier": "^2.5.1",
4045
"react": "^17.0.2",
4146
"react-dom": "^17.0.2",
4247
"react-spinners": "^0.11.0",
4348
"style-loader": "^3.3.1",
49+
"tailwindcss": "^3.0.15",
4450
"ts-loader": "^9.2.6",
4551
"typescript": "^4.5.4",
4652
"wait-on": "^6.0.0",
@@ -50,6 +56,7 @@
5056
"xterm": "^4.16.0"
5157
},
5258
"dependencies": {
59+
"@themesberg/flowbite": "^1.3.0",
5360
"@uiw/react-monacoeditor": "^3.4.7",
5461
"ace-builds": "^1.4.13",
5562
"monaco-editor-webpack-plugin": "^7.0.1",

postcss.config.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = {
2+
plugins: {
3+
tailwindcss: {},
4+
autoprefixer: {},
5+
},
6+
}

src/App.js

+2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import * as ReactDOM from 'react-dom';
33
import Header from './components/Header';
44
import Body from './components/Body';
55
import './stylesheets/App.css'
6+
import './stylesheets/index.css';
67
// import { hot } from 'react-hot-loader/root';
8+
import '@themesberg/flowbite';
79

810
const App = () => {
911

src/components/Canvas.jsx

+5-24
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,15 @@
11
import * as React from "react";
22
import '../stylesheets/Canvas.css';
3+
import CanvasItem from './CanvasItem';
34

45
const Canvas = () => {
56
return (
67
<div className="canvas">
7-
{/* Canvas
8-
<p>Canvas</p>
9-
<br/>
10-
<br/>
8+
<p id='canvas-instruction'>Drag & Drop <br/> HTML elements here</p>
119

12-
<br/>
13-
<button id='purple-electric-violet'>VIOLET</button>
14-
<button id='purple-900'>900</button>
15-
<button id='purple-700'>700</button>
16-
<button id='purple-600'>600</button>
17-
<button id='purple-500'>500</button>
18-
<button id='purple-400'>400</button>
19-
<button id='purple-300'>300</button>
20-
<button id='purple-200'>200</button>
21-
<button id='button-error'>ERROR</button>
22-
23-
<br/>
24-
<div className='green-palette-container'>
25-
<button id='green-500'>500</button>
26-
<button id='green-400'>400</button>
27-
<button id='green-300'>300</button>
28-
<button id='green-200'>200</button>
29-
<button id='green-100'>100</button>
30-
</div> */}
31-
</div>
10+
<CanvasItem />
11+
</div>
12+
3213
)
3314
}
3415

src/components/CanvasItem.jsx

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import React from "react";
2+
import DeleteCanvasItem from './DeleteCanvasItem';
3+
4+
const CanvasItem = ({ canvasItem, deleteCanvasItem }) => {
5+
6+
return (
7+
<div className="container mx-auto px-2 md:px-4 mb-8 md:mb-4">
8+
<div className="flex items-center justify-around p-2 md:p-4 shadow-md rounded-lg relative">
9+
<div className="w-1/3 text-center">
10+
{/* <h3>{canvasItem.name}</h3> */}
11+
</div>
12+
13+
<div
14+
className="absolute top-0 right-0 col-span-1"
15+
16+
// onClick={(e) => {
17+
// e.preventDefault();
18+
// deleteCoin(canvasItem.id);
19+
// }}
20+
>
21+
<DeleteCanvasItem />
22+
</div>
23+
</div>
24+
</div>
25+
26+
);
27+
};
28+
29+
export default CanvasItem;

src/components/CodePreview.jsx

+29-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import ReactDOM from "react-dom";
33
import '../stylesheets/CodePreview.css';
44
//import MonacoEditor from 'react-monaco-editor';
55
import Editor from "@monaco-editor/react";
6-
// import { ClockLoader as Loader } from "react-spinners";
76
import AceEditor from 'react-ace';
87
import "ace-builds/src-noconflict/mode-javascript";
98
import "ace-builds/src-noconflict/theme-monokai";
@@ -12,16 +11,14 @@ import "ace-builds/src-noconflict/theme-github";
1211

1312
const CodePreview = () => {
1413

14+
const [theme, setTheme] = useState("dark");
1515
const [tabState, setTabState] = useState(1);
1616

1717
const toggleTab = (tabNum) => {
1818
setTabState(tabNum);
1919
}
2020

21-
22-
const [theme, setTheme] = useState("dark");
23-
24-
function toggleTheme() {
21+
const toggleTheme = () => {
2522
// if (theme === 'dark') setTheme('monokai');
2623
// setTheme('github');
2724
setTheme(theme === "dark" ? "monokai" : "github");
@@ -41,8 +38,27 @@ const CodePreview = () => {
4138

4239

4340
return (
44-
41+
4542
<div className="codePreviewContainer">
43+
44+
<div class="mb-4 border-b border-gray-200 dark:border-gray-700">
45+
<ul class="flex flex-wrap -mb-px" id="myTab" data-tabs-toggle="#myTabContent" role="tablist">
46+
47+
<li class="mr-2" role="presentation">
48+
<button class="inline-block py-4 px-4 text-sm font-medium text-center text-gray-500 rounded-t-lg border-b-2 border-transparent hover:text-gray-600 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300" id="code-editor-tab" data-tabs-target="#code-editor" type="button" role="tab" aria-controls="code-editor" aria-selected="false">Code Preview</button>
49+
</li>
50+
51+
<li class="mr-2" role="presentation">
52+
<button class="inline-block py-4 px-4 text-sm font-medium text-center text-gray-500 rounded-t-lg border-b-2 border-transparent hover:text-gray-600 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300 active" id="dashboard-tab" data-tabs-target="#dashboard" type="button" role="tab" aria-controls="dashboard" aria-selected="true">Terminal</button>
53+
</li>
54+
55+
<li class="mr-2" role="presentation">
56+
<button class="inline-block py-4 px-4 text-sm font-medium text-center text-gray-500 rounded-t-lg border-b-2 border-transparent hover:text-gray-600 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300" id="settings-tab" data-tabs-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">CSS Editor</button>
57+
</li>
58+
59+
</ul>
60+
</div>
61+
4662
<div className="tabContainer">
4763
<button
4864
className={tabState === 1 ? "tabs active-tabs" : "tabs"}
@@ -56,6 +72,9 @@ const CodePreview = () => {
5672
</div>
5773
<div className="contentContainer">
5874
<div className={tabState === 1 ? "content active-content" : "content"}><div className="codeEditorContainer">
75+
76+
77+
5978
{/* <Editor
6079
height="80vh"
6180
defaultLanguage="javascript"
@@ -109,7 +128,9 @@ const CodePreview = () => {
109128
</div>
110129
</div>
111130
<div className={tabState === 2 ? "content active-content" : "content"}>
112-
</div>
131+
</div>
132+
133+
113134
<div className={tabState === 3 ? "content active-content" : "content"}><div className="codeEditorContainer">
114135
<Editor
115136
height="80vh"
@@ -125,6 +146,7 @@ const CodePreview = () => {
125146
wordWrap: "on",
126147
}}
127148
/>
149+
128150
</div></div>
129151
</div>
130152
{/* <div className='code-compiler'>

src/components/CompCreator.jsx

+12-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import '../stylesheets/CompCreator.css';
44
const CompCreator = () => {
55
return (
66
<div id='comp-create-box'>
7-
<p id='create-react-component-header'>Add a React Component</p>
7+
<p id='create-react-component-header'>React Component</p>
88
<form>
99
<div id='inputs'>
1010
<input id='text-field' placeholder='Component Name...'></input>
@@ -13,10 +13,19 @@ const CompCreator = () => {
1313
<input type='checkbox' name="check"></input>
1414
</span>
1515
</div>
16-
<button id='add-react-component-button' type='submit'>Add</button>
16+
17+
{/* <button id='add-react-component-button' type='submit'>Add</button> */}
18+
<button class="block text-white bg-indigo-700 hover:bg-indigo-800 font-medium rounded-lg text-sm px-4 py-2 text-center dark:bg-indigo-600 dark:hover:bg-indigo-700 dark:focus:ring-indigo-800" type="button" data-modal-toggle="popup-modal">
19+
ADD
20+
</button>
21+
1722
</form>
1823
</div>
1924
)
2025
}
2126

22-
export default CompCreator;
27+
export default CompCreator;
28+
29+
{/* <button class="block text-white bg-indigo-700 hover:bg-indigo-800 font-medium rounded-lg text-sm px-4 py-2 text-center dark:bg-indigo-600 dark:hover:bg-indigo-700 dark:focus:ring-indigo-800" type="button" data-modal-toggle="popup-modal">
30+
Clear Canvas
31+
</button> */}

src/components/DeleteCanvasItem.jsx

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import React from "react";
2+
3+
const DeleteCanvasItem = () => {
4+
return (
5+
<svg
6+
className="fill-current text-gray-500 hover:text-indigo-600 inline-block h-4 w-4 cursor-pointer"
7+
xmlns="http://www.w3.org/2000/svg"
8+
viewBox="0 0 20 20"
9+
>
10+
<path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zM11.4 10l2.83-2.83-1.41-1.41L10 8.59 7.17 5.76 5.76 7.17 8.59 10l-2.83 2.83 1.41 1.41L10 11.41l2.83 2.83 1.41-1.41L11.41 10z" />
11+
</svg>
12+
);
13+
};
14+
15+
export default DeleteCanvasItem;

src/components/DnD.jsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import DragList from './DragList';
77
const DnD = () => {
88
return (
99
<div className="dndContainer">
10-
<button id='explorer'>File Explorer</button>
10+
{/* <button id='explorer'>File Explorer</button> */}
1111
<div id="dndBody">
12-
Drag & Drop
12+
<p style={{ fontSize: '20px', marginBottom: '30px', fontWeight: '700' }}>App Name</p>
1313
<CompCreator />
1414
<TagCreator />
1515
<DragList />

src/components/Header.jsx

+36-4
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,46 @@ const Header = () => {
66

77
return (
88
<div className='headerContainer'>
9-
<span id='app-name'>APP NAME</span>
9+
{/* <span id='app-name'>APP NAME</span> */}
1010

1111
<input type="checkbox" className="checkbox" id="checkbox" onChange={()=> themeToggle()}/>
12-
<label for="checkbox" className="label">
13-
<i className="fas fa-moon"></i>
14-
<i className='fas fa-sun'></i>
12+
<label for="checkbox" className="label">
13+
{/* <i className="fas fa-moon"></i>
14+
<i className='fas fa-sun'></i> */}
1515
<div className='ball'></div>
1616
</label>
17+
18+
{/* <!-- Modal toggle --> */}
19+
<button class="block text-white bg-indigo-700 hover:bg-indigo-800 font-medium rounded-lg text-sm px-4 py-2 text-center dark:bg-indigo-600 dark:hover:bg-indigo-700 dark:focus:ring-indigo-800" type="button" data-modal-toggle="popup-modal">
20+
Clear Canvas
21+
</button>
22+
23+
{/* <!-- Delete HTML or React Component Modal --> */}
24+
<div class="hidden overflow-y-auto overflow-x-hidden fixed right-0 left-0 top-4 z-50 justify-center items-center md:inset-0 h-modal sm:h-full" id="popup-modal">
25+
<div class="relative px-4 w-full max-w-md h-full md:h-auto">
26+
27+
{/* <!-- Modal content --> */}
28+
<div class="relative bg-white rounded-lg shadow dark:bg-gray-700">
29+
30+
{/* <!-- Modal header --> */}
31+
<div class="flex justify-end p-2">
32+
<button type="button" class="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-800 dark:hover:text-white" data-modal-toggle="popup-modal">
33+
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg>
34+
</button>
35+
</div>
36+
37+
{/* <!-- Modal body --> */}
38+
<div class="p-6 pt-0 text-center">
39+
<svg class="mx-auto mb-4 w-14 h-14 text-gray-400 dark:text-gray-200" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
40+
<h3 class="mb-5 text-lg font-normal text-gray-500 dark:text-gray-400">Are you sure you want to delete this item?</h3>
41+
<button data-modal-toggle="popup-modal" type="button" class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center mr-2">
42+
Yes, I'm sure
43+
</button>
44+
<button data-modal-toggle="popup-modal" type="button" class="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:ring-gray-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600">No, cancel</button>
45+
</div>
46+
</div>
47+
</div>
48+
</div>
1749

1850
</div>
1951

src/components/TagCreator.jsx

+8-5
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,24 @@ import '../stylesheets/TagCreator.css';
44
const TagCreator = () => {
55
return (
66
<div>
7-
<label id="header">Add Custom HTML Element</label>
7+
<label id="header">Custom HTML Element</label>
88
<div id="tag-create-box">
99
<div className='tag-duo'>
10-
<label className="tag-label">Tag:</label>
10+
<label className="tag-label">Tag</label>
1111
<input className="tag-input"></input>
1212
</div>
1313
<div className='tag-duo' >
14-
<label className="tag-label">Class:</label>
14+
<label className="tag-label">Class</label>
1515
<input className="tag-input"></input>
1616
</div>
1717
<div className='tag-duo'>
18-
<label className="tag-label">Id:</label>
18+
<label className="tag-label">Id</label>
1919
<input className="tag-input"></input>
2020
</div>
21-
<button id="add-element-btn">Add</button>
21+
{/* <button id="add-element-btn">Add</button> */}
22+
<button class="block text-white bg-indigo-700 hover:bg-indigo-800 font-medium rounded-lg text-sm px-4 py-2 text-center dark:bg-indigo-600 dark:hover:bg-indigo-700 dark:focus:ring-indigo-800" type="button" data-modal-toggle="popup-modal">
23+
ADD
24+
</button>
2225
</div>
2326
</div>
2427
)

0 commit comments

Comments
 (0)