Refactored project

This commit is contained in:
Prozilla 2023-08-15 18:55:17 +02:00
parent 219e712e9f
commit fef01fa88c
No known key found for this signature in database
GPG key ID: 5858DFE71CAF31EE
55 changed files with 133 additions and 142 deletions

View file

@ -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/)** **Live demo: [os.prozilla.dev](https://os.prozilla.dev/)**
<img src="public/media/Banner2.png"/> <img src="public/media/banner.png"/>
> Please note that ProzillaOS is a WIP and far from complete. Many additional features will be added in the near future. > 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 ### Preview
<img src="public/media/screenshots/Screenshot1.png"/> <img src="public/media/screenshots/screenshot-1.png"/>
## Support ProzillaOS ## Support ProzillaOS

View file

@ -37,6 +37,7 @@
"react-app/jest" "react-app/jest"
], ],
"plugins": [ "plugins": [
"react",
"jsdoc" "jsdoc"
], ],
"rules": { "rules": {
@ -55,6 +56,7 @@
"double" "double"
], ],
"default-case": "off", "default-case": "off",
"no-multi-comp": "off",
"jsdoc/no-undefined-types": "warn", "jsdoc/no-undefined-types": "warn",
"jsdoc/require-param": "warn", "jsdoc/require-param": "warn",
"jsdoc/check-tag-names": "warn", "jsdoc/check-tag-names": "warn",

View file

@ -1,4 +1,4 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<options> <options>
<wallpaper>/media/wallpapers/Wallpaper6.png</wallpaper> <wallpaper>/media/wallpapers/wallpaper-6.png</wallpaper>
</options> </options>

View file

@ -1,4 +1,4 @@
<img src="/media/Banner2.png" width="1440" height="700" style="aspect-ratio: 3 / 1; width: 100%; height: auto; object-fit: cover;" alt="Banner with ProzillaOS' name and logo"/> <img src="/media/banner.png" width="1440" height="700" style="aspect-ratio: 3 / 1; width: 100%; height: auto; object-fit: cover;" alt="Banner with ProzillaOS' name and logo"/>
# Info # Info

View file

@ -19,14 +19,14 @@
<meta property="og:site_name" content="ProzillaOS"/> <meta property="og:site_name" content="ProzillaOS"/>
<meta property="og:description" content="ProzillaOS is an open-source web-based operating system inspired by Ubuntu Linux and Windows made with React.js by Prozilla."/> <meta property="og:description" content="ProzillaOS is an open-source web-based operating system inspired by Ubuntu Linux and Windows made with React.js by Prozilla."/>
<meta property="og:type" content="website"/> <meta property="og:type" content="website"/>
<meta property="og:image" content="%PUBLIC_URL%/media/Banner2.png"/> <meta property="og:image" content="%PUBLIC_URL%/media/banner.png"/>
<!-- Fonts --> <!-- Fonts -->
<link rel="preload" href="%PUBLIC_URL%/media/fonts/Poppins/Poppins-Light.ttf" as="font" type="font/ttf" crossorigin> <link rel="preload" href="%PUBLIC_URL%/media/fonts/poppins/Poppins-Light.ttf" as="font" type="font/ttf" crossorigin>
<link rel="preload" href="%PUBLIC_URL%/media/fonts/Poppins/Poppins-Regular.ttf" as="font" type="font/ttf" crossorigin> <link rel="preload" href="%PUBLIC_URL%/media/fonts/poppins/Poppins-Regular.ttf" as="font" type="font/ttf" crossorigin>
<link rel="preload" href="%PUBLIC_URL%/media/fonts/Poppins/Poppins-SemiBold.ttf" as="font" type="font/ttf" crossorigin> <link rel="preload" href="%PUBLIC_URL%/media/fonts/poppins/Poppins-SemiBold.ttf" as="font" type="font/ttf" crossorigin>
<link rel="preload" href="%PUBLIC_URL%/media/fonts/Poppins/Poppins-Bold.ttf" as="font" type="font/ttf" crossorigin> <link rel="preload" href="%PUBLIC_URL%/media/fonts/poppins/Poppins-Bold.ttf" as="font" type="font/ttf" crossorigin>
<link rel="preload" href="%PUBLIC_URL%/media/fonts/Roboto Mono/RobotoMono-VariableFont_wght.ttf" as="font" type="font/ttf" crossorigin> <link rel="preload" href="%PUBLIC_URL%/media/fonts/roboto-mono/RobotoMono-VariableFont_wght.ttf" as="font" type="font/ttf" crossorigin>
</head> </head>
<body> <body>
<noscript>You need to enable JavaScript to run ProzillaOS.</noscript> <noscript>You need to enable JavaScript to run ProzillaOS.</noscript>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

