LucaVivona commited on
Commit
9aeb710
Β·
1 Parent(s): 5ac078a

Frontend Refactor πŸƒ

Browse files
frontend/src/components/Navagation/navbar.js CHANGED
@@ -221,11 +221,11 @@ export default class Navbar extends Component{
221
 
222
  return(<>
223
  <li key={`${item.name}-${item.port}`} onDragStart={(event) => this.onDragStart(event, 'custom', item, index)}
224
- className={` text-white text-md flex text-center items-center cursor-grab shadow-lg
225
  p-5 px-2 mt-4 rounded-md ${ this.state.open ? `hover:animate-pulse ${this.state.colour[index] === null ? "" : this.state.colour[index]} ` : `hidden`} break-all -z-20`} draggable>
226
 
227
- <span className=" absolute text-4xl opacity-70 left-[39.15%] z-10">{`${this.state.emoji[index] === null ? "" : this.state.emoji[index]}`}</span>
228
- <span className={` text-base flex-1 font-bold z-20 ${this.state.open ? "" : "hidden"}`}>{`${item.name}`}</span>
229
 
230
  </li >
231
 
 
221
 
222
  return(<>
223
  <li key={`${item.name}-${item.port}`} onDragStart={(event) => this.onDragStart(event, 'custom', item, index)}
224
+ className={` text-white text-md flex flex-col text-center items-center cursor-grab shadow-lg
225
  p-5 px-2 mt-4 rounded-md ${ this.state.open ? `hover:animate-pulse ${this.state.colour[index] === null ? "" : this.state.colour[index]} ` : `hidden`} break-all -z-20`} draggable>
226
 
227
+ <div className=" absolute -mt-2 text-4xl opacity-60 z-10 ">{`${this.state.emoji[index] === null ? "" : this.state.emoji[index]}`}</div>
228
+ <h4 className={` max-w-full font-sans text-blue-50 leading-tight font-bold text-xl flex-1 z-20 ${this.state.open ? "" : "hidden"}`} style={{"text-shadow" : "0px 1px 2px rgba(0, 0, 0, 0.25)"}} >{`${item.name}`} </h4>
229
 
230
  </li >
231
 
frontend/src/components/Nodes/Custom.js CHANGED
@@ -17,17 +17,19 @@ export default class CustomNodeIframe extends React.Component {
17
  width : 540,
18
  height : 600,
19
  size : false,
20
- iframe : 0
 
 
21
  }
22
 
23
  }
24
 
25
  handelSelected = () => {
26
- this.setState({id : this.state.id, reachable : this.state.reachable, selected : !this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size, iframe : this.state.iframe})
27
  }
28
 
29
  handelSizeState = () => {
30
- this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : !this.state.size, iframe : this.state.iframe})
31
  }
32
 
33
  isFetchable = async (host) => {
@@ -47,24 +49,34 @@ export default class CustomNodeIframe extends React.Component {
47
  }
48
 
49
  onRefresh(){
50
- if(!this.isFetchable) this.onNodeClick(this.state.data.label)
51
  else{
52
- this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size, iframe : this.state.iframe + 1})
53
  }
54
  }
55
 
56
  handelOnChange(evt, type){
57
- this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : type === "width" ? parseInt(evt.target.value) : this.state.width, height : type === "height" ? parseInt(evt.target.value) : this.state.height, size : this.state.size, iframe : this.state.iframe})
58
  type === "width" ? this.myRef.current.style.width = `${parseInt(evt.target.value)}px` : this.myRef.current.style.height = `${parseInt(evt.target.value)}px`
59
  }
60
 
61
  handelSize(evt, increment, change){
62
  if (evt === "increment") {
63
- this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : change === "width" ? this.state.width + increment : this.state.width, height : change === "height" ? this.state.height + increment : this.state.height, size : this.state.size, iframe : this.state.iframe})
64
  change === "width" ? this.myRef.current.style.width = `${this.state.width + increment}px` : this.myRef.current.style.height = `${this.state.height + increment}px`
65
  }
66
 
67
  }
 
 
 
 
 
 
 
 
 
 
68
 
