From 60f9643240bf522eb9f5e81308b520add9a62c60 Mon Sep 17 00:00:00 2001 From: Awesome65432139 <104233315+AWESOME654321@users.noreply.github.com> Date: Mon, 30 Mar 2026 19:25:46 -0500 Subject: [PATCH 1/4] update v1 --- .../src/components/matchform/Matchform.css | 28 +- .../src/components/matchform/Matchform.jsx | 581 +++++++++--------- .../matchform/auto/dropdown/Dropdown.css | 2 - greenscoutjs/src/index.css | 8 +- 4 files changed, 327 insertions(+), 292 deletions(-) diff --git a/greenscoutjs/src/components/matchform/Matchform.css b/greenscoutjs/src/components/matchform/Matchform.css index ce85501..23f750d 100644 --- a/greenscoutjs/src/components/matchform/Matchform.css +++ b/greenscoutjs/src/components/matchform/Matchform.css @@ -71,7 +71,7 @@ } .child { - background-color: var(--background-color); + /* background-color: var(--background-color); */ color: var(--font-color-prompt-title); margin-left: var(--matchform-child-margin-side); margin-right: var(--matchform-child-margin-side); @@ -79,6 +79,26 @@ box-sizing: border-box; } +.child > .header { + background-color: transparent; +} + +.sectionBox { + display: block; + width: calc(100% - (var(--matchform-child-width-to-subtract))); + margin-top: var(--matchform-sectionbox-margin-vertical); + margin-bottom: var(--matchform-sectionbox-margin-vertical); + margin-left: calc(var(--matchform-child-width-to-subtract) / 2); + padding-top: var(--matchform-sectionbox-padding-top); + color: var(--font-color-prompt-title); + font-family: Arial, Helvetica, sans-serif; + font-weight: var(--font-weight); + font-size: var(--font-size-small); + border: solid 2px var(--border-color-faded); + border-radius: var(--border-radius); + background-color: var(--matchform-sectionbox-background-color); +} + #matchNum { display: block; margin-top: var(--matchform-matchteam-margin-top); @@ -149,13 +169,14 @@ padding-top: var(--matchform-header-padding-top); text-decoration: none; text-align: center; - filter: drop-shadow(var(--drop-shadow-color) 2px 2px 3px); + filter: drop-shadow(var(--background-color) 2px 2px 3px); } -#headparent { +.headparent { display: flex; flex-direction: column; align-items: center; + background-color: transparent; } #climbheadparent { @@ -174,7 +195,6 @@ } .child.notesdiv { - vertical-align: top; padding: 0; margin-top: 0; margin-bottom: 0; diff --git a/greenscoutjs/src/components/matchform/Matchform.jsx b/greenscoutjs/src/components/matchform/Matchform.jsx index 86d1ab1..5710bde 100644 --- a/greenscoutjs/src/components/matchform/Matchform.jsx +++ b/greenscoutjs/src/components/matchform/Matchform.jsx @@ -405,328 +405,341 @@ function Matchform() { Restore Unsaved Match )} */} - - - -
-

Auto Mode

+
+
+

Match Info

+
+ + +
- - Robot Moves? - - - Does Auto Hang? - - - - - - - - Won Auto? - - -

 Went To:

+
+
+

Auto Mode

+
- Left Of Field + Robot Moves? - Right Of Field + Does Auto Hang? - - Middle Of Field - - + - Right Of Field - - + - Top Of Field - - + - Over Bump - - + - Under Trench - + nameText="Robot Accuracy:" + name="autoRobotAccuracy" + > - Didn't Cross + Won Auto? + +

 Went To:

+ + Left Of Field + + + Right Of Field + + + Middle Of Field + + + Right Of Field + + + Top Of Field + + + Over Bump + + + Under Trench + + + Didn't Cross + + + HP Station + + + Fuel Station + +
+
+
+
+

TeleOp Mode

+
+ + + +
+

Collection Ability

+
+ + + +
+

+ Hang +

