Add theme switcher component with dark and light mode support

Extracted theme toggle functionality into a new `app-theme` component to improve modularity and reusability. Integrated theme settings with a service using cookies for persistence and introduced the `THEME_MODE` enum. Updated header component to utilize the new theme switcher and removed inline implementation.
This commit is contained in:
2025-04-03 22:21:21 +02:00
parent e3c9fa2165
commit dbfe5b38ab
11 changed files with 214 additions and 92 deletions
@@ -126,12 +126,7 @@
</ul>
</li>
</ul>
<div class="switch-div" style="z-index: 1;">
<label class="switch">
<input type="checkbox" onchange="toggleTheme()" id="slider">
<span class="slider round"></span>
</label>
</div>
<app-theme></app-theme>
</div>
</nav>
@@ -251,86 +251,6 @@ nav img {
display: none;
}
/* darkmode switch start */
/* The switch - the box around the slider */
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 25px;
}
.switch-div{
position: absolute;
right: 40px;
}
/* Hide default HTML checkbox */
.switch input {
opacity: 0;
width: 0;
height: 0;
}
/* The slider */
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: 0.4s;
transition: 0.4s;
}
.slider:before {
position: absolute;
content: "";
height: 37px;
width: 37px;
left: 0;
top: 0;
bottom: 0;
margin: auto 0;
-webkit-transition: 0.4s;
transition: 0.4s;
box-shadow: 0 0 15px #2020203d;
background: var(--switch) url('https://i.ibb.co/7JfqXxB/sunny.png');
background-repeat: no-repeat;
background-position: center;
}
input:checked + .slider {
background-color: var(--link-color);
}
input:focus + .slider {
box-shadow: 0 0 1px var(--link-color);
}
input:checked + .slider:before {
-webkit-transform: translateX(24px);
-ms-transform: translateX(24px);
transform: translateX(24px);
background: var(--switch) url('https://i.ibb.co/FxzBYR9/night.png');
background-repeat: no-repeat;
background-position: center;
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
/* darkmode switch end */
@-moz-document url-prefix() {
.dropdown2{
top: 12px;