diff --git a/src/components/task-bar/AppList.module.css b/src/components/task-bar/AppList.module.css new file mode 100644 index 0000000..84ba1c6 --- /dev/null +++ b/src/components/task-bar/AppList.module.css @@ -0,0 +1,25 @@ +.App-list { + --scrollbar-color: rgba(0, 0, 0, 25%); + overflow-y: auto; + max-height: 100%; +} + +.App-button { + display: flex; + gap: 1rem; + width: 100%; + padding: 0.25rem 0.5rem; + border-radius: 0.5rem; +} + +.App-button > div, +.App-button > div > div, +.App-button > div > div > svg { + width: 2rem; + height: 2rem; +} + +.App-button > p { + margin: 0; + white-space: nowrap; +} \ No newline at end of file diff --git a/src/components/task-bar/Battery.jsx b/src/components/task-bar/Battery.jsx new file mode 100644 index 0000000..77948f9 --- /dev/null +++ b/src/components/task-bar/Battery.jsx @@ -0,0 +1,69 @@ +import { faBatteryEmpty, faBatteryFull, faBatteryHalf, faBatteryQuarter, faBatteryThreeQuarters, faMinus } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useEffect, useState } from "react"; +import styles from "./Battery.module.css"; + +export function Battery() { + const [isCharging, setIsCharging] = useState(false); + const [percentage, setPercentage] = useState(100); + // const [chargingTime, setChargingTime] = useState(0); + // const [dischargingTime, setDischargingTime] = useState(0); + + useEffect(() => { + navigator.getBattery().then((battery) => { + const updateIsCharging = () => { + setIsCharging(battery.charging); + }; + + const updatePercentage = () => { + setPercentage(battery.level * 100); + }; + + // const updateChargingTime = () => { + // setChargingTime(battery.chargingTime); + // }; + + // const updateDischargingTime = () => { + // setDischargingTime(battery.dischargingTime); + // }; + + updateIsCharging(); + updatePercentage(); + // updateChargingTime(); + // updateDischargingTime(); + + battery.addEventListener("chargingchange", updateIsCharging); + battery.addEventListener("levelchange", updatePercentage); + // battery.addEventListener("chargingtimechange", updateChargingTime); + // battery.addEventListener("dischargingtimechange", updateDischargingTime); + + return () => { + battery.removeEventListener("chargingchange", updateIsCharging); + battery.removeEventListener("levelchange", updatePercentage); + // battery.removeEventListener("chargingtimechange", updateChargingTime); + // battery.removeEventListener("dischargingtimechange", updateDischargingTime); + } + }); + }); + + let icon = faBatteryFull; + if (percentage < 25) { + icon = faBatteryEmpty; + } else if (percentage < 50) { + icon = faBatteryQuarter; + } else if (percentage < 75) { + icon = faBatteryHalf; + } else if (percentage < 100) { + icon = faBatteryThreeQuarters; + } + + return ( + + ); +} \ No newline at end of file diff --git a/src/components/task-bar/Battery.module.css b/src/components/task-bar/Battery.module.css new file mode 100644 index 0000000..cb39076 --- /dev/null +++ b/src/components/task-bar/Battery.module.css @@ -0,0 +1,13 @@ +.Button { + position: relative; +} + +.Charging-indicator { + --outline-color: var(--background-color-c); + --outline-width: 2px; + + position: absolute; + top: 0.55rem; + right: 0.15rem; + height: 0.7rem !important; +} \ No newline at end of file diff --git a/src/components/task-bar/Calendar.jsx b/src/components/task-bar/Calendar.jsx new file mode 100644 index 0000000..0f50e26 --- /dev/null +++ b/src/components/task-bar/Calendar.jsx @@ -0,0 +1,28 @@ +import { useEffect, useState } from "react"; +import styles from "./Calendar.module.css"; + +export function Calendar() { + const [date, setDate] = useState(new Date()); + + useEffect(() => { + setInterval(() => { + setDate(new Date()); + }, 30000); + }, []); + + return ( + + ); +} \ No newline at end of file diff --git a/src/components/task-bar/Calendar.module.css b/src/components/task-bar/Calendar.module.css new file mode 100644 index 0000000..a9012e9 --- /dev/null +++ b/src/components/task-bar/Calendar.module.css @@ -0,0 +1,3 @@ +.Button { + white-space: nowrap; +} \ No newline at end of file diff --git a/src/components/task-bar/HomeMenu.jsx b/src/components/task-bar/HomeMenu.jsx index 4dac8ed..1d7cadf 100644 --- a/src/components/task-bar/HomeMenu.jsx +++ b/src/components/task-bar/HomeMenu.jsx @@ -1,5 +1,6 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import styles from "./HomeMenu.module.css"; +import appStyles from "./AppList.module.css"; import { faCircleInfo, faFileLines, faGear, faImage, faPowerOff } from "@fortawesome/free-solid-svg-icons"; import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js"; import ApplicationsManager from "../../features/applications/applications.js"; @@ -8,7 +9,7 @@ import { closeTab } from "../../features/utils/browser.js"; import { useKeyboardListener } from "../../hooks/utils/keyboard.js"; import { useVirtualRoot } from "../../hooks/virtual-drive/VirtualRootContext.js"; -export function HomeMenu({ active, setActive }) { +export function HomeMenu({ active, setActive, search }) { const windowsManager = useWindowsManager(); const virtualRoot = useVirtualRoot(); @@ -23,6 +24,10 @@ export function HomeMenu({ active, setActive }) { onlyAltKey = true; } else { onlyAltKey = false; + + if (active && event.key.length === 1) { + search(event.key); + } } } @@ -39,7 +44,7 @@ export function HomeMenu({ active, setActive }) { useKeyboardListener({ onKeyDown, onKeyUp }); return ( -