69
  Counter(focus, size){
70
  return (<div className="custom-number-input h-10 w-32 dark:text-white text-black ">
@@ -81,7 +93,7 @@ export default class CustomNodeIframe extends React.Component {
81
  }
82
 
83
  render(){
84
- if (!this.state.reachable) this.onNodeClick(this.state.data.label)
85
  return (<>
86
  <>
87
  <div className=" flex w-full h-10 top-0 cursor-pointer" onClick={this.handelEvent}>
@@ -91,7 +103,7 @@ export default class CustomNodeIframe extends React.Component {
91
  <div className={` flex ${this.state.selected ? '' : 'w-0 hidden'}`}>
92
  <div title="Adjust Node Size" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Violet rounded-xl" onClick={this.handelSizeState}><TbResize className="h-full w-full text-white p-1"/></div>
93
  <a href={this.state.data.host} target="_blank" rel="noopener noreferrer"><div title="Gradio Host Site" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Pink rounded-xl"><BiCube className="h-full w-full text-white p-1"/></div></a>
94
- <div title="Delete Node" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Red rounded-xl" onClick={() => this.onNodeClick(this.state.data.label)}><BsTrash className="h-full w-full text-white p-1"/></div>
95
  <div title="Refresh Node" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Orange rounded-xl" onClick={() => this.onRefresh()}><BiRefresh className="h-full w-full text-white p-1"/></div>
96
 
97
  { this.state.size && <div className="duration-300 flex w-auto h-full mr-2 -mt-3 space-x-4">
@@ -102,8 +114,8 @@ export default class CustomNodeIframe extends React.Component {
102
 
103
  </div>
104
 
105
- <div className={`relative w-[540px] h-[600px] overflow-hidden m-0 p-0 shadow-2xl`} ref={this.myRef}>
106
- <div className={`absolute h-full w-full ${this.state.data.colour} border-1shadow-2xl shadow-black rounded-xl -z-20`}></div>
107
  <iframe
108
  id="iframe"
109
  key={this.state.iframe}
@@ -113,6 +125,12 @@ export default class CustomNodeIframe extends React.Component {
113
  className=" -z-10 container h-full p-2 flex-grow space-iframe overflow-scroll "
114
  sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"></iframe>
115
  </div>
 
 
 
 
 
 
116
  </>
117
  </>)
118
  }
 
17
  width : 540,
18
  height : 600,
19
  size : false,
20
+ iframe : 0,
21
+ initial_pos : 0,
22
+ initial_size : 0,
23
  }
24
 
25
  }
26
 
27
  handelSelected = () => {
28
+ this.setState({id : this.state.id, reachable : this.state.reachable, selected : !this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size, iframe : this.state.iframe, initial_pos : this.state.initial_pos, initial_size : this.state.initial_size})
29
  }
30
 
31
  handelSizeState = () => {
32
+ this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : !this.state.size, iframe : this.state.iframe, initial_pos : this.state.initial_pos, initial_size : this.state.initial_size})
33
  }
34
 
35
  isFetchable = async (host) => {
 
49
  }
50
 
51
  onRefresh(){
52
+ if(!this.isFetchable) this.onNodeClick(this.state.id)
53
  else{
54
+ this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size, iframe : this.state.iframe + 1, initial_pos : this.state.initial_pos, initial_size : this.state.initial_size})
55
  }
56
  }
57
 
58
  handelOnChange(evt, type){
59
+ this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : type === "width" ? parseInt(evt.target.value) : this.state.width, height : type === "height" ? parseInt(evt.target.value) : this.state.height, size : this.state.size, iframe : this.state.iframe, initial_pos : this.state.initial_pos, initial_size : this.state.initial_size})
60
  type === "width" ? this.myRef.current.style.width = `${parseInt(evt.target.value)}px` : this.myRef.current.style.height = `${parseInt(evt.target.value)}px`
61
  }
62
 
63
  handelSize(evt, increment, change){
64
  if (evt === "increment") {
65
+ this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : change === "width" ? this.state.width + increment : this.state.width, height : change === "height" ? this.state.height + increment : this.state.height, size : this.state.size, iframe : this.state.iframe, initial_pos : this.state.initial_pos, initial_size : this.state.initial_size})
66
  change === "width" ? this.myRef.current.style.width = `${this.state.width + increment}px` : this.myRef.current.style.height = `${this.state.height + increment}px`
