Spaces:
Configuration error
Configuration error
Commit
Β·
6abfb10
1
Parent(s):
90c9c53
Tool Button π¨
Browse files
frontend/src/components/Navagation/navbar.js
CHANGED
@@ -45,7 +45,7 @@ export default class Navbar extends Component{
|
|
45 |
if(diff !== 0){
|
46 |
this.hanelTabs(menu, diff)
|
47 |
}
|
48 |
-
},
|
49 |
}catch(e){
|
50 |
console.log(e)
|
51 |
}
|
|
|
45 |
if(diff !== 0){
|
46 |
this.hanelTabs(menu, diff)
|
47 |
}
|
48 |
+
},1500);
|
49 |
}catch(e){
|
50 |
console.log(e)
|
51 |
}
|
frontend/src/components/ReactFlow/ReactFlowEnv.js
CHANGED
@@ -7,7 +7,8 @@ import ReactFlow, { Background,
|
|
7 |
import React ,{ useState, useCallback, useRef, useEffect } from 'react';
|
8 |
import Navbar from '../Navagation/navbar';
|
9 |
import { useThemeDetector } from '../../helper/visual'
|
10 |
-
|
|
|
11 |
const types = {
|
12 |
custom : CustomNodeIframe,
|
13 |
}
|
@@ -18,18 +19,16 @@ export default function ReactEnviorment() {
|
|
18 |
const [nodes, setNodes] = useState([]);
|
19 |
const [reactFlowInstance, setReactFlowInstance] = useState(null);
|
20 |
const reactFlowWrapper = useRef(null);
|
21 |
-
|
22 |
|
23 |
useEffect(() => {
|
24 |
const restore = () => {
|
25 |
const flow = JSON.parse(localStorage.getItem('flowkey'));
|
26 |
|
27 |
if(flow){
|
28 |
-
flow.nodes.map((nds) =>
|
29 |
-
nds.data.delete = deleteNode
|
30 |
-
})
|
31 |
setNodes(flow.nodes || [])
|
32 |
-
|
33 |
}
|
34 |
}
|
35 |
restore()
|
@@ -52,8 +51,8 @@ export default function ReactEnviorment() {
|
|
52 |
|
53 |
const onSave = useCallback(() => {
|
54 |
if (reactFlowInstance) {
|
55 |
-
alert("Saved")
|
56 |
const flow = reactFlowInstance.toObject();
|
|
|
57 |
localStorage.setItem('flowkey', JSON.stringify(flow));
|
58 |
var labels = [];
|
59 |
var colour = [];
|
@@ -103,12 +102,13 @@ export default function ReactEnviorment() {
|
|
103 |
[reactFlowInstance, nodes]);
|
104 |
|
105 |
return (
|
106 |
-
|
107 |
-
<div className=
|
108 |
-
<
|
109 |
-
<h1 title=
|
|
|
110 |
</div>
|
111 |
-
<div className={`flex h-screen w-screen ${theme ? "dark" : ""} transition-all`}>
|
112 |
<Navbar onDelete={deleteNodeContains} colour={JSON.parse(localStorage.getItem('colour'))} emoji={JSON.parse(localStorage.getItem('emoji'))}/>
|
113 |
<ReactFlowProvider>
|
114 |
<div className="h-screen w-screen" ref={reactFlowWrapper}>
|
@@ -118,6 +118,7 @@ export default function ReactEnviorment() {
|
|
118 |
</div>
|
119 |
</ReactFlowProvider>
|
120 |
</div>
|
121 |
-
|
122 |
);
|
123 |
}
|
|
|
|
7 |
import React ,{ useState, useCallback, useRef, useEffect } from 'react';
|
8 |
import Navbar from '../Navagation/navbar';
|
9 |
import { useThemeDetector } from '../../helper/visual'
|
10 |
+
import {CgMoreVerticalAlt} from 'react-icons/cg'
|
11 |
+
|
12 |
const types = {
|
13 |
custom : CustomNodeIframe,
|
14 |
}
|
|
|
19 |
const [nodes, setNodes] = useState([]);
|
20 |
const [reactFlowInstance, setReactFlowInstance] = useState(null);
|
21 |
const reactFlowWrapper = useRef(null);
|
22 |
+
const [tool, setTool] = useState(false)
|
23 |
|
24 |
useEffect(() => {
|
25 |
const restore = () => {
|
26 |
const flow = JSON.parse(localStorage.getItem('flowkey'));
|
27 |
|
28 |
if(flow){
|
29 |
+
flow.nodes.map((nds) => nds.data.delete = deleteNode)
|
|
|
|
|
30 |
setNodes(flow.nodes || [])
|
31 |
+
console.log(flow)
|
32 |
}
|
33 |
}
|
34 |
restore()
|
|
|
51 |
|
52 |
const onSave = useCallback(() => {
|
53 |
if (reactFlowInstance) {
|
|
|
54 |
const flow = reactFlowInstance.toObject();
|
55 |
+
alert("The current nodes have been saved into the localstorage πΎ")
|
56 |
localStorage.setItem('flowkey', JSON.stringify(flow));
|
57 |
var labels = [];
|
58 |
var colour = [];
|
|
|
102 |
[reactFlowInstance, nodes]);
|
103 |
|
104 |
return (
|
105 |
+
<div className={`${theme ? "dark" : ""}`}>
|
106 |
+
<div className={` absolute ${tool ? "h-[13rem]" : "h-[4rem]"} top-4 right-5 z-50 cursor-default select-none text-4xl bg-white dark:bg-stone-900 p-3 rounded-full border border-black dark:border-white duration-500`} >
|
107 |
+
<CgMoreVerticalAlt className={`text-black dark:text-white ${tool ? "-rotate-0" : "rotate-90"} duration-150`} onClick={() => setTool(!tool)}/>
|
108 |
+
<h1 title={theme ? 'Dark Mode' : 'Light Mode'} className={`py-2 ${tool ? "visible delay-[170ms]" : "invisible"} `} onClick={() => setTheme(!theme)} >{theme ? 'π' : 'βοΈ'}</h1>
|
109 |
+
<h1 title="Save" className={`py-2 ${tool ? "visible delay-[170ms]" : "invisible"} `} onClick={() => onSave()}>πΎ</h1>
|
110 |
</div>
|
111 |
+
<div className={`flex h-screen w-screen ${theme ? "dark" : ""} transition-all`}>
|
112 |
<Navbar onDelete={deleteNodeContains} colour={JSON.parse(localStorage.getItem('colour'))} emoji={JSON.parse(localStorage.getItem('emoji'))}/>
|
113 |
<ReactFlowProvider>
|
114 |
<div className="h-screen w-screen" ref={reactFlowWrapper}>
|
|
|
118 |
</div>
|
119 |
</ReactFlowProvider>
|
120 |
</div>
|
121 |
+
</div>
|
122 |
);
|
123 |
}
|
124 |
+
|
frontend/src/css/dist/output.css
CHANGED
@@ -583,6 +583,14 @@ video {
|
|
583 |
}
|
584 |
}
|
585 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
586 |
.absolute {
|
587 |
position: absolute;
|
588 |
}
|
@@ -724,6 +732,46 @@ video {
|
|
724 |
height: 600px;
|
725 |
}
|
726 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
727 |
.w-10 {
|
728 |
width: 2.5rem;
|
729 |
}
|
@@ -778,6 +826,30 @@ video {
|
|
778 |
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
779 |
}
|
780 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
781 |
.cursor-grab {
|
782 |
cursor: grab;
|
783 |
}
|
@@ -957,6 +1029,16 @@ video {
|
|
957 |
background-color: rgb(254 169 89 / var(--tw-bg-opacity));
|
958 |
}
|
959 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
960 |
.bg-gradient-to-bl {
|
961 |
background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
|
962 |
}
|
@@ -1157,6 +1239,10 @@ video {
|
|
1157 |
padding: 0.5rem;
|
1158 |
}
|
1159 |
|
|
|
|
|
|
|
|
|
1160 |
.px-2 {
|
1161 |
padding-left: 0.5rem;
|
1162 |
padding-right: 0.5rem;
|
@@ -1182,6 +1268,11 @@ video {
|
|
1182 |
padding-right: 1.5rem;
|
1183 |
}
|
1184 |
|
|
|
|
|
|
|
|
|
|
|
1185 |
.pt-8 {
|
1186 |
padding-top: 2rem;
|
1187 |
}
|
@@ -1327,6 +1418,22 @@ video {
|
|
1327 |
transition-duration: 150ms;
|
1328 |
}
|
1329 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1330 |
.duration-300 {
|
1331 |
transition-duration: 300ms;
|
1332 |
}
|
@@ -1335,6 +1442,10 @@ video {
|
|
1335 |
transition-duration: 500ms;
|
1336 |
}
|
1337 |
|
|
|
|
|
|
|
|
|
1338 |
.placeholder\:italic::-webkit-input-placeholder {
|
1339 |
font-style: italic;
|
1340 |
}
|
@@ -1446,6 +1557,11 @@ video {
|
|
1446 |
color: rgb(255 255 255 / var(--tw-text-opacity));
|
1447 |
}
|
1448 |
|
|
|
|
|
|
|
|
|
|
|
1449 |
@media (min-width: 640px) {
|
1450 |
.sm\:w-60 {
|
1451 |
width: 15rem;
|
|
|
583 |
}
|
584 |
}
|
585 |
|
586 |
+
.visible {
|
587 |
+
visibility: visible;
|
588 |
+
}
|
589 |
+
|
590 |
+
.invisible {
|
591 |
+
visibility: hidden;
|
592 |
+
}
|
593 |
+
|
594 |
.absolute {
|
595 |
position: absolute;
|
596 |
}
|
|
|
732 |
height: 600px;
|
733 |
}
|
734 |
|
735 |
+
.h-20 {
|
736 |
+
height: 5rem;
|
737 |
+
}
|
738 |
+
|
739 |
+
.h-12 {
|
740 |
+
height: 3rem;
|
741 |
+
}
|
742 |
+
|
743 |
+
.h-14 {
|
744 |
+
height: 3.5rem;
|
745 |
+
}
|
746 |
+
|
747 |
+
.h-16 {
|
748 |
+
height: 4rem;
|
749 |
+
}
|
750 |
+
|
751 |
+
.h-\[4\.5rem\] {
|
752 |
+
height: 4.5rem;
|
753 |
+
}
|
754 |
+
|
755 |
+
.h-60 {
|
756 |
+
height: 15rem;
|
757 |
+
}
|
758 |
+
|
759 |
+
.h-0 {
|
760 |
+
height: 0px;
|
761 |
+
}
|
762 |
+
|
763 |
+
.h-\[14rem\] {
|
764 |
+
height: 14rem;
|
765 |
+
}
|
766 |
+
|
767 |
+
.h-\[4rem\] {
|
768 |
+
height: 4rem;
|
769 |
+
}
|
770 |
+
|
771 |
+
.h-\[13rem\] {
|
772 |
+
height: 13rem;
|
773 |
+
}
|
774 |
+
|
775 |
.w-10 {
|
776 |
width: 2.5rem;
|
777 |
}
|
|
|
826 |
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
827 |
}
|
828 |
|
829 |
+
.rotate-90 {
|
830 |
+
--tw-rotate: 90deg;
|
831 |
+
-webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
832 |
+
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
833 |
+
}
|
834 |
+
|
835 |
+
.-rotate-90 {
|
836 |
+
--tw-rotate: -90deg;
|
837 |
+
-webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
838 |
+
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
839 |
+
}
|
840 |
+
|
841 |
+
.-rotate-180 {
|
842 |
+
--tw-rotate: -180deg;
|
843 |
+
-webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
844 |
+
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
845 |
+
}
|
846 |
+
|
847 |
+
.-rotate-0 {
|
848 |
+
--tw-rotate: -0deg;
|
849 |
+
-webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
850 |
+
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
851 |
+
}
|
852 |
+
|
853 |
.cursor-grab {
|
854 |
cursor: grab;
|
855 |
}
|
|
|
1029 |
background-color: rgb(254 169 89 / var(--tw-bg-opacity));
|
1030 |
}
|
1031 |
|
1032 |
+
.bg-black {
|
1033 |
+
--tw-bg-opacity: 1;
|
1034 |
+
background-color: rgb(0 0 0 / var(--tw-bg-opacity));
|
1035 |
+
}
|
1036 |
+
|
1037 |
+
.bg-stone-900 {
|
1038 |
+
--tw-bg-opacity: 1;
|
1039 |
+
background-color: rgb(28 25 23 / var(--tw-bg-opacity));
|
1040 |
+
}
|
1041 |
+
|
1042 |
.bg-gradient-to-bl {
|
1043 |
background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
|
1044 |
}
|
|
|
1239 |
padding: 0.5rem;
|
1240 |
}
|
1241 |
|
1242 |
+
.p-3 {
|
1243 |
+
padding: 0.75rem;
|
1244 |
+
}
|
1245 |
+
|
1246 |
.px-2 {
|
1247 |
padding-left: 0.5rem;
|
1248 |
padding-right: 0.5rem;
|
|
|
1268 |
padding-right: 1.5rem;
|
1269 |
}
|
1270 |
|
1271 |
+
.py-5 {
|
1272 |
+
padding-top: 1.25rem;
|
1273 |
+
padding-bottom: 1.25rem;
|
1274 |
+
}
|
1275 |
+
|
1276 |
.pt-8 {
|
1277 |
padding-top: 2rem;
|
1278 |
}
|
|
|
1418 |
transition-duration: 150ms;
|
1419 |
}
|
1420 |
|
1421 |
+
.delay-500 {
|
1422 |
+
transition-delay: 500ms;
|
1423 |
+
}
|
1424 |
+
|
1425 |
+
.delay-200 {
|
1426 |
+
transition-delay: 200ms;
|
1427 |
+
}
|
1428 |
+
|
1429 |
+
.delay-150 {
|
1430 |
+
transition-delay: 150ms;
|
1431 |
+
}
|
1432 |
+
|
1433 |
+
.delay-\[170ms\] {
|
1434 |
+
transition-delay: 170ms;
|
1435 |
+
}
|
1436 |
+
|
1437 |
.duration-300 {
|
1438 |
transition-duration: 300ms;
|
1439 |
}
|
|
|
1442 |
transition-duration: 500ms;
|
1443 |
}
|
1444 |
|
1445 |
+
.duration-150 {
|
1446 |
+
transition-duration: 150ms;
|
1447 |
+
}
|
1448 |
+
|
1449 |
.placeholder\:italic::-webkit-input-placeholder {
|
1450 |
font-style: italic;
|
1451 |
}
|
|
|
1557 |
color: rgb(255 255 255 / var(--tw-text-opacity));
|
1558 |
}
|
1559 |
|
1560 |
+
.dark .dark\:text-black {
|
1561 |
+
--tw-text-opacity: 1;
|
1562 |
+
color: rgb(0 0 0 / var(--tw-text-opacity));
|
1563 |
+
}
|
1564 |
+
|
1565 |
@media (min-width: 640px) {
|
1566 |
.sm\:w-60 {
|
1567 |
width: 15rem;
|
images/theme.gif
ADDED
![]() |
Git LFS Details
|