LucaVivona commited on
Commit
a53f3f6
β€’
1 Parent(s): 3bef579

Refactor Frontend/Backend πŸ‘¨β€πŸ’»

Browse files
backend/src/demo/demo.py CHANGED
@@ -3,7 +3,7 @@ import sys
3
 
4
  sys.path.insert(0, "../")
5
  from resources import GradioModule, register, InterLauncher, tabularGradio
6
- from example.examples import Pictionary
7
 
8
  import gradio as gr
9
 
@@ -42,5 +42,9 @@ elif args.examples == "load":
42
  demo = gr.Interface.load("models/EleutherAI/gpt-neo-1.3B", description=description, examples=examples)
43
  InterLauncher("Demo", demo) if args.listen == None else InterLauncher("Demo", demo, listen=args.listen)
44
 
 
 
 
 
45
  else:
46
  Pictionary("../example/data/labels.txt", "../example/data/pytorch_model.bin").launch(live=True) if args.listen == None else Pictionary("../example/data/labels.txt", "../example/data/pytorch_model.bin").launch(live=True, listen=args.listen)
 
3
 
4
  sys.path.insert(0, "../")
5
  from resources import GradioModule, register, InterLauncher, tabularGradio
6
+ from example.examples import Pictionary, FSD, stock_forecast
7
 
8
  import gradio as gr
9
 
 
42
  demo = gr.Interface.load("models/EleutherAI/gpt-neo-1.3B", description=description, examples=examples)
43
  InterLauncher("Demo", demo) if args.listen == None else InterLauncher("Demo", demo, listen=args.listen)
44
 
45
+ elif args.examples == "FSD": FSD().launch() if args.listen == None else FSD().launch(listen=args.listen)
46
+
47
+ elif args.examples == "Stonk" : stock_forecast().launch() if args.listen == None else stock_forecast().launch(listen=args.listen)
48
+
49
  else:
50
  Pictionary("../example/data/labels.txt", "../example/data/pytorch_model.bin").launch(live=True) if args.listen == None else Pictionary("../example/data/labels.txt", "../example/data/pytorch_model.bin").launch(live=True, listen=args.listen)
frontend/package-lock.json CHANGED
@@ -11,6 +11,10 @@
11
  "@testing-library/jest-dom": "^5.16.4",
12
  "@testing-library/react": "^13.3.0",
13
  "@testing-library/user-event": "^13.5.0",
 
 
 
 
14
  "axios": "^0.27.2",
15
  "react": "^18.2.0",
16
  "react-dom": "^18.2.0",
@@ -19,6 +23,7 @@
19
  "react-scripts": "5.0.1",
20
  "semantic-ui-css": "^2.4.1",
21
  "semantic-ui-react": "^2.1.3",
 
22
  "web-vitals": "^2.1.4"
23
  },
24
  "devDependencies": {
@@ -2489,6 +2494,25 @@
2489
  "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
2490
  }
2491
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2492
  "node_modules/@jest/fake-timers": {
2493
  "version": "27.5.1",
2494
  "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz",
@@ -2634,11 +2658,11 @@
2634
  }
2635
  },
2636
  "node_modules/@jest/schemas": {
2637
- "version": "28.0.2",
2638
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz",
2639
- "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==",
2640
  "dependencies": {
2641
- "@sinclair/typebox": "^0.23.3"
2642
  },
2643
  "engines": {
2644
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
@@ -3121,9 +3145,9 @@
3121
  }
3122
  },
3123
  "node_modules/@sinclair/typebox": {
3124
- "version": "0.23.5",
3125
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz",
3126
- "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg=="
3127
  },
3128
  "node_modules/@sinonjs/commons": {
3129
  "version": "1.8.3",
@@ -3750,14 +3774,38 @@
3750
  }
3751
  },
3752
  "node_modules/@types/jest": {
3753
- "version": "28.1.3",
3754
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.3.tgz",
3755
- "integrity": "sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw==",
3756
  "dependencies": {
3757
- "jest-matcher-utils": "^28.0.0",
3758
  "pretty-format": "^28.0.0"
3759
  }
3760
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3761
  "node_modules/@types/jest/node_modules/ansi-styles": {
3762
  "version": "4.3.0",
3763
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -3811,6 +3859,21 @@
3811
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3812
  }
3813
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3814
  "node_modules/@types/jest/node_modules/has-flag": {
3815
  "version": "4.0.0",
3816
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3820,14 +3883,14 @@
3820
  }
3821
  },
3822
  "node_modules/@types/jest/node_modules/jest-diff": {
3823
- "version": "28.1.1",
3824
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz",
3825
- "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==",
3826
  "dependencies": {
3827
  "chalk": "^4.0.0",
3828
  "diff-sequences": "^28.1.1",
3829
  "jest-get-type": "^28.0.2",
3830
- "pretty-format": "^28.1.1"
3831
  },
3832
  "engines": {
3833
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
@@ -3842,25 +3905,60 @@
3842
  }
3843
  },
3844
  "node_modules/@types/jest/node_modules/jest-matcher-utils": {
3845
- "version": "28.1.1",
3846
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz",
3847
- "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==",
3848
  "dependencies": {
3849
  "chalk": "^4.0.0",
3850
- "jest-diff": "^28.1.1",
3851
  "jest-get-type": "^28.0.2",
3852
- "pretty-format": "^28.1.1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3853
  },
3854
  "engines": {
3855
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3856
  }
3857
  },
3858
  "node_modules/@types/jest/node_modules/pretty-format": {
3859
- "version": "28.1.1",
3860
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz",
3861
- "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==",
3862
  "dependencies": {
3863
- "@jest/schemas": "^28.0.2",
3864
  "ansi-regex": "^5.0.1",
3865
  "ansi-styles": "^5.0.0",
3866
  "react-is": "^18.0.0"
@@ -3912,9 +4010,9 @@
3912
  "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
3913
  },
3914
  "node_modules/@types/node": {
3915
- "version": "18.0.0",
3916
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz",
3917
- "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA=="
3918
  },
3919
  "node_modules/@types/parse-json": {
3920
  "version": "4.0.0",
@@ -3947,9 +4045,9 @@
3947
  "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
3948
  },
3949
  "node_modules/@types/react": {
3950
- "version": "18.0.14",
3951
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz",
3952
- "integrity": "sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==",
3953
  "dependencies": {
3954
  "@types/prop-types": "*",
3955
  "@types/scheduler": "*",
@@ -3957,9 +4055,9 @@
3957
  }
3958
  },
3959
  "node_modules/@types/react-dom": {
3960
- "version": "18.0.5",
3961
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz",
3962
- "integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==",
3963
  "dependencies": {
3964
  "@types/react": "*"
3965
  }
@@ -15848,10 +15946,9 @@
15848
  }
15849
  },
15850
  "node_modules/typescript": {
15851
- "version": "4.7.4",
15852
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
15853
- "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
15854
- "peer": true,
15855
  "bin": {
15856
  "tsc": "bin/tsc",
15857
  "tsserver": "bin/tsserver"
@@ -18637,6 +18734,21 @@
18637
  "jest-mock": "^27.5.1"
18638
  }
18639
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18640
  "@jest/fake-timers": {
18641
  "version": "27.5.1",
18642
  "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz",
@@ -18743,11 +18855,11 @@
18743
  }
18744
  },
18745
  "@jest/schemas": {
18746
- "version": "28.0.2",
18747
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz",
18748
- "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==",
18749
  "requires": {
18750
- "@sinclair/typebox": "^0.23.3"
18751
  }
18752
  },