+
+ +
+ +
+
+ +

 Went:

+ + Over Bump + + + Under Trench + +
+
+
+
+

End Game

+
+ - HP Station + Shot During Endgame? +
+
+
+

Misc.

+
+ + - Fuel Station + Was Their Robot Disconnected Or Disabled? - -
-

TeleOp Mode

-
- - - -
-

Collection Ability

-
- - - -
-

- Hang -

-
- -
- -
-
- -

 Went:

- Over Bump + Did You Lose Track At Any Point? - Under Trench + Were They Ever Beached? -
-
-

End Game

-
- - - Shot During Endgame? - -
-

Misc.

-
- - - - Was Their Robot Disconnected Or Disabled? - - - Did You Lose Track At Any Point? - - - Were They Ever Beached? - -
- -

 Auto Notes:

-
- -
-

 TeleOp Notes:

-
- -
-

 Performance Notes:

-
- +
+

 TeleOp Notes:

+
+ +
+

 Performance Notes:

+
+ -
-

 Special Events Notes:

-
- +
+

 Special Events Notes:

+
+ -
-

 Any Other Comments:

-
- -
-
+ value={formData.eventsNotes} + onChange={handleChange} + className="notesbox" + > +
+

 Any Other Comments:

+
+ +
+
+
Date: Mon, 30 Mar 2026 20:18:29 -0500 Subject: [PATCH 2/4] green theme and more updates --- greenscoutjs/src/components/NavComponent.css | 20 +++++++++---- greenscoutjs/src/components/homepage/Home.css | 16 +++++----- .../components/homepage/NewButtonMatch.jsx | 2 +- .../components/leaderboard/leaderBoard.css | 2 +- .../src/components/loginpage/Login.css | 10 +++---- .../src/components/matchform/Matchform.css | 30 +++++++++++-------- .../src/components/matchform/Matchform.jsx | 10 ++++--- .../matchform/auto/autocheck/Autocheck.css | 6 ++-- .../auto/autocounter/Autocounter.css | 2 +- .../matchform/auto/dropdown/Dropdown.css | 5 ++++ .../climbing-timer/TriggerButton.css | 12 ++++---- .../matchform/submitbuttons/ReplayButton.css | 4 +-- .../matchform/submitbuttons/SubmitButton.css | 6 ++-- .../matchform/teleopcycles/CycleButton.css | 6 ++-- .../matchform/teleopcycles/ScoreButton.css | 6 ++-- .../matchform/teleopcycles/ShuttleButton.css | 6 ++-- .../matchform/teleopcycles/hubSwitch.css | 8 ++--- greenscoutjs/src/components/settings.css | 18 +++++------ greenscoutjs/src/index.css | 16 +++++----- 19 files changed, 102 insertions(+), 83 deletions(-) diff --git a/greenscoutjs/src/components/NavComponent.css b/greenscoutjs/src/components/NavComponent.css index b9a4362..98cbdaa 100644 --- a/greenscoutjs/src/components/NavComponent.css +++ b/greenscoutjs/src/components/NavComponent.css @@ -19,7 +19,7 @@ body { padding: 0; height: var(--navbar-height); width: 100%; - background-color: var(--accent-color); + background: var(--sidenav-hover-color); z-index: 999999; } @@ -36,7 +36,7 @@ body { margin-left: calc(0.1 * var(--navbar-height)); height: calc(0.5 * var(--navbar-height)); width: calc(0.5 * var(--navbar-height)); - background-color: var(--font-color); + background: var(--font-color); -webkit-mask-image: url("../assets/bars-solid-full.svg"); mask-image: url("../assets/bars-solid-full.svg"); mask-repeat: no-repeat; @@ -57,7 +57,7 @@ body { margin-left: calc(0.1 * var(--navbar-height)); height: calc(0.5 * var(--navbar-height)); width: calc(0.5 * var(--navbar-height)); - background-color: var(--font-color); + background: var(--font-color); -webkit-mask-image: url("../assets/arrow-left-solid-full.svg"); mask-image: url("../assets/arrow-left-solid-full.svg"); mask-repeat: no-repeat; @@ -150,9 +150,13 @@ body { text-decoration: none; } +.side-nav button { + background: var(--accent-color); +} + .side-nav button:hover { - background-color: var(--sidenav-hover-color); - color: var(--background-color); + background: var(--sidenav-hover-color); + /* color: var(--background-color); */ cursor: pointer; } @@ -172,8 +176,12 @@ body { left: var(--sidenav-width); } +#nav-toggle:checked ~ .hamburger { + background: var(--accent-color); +} + .textp { - background-color: var(--sidenav-button-color); + background: var(--sidenav-button-color); font-family: Arial, Helvetica, sans-serif; font-weight: bold; color: var(--font-color); diff --git a/greenscoutjs/src/components/homepage/Home.css b/greenscoutjs/src/components/homepage/Home.css index 5e305de..9928684 100644 --- a/greenscoutjs/src/components/homepage/Home.css +++ b/greenscoutjs/src/components/homepage/Home.css @@ -5,7 +5,7 @@ flex-direction: column; justify-content: center; align-items: center; - background-color: var(--background-color); + background: var(--background-color); } #homeBody > * { @@ -52,7 +52,7 @@ outline: none; width: var(--refresh-button-size); height: var(--refresh-button-size); - background-color: var(--font-color-prompt-title); + background: var(--font-color-prompt-title); -webkit-mask-image: url("../../assets/reload.svg"); mask-image: url("../../assets/reload.svg"); mask-repeat: no-repeat; @@ -66,13 +66,13 @@ } #refreshButton:hover { - background-color: var(--accent-color); + background: var(--accent-color); } #newmatchbutton { width: var(--new-matchpit-button-width); height: var(--new-matchpit-button-height); - background-color: var(--accent-color); + background: var(--accent-color); border: 1px solid var(--accent-color); border-radius: var(--border-radius); box-shadow: 0px 4px 5px var(--drop-shadow-color); @@ -87,13 +87,13 @@ } #newmatchbutton:hover { - background-color: var(--accent-color2); + background: var(--accent-color2); } #newmatchbuttonimg { width: 100%; height: 40%; - background-color: var(--font-color); + background: var(--font-color); -webkit-mask-image: url("../../assets/pencil.svg"); mask-image: url("../../assets/pencil.svg"); mask-repeat: no-repeat; @@ -107,7 +107,7 @@ #newpitbutton { width: var(--new-matchpit-button-width); height: var(--new-matchpit-button-height); - background-color: var(--accent-color3); + background: var(--accent-color3); border: 1px solid var(--accent-color3); border-radius: var(--border-radius); box-shadow: 0px 4px 5px var(--drop-shadow-color); @@ -126,5 +126,5 @@ } #newpitbutton:hover { - background-color: var(--accent-color2); + background: var(--accent-color2); } diff --git a/greenscoutjs/src/components/homepage/NewButtonMatch.jsx b/greenscoutjs/src/components/homepage/NewButtonMatch.jsx index ead4e82..342dba1 100644 --- a/greenscoutjs/src/components/homepage/NewButtonMatch.jsx +++ b/greenscoutjs/src/components/homepage/NewButtonMatch.jsx @@ -1,5 +1,5 @@ import "./Home.css"; -import { Navigate, useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; function NewButtonMatch() { const navigate = useNavigate(); diff --git a/greenscoutjs/src/components/leaderboard/leaderBoard.css b/greenscoutjs/src/components/leaderboard/leaderBoard.css index 070ce57..66e61bc 100644 --- a/greenscoutjs/src/components/leaderboard/leaderBoard.css +++ b/greenscoutjs/src/components/leaderboard/leaderBoard.css @@ -60,7 +60,7 @@ overflow: hidden; gap: 8%; padding: 2.5% 2.5%; - background-color: var(--background-color); + background: var(--background-color); border: 0.15vh solid var(--accent-color); border-radius: var(--border-radius); min-height: var(--leader-board-element-height); diff --git a/greenscoutjs/src/components/loginpage/Login.css b/greenscoutjs/src/components/loginpage/Login.css index b0ea262..3e5ae0c 100644 --- a/greenscoutjs/src/components/loginpage/Login.css +++ b/greenscoutjs/src/components/loginpage/Login.css @@ -3,7 +3,7 @@ width: var(--page-width); height: var(--page-height); margin: 0; - background-color: var(--background-color); + background: var(--background-color); } #parent { @@ -64,7 +64,7 @@ width: var(--login-box-padding-left); height: var(--login-box-padding-left); flex-shrink: 0; - background-color: var(--font-color-prompt-title); + background: var(--font-color-prompt-title); mask-repeat: no-repeat; -webkit-mask-repeat: no-repeat; mask-position: center; @@ -99,7 +99,7 @@ font-weight: var(--font-weight); font-size: var(--font-size-large); border: none; - background-color: transparent; + background: transparent; } #user:focus, @@ -125,7 +125,7 @@ height: var(--login-button-height); margin-top: 5.7vh; margin-bottom: 4.4vh; - background-color: var(--accent-color3); + background: var(--accent-color3); border: 1px solid var(--accent-color3); border-radius: var(--border-radius); box-shadow: 0px 4px 5px var(--drop-shadow-color); @@ -138,7 +138,7 @@ } #loginButton:hover { - background-color: var(--accent-color2); + background: var(--accent-color2); } #loginButton:disabled { diff --git a/greenscoutjs/src/components/matchform/Matchform.css b/greenscoutjs/src/components/matchform/Matchform.css index 23f750d..88cf711 100644 --- a/greenscoutjs/src/components/matchform/Matchform.css +++ b/greenscoutjs/src/components/matchform/Matchform.css @@ -53,7 +53,7 @@ padding-bottom: 0.4rem; margin: 0; border-left: rgba(0, 0, 0, 0.132) 1px solid; - background-color: var(--background-color); + background: var(--background-color); overflow-y: auto; overflow-x: hidden; min-width: 0; @@ -71,7 +71,6 @@ } .child { - /* background-color: var(--background-color); */ color: var(--font-color-prompt-title); margin-left: var(--matchform-child-margin-side); margin-right: var(--matchform-child-margin-side); @@ -79,8 +78,12 @@ box-sizing: border-box; } +.child.backgroundcolorfilled { + background: var(--background-color); +} + .child > .header { - background-color: transparent; + background: transparent; } .sectionBox { @@ -90,13 +93,14 @@ margin-bottom: var(--matchform-sectionbox-margin-vertical); margin-left: calc(var(--matchform-child-width-to-subtract) / 2); padding-top: var(--matchform-sectionbox-padding-top); + padding-bottom: var(--matchform-sectionbox-padding-top); color: var(--font-color-prompt-title); font-family: Arial, Helvetica, sans-serif; font-weight: var(--font-weight); font-size: var(--font-size-small); border: solid 2px var(--border-color-faded); border-radius: var(--border-radius); - background-color: var(--matchform-sectionbox-background-color); + background: var(--matchform-sectionbox-background-color); } #matchNum { @@ -176,7 +180,7 @@ display: flex; flex-direction: column; align-items: center; - background-color: transparent; + background: transparent; } #climbheadparent { @@ -205,7 +209,7 @@ .notesbox { font-size: var(--font-size-small); - background-color: var(--background-color); + background: var(--background-color); color: var(--font-color-prompt-title); box-sizing: border-box; } @@ -230,11 +234,11 @@ } .cycleElementImg.blue { - background-color: var(--accent-color3); + background: var(--accent-color3); } .cycleElementImg.red { - background-color: var(--error-color); + background: var(--error-color); } .cycle-item.Score { @@ -255,7 +259,7 @@ position: relative; height: var(--matchform-cycle-item-image-height); width: var(--matchform-cycle-item-image-width); - background-color: var(--font-color-prompt-title); + background: var(--font-color-prompt-title); -webkit-mask-image: url("../../assets/meteor-solid-full.svg"); mask-image: url("../../assets/meteor-solid-full.svg"); mask-repeat: no-repeat; @@ -287,7 +291,7 @@ position: relative; height: var(--matchform-cycle-item-image-height); width: var(--matchform-cycle-item-image-width); - background-color: var(--font-color-prompt-title); + background: var(--font-color-prompt-title); -webkit-mask-image: url("../../assets/arrow-right-arrow-left-solid-full.svg"); mask-image: url("../../assets/arrow-right-arrow-left-solid-full.svg"); mask-repeat: no-repeat; @@ -339,7 +343,7 @@ position: relative; height: var(--matchform-cycle-item-image-height); width: var(--matchform-cycle-item-image-width); - background-color: var(--font-color-prompt-title); + background: var(--font-color-prompt-title); -webkit-mask-image: url("../../assets/bus-side-solid-full.svg"); mask-image: url("../../assets/bus-side-solid-full.svg"); mask-repeat: no-repeat; @@ -385,7 +389,7 @@ } .deleteButton:hover { - background-color: var(--error-color); + background: var(--error-color); } .accuracyLabel { @@ -400,7 +404,7 @@ } #restore { - background-color: var(--accent-color3); + background: var(--accent-color3); border: 1px var(--accent-color3); border-radius: var(--border-radius); box-shadow: 0px 4px 5px var(--drop-shadow-color); diff --git a/greenscoutjs/src/components/matchform/Matchform.jsx b/greenscoutjs/src/components/matchform/Matchform.jsx index 5710bde..90a9cd2 100644 --- a/greenscoutjs/src/components/matchform/Matchform.jsx +++ b/greenscoutjs/src/components/matchform/Matchform.jsx @@ -411,8 +411,9 @@ function Matchform() { Date: Thu, 2 Apr 2026 21:27:35 -0500 Subject: [PATCH 3/4] int only --- .../src/components/matchform/Matchform.jsx | 26 ------------------- .../auto/autocounter/Autocounter.jsx | 6 +++-- .../matchform/teleopcycles/Cycles.jsx | 16 ++++++++++++ 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/greenscoutjs/src/components/matchform/Matchform.jsx b/greenscoutjs/src/components/matchform/Matchform.jsx index 90a9cd2..e38d1cb 100644 --- a/greenscoutjs/src/components/matchform/Matchform.jsx +++ b/greenscoutjs/src/components/matchform/Matchform.jsx @@ -359,14 +359,6 @@ function Matchform() { } }; - const updateCycleAccuracy = (index, newAccuracy) => { - setCycleList((prevList) => - prevList.map((item, i) => - i === index ? { ...item, accuracy: parseInt(newAccuracy) } : item, - ), - ); - }; - const addCycleEvent = (eventName) => { if (isCycleRunning) { let newSwitchCount = hubSwitchCount; @@ -388,13 +380,6 @@ function Matchform() { } }; - const removeCycleEvent = (indexRemoval) => { - setCycleList((prevList) => [ - ...prevList.slice(0, indexRemoval), - ...prevList.slice(indexRemoval + 1), - ]); - }; - return ( @@ -568,17 +553,6 @@ function Matchform() {

TeleOp Mode

- - -

Collection Ability

diff --git a/greenscoutjs/src/components/matchform/auto/autocounter/Autocounter.jsx b/greenscoutjs/src/components/matchform/auto/autocounter/Autocounter.jsx index 53ea9cf..a2620f1 100644 --- a/greenscoutjs/src/components/matchform/auto/autocounter/Autocounter.jsx +++ b/greenscoutjs/src/components/matchform/auto/autocounter/Autocounter.jsx @@ -3,13 +3,15 @@ import "./Autocounter.css"; function Autocounter({ nameText, value, onChange, name }) { return (
- + type="number" + step="1" + >
); } diff --git a/greenscoutjs/src/components/matchform/teleopcycles/Cycles.jsx b/greenscoutjs/src/components/matchform/teleopcycles/Cycles.jsx index a0384b5..33653cd 100644 --- a/greenscoutjs/src/components/matchform/teleopcycles/Cycles.jsx +++ b/greenscoutjs/src/components/matchform/teleopcycles/Cycles.jsx @@ -1,6 +1,22 @@ import "../Matchform.css"; import { useEffect, useRef } from "react"; +// Methods for handling cycles, in matchform.jsx +const updateCycleAccuracy = (index, newAccuracy) => { + setCycleList((prevList) => + prevList.map((item, i) => + i === index ? { ...item, accuracy: parseInt(newAccuracy) } : item, + ), + ); +}; + +const removeCycleEvent = (indexRemoval) => { + setCycleList((prevList) => [ + ...prevList.slice(0, indexRemoval), + ...prevList.slice(indexRemoval + 1), + ]); +}; + const Cycles = ({ list, runningBool, From c9b6ba71cd6f769905daaa1926a0d0d6f8e78bca Mon Sep 17 00:00:00 2001 From: Awesome65432139 <104233315+AWESOME654321@users.noreply.github.com> Date: Thu, 2 Apr 2026 22:11:45 -0500 Subject: [PATCH 4/4] theme switching --- greenscoutjs/public/themes/dark.css | 34 +++++++++++++++++++ greenscoutjs/public/themes/green.css | 34 +++++++++++++++++++ greenscoutjs/public/themes/light.css | 34 +++++++++++++++++++ greenscoutjs/src/App.jsx | 28 +++++++++++++++ greenscoutjs/src/components/Settings.jsx | 4 +-- .../themes/ThemeDropdown.jsx | 29 +++++++++++++--- greenscoutjs/src/index.css | 33 ------------------ 7 files changed, 157 insertions(+), 39 deletions(-) create mode 100644 greenscoutjs/public/themes/dark.css create mode 100644 greenscoutjs/public/themes/green.css create mode 100644 greenscoutjs/public/themes/light.css diff --git a/greenscoutjs/public/themes/dark.css b/greenscoutjs/public/themes/dark.css new file mode 100644 index 0000000..8dcda3a --- /dev/null +++ b/greenscoutjs/public/themes/dark.css @@ -0,0 +1,34 @@ +html { + scrollbar-color: var(--font-color-prompt-title) var(--background-color); +} + +:root { + /* Color Variables */ + --background-color: #3c3c3c; + --accent-color: #9bcbfb; + --accent-color2: #8fbdeb; + --accent-color3: #cee5ff; + + --matchform-sectionbox-background-color: rgba(0, 0, 0, 0.1); + + --blue-color: #9bcbfb; + --error-color: var(--disabled-color); + --disabled-color: #717172; + + --font-color: black; + --font-color-prompt-title: white; + --font-color-header: white; + + --drop-shadow-color: #626263; + --sidenav-hover-color: var(--accent-color); + --faded-text-color: #5f6167; + + --kelly-green: #4cbb17; + --error-message-color: var(--disabled-color); + --check-background-color: #4cbb17; + --checkbox-default-color: #eee; + --checkbox-hover-color: #ccc; + --border-color-faded: #d9d9db; + --border-color-active: #417096; + --sidenav-button-color: #dfdfdf; +} diff --git a/greenscoutjs/public/themes/green.css b/greenscoutjs/public/themes/green.css new file mode 100644 index 0000000..d6a7d6b --- /dev/null +++ b/greenscoutjs/public/themes/green.css @@ -0,0 +1,34 @@ +html { + scrollbar-color: var(--font-color-prompt-title) var(--background-color); +} + +:root { + /* Color Variables */ + --background-color: #3c3c3c; + --accent-color: linear-gradient(0deg, #3aea3a 0%, #59eb5a 100%); + --accent-color2: linear-gradient(0deg, #3aea3a 0%, #59eb5a 100%); + --accent-color3: linear-gradient(0deg, #3db43d 0%, #43c343 100%); + + --matchform-sectionbox-background-color: rgba(0, 0, 0, 0.1); + + --blue-color: #9bcbfb; + --error-color: var(--disabled-color); + --disabled-color: #717172; + + --font-color: black; + --font-color-prompt-title: white; + --font-color-header: white; + + --drop-shadow-color: #626263; + --sidenav-hover-color: linear-gradient(0deg, #3aea3a 0%, #59eb5a 100%); + --faded-text-color: #5f6167; + + --kelly-green: #4cbb17; + --error-message-color: var(--disabled-color); + --check-background-color: #4cbb17; + --checkbox-default-color: #eee; + --checkbox-hover-color: #ccc; + --border-color-faded: #d9d9db; + --border-color-active: #4cbb17; + --sidenav-button-color: #dfdfdf; +} diff --git a/greenscoutjs/public/themes/light.css b/greenscoutjs/public/themes/light.css new file mode 100644 index 0000000..ebb26fc --- /dev/null +++ b/greenscoutjs/public/themes/light.css @@ -0,0 +1,34 @@ +html { + scrollbar-color: var(--font-color-prompt-title) var(--background-color); +} + +:root { + /* Color Variables */ + --background-color: white; + --accent-color: #9bcbfb; + --accent-color2: #8fbdeb; + --accent-color3: #cee5ff; + + --matchform-sectionbox-background-color: rgba(0, 0, 0, 0.1); + + --blue-color: #9bcbfb; + --error-color: var(--disabled-color); + --disabled-color: #717172; + + --font-color: black; + --font-color-prompt-title: black; + --font-color-header: black; + + --drop-shadow-color: #626263; + --sidenav-hover-color: var(--accent-color); + --faded-text-color: #5f6167; + + --kelly-green: #4cbb17; + --error-message-color: var(--disabled-color); + --check-background-color: #4cbb17; + --checkbox-default-color: #eee; + --checkbox-hover-color: #ccc; + --border-color-faded: #d9d9db; + --border-color-active: #417096; + --sidenav-button-color: #dfdfdf; +} diff --git a/greenscoutjs/src/App.jsx b/greenscoutjs/src/App.jsx index 6f114ab..3638756 100644 --- a/greenscoutjs/src/App.jsx +++ b/greenscoutjs/src/App.jsx @@ -19,6 +19,34 @@ import SettingsThemes from "./components/settings-sub-pages/themes/SettingsTheme import { useState, useEffect } from "react"; function App() { + useEffect(() => { + const updateStylesheet = () => { + const rawTheme = localStorage.getItem("app-theme") || "light"; + const savedTheme = rawTheme.toLowerCase(); + + let link = document.getElementById("dynamic-theme-link"); + if (!link) { + link = document.createElement("link"); + link.id = "dynamic-theme-link"; + link.rel = "stylesheet"; + document.head.appendChild(link); + } + + const base = import.meta.env.BASE_URL.endsWith("/") + ? import.meta.env.BASE_URL + : `${import.meta.env.BASE_URL}/`; + + const newHref = `${base}themes/${savedTheme}.css`; + + console.log("Loading CSS from:", newHref); + link.href = newHref; + }; + + updateStylesheet(); + window.addEventListener("storage", updateStylesheet); + return () => window.removeEventListener("storage", updateStylesheet); + }, []); + const getIpAddress = async () => { try { const response = await fetch("https://api.ipify.org?format=json"); diff --git a/greenscoutjs/src/components/Settings.jsx b/greenscoutjs/src/components/Settings.jsx index 770697b..8610722 100644 --- a/greenscoutjs/src/components/Settings.jsx +++ b/greenscoutjs/src/components/Settings.jsx @@ -26,10 +26,10 @@ function Settings() {

Settings

- {/* */} +