67
  }
68
 
69
  }
70
+
71
+ // (Experimental) resize nodes by dragging
72
+ // initial = (e) => {
73
+ // this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height , size : this.state.size, iframe : this.state.iframe, initial_pos : e.clientY, initial_size : this.myRef.current.offsetHeight })
74
+ // }
75
+
76
+ // resize = (e) => {
77
+ // this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size, iframe : this.state.iframe, initial_pos : this.state.initial_pos, initial_size : this.state.initial_size})
78
+ // this.myRef.current.style.height = `${parseInt(this.state.initial_size) + parseInt(e.clientY - this.state.initial_pos)}px`
79
+ // }
80
 
81
  Counter(focus, size){
82
  return (<div className="custom-number-input h-10 w-32 dark:text-white text-black ">
 
93
  }
94
 
95
  render(){
96
+ if (!this.state.reachable) this.onNodeClick(this.state.id)
97
  return (<>
98
  <>
99
  <div className=" flex w-full h-10 top-0 cursor-pointer" onClick={this.handelEvent}>
 
103
  <div className={` flex ${this.state.selected ? '' : 'w-0 hidden'}`}>
104
  <div title="Adjust Node Size" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Violet rounded-xl" onClick={this.handelSizeState}><TbResize className="h-full w-full text-white p-1"/></div>
105
  <a href={this.state.data.host} target="_blank" rel="noopener noreferrer"><div title="Gradio Host Site" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Pink rounded-xl"><BiCube className="h-full w-full text-white p-1"/></div></a>
106
+ <div title="Delete Node" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Red rounded-xl" onClick={() => this.onNodeClick(this.state.id)}><BsTrash className="h-full w-full text-white p-1"/></div>
107
  <div title="Refresh Node" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Orange rounded-xl" onClick={() => this.onRefresh()}><BiRefresh className="h-full w-full text-white p-1"/></div>
108
 
109
  { this.state.size && <div className="duration-300 flex w-auto h-full mr-2 -mt-3 space-x-4">
 
114
 
115
  </div>
116
 
117
+ <div id="draggable" className={`relative w-[540px] h-[600px] overflow-hidden m-0 p-0 shadow-2xl`} ref={this.myRef}>
118
+ <div className={`absolute h-full w-full ${this.state.data.colour} border-1 shadow-2xl rounded-xl -z-20`}></div>
119
  <iframe
120
  id="iframe"
121
  key={this.state.iframe}
 
125
  className=" -z-10 container h-full p-2 flex-grow space-iframe overflow-scroll "
126
  sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"></iframe>
127
  </div>
128
+ {// (Experimental) Do not uncomment
129
+ /* <div className={`absolute bottom-0 w-full h-10 bg-transparent border-1 shadow-2xl rounded-xl z-10 cursor-ns-resize`}
130
+ draggable
131
+ onDragStart={(e) => { this.initial(e)}}
132
+ onDrag={(e) => { this.resize(e)}}
133
+ ></div> */}
134
  </>
135
  </>)
136
  }
frontend/src/components/ReactFlow/ReactFlowEnv.js CHANGED
@@ -38,11 +38,13 @@ export default function ReactEnviorment() {
38
  }, []);
39
 
40
  const deleteNodeContains = (id) =>{setNodes((nds) => nds.filter(n => !n.id.includes(`${id}-`) ))}
 
41
 
 
42
  const onDrop = useCallback(
43
  (event) => {
44
  event.preventDefault();
45
-
46
  const reactFlowBounds = reactFlowWrapper.current.getBoundingClientRect();
47
  const type = event.dataTransfer.getData('application/reactflow');
48
  const item = JSON.parse(event.dataTransfer.getData('application/item'));
@@ -60,7 +62,8 @@ export default function ReactEnviorment() {
60
  id: `${item.name}-${nodes.length}`,
61
  type,
62
  position,
63
- data: { label: `${item.name}`, host : `${item.host}`, colour : `${colour}`, delete : deleteNodeContains },
 
64
  };
65
  setNodes((nds) => nds.concat(newNode));
66
  },
@@ -75,7 +78,7 @@ export default function ReactEnviorment() {
75
  <Navbar onDelete={deleteNodeContains}/>
76
  <ReactFlowProvider>
77
  <div className="h-screen w-screen" ref={reactFlowWrapper}>
78
- <ReactFlow nodes={nodes} edges={edges} nodeTypes={types} onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} onNodesDelete={deleteNodeContains} onDragOver={onDragOver} onDrop={onDrop} onInit={setReactFlowInstance} fitView>
79
  <Background variant='dots' size={1} className=" bg-white dark:bg-neutral-800"/>
80
  </ReactFlow>
81
  </div>
 
38
  }, []);