View file

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.32233 7.32233C17.0854 -2.44078 32.9146 -2.44078 42.6777 7.32233L100 64.6447L157.322 7.32233C167.085 -2.44078 182.915 -2.44078 192.678 7.32233C202.441 17.0854 202.441 32.9146 192.678 42.6777L135.355 100L192.678 157.322C202.441 167.085 202.441 182.915 192.678 192.678C182.915 202.441 167.085 202.441 157.322 192.678L100 135.355L42.6777 192.678C32.9146 202.441 17.0854 202.441 7.32233 192.678C-2.44078 182.915 -2.44078 167.085 7.32233 157.322L64.6447 100L7.32233 42.6777C-2.44078 32.9146 -2.44078 17.0854 7.32233 7.32233Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 654 B

View file

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M42 0C18.804 0 0 18.804 0 42V158C0 181.196 18.804 200 42 200H158C181.196 200 200 181.196 200 158V42C200 18.804 181.196 0 158 0H42ZM158 63C158 51.402 148.598 42 137 42H63C51.402 42 42 51.402 42 63V137C42 148.598 51.402 158 63 158H137C148.598 158 158 148.598 158 137V63Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 441 B

View file

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 100C0 112.703 8.95431 123 20 123H180C191.046 123 200 112.703 200 100C200 87.2975 191.046 77 180 77H20C8.95431 77 0 87.2975 0 100Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 265 B

View file

@ -1,4 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M133.182 80C133.182 113.325 107.343 139 77.0909 139C46.8391 139 21 113.325 21 80C21 46.6752 46.8391 21 77.0909 21C107.343 21 133.182 46.6752 133.182 80Z" stroke="white" stroke-width="42"/>
<path d="M120 120L175 175" stroke="white" stroke-width="42" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 KiB

View file

Before

Width:  |  Height:  |  Size: 819 KiB

After

Width:  |  Height:  |  Size: 819 KiB

View file

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 185 KiB

View file

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 253 KiB

View file

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 236 KiB

View file

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 236 KiB

View file

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 197 KiB

View file

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 216 KiB

View file

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 160 KiB

View file

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 219 KiB

View file

