diff --git a/README.md b/README.md
index e899934..ab46f9a 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ ProzillaOS is a web-based operating system inspired by Ubuntu Linux and Windows
**Live demo: [os.prozilla.dev](https://os.prozilla.dev/)**
-
+
> Please note that ProzillaOS is a WIP and far from complete. Many additional features will be added in the near future.
@@ -30,7 +30,7 @@ ProzillaOS was designed in Figma by Prozilla. You can view the design file [here
### Preview
-
+
## Support ProzillaOS
diff --git a/package.json b/package.json
index e0433b6..f1436ad 100644
--- a/package.json
+++ b/package.json
@@ -37,6 +37,7 @@
"react-app/jest"
],
"plugins": [
+ "react",
"jsdoc"
],
"rules": {
@@ -55,6 +56,7 @@
"double"
],
"default-case": "off",
+ "no-multi-comp": "off",
"jsdoc/no-undefined-types": "warn",
"jsdoc/require-param": "warn",
"jsdoc/check-tag-names": "warn",
diff --git a/public/config/desktop.xml b/public/config/desktop.xml
index b24befb..699a329 100644
--- a/public/config/desktop.xml
+++ b/public/config/desktop.xml
@@ -1,4 +1,4 @@
- /media/wallpapers/Wallpaper6.png
+ /media/wallpapers/wallpaper-6.png
\ No newline at end of file
diff --git a/public/documents/info.md b/public/documents/info.md
index 9810885..848e8b5 100644
--- a/public/documents/info.md
+++ b/public/documents/info.md
@@ -1,4 +1,4 @@
-
+
# Info
diff --git a/public/index.html b/public/index.html
index 8a37bcd..f9406d9 100644
--- a/public/index.html
+++ b/public/index.html
@@ -19,14 +19,14 @@
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/public/media/Banner.png b/public/media/Banner.png
index 96c52f8..6f480b5 100644
Binary files a/public/media/Banner.png and b/public/media/Banner.png differ
diff --git a/public/media/Banner2.png b/public/media/Banner2.png
deleted file mode 100644
index 6f480b5..0000000
Binary files a/public/media/Banner2.png and /dev/null differ
diff --git a/public/media/fonts/Roboto_Mono/LICENSE.txt b/public/media/fonts/roboto-mono/LICENSE.txt
similarity index 100%
rename from public/media/fonts/Roboto_Mono/LICENSE.txt
rename to public/media/fonts/roboto-mono/LICENSE.txt
diff --git a/public/media/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf b/public/media/fonts/roboto-mono/RobotoMono-Italic-VariableFont_wght.ttf
similarity index 100%
rename from public/media/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf
rename to public/media/fonts/roboto-mono/RobotoMono-Italic-VariableFont_wght.ttf
diff --git a/public/media/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf b/public/media/fonts/roboto-mono/RobotoMono-VariableFont_wght.ttf
similarity index 100%
rename from public/media/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf
rename to public/media/fonts/roboto-mono/RobotoMono-VariableFont_wght.ttf
diff --git a/public/media/icons/close.svg b/public/media/icons/close.svg
deleted file mode 100644
index edf38b5..0000000
--- a/public/media/icons/close.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/public/media/icons/maximize.svg b/public/media/icons/maximize.svg
deleted file mode 100644
index aeb1b0d..0000000
--- a/public/media/icons/maximize.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/public/media/icons/minimize.svg b/public/media/icons/minimize.svg
deleted file mode 100644
index 266ab63..0000000
--- a/public/media/icons/minimize.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/public/media/icons/search.svg b/public/media/icons/search.svg
deleted file mode 100644
index 645909e..0000000
--- a/public/media/icons/search.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/public/media/screenshots/Screenshot2.png b/public/media/screenshots/Screenshot2.png
deleted file mode 100644
index 46d77e8..0000000
Binary files a/public/media/screenshots/Screenshot2.png and /dev/null differ
diff --git a/public/media/screenshots/Screenshot3.png b/public/media/screenshots/Screenshot3.png
deleted file mode 100644
index 5576261..0000000
Binary files a/public/media/screenshots/Screenshot3.png and /dev/null differ
diff --git a/public/media/screenshots/Screenshot1.png b/public/media/screenshots/screenshot-1.png
similarity index 100%
rename from public/media/screenshots/Screenshot1.png
rename to public/media/screenshots/screenshot-1.png
diff --git a/public/media/wallpapers/Wallpaper1.png b/public/media/wallpapers/wallpaper-1.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper1.png
rename to public/media/wallpapers/wallpaper-1.png
diff --git a/public/media/wallpapers/Wallpaper2.png b/public/media/wallpapers/wallpaper-2.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper2.png
rename to public/media/wallpapers/wallpaper-2.png
diff --git a/public/media/wallpapers/Wallpaper3.png b/public/media/wallpapers/wallpaper-3.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper3.png
rename to public/media/wallpapers/wallpaper-3.png
diff --git a/public/media/wallpapers/Wallpaper4.png b/public/media/wallpapers/wallpaper-4.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper4.png
rename to public/media/wallpapers/wallpaper-4.png
diff --git a/public/media/wallpapers/Wallpaper5.png b/public/media/wallpapers/wallpaper-5.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper5.png
rename to public/media/wallpapers/wallpaper-5.png
diff --git a/public/media/wallpapers/Wallpaper6.png b/public/media/wallpapers/wallpaper-6.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper6.png
rename to public/media/wallpapers/wallpaper-6.png
diff --git a/public/media/wallpapers/Wallpaper7.png b/public/media/wallpapers/wallpaper-7.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper7.png
rename to public/media/wallpapers/wallpaper-7.png
diff --git a/public/media/wallpapers/Wallpaper8.png b/public/media/wallpapers/wallpaper-8.png
similarity index 100%
rename from public/media/wallpapers/Wallpaper8.png
rename to public/media/wallpapers/wallpaper-8.png
diff --git a/src/App.jsx b/src/App.jsx
index 7a5cb83..c91b140 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,10 +1,10 @@
import styles from "./App.module.css";
import { Taskbar } from "./components/task-bar/TaskBar.jsx";
-import { WindowsManagerProvider } from "./hooks/windows/WindowsManagerContext.js";
+import { WindowsManagerProvider } from "./hooks/windows/windowsManagerContext.js";
import { WindowsView } from "./components/windows/WindowsView.jsx";
-import { VirtualRootProvider } from "./hooks/virtual-drive/VirtualRootContext.js";
+import { VirtualRootProvider } from "./hooks/virtual-drive/virtualRootContext.js";
import { Desktop } from "./components/desktop/Desktop.jsx";
-import { SettingsManagerProvider } from "./hooks/settings/SettingsContext.js";
+import { SettingsManagerProvider } from "./hooks/settings/settingsManagerContext.js";
import { ModalsView } from "./components/modals/ModalsView.jsx";
import { useEffect } from "react";
diff --git a/src/components/applications/file-explorer/FileExplorer.jsx b/src/components/applications/file-explorer/FileExplorer.jsx
index 9befb74..4c74d44 100644
--- a/src/components/applications/file-explorer/FileExplorer.jsx
+++ b/src/components/applications/file-explorer/FileExplorer.jsx
@@ -1,13 +1,13 @@
import { useState } from "react";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js";
+import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
import styles from "./FileExplorer.module.css";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faArrowUp, faCaretLeft, faCaretRight, faCog, faDesktop, faFile, faFileLines, faFolder, faHouse, faImage, faPlus, faSearch } from "@fortawesome/free-solid-svg-icons";
-import { VirtualFile } from "../../../features/virtual-drive/virtual-file.js";
-import { useWindowsManager } from "../../../hooks/windows/WindowsManagerContext.js";
+import { VirtualFile } from "../../../features/virtual-drive/virtualFile.js";
+import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
import utilStyles from "../../../styles/utils.module.css";
// import { useContextMenu } from "../../../hooks/modals/ContextMenu.js";
-import { useModals } from "../../../hooks/modals/Modals.js";
+import { useModals } from "../../../hooks/modals/modals.js";
import { ModalsView } from "../../modals/ModalsView.jsx";
/**
diff --git a/src/components/applications/media-viewer/MediaViewer.jsx b/src/components/applications/media-viewer/MediaViewer.jsx
index 58b3a5e..0092645 100644
--- a/src/components/applications/media-viewer/MediaViewer.jsx
+++ b/src/components/applications/media-viewer/MediaViewer.jsx
@@ -1,7 +1,7 @@
import { useEffect } from "react";
-import { VirtualFile } from "../../../features/virtual-drive/virtual-file.js";
-import { useWindowsManager } from "../../../hooks/windows/WindowsManagerContext.js";
+import { VirtualFile } from "../../../features/virtual-drive/virtualFile.js";
+import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
import styles from "./MediaViewer.module.css";
/**
diff --git a/src/components/applications/settings/AboutSettings.jsx b/src/components/applications/settings/AboutSettings.jsx
index ece35ff..22378bd 100644
--- a/src/components/applications/settings/AboutSettings.jsx
+++ b/src/components/applications/settings/AboutSettings.jsx
@@ -2,8 +2,8 @@ import { Button } from "../../utils/Button.jsx";
import styles from "./Settings.module.css";
import utilStyles from "../../../styles/utils.module.css";
import Vector2 from "../../../features/math/vector2.js";
-import { useWindowsManager } from "../../../hooks/windows/WindowsManagerContext.js";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js";
+import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
+import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
export function AboutSettings() {
const windowsManager = useWindowsManager();
diff --git a/src/components/applications/settings/AppearanceSettings.jsx b/src/components/applications/settings/AppearanceSettings.jsx
index be6fa9f..bca3f4a 100644
--- a/src/components/applications/settings/AppearanceSettings.jsx
+++ b/src/components/applications/settings/AppearanceSettings.jsx
@@ -1,8 +1,8 @@
import { useEffect, useState } from "react";
-import { SettingsManager } from "../../../features/settings/settings.js";
+import { SettingsManager } from "../../../features/settings/settingsManager.js";
import styles from "./Settings.module.css";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js";
-import { useSettingsManager } from "../../../hooks/settings/SettingsContext.js";
+import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
+import { useSettingsManager } from "../../../hooks/settings/settingsManagerContext.js";
export function AppearanceSettings() {
const virtualRoot = useVirtualRoot();
diff --git a/src/components/applications/settings/StorageSettings.jsx b/src/components/applications/settings/StorageSettings.jsx
index ad04296..83277e9 100644
--- a/src/components/applications/settings/StorageSettings.jsx
+++ b/src/components/applications/settings/StorageSettings.jsx
@@ -3,8 +3,8 @@ import utilStyles from "../../../styles/utils.module.css";
import { round } from "../../../features/math/round.js";
import { ProgressBar } from "../../utils/ProgressBar.jsx";
import { Button } from "../../utils/Button.jsx";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js";
-import { StorageManager } from "../../../features/storage/storage.js";
+import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
+import { StorageManager } from "../../../features/storage/storageManager.js";
export function StorageTab() {
const virtualRoot = useVirtualRoot();
diff --git a/src/components/applications/terminal/Terminal.jsx b/src/components/applications/terminal/Terminal.jsx
index 5a5d360..fac2cb9 100644
--- a/src/components/applications/terminal/Terminal.jsx
+++ b/src/components/applications/terminal/Terminal.jsx
@@ -1,6 +1,6 @@
import { useEffect, useRef, useState } from "react";
import styles from "./Terminal.module.css";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js";
+import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
import { Command } from "../../../features/applications/terminal/commands.js";
import { clamp } from "../../../features/math/clamp.js";
diff --git a/src/components/applications/text-editor/TextEditor.jsx b/src/components/applications/text-editor/TextEditor.jsx
index a17d4e8..98929b4 100644
--- a/src/components/applications/text-editor/TextEditor.jsx
+++ b/src/components/applications/text-editor/TextEditor.jsx
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react";
-import { VirtualFile } from "../../../features/virtual-drive/virtual-file.js";
+import { VirtualFile } from "../../../features/virtual-drive/virtualFile.js";
import styles from "./TextEditor.module.css";
import { HeaderMenu } from "../.common/HeaderMenu.jsx";
import Markdown from "markdown-to-jsx";
diff --git a/src/components/desktop/Desktop.jsx b/src/components/desktop/Desktop.jsx
index 2ee0278..4debd82 100644
--- a/src/components/desktop/Desktop.jsx
+++ b/src/components/desktop/Desktop.jsx
@@ -1,12 +1,12 @@
import { useState } from "react";
-import { SettingsManager } from "../../features/settings/settings.js";
-import { useSettingsManager } from "../../hooks/settings/SettingsContext.js";
+import { SettingsManager } from "../../features/settings/settingsManager.js";
+import { useSettingsManager } from "../../hooks/settings/settingsManagerContext.js";
import styles from "./Desktop.module.css";
import { useEffect } from "react";
-import { useModals } from "../../hooks/modals/Modals.js";
+import { useModals } from "../../hooks/modals/modals.js";
import { ModalsView } from "../modals/ModalsView.jsx";
-import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js";
-import { useContextMenu } from "../../hooks/modals/ContextMenu.js";
+import { useWindowsManager } from "../../hooks/windows/windowsManagerContext.js";
+import { useContextMenu } from "../../hooks/modals/contextMenu.js";
export function Desktop() {
const settingsManager = useSettingsManager();
diff --git a/src/components/task-bar/TaskBar.jsx b/src/components/task-bar/TaskBar.jsx
index 8bd1bb3..3555d83 100644
--- a/src/components/task-bar/TaskBar.jsx
+++ b/src/components/task-bar/TaskBar.jsx
@@ -3,8 +3,8 @@ import styles from "./TaskBar.module.css";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faSearch } from "@fortawesome/free-solid-svg-icons";
import ApplicationsManager from "../../features/applications/applications.js";
-import { useWindows } from "../../hooks/windows/WindowsContext.js";
-import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js";
+import { useWindows } from "../../hooks/windows/windowsContext.js";
+import { useWindowsManager } from "../../hooks/windows/windowsManagerContext.js";
import { ReactSVG } from "react-svg";
import Application from "../../features/applications/application.js";
import { HomeMenu } from "./menus/HomeMenu.jsx";
diff --git a/src/components/task-bar/menus/HomeMenu.jsx b/src/components/task-bar/menus/HomeMenu.jsx
index 48506fd..60041dc 100644
--- a/src/components/task-bar/menus/HomeMenu.jsx
+++ b/src/components/task-bar/menus/HomeMenu.jsx
@@ -2,12 +2,12 @@ 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 { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
import ApplicationsManager from "../../../features/applications/applications.js";
import { ReactSVG } from "react-svg";
import { closeTab } from "../../../features/utils/browser.js";
import { useKeyboardListener } from "../../../hooks/utils/keyboard.js";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js";
+import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
import { useEffect, useState } from "react";
import Vector2 from "../../../features/math/vector2.js";
import utilStyles from "../../../styles/utils.module.css";
diff --git a/src/components/task-bar/menus/SearchMenu.jsx b/src/components/task-bar/menus/SearchMenu.jsx
index fec7f2b..c7199f3 100644
--- a/src/components/task-bar/menus/SearchMenu.jsx
+++ b/src/components/task-bar/menus/SearchMenu.jsx
@@ -1,7 +1,7 @@
import styles from "./SearchMenu.module.css";
import appStyles from "./AppList.module.css";
import ApplicationsManager from "../../../features/applications/applications.js";
-import { useWindowsManager } from "../../../hooks/windows/WindowsManagerContext.js";
+import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
import { ReactSVG } from "react-svg";
import { useEffect } from "react";
import { useState } from "react";
diff --git a/src/components/windows/WindowView.jsx b/src/components/windows/WindowView.jsx
index 88240b9..a61d8a0 100644
--- a/src/components/windows/WindowView.jsx
+++ b/src/components/windows/WindowView.jsx
@@ -2,16 +2,16 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import styles from "./WindowView.module.css";
import { faMinus, faWindowMaximize as fasWindowMaximize, faXmark } from "@fortawesome/free-solid-svg-icons";
import { ReactSVG } from "react-svg";
-import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js";
+import { useWindowsManager } from "../../hooks/windows/windowsManagerContext.js";
import Draggable from "react-draggable";
import { memo, useEffect, useRef, useState } from "react";
import Application from "../../features/applications/application.js";
import Vector2 from "../../features/math/vector2.js";
import { faWindowMaximize } from "@fortawesome/free-regular-svg-icons";
import utilStyles from "../../styles/utils.module.css";
-import { useModals } from "../../hooks/modals/Modals.js";
+import { useModals } from "../../hooks/modals/modals.js";
import { ModalsView } from "../modals/ModalsView.jsx";
-import { useContextMenu } from "../../hooks/modals/ContextMenu.js";
+import { useContextMenu } from "../../hooks/modals/contextMenu.js";
/**
* @param {object} props
diff --git a/src/components/windows/WindowsView.jsx b/src/components/windows/WindowsView.jsx
index 0cdbcf8..2858e27 100644
--- a/src/components/windows/WindowsView.jsx
+++ b/src/components/windows/WindowsView.jsx
@@ -1,5 +1,5 @@
-import { useWindows } from "../../hooks/windows/WindowsContext.js";
-import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js";
+import { useWindows } from "../../hooks/windows/windowsContext.js";
+import { useWindowsManager } from "../../hooks/windows/windowsManagerContext.js";
import { useEffect, useState } from "react";
import { WindowView } from "./WindowView.jsx";
diff --git a/src/constants/branding.js b/src/constants/branding.js
new file mode 100644
index 0000000..2bb43cf
--- /dev/null
+++ b/src/constants/branding.js
@@ -0,0 +1,18 @@
+export const NAME = "ProzillaOS";
+
+export const ASCII_LOGO = `
+ :.
+ -==.
+ .=====:
+ ---::..:=======-.
+ :===+=----------::..
+ =+=---------------:..
+ --------------------:.
+ .:-+=----*###*--*####=---.
+ :==+----#%+-+%#-##%*+----:.
+ .=----#%+-+%#-*+-%#+---:.
+ ==----*###*--*###*----.
+ ==+-------------------:.
+ ...::---------------:.
+ .::---------::..
+ ....::... `;
\ No newline at end of file
diff --git a/src/constants/virtualDrive.js b/src/constants/virtualDrive.js
new file mode 100644
index 0000000..ad46396
--- /dev/null
+++ b/src/constants/virtualDrive.js
@@ -0,0 +1 @@
+export const WALLPAPER_COUNT = 8;
\ No newline at end of file
diff --git a/src/features/applications/terminal/commands.js b/src/features/applications/terminal/commands.js
index f2e48a2..5259dc7 100644
--- a/src/features/applications/terminal/commands.js
+++ b/src/features/applications/terminal/commands.js
@@ -1,24 +1,8 @@
+import { ASCII_LOGO } from "../../../constants/branding.js";
import { START_DATE } from "../../../index.js";
import { formatRelativeTime } from "../../utils/date.js";
import ApplicationsManager from "../applications.js";
-export const ASCII_LOGO = `
- :.
- -==.
- .=====:
- ---::..:=======-.
- :===+=----------::..
- =+=---------------:..
- --------------------:.
- .:-+=----*###*--*####=---.
- :==+----#%+-+%#-##%*+----:.
- .=----#%+-+%#-*+-%#+---:.
- ==----*###*--*###*----.
- ==+-------------------:.
- ...::---------------:.
- .::---------::..
- ....::... `;
-
export class Command {
/**
* @param {string} name
diff --git a/src/features/settings/settings.js b/src/features/settings/settings.js
index c708824..c6c87ca 100644
--- a/src/features/settings/settings.js
+++ b/src/features/settings/settings.js
@@ -1,7 +1,5 @@
-
-import { VirtualFile } from "../virtual-drive/virtual-file.js";
-
-import { VirtualRoot } from "../virtual-drive/virtual-root.js";
+import { VirtualFile } from "../virtual-drive/virtualFile.js";
+import { VirtualRoot } from "../virtual-drive/virtualRoot.js";
export class Settings {
xmlDoc = null;
@@ -119,42 +117,4 @@ export class Settings {
await this.write();
}
-}
-
-export class SettingsManager {
- /**
- * @type {Object}
- */
- static VIRTUAL_PATHS = {
- "desktop": "~/.config/desktop.xml"
- };
-
- /**
- * @type {Object}
- */
- #pathToSettings = {};
-
- /**
- * @type {VirtualRoot}
- */
- #virtualRoot = null;
-
- /**
- * @param {VirtualRoot} virtualRoot
- */
- constructor(virtualRoot) {
- this.#virtualRoot = virtualRoot;
-
- Object.values(SettingsManager.VIRTUAL_PATHS).forEach((path) => {
- this.#pathToSettings[path] = new Settings(this.#virtualRoot, path);
- });
- }
-
- /**
- * @param {string} path
- * @returns {Settings}
- */
- get(path) {
- return this.#pathToSettings[path];
- }
}
\ No newline at end of file
diff --git a/src/features/settings/settingsManager.js b/src/features/settings/settingsManager.js
new file mode 100644
index 0000000..12f335d
--- /dev/null
+++ b/src/features/settings/settingsManager.js
@@ -0,0 +1,40 @@
+import { VirtualRoot } from "../virtual-drive/virtualRoot.js";
+import { Settings } from "./settings.js";
+
+export class SettingsManager {
+ /**
+ * @type {Object}
+ */
+ static VIRTUAL_PATHS = {
+ "desktop": "~/.config/desktop.xml"
+ };
+
+ /**
+ * @type {Object}
+ */
+ #pathToSettings = {};
+
+ /**
+ * @type {VirtualRoot}
+ */
+ #virtualRoot = null;
+
+ /**
+ * @param {VirtualRoot} virtualRoot
+ */
+ constructor(virtualRoot) {
+ this.#virtualRoot = virtualRoot;
+
+ Object.values(SettingsManager.VIRTUAL_PATHS).forEach((path) => {
+ this.#pathToSettings[path] = new Settings(this.#virtualRoot, path);
+ });
+ }
+
+ /**
+ * @param {string} path
+ * @returns {Settings}
+ */
+ get(path) {
+ return this.#pathToSettings[path];
+ }
+}
\ No newline at end of file
diff --git a/src/features/storage/storage.js b/src/features/storage/storageManager.js
similarity index 100%
rename from src/features/storage/storage.js
rename to src/features/storage/storageManager.js
diff --git a/src/features/virtual-drive/virtual-base.js b/src/features/virtual-drive/virtualBase.js
similarity index 96%
rename from src/features/virtual-drive/virtual-base.js
rename to src/features/virtual-drive/virtualBase.js
index 6bc5f9a..910f070 100644
--- a/src/features/virtual-drive/virtual-base.js
+++ b/src/features/virtual-drive/virtualBase.js
@@ -1,6 +1,6 @@
import { EventEmitter } from "../utils/events.js";
-import { VirtualRoot } from "./virtual-root.js";
+import { VirtualRoot } from "./virtualRoot.js";
export class VirtualBase extends EventEmitter {
/**
diff --git a/src/features/virtual-drive/virtual-file.js b/src/features/virtual-drive/virtualFile.js
similarity index 97%
rename from src/features/virtual-drive/virtual-file.js
rename to src/features/virtual-drive/virtualFile.js
index 1409057..6830b13 100644
--- a/src/features/virtual-drive/virtual-file.js
+++ b/src/features/virtual-drive/virtualFile.js
@@ -1,4 +1,4 @@
-import { VirtualBase } from "./virtual-base.js";
+import { VirtualBase } from "./virtualBase.js";
/**
* A virtual file that can be stored inside a folder
diff --git a/src/features/virtual-drive/virtual-folder.js b/src/features/virtual-drive/virtualFolder.js
similarity index 98%
rename from src/features/virtual-drive/virtual-folder.js
rename to src/features/virtual-drive/virtualFolder.js
index db7565d..f4bf942 100644
--- a/src/features/virtual-drive/virtual-folder.js
+++ b/src/features/virtual-drive/virtualFolder.js
@@ -1,6 +1,6 @@
import { removeFromArray } from "../utils/array.js";
-import { VirtualBase } from "./virtual-base.js";
-import { VirtualFile } from "./virtual-file.js";
+import { VirtualBase } from "./virtualBase.js";
+import { VirtualFile } from "./virtualFile.js";
/**
* A virtual folder that can contains files and sub-folders
diff --git a/src/features/virtual-drive/virtual-root.js b/src/features/virtual-drive/virtualRoot.js
similarity index 92%
rename from src/features/virtual-drive/virtual-root.js
rename to src/features/virtual-drive/virtualRoot.js
index 832a042..e673a42 100644
--- a/src/features/virtual-drive/virtual-root.js
+++ b/src/features/virtual-drive/virtualRoot.js
@@ -1,8 +1,7 @@
-import { StorageManager } from "../storage/storage.js";
-import { VirtualFile } from "./virtual-file.js";
-import { VirtualFolder } from "./virtual-folder.js";
-
-export const WALLPAPER_COUNT = 8;
+import { WALLPAPER_COUNT } from "../../constants/virtualDrive.js";
+import { StorageManager } from "../storage/storageManager.js";
+import { VirtualFile } from "./virtualFile.js";
+import { VirtualFolder } from "./virtualFolder.js";
/**
* A virtual folder that serves as the root folder
@@ -55,7 +54,7 @@ export class VirtualRoot extends VirtualFolder {
.createFolder("Images", (folder) => {
for (let i = 0; i < WALLPAPER_COUNT; i++) {
folder.createFile(`Wallpaper${i + 1}`, "png", (file) => {
- file.setSource(`/media/wallpapers/Wallpaper${i + 1}.png`);
+ file.setSource(`/media/wallpapers/wallpaper-${i + 1}.png`);
});
}
})
@@ -172,7 +171,7 @@ export class VirtualRoot extends VirtualFolder {
/**
* Adds a shortcut to a file or folder
* @param {string} name
- * @param {VirtualFile|VirtualFolder} destination
+ * @param {VirtualFile | VirtualFolder} destination
* @returns {VirtualRoot}
*/
addShortcut(name, destination) {
diff --git a/src/features/windows/windows.js b/src/features/windows/windowsManager.js
similarity index 97%
rename from src/features/windows/windows.js
rename to src/features/windows/windowsManager.js
index 234a3c3..e379298 100644
--- a/src/features/windows/windows.js
+++ b/src/features/windows/windowsManager.js
@@ -1,7 +1,7 @@
import ApplicationsManager from "../applications/applications.js";
import { randomRange } from "../math/random.js";
import Vector2 from "../math/vector2.js";
-import { VirtualFile } from "../virtual-drive/virtual-file.js";
+import { VirtualFile } from "../virtual-drive/virtualFile.js";
export const SCREEN_MARGIN = 32;
export const TASKBAR_HEIGHT = 48;
diff --git a/src/hooks/settings/SettingsContext.js b/src/hooks/settings/settingsManagerContext.js
similarity index 90%
rename from src/hooks/settings/SettingsContext.js
rename to src/hooks/settings/settingsManagerContext.js
index 126bd7a..47dadb2 100644
--- a/src/hooks/settings/SettingsContext.js
+++ b/src/hooks/settings/settingsManagerContext.js
@@ -1,6 +1,6 @@
import { createContext, useContext } from "react";
-import { SettingsManager } from "../../features/settings/settings.js";
-import { useVirtualRoot } from "../virtual-drive/VirtualRootContext.js";
+import { SettingsManager } from "../../features/settings/settingsManager.js";
+import { useVirtualRoot } from "../virtual-drive/virtualRootContext.js";
const SettingsContext = createContext();
diff --git a/src/hooks/virtual-drive/VirtualRootContext.js b/src/hooks/virtual-drive/VirtualRootContext.js
index 55ed5bf..3ab354b 100644
--- a/src/hooks/virtual-drive/VirtualRootContext.js
+++ b/src/hooks/virtual-drive/VirtualRootContext.js
@@ -1,5 +1,5 @@
import { createContext, useContext } from "react";
-import { VirtualRoot } from "../../features/virtual-drive/virtual-root.js";
+import { VirtualRoot } from "../../features/virtual-drive/virtualRoot.js";
const VirtualRootContext = createContext();
diff --git a/src/hooks/windows/WindowsManagerContext.js b/src/hooks/windows/WindowsManagerContext.js
index 48325c6..bf746c4 100644
--- a/src/hooks/windows/WindowsManagerContext.js
+++ b/src/hooks/windows/WindowsManagerContext.js
@@ -1,6 +1,6 @@
import { createContext, useContext } from "react";
-import WindowsManager from "../../features/windows/windows.js";
-import { WindowsProvider } from "./WindowsContext.js";
+import WindowsManager from "../../features/windows/windowsManager.js";
+import { WindowsProvider } from "./windowsContext.js";
const WindowsManagerContext = createContext();
diff --git a/src/index.js b/src/index.js
index 80f46eb..72bcc31 100644
--- a/src/index.js
+++ b/src/index.js
@@ -3,7 +3,7 @@ import ReactDOM from "react-dom/client";
import "./styles/global.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
-import { ASCII_LOGO } from "./features/applications/terminal/commands.js";
+import { ASCII_LOGO } from "./constants/branding.js";
export const START_DATE = new Date();
diff --git a/src/styles/global/fonts.css b/src/styles/global/fonts.css
index be0ead5..737477b 100644
--- a/src/styles/global/fonts.css
+++ b/src/styles/global/fonts.css
@@ -7,62 +7,62 @@
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-Thin.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-Thin.ttf");
font-weight: 100;
font-display: swap;
}
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-ExtraLight.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-ExtraLight.ttf");
font-weight: 200;
font-display: swap;
}
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-Light.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-Light.ttf");
font-weight: 300;
font-display: swap;
}
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-Regular.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-Regular.ttf");
font-weight: 400;
font-display: swap;
}
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-SemiBold.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-SemiBold.ttf");
font-weight: 500;
font-display: swap;
}
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-Bold.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-Bold.ttf");
font-weight: 600;
font-display: swap;
}
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-ExtraBold.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-ExtraBold.ttf");
font-weight: 700;
font-display: swap;
}
@font-face {
font-family: "Poppins";
- src: url("/public/media/fonts/Poppins/Poppins-Black.ttf");
+ src: url("/public/media/fonts/poppins/Poppins-Black.ttf");
font-weight: 800;
font-display: swap;
}
@font-face {
font-family: "Roboto Mono";
- src: url("/public/media/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf");
+ src: url("/public/media/fonts/roboto-mono/RobotoMono-VariableFont_wght.ttf");
font-display: swap;
}
\ No newline at end of file