39
 
40
  const deleteNodeContains = (id) =>{setNodes((nds) => nds.filter(n => !n.id.includes(`${id}-`) ))}
41
+ const deleteNode = (id) =>{setNodes((nds) => nds.filter(n => n.id !== id ))}
42
 
43
+
44
  const onDrop = useCallback(
45
  (event) => {
46
  event.preventDefault();
47
+ console.log(event.dataTransfer.getData('application/reactflow'))
48
  const reactFlowBounds = reactFlowWrapper.current.getBoundingClientRect();
49
  const type = event.dataTransfer.getData('application/reactflow');
50
  const item = JSON.parse(event.dataTransfer.getData('application/item'));
 
62
  id: `${item.name}-${nodes.length}`,
63
  type,
64
  position,
65
+ dragHandle : `#draggable`,
66
+ data: { label: `${item.name}`, host : `${item.host}`, colour : `${colour}`, delete : deleteNode },
67
  };
68
  setNodes((nds) => nds.concat(newNode));
69
  },
 
78
  <Navbar onDelete={deleteNodeContains}/>
79
  <ReactFlowProvider>
80
  <div className="h-screen w-screen" ref={reactFlowWrapper}>
81
+ <ReactFlow nodes={nodes} edges={edges} nodeTypes={types} onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} onNodesDelete={deleteNode} onDragOver={onDragOver} onDrop={onDrop} onInit={setReactFlowInstance} fitView>
82
  <Background variant='dots' size={1} className=" bg-white dark:bg-neutral-800"/>
83
  </ReactFlow>
84
  </div>
frontend/src/css/dist/output.css CHANGED
@@ -583,6 +583,10 @@ video {
583
  }
584
  }
585
 
 
 
 
 
586
  .absolute {
587
  position: absolute;
588
  }
@@ -628,6 +632,22 @@ video {
628
  right: 1.25rem;
629
  }
630
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
631
  .-z-20 {
632
  z-index: -20;
633
  }
@@ -648,6 +668,26 @@ video {
648
  z-index: 50;
649
  }
650
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
651
  .float-left {
652
  float: left;
653
  }
@@ -660,6 +700,21 @@ video {
660
  margin: 0px;
661
  }
662
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
663
  .mt-4 {
664
  margin-top: 1rem;
665
  }
@@ -684,6 +739,46 @@ video {
684
  margin-top: -0.75rem;
685
  }
686
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687
  .block {
688
  display: block;
689
  }
@@ -696,6 +791,10 @@ video {
696
  display: inline-flex;
697
  }
698
 
 
 
 
 
699
  .hidden {
700
  display: none;
701
  }
@@ -760,6 +859,10 @@ video {
760
  width: 100vw;
761
  }
762
 
 
 
 
 
763
  .flex-1 {
764
  flex: 1 1 0%;
765
  }
@@ -782,15 +885,27 @@ video {
782
  cursor: pointer;
783
  }
784
 
 
 
 
 
785
  .select-none {
786
  -webkit-user-select: none;
787
  user-select: none;
788
  }
789
 
 
 
 
 
790
  .flex-row {
791
  flex-direction: row;
792
  }
793
 
 
 
 
 
794
  .items-center {
795
  align-items: center;
796
  }
@@ -937,6 +1052,11 @@ video {
937
  background-color: rgb(254 169 89 / var(--tw-bg-opacity));
938
  }