18753
  "@jest/source-map": {
@@ -19084,9 +19196,9 @@
19084
  }
19085
  },
19086
  "@sinclair/typebox": {
19087
- "version": "0.23.5",
19088
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz",
19089
- "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg=="
19090
  },
19091
  "@sinonjs/commons": {
19092
  "version": "1.8.3",
@@ -19546,14 +19658,35 @@
19546
  }
19547
  },
19548
  "@types/jest": {
19549
- "version": "28.1.3",
19550
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.3.tgz",
19551
- "integrity": "sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw==",
19552
  "requires": {
19553
- "jest-matcher-utils": "^28.0.0",
19554
  "pretty-format": "^28.0.0"
19555
  },
19556
  "dependencies": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19557
  "ansi-styles": {
19558
  "version": "4.3.0",
19559
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -19589,20 +19722,32 @@
19589
  "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz",
19590
  "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw=="
19591
  },
 
 
 
 
 
 
 
 
 
 
 
 
19592
  "has-flag": {
19593
  "version": "4.0.0",
19594
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
19595
  "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
19596
  },
19597
  "jest-diff": {
19598
- "version": "28.1.1",
19599
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz",
19600
- "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==",
19601
  "requires": {
19602
  "chalk": "^4.0.0",
19603
  "diff-sequences": "^28.1.1",
19604
  "jest-get-type": "^28.0.2",
19605
- "pretty-format": "^28.1.1"
19606
  }
19607
  },
19608
  "jest-get-type": {
@@ -19611,22 +19756,51 @@
19611
  "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA=="
19612
  },
19613
  "jest-matcher-utils": {
19614
- "version": "28.1.1",
19615
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz",
19616
- "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==",
19617
  "requires": {
19618
  "chalk": "^4.0.0",
19619
- "jest-diff": "^28.1.1",
19620
  "jest-get-type": "^28.0.2",
19621
- "pretty-format": "^28.1.1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19622
  }
19623
  },
19624
  "pretty-format": {
19625
- "version": "28.1.1",
19626
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz",
19627
- "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==",
19628
  "requires": {
19629
- "@jest/schemas": "^28.0.2",
19630
  "ansi-regex": "^5.0.1",
19631
  "ansi-styles": "^5.0.0",
19632
  "react-is": "^18.0.0"
@@ -19670,9 +19844,9 @@
19670
  "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
19671
  },
19672
  "@types/node": {
19673
- "version": "18.0.0",
19674
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz",
19675
- "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA=="
19676
  },
19677
  "@types/parse-json": {
19678
  "version": "4.0.0",
@@ -19705,9 +19879,9 @@
19705
  "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
19706
  },
19707
  "@types/react": {
19708
- "version": "18.0.14",
19709
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz",
19710
- "integrity": "sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==",
19711
  "requires": {
19712
  "@types/prop-types": "*",
19713
  "@types/scheduler": "*",
@@ -19715,9 +19889,9 @@
19715
  }
19716
  },
19717
  "@types/react-dom": {
19718
- "version": "18.0.5",
19719
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz",
19720
- "integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==",
19721
  "requires": {
19722
  "@types/react": "*"
19723
  }
@@ -28217,10 +28391,9 @@
28217
  }
28218
  },
28219
  "typescript": {
28220
- "version": "4.7.4",
28221
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
28222
- "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
28223
- "peer": true
28224
  },
28225
  "unbox-primitive": {
28226
  "version": "1.0.2",
 
11
  "@testing-library/jest-dom": "^5.16.4",
12
  "@testing-library/react": "^13.3.0",
13
  "@testing-library/user-event": "^13.5.0",
14
+ "@types/jest": "^28.1.8",
15
+ "@types/node": "^18.7.13",
16
+ "@types/react": "^18.0.17",
17
+ "@types/react-dom": "^18.0.6",
18
  "axios": "^0.27.2",
19
  "react": "^18.2.0",
20
  "react-dom": "^18.2.0",
 
23
  "react-scripts": "5.0.1",
24
  "semantic-ui-css": "^2.4.1",
25
  "semantic-ui-react": "^2.1.3",
26
+ "typescript": "^4.8.2",
27
  "web-vitals": "^2.1.4"
28
  },
29
  "devDependencies": {
 
2494
  "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
2495
  }
2496
  },
2497
+ "node_modules/@jest/expect-utils": {
2498
+ "version": "28.1.3",
2499
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz",
2500
+ "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==",
2501
+ "dependencies": {
2502
+ "jest-get-type": "^28.0.2"
2503
+ },
2504
+ "engines": {
2505
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
2506
+ }
2507
+ },
2508
+ "node_modules/@jest/expect-utils/node_modules/jest-get-type": {
2509
+ "version": "28.0.2",
2510
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz",
2511
+ "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==",
2512
+ "engines": {
2513
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
2514
+ }
2515
+ },
2516
  "node_modules/@jest/fake-timers": {
2517
  "version": "27.5.1",
2518
  "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz",
 
2658
  }
2659
  },
2660
  "node_modules/@jest/schemas": {
2661
+ "version": "28.1.3",
2662
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz",
2663
+ "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==",
2664
  "dependencies": {
2665
+ "@sinclair/typebox": "^0.24.1"
2666
  },
2667
  "engines": {
2668
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
 
3145
  }
3146
  },
3147
  "node_modules/@sinclair/typebox": {
3148
+ "version": "0.24.28",
3149
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz",
3150
+ "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow=="
3151
  },
3152
  "node_modules/@sinonjs/commons": {
3153
  "version": "1.8.3",
 
3774
  }
3775
  },
3776
  "node_modules/@types/jest": {
3777
+ "version": "28.1.8",
3778
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz",
3779
+ "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==",
3780
  "dependencies": {
3781
+ "expect": "^28.0.0",
3782
  "pretty-format": "^28.0.0"
3783
  }
3784
  },
3785
+ "node_modules/@types/jest/node_modules/@jest/types": {
3786
+ "version": "28.1.3",
3787
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz",
3788
+ "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==",
3789
+ "dependencies": {
3790
+ "@jest/schemas": "^28.1.3",
3791
+ "@types/istanbul-lib-coverage": "^2.0.0",
3792
+ "@types/istanbul-reports": "^3.0.0",
3793
+ "@types/node": "*",
3794
+ "@types/yargs": "^17.0.8",
3795
+ "chalk": "^4.0.0"
3796
+ },
3797
+ "engines": {
3798
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3799
+ }
3800
+ },
3801
+ "node_modules/@types/jest/node_modules/@types/yargs": {
3802
+ "version": "17.0.11",
3803
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz",
3804
+ "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==",
3805
+ "dependencies": {
3806
+ "@types/yargs-parser": "*"
3807
+ }
3808
+ },
3809
  "node_modules/@types/jest/node_modules/ansi-styles": {
3810
  "version": "4.3.0",
3811
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 
3859
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3860
  }
3861
  },
3862
+ "node_modules/@types/jest/node_modules/expect": {
3863
+ "version": "28.1.3",
3864
+ "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz",
3865
+ "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==",
3866
+ "dependencies": {
3867
+ "@jest/expect-utils": "^28.1.3",
3868
+ "jest-get-type": "^28.0.2",
3869
+ "jest-matcher-utils": "^28.1.3",
3870
+ "jest-message-util": "^28.1.3",
3871
+ "jest-util": "^28.1.3"
3872
+ },
3873
+ "engines": {
3874
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3875
+ }
3876
+ },
3877
  "node_modules/@types/jest/node_modules/has-flag": {
3878
  "version": "4.0.0",
3879
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 
3883
  }
