LucaVivona commited on
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
- },1000);
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=' absolute top-4 right-5 z-50 cursor-default select-none text-4xl ' >
108
- <h1 title={theme ? 'Dark Mode' : 'Light Mode'} onClick={() => setTheme(!theme)} >{theme ? 'πŸŒ™' : 'β˜€οΈ'}</h1>
109
- <h1 title="Save" className=" pt-5" 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,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

  • SHA256: 78a7ead89aefe9118e9b81e411b93e5302bdb3aeca8ea3062a6c8a6a5f2dacf4
  • Pointer size: 132 Bytes
  • Size of remote file: 7.5 MB