939
 
 
 
 
 
 
940
  .bg-gradient-to-bl {
941
  background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
942
  }
@@ -1025,12 +1145,6 @@ video {
1025
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1026
  }
1027
 
1028
- .from-Entrepreneurial-Lies-Gray {
1029
- --tw-gradient-from: #8693AB;
1030
- --tw-gradient-to: rgb(134 147 171 / 0);
1031
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1032
- }
1033
-
1034
  .via-purple-500 {
1035
  --tw-gradient-to: rgb(168 85 247 / 0);
1036
  --tw-gradient-stops: var(--tw-gradient-from), #a855f7, var(--tw-gradient-to);
@@ -1123,10 +1237,6 @@ video {
1123
  --tw-gradient-to: #1565C0;
1124
  }
1125
 
1126
- .to-Entrepreneurial-Lies-Gray {
1127
- --tw-gradient-to: #8693AB;
1128
- }
1129
-
1130
  .p-5 {
1131
  padding: 1.25rem;
1132
  }
@@ -1172,6 +1282,16 @@ video {
1172
  padding-right: 1.5rem;
1173
  }
1174
 
 
 
 
 
 
 
 
 
 
 
1175
  .pt-8 {
1176
  padding-top: 2rem;
1177
  }
@@ -1204,6 +1324,10 @@ video {
1204
  padding-top: 0.5rem;
1205
  }
1206
 
 
 
 
 
1207
  .text-center {
1208
  text-align: center;
1209
  }
@@ -1237,6 +1361,11 @@ video {
1237
  line-height: 2rem;
1238
  }
1239
 
 
 
 
 
 
1240
  .font-bold {
1241
  font-weight: 700;
1242
  }
@@ -1245,6 +1374,14 @@ video {
1245
  font-weight: 600;
1246
  }
1247
 
 
 
 
 
 
 
 
 
1248
  .text-white {
1249
  --tw-text-opacity: 1;
1250
  color: rgb(255 255 255 / var(--tw-text-opacity));
@@ -1255,6 +1392,11 @@ video {
1255
  color: rgb(0 0 0 / var(--tw-text-opacity));
1256
  }
1257
 
 
 
 
 
 
1258
  .underline {
1259
  -webkit-text-decoration-line: underline;
1260
  text-decoration-line: underline;
@@ -1264,6 +1406,10 @@ video {
1264
  opacity: 0.7;
1265
  }
1266
 
 
 
 
 
1267
  .shadow-lg {
1268
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1269
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
@@ -1288,11 +1434,6 @@ video {
1288
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1289
  }
1290
 
1291
- .shadow-black {
1292
- --tw-shadow-color: #000;
1293
- --tw-shadow: var(--tw-shadow-colored);
1294
- }
1295
-
1296
  .outline-none {
1297
  outline: 2px solid transparent;
1298
  outline-offset: 2px;
@@ -1419,10 +1560,6 @@ video {
1419
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1420
  }
1421
 
1422
- .dark .dark\:to-Entrepreneurial-Lies-Gray {
1423
- --tw-gradient-to: #8693AB;
1424
- }
1425
-
1426
  .dark .dark\:to-Entrepreneurial-Lies-White {
1427
  --tw-gradient-to: #BDD4E7;
1428
  }
@@ -1433,17 +1570,51 @@ video {
1433
  }
1434
 
1435
  @media (min-width: 640px) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1436
  .sm\:w-60 {
1437
  width: 15rem;
1438
  }
1439
 
 
 
 
 
1440
  .sm\:text-sm {
1441
  font-size: 0.875rem;
1442
  line-height: 1.25rem;
1443
  }
1444
  }
1445
 
 
 
 
 
 
 
 
 
 
 
1446
  @media (min-width: 1024px) {
 
 
 
 
1447
  .lg\:w-72 {
1448
  width: 18rem;
1449
  }
 
583
  }
584
  }
585
 
586
+ .fixed {
587
+ position: fixed;
588
+ }
589
+
590
  .absolute {
591
  position: absolute;
592
  }
 
632
  right: 1.25rem;
633
  }
634
 
635
+ .left-\[50\%\] {
636
+ left: 50%;
637
+ }
638
+
639
+ .right-\[50\%\] {
640
+ right: 50%;
641
+ }
642
+
643
+ .right-\[45\%\] {
644
+ right: 45%;
645
+ }
646
+
647
+ .right-\[39\.1\%\] {
648
+ right: 39.1%;
649
+ }
650
+
651
  .-z-20 {
652
  z-index: -20;
653
  }
 
668
  z-index: 50;
669
  }
670
 
671
+ .-z-0 {
672
+ z-index: 0;
673
+ }
674
+
675
+ .z-30 {
676
+ z-index: 30;
677
+ }
678
+
679
+ .-z-40 {
680
+ z-index: -40;
681
+ }
682
+
683
+ .z-\[100\] {
684
+ z-index: 100;
685
+ }
686
+
687
+ .z-\[\] {
688
+ z-index: ;
689
+ }
690
+
691
  .float-left {
692
  float: left;
693
  }
 
700
  margin: 0px;
701
  }
