diff --git a/package-lock.json b/package-lock.json
index e85d669..bdf4ebd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -44,6 +44,7 @@
"eslint-plugin-react": "^7.34.1",
"eslint-plugin-react-refresh": "^0.4.7",
"gh-pages": "^5.0.0",
+ "ts-node": "^10.9.2",
"typescript": "^5.4.5",
"typescript-eslint": "^7.8.0",
"web-vitals": "^4.0.1"
@@ -513,6 +514,28 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
@@ -1800,6 +1823,30 @@
"tslib": "^2.6.0"
}
},
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true
+ },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -2130,6 +2177,15 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/acorn-walk": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -2171,6 +2227,12 @@
"node": ">=4"
}
},
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
"node_modules/array-buffer-byte-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
@@ -2565,6 +2627,12 @@
"url": "https://opencollective.com/core-js"
}
},
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -2692,6 +2760,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -4575,6 +4652,12 @@
"semver": "bin/semver"
}
},
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
"node_modules/markdown-to-jsx": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz",
@@ -5788,6 +5871,49 @@
"typescript": ">=4.2.0"
}
},
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "dev": true,
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
"node_modules/tslib": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
@@ -5985,6 +6111,12 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
+ },
"node_modules/vite": {
"version": "5.2.12",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz",
@@ -6205,6 +6337,15 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index 74c4f2c..5ce2899 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,9 @@
"start": "vite --port 3000 --host",
"build": "tsc && vite build",
"serve": "vite preview",
- "predeploy": "npm run build",
- "deploy": "sh deploy.sh"
+ "predeploy": "npm run sitemap && npm run build",
+ "deploy": "sh deploy.sh",
+ "sitemap": "node --experimental-specifier-resolution=node --loader ts-node/esm ./src/tools/sitemapGenerator.js"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.4.0",
@@ -50,6 +51,7 @@
"eslint-plugin-react": "^7.34.1",
"eslint-plugin-react-refresh": "^0.4.7",
"gh-pages": "^5.0.0",
+ "ts-node": "^10.9.2",
"typescript": "^5.4.5",
"typescript-eslint": "^7.8.0",
"web-vitals": "^4.0.1"
diff --git a/public/sitemap.xml b/public/sitemap.xml
index 4252be3..1aa9836 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -4,38 +4,67 @@
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
https://os.prozilla.dev/
+ 2024-6-9
+
- https://os.prozilla.dev/assets/banner-logo-title.png
-
-
- https://os.prozilla.dev/assets/screenshots/screenshot-files-info-taskbar-desktop.png
+ https://os.prozilla.dev/assets/wallpapers/vibrant-wallpaper-blue-purple-red.png
https://os.prozilla.dev/assets/wallpapers/abstract-mesh-gradient-orange-red-purple.png
+
+ https://os.prozilla.dev/assets/wallpapers/vibrant-wallpaper-purple-yellow.png
+
https://os.prozilla.dev/assets/wallpapers/abstract-wallpaper-mesh-gradient-cyan.png
https://os.prozilla.dev/assets/wallpapers/colorful-abstract-wallpaper-blue-red-green.png
-
- https://os.prozilla.dev/assets/wallpapers/colorful-mesh-gradient-red-green.png
-
https://os.prozilla.dev/assets/wallpapers/mesh-gradient-wallpaper-red-purple.png
- https://os.prozilla.dev/assets/wallpapers/vibrant-wallpaper-blue-purple-red.png
-
-
- https://os.prozilla.dev/assets/wallpapers/vibrant-wallpaper-purple-yellow.png
-
-
- https://os.prozilla.dev/assets/wallpapers/wave-abstract-wallpaper-teal.png
+ https://os.prozilla.dev/assets/wallpapers/colorful-mesh-gradient-red-green.png
https://os.prozilla.dev/assets/wallpapers/flame-abstract-wallpaper-orange.png
+
+ https://os.prozilla.dev/assets/wallpapers/wave-abstract-wallpaper-teal.png
+
+
+
+
+ https://os.prozilla.dev/terminal
+ 2024-6-9
+
+
+ https://os.prozilla.dev/settings
+ 2024-6-9
+
+
+ https://os.prozilla.dev/media-viewer
+ 2024-6-9
+
+
+ https://os.prozilla.dev/text-editor
+ 2024-6-9
+
+
+ https://os.prozilla.dev/file-explorer
+ 2024-6-9
+
+
+ https://os.prozilla.dev/calculator
+ 2024-6-9
+
+
+ https://os.prozilla.dev/browser
+ 2024-6-9
+
+
+ https://os.prozilla.dev/logic-sim
+ 2024-6-9
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
index f243646..e938a9c 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,8 +1,4 @@
import styles from "./App.module.css";
-import { Taskbar } from "./components/taskbar/Taskbar";
-import { WindowsView } from "./components/windows/WindowsView";
-import { Desktop } from "./components/desktop/Desktop";
-import { ModalsView } from "./components/modals/ModalsView";
import { ReactElement, useEffect } from "react";
import { ZIndexManagerProvider } from "./hooks/z-index/zIndexManagerProvider";
import { ThemeProvider } from "./hooks/themes/themes";
@@ -10,6 +6,7 @@ import { VirtualRootProvider } from "./hooks/virtual-drive/virtualRootProvider";
import { WindowsManagerProvider } from "./hooks/windows/windowsManagerProvider";
import { ModalsManagerProvider } from "./hooks/modals/modalsManagerProvider";
import { SettingsManagerProvider } from "./hooks/settings/settingsManagerProvider";
+import { Router } from "./components/router/Router";
export default function App(): ReactElement {
useEffect(() => {
@@ -31,10 +28,7 @@ export default function App(): ReactElement {
-
-
-
-
+
diff --git a/src/components/_utils/button/Button.tsx b/src/components/_utils/button/Button.tsx
index bc91c50..c5bb499 100644
--- a/src/components/_utils/button/Button.tsx
+++ b/src/components/_utils/button/Button.tsx
@@ -1,18 +1,21 @@
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import styles from "./Button.module.css";
import { faExternalLink } from "@fortawesome/free-solid-svg-icons";
-import { ReactNode } from "react";
+import { HTMLAttributeAnchorTarget, ReactNode } from "react";
+import { IconProp } from "@fortawesome/fontawesome-svg-core";
interface ButtonProps {
className?: string;
href?: string;
+ icon?: IconProp;
+ target?: HTMLAttributeAnchorTarget;
children?: ReactNode;
- [key: string]: any;
+ [key: string]: unknown;
}
export function Button(props: ButtonProps) {
let { className = "" } = props;
- const { href, children } = props;
+ const { href, children, icon, target } = props;
className = `${styles.Button} ${className}`;
@@ -21,14 +24,14 @@ export function Button(props: ButtonProps) {
return (
{children}
-
+
);
} else {
return (