@ -1,10 +1,10 @@
import styles from "./App.module.css"; import styles from "./App.module.css";
import { Taskbar } from "./components/task-bar/TaskBar.jsx"; 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 { 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 { 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 { ModalsView } from "./components/modals/ModalsView.jsx";
import { useEffect } from "react"; import { useEffect } from "react";

View file

@ -1,13 +1,13 @@
import { useState } from "react"; 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 styles from "./FileExplorer.module.css";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; 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 { 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 { VirtualFile } from "../../../features/virtual-drive/virtualFile.js";
import { useWindowsManager } from "../../../hooks/windows/WindowsManagerContext.js"; import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
import utilStyles from "../../../styles/utils.module.css"; import utilStyles from "../../../styles/utils.module.css";
// import { useContextMenu } from "../../../hooks/modals/ContextMenu.js"; // 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"; import { ModalsView } from "../../modals/ModalsView.jsx";
/** /**

View file

@ -1,7 +1,7 @@
import { useEffect } from "react"; import { useEffect } from "react";
import { VirtualFile } from "../../../features/virtual-drive/virtual-file.js"; import { VirtualFile } from "../../../features/virtual-drive/virtualFile.js";
import { useWindowsManager } from "../../../hooks/windows/WindowsManagerContext.js"; import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
import styles from "./MediaViewer.module.css"; import styles from "./MediaViewer.module.css";
/** /**

View file

@ -2,8 +2,8 @@ import { Button } from "../../utils/Button.jsx";
import styles from "./Settings.module.css"; import styles from "./Settings.module.css";
import utilStyles from "../../../styles/utils.module.css"; import utilStyles from "../../../styles/utils.module.css";
import Vector2 from "../../../features/math/vector2.js"; import Vector2 from "../../../features/math/vector2.js";
import { useWindowsManager } from "../../../hooks/windows/WindowsManagerContext.js"; import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js";
import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js"; import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
export function AboutSettings() { export function AboutSettings() {
const windowsManager = useWindowsManager(); const windowsManager = useWindowsManager();

View file

@ -1,8 +1,8 @@
import { useEffect, useState } from "react"; 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 styles from "./Settings.module.css";
import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js"; import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
import { useSettingsManager } from "../../../hooks/settings/SettingsContext.js"; import { useSettingsManager } from "../../../hooks/settings/settingsManagerContext.js";
export function AppearanceSettings() { export function AppearanceSettings() {
const virtualRoot = useVirtualRoot(); const virtualRoot = useVirtualRoot();

View file

@ -3,8 +3,8 @@ import utilStyles from "../../../styles/utils.module.css";
import { round } from "../../../features/math/round.js"; import { round } from "../../../features/math/round.js";
import { ProgressBar } from "../../utils/ProgressBar.jsx"; import { ProgressBar } from "../../utils/ProgressBar.jsx";
import { Button } from "../../utils/Button.jsx"; import { Button } from "../../utils/Button.jsx";
import { useVirtualRoot } from "../../../hooks/virtual-drive/VirtualRootContext.js"; import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js";
import { StorageManager } from "../../../features/storage/storage.js"; import { StorageManager } from "../../../features/storage/storageManager.js";
export function StorageTab() { export function StorageTab() {
const virtualRoot = useVirtualRoot(); const virtualRoot = useVirtualRoot();

View file

@ -1,6 +1,6 @@
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import styles from "./Terminal.module.css"; 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 { Command } from "../../../features/applications/terminal/commands.js";
import { clamp } from "../../../features/math/clamp.js"; import { clamp } from "../../../features/math/clamp.js";

View file

@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react"; 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 styles from "./TextEditor.module.css";
import { HeaderMenu } from "../.common/HeaderMenu.jsx"; import { HeaderMenu } from "../.common/HeaderMenu.jsx";
import Markdown from "markdown-to-jsx"; import Markdown from "markdown-to-jsx";

View file

@ -1,12 +1,12 @@
import { useState } from "react"; import { useState } from "react";
import { SettingsManager } from "../../features/settings/settings.js"; import { SettingsManager } from "../../features/settings/settingsManager.js";
import { useSettingsManager } from "../../hooks/settings/SettingsContext.js"; import { useSettingsManager } from "../../hooks/settings/settingsManagerContext.js";
import styles from "./Desktop.module.css"; import styles from "./Desktop.module.css";
import { useEffect } from "react"; 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 { ModalsView } from "../modals/ModalsView.jsx";
import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js"; import { useWindowsManager } from "../../hooks/windows/windowsManagerContext.js";
import { useContextMenu } from "../../hooks/modals/ContextMenu.js"; import { useContextMenu } from "../../hooks/modals/contextMenu.js";
export function Desktop() { export function Desktop() {
const settingsManager = useSettingsManager(); const settingsManager = useSettingsManager();

View file

@ -3,8 +3,8 @@ import styles from "./TaskBar.module.css";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faSearch } from "@fortawesome/free-solid-svg-icons"; import { faSearch } from "@fortawesome/free-solid-svg-icons";
import ApplicationsManager from "../../features/applications/applications.js"; import ApplicationsManager from "../../features/applications/applications.js";
import { useWindows } from "../../hooks/windows/WindowsContext.js"; import { useWindows } from "../../hooks/windows/windowsContext.js";
import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js"; import { useWindowsManager } from "../../hooks/windows/windowsManagerContext.js";
import { ReactSVG } from "react-svg"; import { ReactSVG } from "react-svg";
import Application from "../../features/applications/application.js"; import Application from "../../features/applications/application.js";
import { HomeMenu } from "./menus/HomeMenu.jsx"; import { HomeMenu } from "./menus/HomeMenu.jsx";

View file

@ -2,12 +2,12 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import styles from "./HomeMenu.module.css"; import styles from "./HomeMenu.module.css";
import appStyles from "./AppList.module.css"; import appStyles from "./AppList.module.css";
import { faCircleInfo, faFileLines, faGear, faImage, faPowerOff } from "@fortawesome/free-solid-svg-icons"; 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 ApplicationsManager from "../../../features/applications/applications.js";
import { ReactSVG } from "react-svg"; import { ReactSVG } from "react-svg";
import { closeTab } from "../../../features/utils/browser.js"; import { closeTab } from "../../../features/utils/browser.js";
import { useKeyboardListener } from "../../../hooks/utils/keyboard.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 { useEffect, useState } from "react";
import Vector2 from "../../../features/math/vector2.js"; import Vector2 from "../../../features/math/vector2.js";
import utilStyles from "../../../styles/utils.module.css"; import utilStyles from "../../../styles/utils.module.css";

View file

@ -1,7 +1,7 @@
import styles from "./SearchMenu.module.css"; import styles from "./SearchMenu.module.css";
import appStyles from "./AppList.module.css"; import appStyles from "./AppList.module.css";
import ApplicationsManager from "../../../features/applications/applications.js"; 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 { ReactSVG } from "react-svg";
import { useEffect } from "react"; import { useEffect } from "react";
import { useState } from "react"; import { useState } from "react";

View file

@ -2,16 +2,16 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import styles from "./WindowView.module.css"; import styles from "./WindowView.module.css";
import { faMinus, faWindowMaximize as fasWindowMaximize, faXmark } from "@fortawesome/free-solid-svg-icons"; import { faMinus, faWindowMaximize as fasWindowMaximize, faXmark } from "@fortawesome/free-solid-svg-icons";
import { ReactSVG } from "react-svg"; 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 Draggable from "react-draggable";
import { memo, useEffect, useRef, useState } from "react"; import { memo, useEffect, useRef, useState } from "react";
import Application from "../../features/applications/application.js"; import Application from "../../features/applications/application.js";
import Vector2 from "../../features/math/vector2.js"; import Vector2 from "../../features/math/vector2.js";
import { faWindowMaximize } from "@fortawesome/free-regular-svg-icons"; import { faWindowMaximize } from "@fortawesome/free-regular-svg-icons";
import utilStyles from "../../styles/utils.module.css"; 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 { ModalsView } from "../modals/ModalsView.jsx";
import { useContextMenu } from "../../hooks/modals/ContextMenu.js"; import { useContextMenu } from "../../hooks/modals/contextMenu.js";
/** /**
* @param {object} props * @param {object} props

View file

@ -1,5 +1,5 @@
import { useWindows } from "../../hooks/windows/WindowsContext.js"; import { useWindows } from "../../hooks/windows/windowsContext.js";
import { useWindowsManager } from "../../hooks/windows/WindowsManagerContext.js"; import { useWindowsManager } from "../../hooks/windows/windowsManagerContext.js";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { WindowView } from "./WindowView.jsx"; import { WindowView } from "./WindowView.jsx";

18
src/constants/branding.js Normal file
View file

@ -0,0 +1,18 @@
export const NAME = "ProzillaOS";
export const ASCII_LOGO = `
:.
-==.
.=====:
---::..:=======-.
:===+=----------::..
=+=---------------:..
--------------------:.
.:-+=----*###*--*####=---.
:==+----#%+-+%#-##%*+----:.
.=----#%+-+%#-*+-%#+---:.
==----*###*--*###*----.
==+-------------------:.
...::---------------:.
.::---------::..
....::... `;

View file

@ -0,0 +1 @@
export const WALLPAPER_COUNT = 8;

View file

@ -1,24 +1,8 @@
import { ASCII_LOGO } from "../../../constants/branding.js";
import { START_DATE } from "../../../index.js"; import { START_DATE } from "../../../index.js";
import { formatRelativeTime } from "../../utils/date.js"; import { formatRelativeTime } from "../../utils/date.js";
import ApplicationsManager from "../applications.js"; import ApplicationsManager from "../applications.js";
export const ASCII_LOGO = `
:.
-==.
.=====:
---::..:=======-.
:===+=----------::..
=+=---------------:..
--------------------:.
.:-+=----*###*--*####=---.
:==+----#%+-+%#-##%*+----:.
.=----#%+-+%#-*+-%#+---:.
==----*###*--*###*----.
==+-------------------:.
...::---------------:.
.::---------::..
....::... `;
export class Command { export class Command {
/** /**
* @param {string} name * @param {string} name

View file

@ -1,7 +1,5 @@
import { VirtualFile } from "../virtual-drive/virtualFile.js";
import { VirtualFile } from "../virtual-drive/virtual-file.js"; import { VirtualRoot } from "../virtual-drive/virtualRoot.js";
import { VirtualRoot } from "../virtual-drive/virtual-root.js";
export class Settings { export class Settings {
xmlDoc = null; xmlDoc = null;
@ -119,42 +117,4 @@ export class Settings {
await this.write(); await this.write();
} }
}
export class SettingsManager {
/**
* @type {Object<string, string>}
*/
static VIRTUAL_PATHS = {
"desktop": "~/.config/desktop.xml"
};
/**
* @type {Object<string, Settings>}
*/
#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];
}
} }