702
 
703
+ .my-auto {
704
+ margin-top: auto;
705
+ margin-bottom: auto;
706
+ }
707
+
708
+ .my-5 {
709
+ margin-top: 1.25rem;
710
+ margin-bottom: 1.25rem;
711
+ }
712
+
713
+ .mx-auto {
714
+ margin-left: auto;
715
+ margin-right: auto;
716
+ }
717
+
718
  .mt-4 {
719
  margin-top: 1rem;
720
  }
 
739
  margin-top: -0.75rem;
740
  }
741
 
742
+ .-mr-6 {
743
+ margin-right: -1.5rem;
744
+ }
745
+
746
+ .mb-4 {
747
+ margin-bottom: 1rem;
748
+ }
749
+
750
+ .mb-10 {
751
+ margin-bottom: 2.5rem;
752
+ }
753
+
754
+ .mr-10 {
755
+ margin-right: 2.5rem;
756
+ }
757
+
758
+ .ml-10 {
759
+ margin-left: 2.5rem;
760
+ }
761
+
762
+ .ml-60 {
763
+ margin-left: 15rem;
764
+ }
765
+
766
+ .mb-1 {
767
+ margin-bottom: 0.25rem;
768
+ }
769
+
770
+ .mb-2 {
771
+ margin-bottom: 0.5rem;
772
+ }
773
+
774
+ .-mb-2 {
775
+ margin-bottom: -0.5rem;
776
+ }
777
+
778
+ .-mt-2 {
779
+ margin-top: -0.5rem;
780
+ }
781
+
782
  .block {
783
  display: block;
784
  }
 
791
  display: inline-flex;
792
  }
793
 
794
+ .table {
795
+ display: table;
796
+ }
797
+
798
  .hidden {
799
  display: none;
800
  }
 
859
  width: 100vw;
860
  }
861
 
862
+ .max-w-full {
863
+ max-width: 100%;
864
+ }
865
+
866
  .flex-1 {
867
  flex: 1 1 0%;
868
  }
 
885
  cursor: pointer;
886
  }
887
 
888
+ .cursor-ns-resize {
889
+ cursor: ns-resize;
890
+ }
891
+
892
  .select-none {
893
  -webkit-user-select: none;
894
  user-select: none;
895
  }
896
 
897
+ .resize {
898
+ resize: both;
899
+ }
900
+
901
  .flex-row {
902
  flex-direction: row;
903
  }
904
 
905
+ .flex-col {
906
+ flex-direction: column;
907
+ }
908
+
909
  .items-center {
910
  align-items: center;
911
  }
 
1052
  background-color: rgb(254 169 89 / var(--tw-bg-opacity));
1053
  }
1054
 
1055
+ .bg-black {
1056
+ --tw-bg-opacity: 1;
1057
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
1058
+ }
1059
+
1060
  .bg-gradient-to-bl {
1061
  background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
1062
  }
 
1145
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1146
  }
1147
 
 
 
 
 
 
 
1148
  .via-purple-500 {
1149
  --tw-gradient-to: rgb(168 85 247 / 0);
1150
  --tw-gradient-stops: var(--tw-gradient-from), #a855f7, var(--tw-gradient-to);
 
1237
  --tw-gradient-to: #1565C0;
1238
  }