3884
  },
3885
  "node_modules/@types/jest/node_modules/jest-diff": {
3886
+ "version": "28.1.3",
3887
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz",
3888
+ "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==",
3889
  "dependencies": {
3890
  "chalk": "^4.0.0",
3891
  "diff-sequences": "^28.1.1",
3892
  "jest-get-type": "^28.0.2",
3893
+ "pretty-format": "^28.1.3"
3894
  },
3895
  "engines": {
3896
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
 
3905
  }
3906
  },
3907
  "node_modules/@types/jest/node_modules/jest-matcher-utils": {
3908
+ "version": "28.1.3",
3909
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz",
3910
+ "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==",
3911
  "dependencies": {
3912
  "chalk": "^4.0.0",
3913
+ "jest-diff": "^28.1.3",
3914
  "jest-get-type": "^28.0.2",
3915
+ "pretty-format": "^28.1.3"
3916
+ },
3917
+ "engines": {
3918
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3919
+ }
3920
+ },
3921
+ "node_modules/@types/jest/node_modules/jest-message-util": {
3922
+ "version": "28.1.3",
3923
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz",
3924
+ "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
3925
+ "dependencies": {
3926
+ "@babel/code-frame": "^7.12.13",
3927
+ "@jest/types": "^28.1.3",
3928
+ "@types/stack-utils": "^2.0.0",
3929
+ "chalk": "^4.0.0",
3930
+ "graceful-fs": "^4.2.9",
3931
+ "micromatch": "^4.0.4",
3932
+ "pretty-format": "^28.1.3",
3933
+ "slash": "^3.0.0",
3934
+ "stack-utils": "^2.0.3"
3935
+ },
3936
+ "engines": {
3937
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3938
+ }
3939
+ },
3940
+ "node_modules/@types/jest/node_modules/jest-util": {
3941
+ "version": "28.1.3",
3942
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
3943
+ "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
3944
+ "dependencies": {
3945
+ "@jest/types": "^28.1.3",
3946
+ "@types/node": "*",
3947
+ "chalk": "^4.0.0",
3948
+ "ci-info": "^3.2.0",
3949
+ "graceful-fs": "^4.2.9",
3950
+ "picomatch": "^2.2.3"
3951
  },
3952
  "engines": {
3953
  "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
3954
  }
3955
  },
3956
  "node_modules/@types/jest/node_modules/pretty-format": {
3957
+ "version": "28.1.3",
3958
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
3959
+ "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==",
3960
  "dependencies": {
3961
+ "@jest/schemas": "^28.1.3",
3962
  "ansi-regex": "^5.0.1",
3963
  "ansi-styles": "^5.0.0",
3964
  "react-is": "^18.0.0"
 
4010
  "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
4011
  },
4012
  "node_modules/@types/node": {
4013
+ "version": "18.7.13",
4014
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz",
4015
+ "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw=="
4016
  },
4017
  "node_modules/@types/parse-json": {
4018
  "version": "4.0.0",
 
4045
  "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
4046
  },
4047
  "node_modules/@types/react": {
4048
+ "version": "18.0.17",
4049
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz",
4050
+ "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==",
4051
  "dependencies": {
4052
  "@types/prop-types": "*",
4053
  "@types/scheduler": "*",
 
4055
  }
4056
  },
4057
  "node_modules/@types/react-dom": {
4058
+ "version": "18.0.6",
4059
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
4060
+ "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
4061
  "dependencies": {
4062
  "@types/react": "*"
4063
  }
 
15946
  }
15947
  },
15948
  "node_modules/typescript": {
15949
+ "version": "4.8.2",
15950
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
15951
+ "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==",
 
15952
  "bin": {
15953
  "tsc": "bin/tsc",
15954
  "tsserver": "bin/tsserver"
 
18734
  "jest-mock": "^27.5.1"
18735
  }
18736
  },
18737
+ "@jest/expect-utils": {
18738
+ "version": "28.1.3",
18739
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz",
18740
+ "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==",
18741
+ "requires": {
18742
+ "jest-get-type": "^28.0.2"
18743
+ },
18744
+ "dependencies": {
18745
+ "jest-get-type": {
18746
+ "version": "28.0.2",
18747
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz",
18748
+ "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA=="
18749
+ }
18750
+ }
18751
+ },
18752
  "@jest/fake-timers": {
18753
  "version": "27.5.1",
18754
  "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz",
 
18855
  }
18856
  },
18857
  "@jest/schemas": {
18858
+ "version": "28.1.3",
18859
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz",
18860
+ "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==",
18861
  "requires": {
18862
+ "@sinclair/typebox": "^0.24.1"
18863
  }
18864
  },
18865
  "@jest/source-map": {
 
19196
  }
19197
  },
19198
  "@sinclair/typebox": {
19199
+ "version": "0.24.28",
19200
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz",
19201
+ "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow=="
19202
  },
19203
  "@sinonjs/commons": {
19204
  "version": "1.8.3",
 
19658
  }
19659
  },