View file

@ -0,0 +1,40 @@
import { VirtualRoot } from "../virtual-drive/virtualRoot.js";
import { Settings } from "./settings.js";
export class SettingsManager {
/**
* @type {Object<string, string>}
*/
static VIRTUAL_PATHS = {
"desktop": "~/.config/desktop.xml"
};
/**
* @type {Object<string, Settings>}
*/
#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];
}
}

View file

@ -1,6 +1,6 @@
import { EventEmitter } from "../utils/events.js"; import { EventEmitter } from "../utils/events.js";
import { VirtualRoot } from "./virtual-root.js"; import { VirtualRoot } from "./virtualRoot.js";
export class VirtualBase extends EventEmitter { export class VirtualBase extends EventEmitter {
/** /**

View file

@ -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 * A virtual file that can be stored inside a folder

View file

@ -1,6 +1,6 @@
import { removeFromArray } from "../utils/array.js"; import { removeFromArray } from "../utils/array.js";
import { VirtualBase } from "./virtual-base.js"; import { VirtualBase } from "./virtualBase.js";
import { VirtualFile } from "./virtual-file.js"; import { VirtualFile } from "./virtualFile.js";
/** /**
* A virtual folder that can contains files and sub-folders * A virtual folder that can contains files and sub-folders

View file

@ -1,8 +1,7 @@
import { StorageManager } from "../storage/storage.js"; import { WALLPAPER_COUNT } from "../../constants/virtualDrive.js";
import { VirtualFile } from "./virtual-file.js"; import { StorageManager } from "../storage/storageManager.js";
import { VirtualFolder } from "./virtual-folder.js"; import { VirtualFile } from "./virtualFile.js";
import { VirtualFolder } from "./virtualFolder.js";
export const WALLPAPER_COUNT = 8;
/** /**
* A virtual folder that serves as the root folder * A virtual folder that serves as the root folder
@ -55,7 +54,7 @@ export class VirtualRoot extends VirtualFolder {
.createFolder("Images", (folder) => { .createFolder("Images", (folder) => {
for (let i = 0; i < WALLPAPER_COUNT; i++) { for (let i = 0; i < WALLPAPER_COUNT; i++) {
folder.createFile(`Wallpaper${i + 1}`, "png", (file) => { 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 * Adds a shortcut to a file or folder
* @param {string} name * @param {string} name
* @param {VirtualFile|VirtualFolder} destination * @param {VirtualFile | VirtualFolder} destination
* @returns {VirtualRoot} * @returns {VirtualRoot}
*/ */
addShortcut(name, destination) { addShortcut(name, destination) {

View file

@ -1,7 +1,7 @@
import ApplicationsManager from "../applications/applications.js"; import ApplicationsManager from "../applications/applications.js";
import { randomRange } from "../math/random.js"; import { randomRange } from "../math/random.js";
import Vector2 from "../math/vector2.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 SCREEN_MARGIN = 32;
export const TASKBAR_HEIGHT = 48; export const TASKBAR_HEIGHT = 48;

View file

@ -1,6 +1,6 @@
import { createContext, useContext } from "react"; import { createContext, useContext } from "react";
import { SettingsManager } from "../../features/settings/settings.js"; import { SettingsManager } from "../../features/settings/settingsManager.js";
import { useVirtualRoot } from "../virtual-drive/VirtualRootContext.js"; import { useVirtualRoot } from "../virtual-drive/virtualRootContext.js";
const SettingsContext = createContext(); const SettingsContext = createContext();

View file

@ -1,5 +1,5 @@
import { createContext, useContext } from "react"; 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(); const VirtualRootContext = createContext();

View file

@ -1,6 +1,6 @@
import { createContext, useContext } from "react"; import { createContext, useContext } from "react";
import WindowsManager from "../../features/windows/windows.js"; import WindowsManager from "../../features/windows/windowsManager.js";
import { WindowsProvider } from "./WindowsContext.js"; import { WindowsProvider } from "./windowsContext.js";
const WindowsManagerContext = createContext(); const WindowsManagerContext = createContext();

View file

@ -3,7 +3,7 @@ import ReactDOM from "react-dom/client";
import "./styles/global.css"; import "./styles/global.css";
import App from "./App"; import App from "./App";
import reportWebVitals from "./reportWebVitals"; 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(); export const START_DATE = new Date();

View file

@ -7,62 +7,62 @@
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 100;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 200;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 300;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 400;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 500;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 600;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 700;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Poppins"; 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-weight: 800;
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-family: "Roboto Mono"; 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; font-display: swap;
} }