1239
 
 
 
 
 
1240
  .p-5 {
1241
  padding: 1.25rem;
1242
  }
 
1282
  padding-right: 1.5rem;
1283
  }
1284
 
1285
+ .px-4 {
1286
+ padding-left: 1rem;
1287
+ padding-right: 1rem;
1288
+ }
1289
+
1290
+ .px-9 {
1291
+ padding-left: 2.25rem;
1292
+ padding-right: 2.25rem;
1293
+ }
1294
+
1295
  .pt-8 {
1296
  padding-top: 2rem;
1297
  }
 
1324
  padding-top: 0.5rem;
1325
  }
1326
 
1327
+ .pl-10 {
1328
+ padding-left: 2.5rem;
1329
+ }
1330
+
1331
  .text-center {
1332
  text-align: center;
1333
  }
 
1361
  line-height: 2rem;
1362
  }
1363
 
1364
+ .text-xl {
1365
+ font-size: 1.25rem;
1366
+ line-height: 1.75rem;
1367
+ }
1368
+
1369
  .font-bold {
1370
  font-weight: 700;
1371
  }
 
1374
  font-weight: 600;
1375
  }
1376
 
1377
+ .font-extrabold {
1378
+ font-weight: 800;
1379
+ }
1380
+
1381
+ .leading-tight {
1382
+ line-height: 1.25;
1383
+ }
1384
+
1385
  .text-white {
1386
  --tw-text-opacity: 1;
1387
  color: rgb(255 255 255 / var(--tw-text-opacity));
 
1392
  color: rgb(0 0 0 / var(--tw-text-opacity));
1393
  }
1394
 
1395
+ .text-blue-50 {
1396
+ --tw-text-opacity: 1;
1397
+ color: rgb(239 246 255 / var(--tw-text-opacity));
1398
+ }
1399
+
1400
  .underline {
1401
  -webkit-text-decoration-line: underline;
1402
  text-decoration-line: underline;
 
1406
  opacity: 0.7;
1407
  }
1408
 
1409
+ .opacity-60 {
1410
+ opacity: 0.6;
1411
+ }
1412
+
1413
  .shadow-lg {
1414
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1415
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
 
1434
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1435
  }
1436
 
 
 
 
 
 
1437
  .outline-none {
1438
  outline: 2px solid transparent;
1439
  outline-offset: 2px;
 
1560
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1561
  }
1562
 
 
 
 
 
1563
  .dark .dark\:to-Entrepreneurial-Lies-White {
1564
  --tw-gradient-to: #BDD4E7;
1565
  }
 
1570
  }
1571
 
1572
  @media (min-width: 640px) {
1573
+ .sm\:left-\[38\.5\%\] {
1574
+ left: 38.5%;
1575
+ }
1576
+
1577
+ .sm\:left-\[50\%\] {
1578
+ left: 50%;
1579
+ }
1580
+
1581
+ .sm\:left-\[70\%\] {
1582
+ left: 70%;
1583
+ }
1584
+
1585
+ .sm\:right-\[\%\] {
1586
+ right: %;
1587
+ }
1588
+
1589
  .sm\:w-60 {
1590
  width: 15rem;
1591
  }
1592
 
1593
+ .sm\:pl-5 {
1594
+ padding-left: 1.25rem;
1595
+ }
1596
+
1597
  .sm\:text-sm {
1598
  font-size: 0.875rem;
1599
  line-height: 1.25rem;
1600
  }
1601
  }
1602
 
1603
+ @media (min-width: 768px) {
1604
+ .md\:left-\[39\.15\%\] {
1605
+ left: 39.15%;
1606
+ }
1607
+
1608
+ .md\:right-\[\%\] {
1609
+ right: %;
1610
+ }
1611
+ }
1612
+
1613
  @media (min-width: 1024px) {
1614
+ .lg\:left-\[40\%\] {
1615
+ left: 40%;
1616
+ }
1617
+
1618
  .lg\:w-72 {
1619
  width: 18rem;
1620
  }