19660
  "@types/jest": {
19661
+ "version": "28.1.8",
19662
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz",
19663
+ "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==",
19664
  "requires": {
19665
+ "expect": "^28.0.0",
19666
  "pretty-format": "^28.0.0"
19667
  },
19668
  "dependencies": {
19669
+ "@jest/types": {
19670
+ "version": "28.1.3",
19671
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz",
19672
+ "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==",
19673
+ "requires": {
19674
+ "@jest/schemas": "^28.1.3",
19675
+ "@types/istanbul-lib-coverage": "^2.0.0",
19676
+ "@types/istanbul-reports": "^3.0.0",
19677
+ "@types/node": "*",
19678
+ "@types/yargs": "^17.0.8",
19679
+ "chalk": "^4.0.0"
19680
+ }
19681
+ },
19682
+ "@types/yargs": {
19683
+ "version": "17.0.11",
19684
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz",
19685
+ "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==",
19686
+ "requires": {
19687
+ "@types/yargs-parser": "*"
19688
+ }
19689
+ },
19690
  "ansi-styles": {
19691
  "version": "4.3.0",
19692
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 
19722
  "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz",
19723
  "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw=="
19724
  },
19725
+ "expect": {
19726
+ "version": "28.1.3",
19727
+ "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz",
19728
+ "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==",
19729
+ "requires": {
19730
+ "@jest/expect-utils": "^28.1.3",
19731
+ "jest-get-type": "^28.0.2",
19732
+ "jest-matcher-utils": "^28.1.3",
19733
+ "jest-message-util": "^28.1.3",
19734
+ "jest-util": "^28.1.3"
19735
+ }
19736
+ },
19737
  "has-flag": {
19738
  "version": "4.0.0",
19739
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
19740
  "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
19741
  },
19742
  "jest-diff": {
19743
+ "version": "28.1.3",
19744
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz",
19745
+ "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==",
19746
  "requires": {
19747
  "chalk": "^4.0.0",
19748
  "diff-sequences": "^28.1.1",
19749
  "jest-get-type": "^28.0.2",
19750
+ "pretty-format": "^28.1.3"
19751
  }
19752
  },
19753
  "jest-get-type": {
 
19756
  "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA=="
19757
  },
19758
  "jest-matcher-utils": {
19759
+ "version": "28.1.3",
19760
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz",
19761
+ "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==",
19762
  "requires": {
19763
  "chalk": "^4.0.0",
19764
+ "jest-diff": "^28.1.3",
19765
  "jest-get-type": "^28.0.2",
19766
+ "pretty-format": "^28.1.3"
19767
+ }
19768
+ },
19769
+ "jest-message-util": {
19770
+ "version": "28.1.3",
19771
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz",
19772
+ "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
19773
+ "requires": {
19774
+ "@babel/code-frame": "^7.12.13",
19775
+ "@jest/types": "^28.1.3",
19776
+ "@types/stack-utils": "^2.0.0",
19777
+ "chalk": "^4.0.0",
19778
+ "graceful-fs": "^4.2.9",
19779
+ "micromatch": "^4.0.4",
19780
+ "pretty-format": "^28.1.3",
19781
+ "slash": "^3.0.0",
19782
+ "stack-utils": "^2.0.3"
19783
+ }
19784
+ },
19785
+ "jest-util": {
19786
+ "version": "28.1.3",
19787
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
19788
+ "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
19789
+ "requires": {
19790
+ "@jest/types": "^28.1.3",
19791
+ "@types/node": "*",
19792
+ "chalk": "^4.0.0",
19793
+ "ci-info": "^3.2.0",
19794
+ "graceful-fs": "^4.2.9",
19795
+ "picomatch": "^2.2.3"
19796
  }
19797
  },
19798
  "pretty-format": {
19799
+ "version": "28.1.3",
19800
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
19801
+ "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==",
19802
  "requires": {
19803
+ "@jest/schemas": "^28.1.3",
19804
  "ansi-regex": "^5.0.1",
19805
  "ansi-styles": "^5.0.0",
19806
  "react-is": "^18.0.0"
 
19844
  "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
19845
  },
19846
  "@types/node": {
19847
+ "version": "18.7.13",
19848
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz",
19849
+ "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw=="
19850
  },
19851
  "@types/parse-json": {
19852
  "version": "4.0.0",
 
19879
  "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
19880
  },
19881
  "@types/react": {
19882
+ "version": "18.0.17",
19883
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz",
19884
+ "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==",
19885
  "requires": {
19886
  "@types/prop-types": "*",
19887
  "@types/scheduler": "*",
 
19889
  }
19890
  },
19891
  "@types/react-dom": {
19892
+ "version": "18.0.6",
19893
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
19894
+ "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
19895
  "requires": {
19896
  "@types/react": "*"
19897
  }
 
28391
  }
28392
  },
28393
  "typescript": {
28394
+ "version": "4.8.2",
28395
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
28396
+ "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw=="
 
28397
  },
28398
  "unbox-primitive": {
28399
  "version": "1.0.2",
frontend/package.json CHANGED
@@ -6,6 +6,10 @@
6
  "@testing-library/jest-dom": "^5.16.4",
7
  "@testing-library/react": "^13.3.0",
8
  "@testing-library/user-event": "^13.5.0",
 
 
 
 
9
  "axios": "^0.27.2",
10
  "react": "^18.2.0",
11
  "react-dom": "^18.2.0",
@@ -14,6 +18,7 @@
14
  "react-scripts": "5.0.1",
15
  "semantic-ui-css": "^2.4.1",
16
  "semantic-ui-react": "^2.1.3",
 
17
  "web-vitals": "^2.1.4"
18
  },
19
  "scripts": {
 
6
  "@testing-library/jest-dom": "^5.16.4",
7
  "@testing-library/react": "^13.3.0",
8
  "@testing-library/user-event": "^13.5.0",
9
+ "@types/jest": "^28.1.8",
10
+ "@types/node": "^18.7.13",
11
+ "@types/react": "^18.0.17",
12
+ "@types/react-dom": "^18.0.6",
13
  "axios": "^0.27.2",
14
  "react": "^18.2.0",
15
  "react-dom": "^18.2.0",
 
18
  "react-scripts": "5.0.1",
19
  "semantic-ui-css": "^2.4.1",
20
  "semantic-ui-react": "^2.1.3",
21
+ "typescript": "^4.8.2",
22
  "web-vitals": "^2.1.4"
23
  },
24
  "scripts": {
frontend/src/Components/Navagation/navbar.js CHANGED
@@ -10,18 +10,19 @@ export default class Navbar extends Component{
10
  super()
11
  this.fetch_classes()
12
  this.temp_host = 0
 
 
 
 
 
 
 
 
 
 
13
  }
14
 
15
- state = {open : true,
16
- menu : [],
17
- colour : [],
18
- text : "",
19
- name : "",
20
- emoji : [],
21
- mode : false,
22
- modal : false,
23
- error : false
24
- }
25
 
26
  async fetch_classes(){
27
  try {
@@ -167,10 +168,6 @@ export default class Navbar extends Component{
167
 
168
  subComponents(item, index){
169
 
170
-
171
- if (this.state.colour.length === 0 || this.state.emoji.length === 0){
172
- this.hanelTabs()
173
- }
174
  return(<>
175
  <li key={`${item.name}-${item.port}`} onDragStart={(event) => this.onDragStart(event, 'custom', item, index)}
176
  className={` text-white text-md flex text-center items-center cursor-pointer shadow-lg
@@ -217,7 +214,7 @@ export default class Navbar extends Component{
217
  <BsSearch className="block float-left cursor-pointer mr-2"/>
218
  </span>
219
  <input className={`placeholder:italic placeholder:text-slate-400 block bg-transparent w-full border border-slate-300 border-dashed rounded-md py-2 pl-9 ${this.state.open ? "pr-3" : "hidden"} shadow-sm focus:outline-none focus:border-sky-500 focus:ring-sky-500 focus:ring-1 sm:text-sm`}
220
- placeholder={`stream localhost...`}
221
  type="text" name="search"
222
  onChange={(e) => {
223
  this.updateText(e, "text")
@@ -232,7 +229,7 @@ export default class Navbar extends Component{
232
  <Icon className="block float-left cursor-pointer mr-2" name="address card"/>
233
  </span>
234
  <input className={`placeholder:italic placeholder:text-slate-400 block bg-transparent w-full border border-slate-300 border-dashed rounded-md py-2 pl-9 ${this.state.open ? "pr-3" : "hidden"} shadow-sm focus:outline-none focus:border-sky-500 focus:ring-sky-500 focus:ring-1 sm:text-sm`}
235
- placeholder={`Name...` }
236
  type="text" name="search"
237
  onChange={(e) => {
238
  this.updateText(e, "name")
 
10
  super()
11
  this.fetch_classes()
12
  this.temp_host = 0
13
+ this.state = {open : true,
14
+ menu : [],
15
+ colour : [],
16
+ text : "",
17
+ name : "",
18
+ emoji : [],
19
+ mode : false,
20
+ modal : false,
21
+ error : false
22
+ }
23
  }
24
 
25
+
 
 
 
 
 
 
 
 
 
26
 
27
  async fetch_classes(){
28
  try {
 
168
 
169
  subComponents(item, index){
170
 
 
 
 
 
171
  return(<>
172
  <li key={`${item.name}-${item.port}`} onDragStart={(event) => this.onDragStart(event, 'custom', item, index)}
173
  className={` text-white text-md flex text-center items-center cursor-pointer shadow-lg
 
214
  <BsSearch className="block float-left cursor-pointer mr-2"/>
215
  </span>
216
  <input className={`placeholder:italic placeholder:text-slate-400 block bg-transparent w-full border border-slate-300 border-dashed rounded-md py-2 pl-9 ${this.state.open ? "pr-3" : "hidden"} shadow-sm focus:outline-none focus:border-sky-500 focus:ring-sky-500 focus:ring-1 sm:text-sm`}
217
+ placeholder={`stream link...`}
218
  type="text" name="search"
219
  onChange={(e) => {
220
  this.updateText(e, "text")
 
229
  <Icon className="block float-left cursor-pointer mr-2" name="address card"/>
230
  </span>
231
  <input className={`placeholder:italic placeholder:text-slate-400 block bg-transparent w-full border border-slate-300 border-dashed rounded-md py-2 pl-9 ${this.state.open ? "pr-3" : "hidden"} shadow-sm focus:outline-none focus:border-sky-500 focus:ring-sky-500 focus:ring-1 sm:text-sm`}
232
+ placeholder={`Give it name...` }
233
  type="text" name="search"
234
  onChange={(e) => {
235
  this.updateText(e, "name")
frontend/src/Components/Nodes/Custom.js CHANGED
@@ -4,13 +4,14 @@ import {BiCube} from 'react-icons/bi'
4
  import {BsTrash} from 'react-icons/bs'
5
  import {CgLayoutGridSmall} from 'react-icons/cg'
6
  import '../../css/counter.css'
 
7
  export default class CustomNodeIframe extends React.Component {
8
  constructor({id , data}){
9
  super()
10
  this.myRef = React.createRef()
11
- this.id = id
12
  this.state = {
13
- reachable : this.handelFetch,
 
14
  selected : true,
15
  data : data,
16
  width : 600,
@@ -21,50 +22,50 @@ export default class CustomNodeIframe extends React.Component {
21
  }
22
 
23
  handelSelected = () => {
24
- this.setState({reachable : this.state.reachable, selected : !this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size})
25
  }
26
 
27
- handelFetch = () => {
28
- fetch(this.state.data.host, {mode: 'no-cors'}).then((re) => {
29
- this.setState({reachable : true, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size})
30
- }).catch(()=>{
31
- this.setState({reachable : false, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size})
 
 
 
 
 
 
32
  })
 
33
  }
34
 
35
- handelSizeState = () => {
36
- this.setState({reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : !this.state.size})
37
- }
38
 
39
  onNodeClick = (id) => {
40
  this.state.data.delete(id)
41
  }
42
 
43
  handelOnChange(evt, type){
44
- this.setState({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})
45
- type === "width" ? this.myRef.current.style.width = `${parseInt(evt.target.value)}px` : this.myRef.current.style.height = `${parseInt(evt.target.value)}px`
46
  }
47
 
48
  handelSize(evt, increment, change){
49
- console.log(evt,increment)
50
- if (evt === "Enter"){
51
- this.setState({reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : change === "width" ? increment : this.state.width, height : change === "height" ? increment : this.state.height, size : this.state.size})
52
- change === "width" ? this.myRef.current.style.width = `${increment}px` : this.myRef.current.style.height = `${increment}px`
53
- } else if (evt === "increment") {
54
- this.setState({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})
55
- change === "width" ? this.myRef.current.style.width = `${parseInt(this.state.width) + increment}px` : this.myRef.current.style.height = `${parseInt(this.state.height) + increment}px`
56
  }
57
 
58
  }
59
 
60
- Counter(focus, count){
61
  return (<div className="custom-number-input h-10 w-32 dark:text-white text-black ">
62
  <div className="flex flex-row h-10 w-full rounded-lg relative bg-transparent">
63
- <button data-action="decrement" className=" border-2 border-dotted border-fuchsia-300 hover:border-rose-600 rounded-l-xl hover:animate-pulse h-full w-20 cursor-pointer outline-none " onClick={(e)=> {this.handelSize("increment", -5, focus)}}>
64
  <span className="m-auto text-2xl font-bold">βˆ’</span>
65
  </button>
66
- <input type="number" className="outline-none focus:outline-none border-fuchsia-300 border-y-2 border-dotted text-center w-full font-semibold text-md focus:from-fuchsia-200 md:text-basecursor-default flex items-cente outline-none bg-transparent" name="input-number" value={count} onChange={(e) => this.handelOnChange(e, focus)} onKeyDown={(e) => {this.handelSize(e.key, count, focus)}}></input>
67
- <button data-action="increment" className="border-2 border-dotted border-fuchsia-300 hover:border-Green-Emerald rounded-r-xl hover:animate-pulse h-full w-20 cursor-pointer" onClick={(e)=> {this.handelSize("increment", 5, focus)}} >
68
  <span className="m-auto text-2xl font-bold">+</span>
69
  </button>
70
  </div>
@@ -72,17 +73,17 @@ export default class CustomNodeIframe extends React.Component {
72
  }
73
 
74
  render(){
 
75
  return (<>
76
- { this.state.reachable &&
77
  <>
78
- <div className=" flex w-full h-10 top-0 cursor-pointer" onClick={this.handelEvent}>
79
- <div title="Collaspse Node" className=" duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-black h-10 w-10 mr-2 -mt-3 bg-Warm-Blue rounded-xl" onClick={this.handelSelected}><CgLayoutGridSmall className="h-full w-full text-white p-1"/></div>
80
 
81
 
82
  <div className={` flex ${this.state.selected ? '' : 'w-0 hidden'}`}>
83
- <div title="Adjust Node Size" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-black 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>
84
- <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-black 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>
85
- <div title="Delete Node" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-black h-10 w-10 mr-2 -mt-3 bg-Warm-Red rounded-xl" onClick={() => this.onNodeClick(this.id)}><BsTrash className="h-full w-full text-white p-1"/></div>
86
 
87
  { this.state.size && <div className="duration-300 flex w-[60%] h-full mr-2 -mt-3 space-x-4">
88
  {this.Counter("width", this.state.width)}
@@ -92,15 +93,18 @@ export default class CustomNodeIframe extends React.Component {
92
 
93
  </div>
94
 
95
- <div className={`relative w-[${this.state.width}px] h-[${this.state.height}px] overflow-hidden m-0 p-0 shadow-2xl`} ref={this.myRef}>
96
  <div className={`absolute h-full w-full ${this.state.data.colour} border-1shadow-2xl shadow-black rounded-xl -z-20`}></div>
97
  <iframe
98
  id="iframe"
99
  src={this.state.data.host}
100
  title={this.state.data.label}
101
- frameBorder="0" className=" -z-10 container h-full p-2 flex-grow space-iframe overflow-scroll " allow="accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"></iframe>
 
 
 
102
  </div>
103
  </>
104
- } </>)
105
  }
106
  }
 
4
  import {BsTrash} from 'react-icons/bs'
5
  import {CgLayoutGridSmall} from 'react-icons/cg'
6
  import '../../css/counter.css'
7
+
8
  export default class CustomNodeIframe extends React.Component {
9
  constructor({id , data}){
10
  super()
11
  this.myRef = React.createRef()
 
12
  this.state = {
13
+ id : id,
14
+ reachable : this.isFetchable(data.host),
15
  selected : true,
16
  data : data,
17
  width : 600,
 
22
  }
23
 
24
  handelSelected = () => {
25
+ 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})
26
  }
27
 
28
+ handelSizeState = () => {
29
+ 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})
30
+ }
31
+
32
+ isFetchable = async (host) => {
33
+
34
+ fetch(host, {mode: 'no-cors'}).then((re) => {
35
+ return true
36
+ }).catch((err)=>{
37
+ alert(`πŸ€ͺ Something went wrong the url that that was put in is not reachable...\n\n${err}`)
38
+ return false
39
  })
40
+ return false
41
  }
42
 
 
 
 
43
 
44
  onNodeClick = (id) => {
45
  this.state.data.delete(id)
46
  }
47
 
48
  handelOnChange(evt, type){
49
+ 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})
50
+ type === "width" ? this.myRef.current.style.width = `${parseInt(evt.target.value)}px` : this.myRef.current.style.height = `${parseInt(evt.target.value)}px`
51
  }
52
 
53
  handelSize(evt, increment, change){
54
+ if (evt === "increment") {
55
+ 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})
56
+ change === "width" ? this.myRef.current.style.width = `${this.state.width + increment}px` : this.myRef.current.style.height = `${this.state.height + increment}px`
 
 
 
 
57
  }
58
 
59
  }
60
 
61
+ Counter(focus, size){
62
  return (<div className="custom-number-input h-10 w-32 dark:text-white text-black ">
63
  <div className="flex flex-row h-10 w-full rounded-lg relative bg-transparent">
64
+ <button data-action="decrement" className=" border-2 border-dotted border-Retro-dark-blue hover:border-rose-700 rounded-l-xl hover:animate-pulse h-full w-20 cursor-pointer outline-none " onClick={(e)=> {this.handelSize("increment", -5, focus)}}>
65
  <span className="m-auto text-2xl font-bold">βˆ’</span>
66
  </button>
67
+ <input type="number" className="focus:outline-none border-Retro-dark-blue border-y-2 border-dotted text-center w-full font-semibold text-md focus:from-fuchsia-200 md:text-basecursor-default flex items-cente outline-none bg-transparent" name="input-number" value={size} onChange={(e) => this.handelOnChange(e, focus)} onKeyDown={(e) => {this.handelSize(e.key, size, focus)}}></input>
68
+ <button data-action="increment" className="border-2 border-dotted border-Retro-dark-blue hover:border-green-400 rounded-r-xl hover:animate-pulse h-full w-20 cursor-pointer" onClick={(e)=> {this.handelSize("increment", 5, focus)}} >
69
  <span className="m-auto text-2xl font-bold">+</span>
70
  </button>
71
  </div>
 
73
  }
74
 
75
  render(){
76
+ if (!this.state.reachable) this.onNodeClick(this.state.id)
77
  return (<>
 
78
  <>
79
+ <div className=" flex w-full h-10 top-0 cursor-pointer">
80
+ <div title="Collaspse 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-Blue rounded-xl" onClick={this.handelSelected}><CgLayoutGridSmall className="h-full w-full text-white p-1"/></div>
81
 
82
 
83
  <div className={` flex ${this.state.selected ? '' : 'w-0 hidden'}`}>
84
+ <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>
85
+ <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>
86
+ <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>
87
 
88
  { this.state.size && <div className="duration-300 flex w-[60%] h-full mr-2 -mt-3 space-x-4">
89
  {this.Counter("width", this.state.width)}
 
93
 
94
  </div>
95
 
96
+ <div className={`relative w-[540px] h-[600px] overflow-hidden m-0 p-0 shadow-2xl`} ref={this.myRef}>
97
  <div className={`absolute h-full w-full ${this.state.data.colour} border-1shadow-2xl shadow-black rounded-xl -z-20`}></div>
98
  <iframe
99
  id="iframe"
100
  src={this.state.data.host}
101
  title={this.state.data.label}
102
+ frameBorder="0"
103
+ className=" -z-10 container h-full p-2 flex-grow space-iframe overflow-scroll "
104
+ allow="accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"
105
+ sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"></iframe>
106
  </div>
107
  </>
108
+ </>)
109
  }
110
  }
frontend/src/Components/ReactFlow/ReactFlowEnv.js CHANGED
@@ -47,8 +47,7 @@ export default function ReactEnviorment() {
47
 
48
  const reactFlowBounds = reactFlowWrapper.current.getBoundingClientRect();
49
  const type = event.dataTransfer.getData('application/reactflow');
50
- const host = event.dataTransfer.getData('application/host');
51
- const name = event.dataTransfer.getData('application/name');
52
  const colour = event.dataTransfer.getData('application/colour');
53
  // check if the dropped element is valid
54
  if (typeof type === 'undefined' || !type) {
@@ -60,10 +59,10 @@ export default function ReactEnviorment() {
60
  y: event.clientY - reactFlowBounds.top,
61
  });
62
  const newNode = {
63
- id: `${name}-${nodes.length}`,
64
  type,
65
  position,
66
- data: { label: `${name}`, host : `${host}`, colour : `${colour}`, delete : deleteNode },
67
  };
68
  setNodes((nds) => nds.concat(newNode));
69
  },
 
47
 
48
  const reactFlowBounds = reactFlowWrapper.current.getBoundingClientRect();
49
  const type = event.dataTransfer.getData('application/reactflow');
50
+ const item = JSON.parse(event.dataTransfer.getData('application/item'));
 
51
  const colour = event.dataTransfer.getData('application/colour');
52
  // check if the dropped element is valid
53
  if (typeof type === 'undefined' || !type) {
 
59
  y: event.clientY - reactFlowBounds.top,
60
  });
61
  const newNode = {
62
+ id: `${item.name}-${nodes.length}`,
63
  type,
64
  position,
65
+ data: { label: `${item.name}`, host : `${item.host}`, colour : `${colour}`, delete : deleteNode },
66
  };
67
  setNodes((nds) => nds.concat(newNode));
68
  },
frontend/src/css/dist/output.css CHANGED
@@ -583,18 +583,6 @@ video {
583
  }
584
  }
585
 
586
- .pointer-events-none {
587
- pointer-events: none;
588
- }
589
-
590
- .pointer-events-auto {
591
- pointer-events: auto;
592
- }
593
-
594
- .visible {
595
- visibility: visible;
596
- }
597
-
598
  .absolute {
599
  position: absolute;
600
  }
@@ -656,14 +644,14 @@ video {
656
  float: left;
657
  }
658
 
659
- .m-0 {
660
- margin: 0px;
661
- }
662
-
663
  .m-auto {
664
  margin: auto;
665
  }
666
 
 
 
 
 
667
  .mt-4 {
668
  margin-top: 1rem;
669
  }
@@ -692,14 +680,6 @@ video {
692
  margin-top: -0.75rem;
693
  }
694
 
695
- .mt-1 {
696
- margin-top: 0.25rem;
697
- }
698
-
699
- .ml-2 {
700
- margin-left: 0.5rem;
701
- }
702
-
703
  .block {
704
  display: block;
705
  }
@@ -740,18 +720,6 @@ video {
740
  height: 600px;
741
  }
742
 
743
- .h-\[540px\] {
744
- height: 540px;
745
- }
746
-
747
- .h-8 {
748
- height: 2rem;
749
- }
750
-
751
- .h-5 {
752
- height: 1.25rem;
753
- }
754
-
755
  .w-10 {
756
  width: 2.5rem;
757
  }
@@ -764,30 +732,6 @@ video {
764
  width: 2.25rem;
765
  }
766
 
767
- .w-\[85\%\] {
768
- width: 85%;
769
- }
770
-
771
- .w-screen {
772
- width: 100vw;
773
- }
774
-
775
- .w-\[540px\] {
776
- width: 540px;
777
- }
778
-
779
- .w-\[600px\] {
780
- width: 600px;
781
- }
782
-
783
- .w-\[80\%\] {
784
- width: 80%;
785
- }
786
-
787
- .w-\[78\%\] {
788
- width: 78%;
789
- }
790
-
791
  .w-32 {
792
  width: 8rem;
793
  }
@@ -796,24 +740,24 @@ video {
796
  width: 5rem;
797
  }
798
 
799
- .w-\[72\%\] {
800
- width: 72%;
801
  }
802
 
803
- .w-\[70\%\] {
804
- width: 70%;
805
  }
806
 
807
- .w-\[75\%\] {
808
- width: 75%;
809
  }
810
 
811
- .w-\[60\%\] {
812
- width: 60%;
813
  }
814
 
815
- .w-0 {
816
- width: 0px;
817
  }
818
 
819
  .flex-1 {
@@ -857,12 +801,6 @@ video {
857
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
858
  }
859
 
860
- .space-x-3 > :not([hidden]) ~ :not([hidden]) {
861
- --tw-space-x-reverse: 0;
862
- margin-right: calc(0.75rem * var(--tw-space-x-reverse));
863
- margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
864
- }
865
-
866
  .space-x-4 > :not([hidden]) ~ :not([hidden]) {
867
  --tw-space-x-reverse: 0;
868
  margin-right: calc(1rem * var(--tw-space-x-reverse));
@@ -881,10 +819,6 @@ video {
881
  overflow: scroll;
882
  }
883
 
884
- .break-words {
885
- overflow-wrap: break-word;
886
- }
887
-
888
  .rounded-md {
889
  border-radius: 0.375rem;
890
  }
@@ -893,22 +827,12 @@ video {
893
  border-radius: 9999px;
894
  }
895
 
896
- .rounded-xl {
897
- border-radius: 0.75rem;
898
- }
899
-
900
  .rounded-lg {
901
  border-radius: 0.5rem;
902
  }
903
 
904
- .rounded-l {
905
- border-top-left-radius: 0.25rem;
906
- border-bottom-left-radius: 0.25rem;
907
- }
908
-
909
- .rounded-r {
910
- border-top-right-radius: 0.25rem;
911
- border-bottom-right-radius: 0.25rem;
912
  }
913
 
914
  .rounded-l-xl {
@@ -938,10 +862,6 @@ video {
938
  border-right-width: 1px;
939
  }
940
 
941
- .border-t-2 {
942
- border-top-width: 2px;
943
- }
944
-
945
  .border-dashed {
946
  border-style: dashed;
947
  }
@@ -965,14 +885,14 @@ video {
965
  border-color: rgb(220 38 38 / var(--tw-border-opacity));
966
  }
967
 
968
- .border-green-600 {
969
  --tw-border-opacity: 1;
970
- border-color: rgb(22 163 74 / var(--tw-border-opacity));
971
  }
972
 
973
- .border-fuchsia-300 {
974
  --tw-border-opacity: 1;
975
- border-color: rgb(240 171 252 / var(--tw-border-opacity));
976
  }
977
 
978
  .bg-white {
@@ -1003,31 +923,6 @@ video {
1003
  background-color: rgb(241 52 132 / var(--tw-bg-opacity));
1004
  }
1005
 
1006
- .bg-black {
1007
- --tw-bg-opacity: 1;
1008
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
1009
- }
1010
-
1011
- .bg-gray-300 {
1012
- --tw-bg-opacity: 1;
1013
- background-color: rgb(209 213 219 / var(--tw-bg-opacity));
1014
- }
1015
-
1016
- .bg-gray-900 {
1017
- --tw-bg-opacity: 1;
1018
- background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1019
- }
1020
-
1021
- .bg-neutral-900 {
1022
- --tw-bg-opacity: 1;
1023
- background-color: rgb(23 23 23 / var(--tw-bg-opacity));
1024
- }
1025
-
1026
- .bg-cream {
1027
- --tw-bg-opacity: 1;
1028
- background-color: rgb(250 249 246 / var(--tw-bg-opacity));
1029
- }
1030
-
1031
  .bg-Warm-Red {
1032
  --tw-bg-opacity: 1;
1033
  background-color: rgb(255 96 93 / var(--tw-bg-opacity));
@@ -1283,11 +1178,6 @@ video {
1283
  line-height: 2.5rem;
1284
  }
1285
 
1286
- .text-sm {
1287
- font-size: 0.875rem;
1288
- line-height: 1.25rem;
1289
- }
1290
-
1291
  .font-medium {
1292
  font-weight: 500;
1293
  }
@@ -1300,45 +1190,16 @@ video {
1300
  font-weight: 600;
1301
  }
1302
 
1303
- .font-thin {
1304
- font-weight: 100;
1305
- }
1306
-
1307
  .text-white {
1308
  --tw-text-opacity: 1;
1309
  color: rgb(255 255 255 / var(--tw-text-opacity));
1310
  }
1311
 
1312
- .text-gray-700 {
1313
- --tw-text-opacity: 1;
1314
- color: rgb(55 65 81 / var(--tw-text-opacity));
1315
- }
1316
-
1317
- .text-gray-600 {
1318
- --tw-text-opacity: 1;
1319
- color: rgb(75 85 99 / var(--tw-text-opacity));
1320
- }
1321
-
1322
- .text-red-600 {
1323
- --tw-text-opacity: 1;
1324
- color: rgb(220 38 38 / var(--tw-text-opacity));
1325
- }
1326
-
1327
  .text-black {
1328
  --tw-text-opacity: 1;
1329
  color: rgb(0 0 0 / var(--tw-text-opacity));
1330
  }
1331
 
1332
- .text-green-300 {
1333
- --tw-text-opacity: 1;
1334
- color: rgb(134 239 172 / var(--tw-text-opacity));
1335
- }
1336
-
1337
- .text-green-400 {
1338
- --tw-text-opacity: 1;
1339
- color: rgb(74 222 128 / var(--tw-text-opacity));
1340
- }
1341
-
1342
  .shadow-lg {
1343
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1344
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
@@ -1384,14 +1245,6 @@ video {
1384
  transition-duration: 150ms;
1385
  }
1386
 
1387
- .transition {
1388
- transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, -webkit-text-decoration-color, -webkit-transform, -webkit-filter, -webkit-backdrop-filter;
1389
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
1390
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-transform, -webkit-filter, -webkit-backdrop-filter;
1391
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1392
- transition-duration: 150ms;
1393
- }
1394
-
1395
  .duration-300 {
1396
  transition-duration: 300ms;
1397
  }
@@ -1440,39 +1293,14 @@ video {
1440
  border-color: rgb(151 0 204 / var(--tw-border-opacity));
1441
  }
1442
 
1443
- .hover\:border-Green-Forest:hover {
1444
  --tw-border-opacity: 1;
1445
- border-color: rgb(26 76 57 / var(--tw-border-opacity));
1446
  }
1447
 
1448
- .hover\:border-Green-Emerald:hover {
1449
  --tw-border-opacity: 1;
1450
- border-color: rgb(49 155 114 / var(--tw-border-opacity));
1451
- }
1452
-
1453
- .hover\:border-rose-600:hover {
1454
- --tw-border-opacity: 1;
1455
- border-color: rgb(225 29 72 / var(--tw-border-opacity));
1456
- }
1457
-
1458
- .hover\:border-b-Green-Forest:hover {
1459
- --tw-border-opacity: 1;
1460
- border-bottom-color: rgb(26 76 57 / var(--tw-border-opacity));
1461
- }
1462
-
1463
- .hover\:bg-gray-400:hover {
1464
- --tw-bg-opacity: 1;
1465
- background-color: rgb(156 163 175 / var(--tw-bg-opacity));
1466
- }
1467
-
1468
- .hover\:text-gray-700:hover {
1469
- --tw-text-opacity: 1;
1470
- color: rgb(55 65 81 / var(--tw-text-opacity));
1471
- }
1472
-
1473
- .hover\:text-black:hover {
1474
- --tw-text-opacity: 1;
1475
- color: rgb(0 0 0 / var(--tw-text-opacity));
1476
  }
1477
 
1478
  .focus\:border-sky-500:focus {
@@ -1486,11 +1314,6 @@ video {
1486
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1487
  }
1488
 
1489
- .focus\:text-black:focus {
1490
- --tw-text-opacity: 1;
1491
- color: rgb(0 0 0 / var(--tw-text-opacity));
1492
- }
1493
-
1494
  .focus\:outline-none:focus {
1495
  outline: 2px solid transparent;
1496
  outline-offset: 2px;
@@ -1517,11 +1340,6 @@ video {
1517
  background-color: rgb(28 25 23 / var(--tw-bg-opacity));
1518
  }
1519
 
1520
- .dark .dark\:bg-black {
1521
- --tw-bg-opacity: 1;
1522
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
1523
- }
1524
-
1525
  .dark .dark\:bg-neutral-800 {
1526
  --tw-bg-opacity: 1;
1527
  background-color: rgb(38 38 38 / var(--tw-bg-opacity));
@@ -1532,11 +1350,6 @@ video {
1532
  color: rgb(255 255 255 / var(--tw-text-opacity));
1533
  }
1534
 
1535
- .dark .dark\:text-red-600 {
1536
- --tw-text-opacity: 1;
1537
- color: rgb(220 38 38 / var(--tw-text-opacity));
1538
- }
1539
-
1540
  @media (min-width: 640px) {
1541
  .sm\:w-60 {
1542
  width: 15rem;
 
583
  }
584
  }
585
 
 
 
 
 
 
 
 
 
 
 
 
 
586
  .absolute {
587
  position: absolute;
588
  }
 
644
  float: left;
645
  }
646
 
 
 
 
 
647
  .m-auto {
648
  margin: auto;
649
  }
650
 
651
+ .m-0 {
652
+ margin: 0px;
653
+ }
654
+
655
  .mt-4 {
656
  margin-top: 1rem;
657
  }
 
680
  margin-top: -0.75rem;
681
  }
682
 
 
 
 
 
 
 
 
 
683
  .block {
684
  display: block;
685
  }
 
720
  height: 600px;
721
  }
722
 
 
 
 
 
 
 
 
 
 
 
 
 
723
  .w-10 {
724
  width: 2.5rem;
725
  }
 
732
  width: 2.25rem;
733
  }
734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
735
  .w-32 {
736
  width: 8rem;
737
  }
 
740
  width: 5rem;
741
  }
742
 
743
+ .w-0 {
744
+ width: 0px;
745
  }
746
 
747
+ .w-\[60\%\] {
748
+ width: 60%;
749
  }
750
 
751
+ .w-screen {
752
+ width: 100vw;
753
  }
754
 
755
+ .w-\[560px\] {
756
+ width: 560px;
757
  }
758
 
759
+ .w-\[540px\] {
760
+ width: 540px;
761
  }
762
 
763
  .flex-1 {
 
801
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
802
  }
803
 
 
 
 
 
 
 
804
  .space-x-4 > :not([hidden]) ~ :not([hidden]) {
805
  --tw-space-x-reverse: 0;
806
  margin-right: calc(1rem * var(--tw-space-x-reverse));
 
819
  overflow: scroll;
820
  }
821
 
 
 
 
 
822
  .rounded-md {
823
  border-radius: 0.375rem;
824
  }
 
827
  border-radius: 9999px;
828
  }
829
 
 
 
 
 
830
  .rounded-lg {
831
  border-radius: 0.5rem;
832
  }
833
 
834
+ .rounded-xl {
835
+ border-radius: 0.75rem;
 
 
 
 
 
 
836
  }
837
 
838
  .rounded-l-xl {
 
862
  border-right-width: 1px;
863
  }
864
 
 
 
 
 
865
  .border-dashed {
866
  border-style: dashed;
867
  }
 
885
  border-color: rgb(220 38 38 / var(--tw-border-opacity));
886
  }
887
 
888
+ .border-Retro-dark-blue {
889
  --tw-border-opacity: 1;
890
+ border-color: rgb(3 94 232 / var(--tw-border-opacity));
891
  }
892
 
893
+ .border-white {
894
  --tw-border-opacity: 1;
895
+ border-color: rgb(255 255 255 / var(--tw-border-opacity));
896
  }
897
 
898
  .bg-white {
 
923
  background-color: rgb(241 52 132 / var(--tw-bg-opacity));
924
  }
925
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
926
  .bg-Warm-Red {
927
  --tw-bg-opacity: 1;
928
  background-color: rgb(255 96 93 / var(--tw-bg-opacity));
 
1178
  line-height: 2.5rem;
1179
  }
1180
 
 
 
 
 
 
1181
  .font-medium {
1182
  font-weight: 500;
1183
  }
 
1190
  font-weight: 600;
1191
  }
1192
 
 
 
 
 
1193
  .text-white {
1194
  --tw-text-opacity: 1;
1195
  color: rgb(255 255 255 / var(--tw-text-opacity));
1196
  }
1197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1198
  .text-black {
1199
  --tw-text-opacity: 1;
1200
  color: rgb(0 0 0 / var(--tw-text-opacity));
1201
  }
1202
 
 
 
 
 
 
 
 
 
 
 
1203
  .shadow-lg {
1204
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1205
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
 
1245
  transition-duration: 150ms;
1246
  }
1247
 
 
 
 
 
 
 
 
 
1248
  .duration-300 {
1249
  transition-duration: 300ms;
1250
  }
 
1293
  border-color: rgb(151 0 204 / var(--tw-border-opacity));
1294
  }
1295
 
1296
+ .hover\:border-rose-700:hover {
1297
  --tw-border-opacity: 1;
1298
+ border-color: rgb(190 18 60 / var(--tw-border-opacity));
1299
  }
1300
 
1301
+ .hover\:border-green-400:hover {
1302
  --tw-border-opacity: 1;
1303
+ border-color: rgb(74 222 128 / var(--tw-border-opacity));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1304
  }
1305
 
1306
  .focus\:border-sky-500:focus {
 
1314
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1315
  }
1316
 
 
 
 
 
 
1317
  .focus\:outline-none:focus {
1318
  outline: 2px solid transparent;
1319
  outline-offset: 2px;
 
1340
  background-color: rgb(28 25 23 / var(--tw-bg-opacity));
1341
  }
1342
 
 
 
 
 
 
1343
  .dark .dark\:bg-neutral-800 {
1344
  --tw-bg-opacity: 1;
1345
  background-color: rgb(38 38 38 / var(--tw-bg-opacity));
 
1350
  color: rgb(255 255 255 / var(--tw-text-opacity));
1351
  }
1352
 
 
 
 
 
 
1353
  @media (min-width: 640px) {
1354
  .sm\:w-60 {
1355
  width: 15rem;
frontend/public/logo192.png β†’ images/application_dark.png RENAMED
File without changes
images/application_light.png ADDED

Git LFS Details

  • SHA256: 98c43f8327663b4b704045feb0b7c1d9f3ec917d7469f30079cedc22b8551f4a
  • Pointer size: 131 Bytes
  • Size of remote file: 409 kB