diff --git a/package.json b/package.json
index ade847c..7ad770b 100644
--- a/package.json
+++ b/package.json
@@ -22,9 +22,8 @@
"packages:release": "pnpm changeset publish"
},
"workspaces": [
- "packages/prozilla-os",
- "packages/core",
- "packages/apps/file-explorer"
+ "packages/*",
+ "packages/apps/*"
],
"repository": {
"type": "git",
diff --git a/packages/apps/file-explorer/CHANGELOG.md b/packages/apps/file-explorer/CHANGELOG.md
index 57fffec..ada22aa 100644
--- a/packages/apps/file-explorer/CHANGELOG.md
+++ b/packages/apps/file-explorer/CHANGELOG.md
@@ -1,5 +1,13 @@
# @prozilla-os/file-explorer
+## 1.0.8
+
+### Patch Changes
+
+- Added terminal and text editor app + adjusted links in app packages
+- Updated dependencies
+ - @prozilla-os/core@1.0.11
+
## 1.0.7
### Patch Changes
diff --git a/packages/apps/file-explorer/README.md b/packages/apps/file-explorer/README.md
index 067d4bb..0a3f717 100644
--- a/packages/apps/file-explorer/README.md
+++ b/packages/apps/file-explorer/README.md
@@ -58,7 +58,7 @@ function App() {
- [npm][npm]
- [Ko-fi][ko-fi]
-[website]: https://os.prozilla.dev/
+[website]: https://os.prozilla.dev/file-explorer
[github]: https://github.com/prozilla-os/ProzillaOS/tree/convert-to-monorepo/packages/apps/file-explorer
[npm]: https://www.npmjs.com/package/@prozilla-os/file-explorer
[ko-fi]: https://ko-fi.com/prozilla
\ No newline at end of file
diff --git a/packages/apps/file-explorer/package.json b/packages/apps/file-explorer/package.json
index d7d2ab1..56e8234 100644
--- a/packages/apps/file-explorer/package.json
+++ b/packages/apps/file-explorer/package.json
@@ -1,7 +1,8 @@
{
"name": "@prozilla-os/file-explorer",
"description": "A standard ProzillaOS application for browsing files.",
- "version": "1.0.7",
+ "version": "1.0.8",
+ "homepage": "https://os.prozilla.dev/file-explorer",
"author": {
"name": "Prozilla",
"email": "business@prozilla.dev",
@@ -14,7 +15,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/Prozilla/ProzillaOS.git",
+ "url": "git+https://github.com/prozilla-os/ProzillaOS.git",
"directory": "packages/apps/file-explorer"
},
"license": "MIT",
diff --git a/packages/apps/file-explorer/src/index.ts b/packages/apps/file-explorer/src/index.ts
index 1bcfaca..d6acf5d 100644
--- a/packages/apps/file-explorer/src/index.ts
+++ b/packages/apps/file-explorer/src/index.ts
@@ -1,10 +1,8 @@
import { App } from "@prozilla-os/core";
import { FileExplorer } from "./components/FileExplorer";
-import { VirtualBase } from "@prozilla-os/core/src/features/virtual-drive/virtualBase";
const fileExplorer = new App("File Explorer", "file-explorer", FileExplorer)
.setIconUrl("https://os.prozilla.dev/assets/apps/icons/file-explorer.svg");
export { fileExplorer };
-export { FileSelectorMode } from "./types/index.d";
-VirtualBase;
\ No newline at end of file
+export { FileSelectorMode } from "./types/index.d";
\ No newline at end of file
diff --git a/packages/apps/terminal/CHANGELOG.md b/packages/apps/terminal/CHANGELOG.md
new file mode 100644
index 0000000..9e07176
--- /dev/null
+++ b/packages/apps/terminal/CHANGELOG.md
@@ -0,0 +1,9 @@
+# @prozilla-os/terminal
+
+## 1.0.1
+
+### Patch Changes
+
+- Added terminal and text editor app + adjusted links in app packages
+- Updated dependencies
+ - @prozilla-os/core@1.0.11
diff --git a/packages/apps/terminal/README.md b/packages/apps/terminal/README.md
new file mode 100644
index 0000000..863f0bf
--- /dev/null
+++ b/packages/apps/terminal/README.md
@@ -0,0 +1,64 @@
+
+
+## About
+
+`@prozilla-os/terminal` is a terminal/shell application for ProzillaOS.
+
+## Installation
+
+`@prozilla-os/core` is required to run this application.
+
+```sh
+$ npm install @prozilla-os/core @prozilla-os/terminal
+$ yarn add @prozilla-os/core @prozilla-os/terminal
+$ pnpm add @prozilla-os/core @prozilla-os/terminal
+```
+
+## Usage
+
+```tsx
+import { Desktop, ModalsView, ProzillaOS, Taskbar, WindowsView, AppsConfig } from "@prozilla-os/core";
+import { terminal } from "@prozilla-os/terminal";
+
+function App() {
+ return (
+
+
+
+
+
+
+ );
+}
+```
+
+## Links
+
+- [Website/demo][website]
+- [GitHub][github]
+- [npm][npm]
+- [Ko-fi][ko-fi]
+
+[website]: https://os.prozilla.dev/terminal
+[github]: https://github.com/prozilla-os/ProzillaOS/tree/convert-to-monorepo/packages/apps/terminal
+[npm]: https://www.npmjs.com/package/@prozilla-os/terminal
+[ko-fi]: https://ko-fi.com/prozilla
\ No newline at end of file
diff --git a/packages/apps/terminal/config/terminal.config.ts b/packages/apps/terminal/config/terminal.config.ts
deleted file mode 100644
index e4e3334..0000000
--- a/packages/apps/terminal/config/terminal.config.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-export const USERNAME = "user";
-export const HOSTNAME = "prozilla-os";
-export const MAX_WIDTH = 50;
-
-export const ANSI = {
- fg: {
- black: "\u001b[30m",
- red: "\u001b[31m",
- green: "\u001b[32m",
- yellow: "\u001b[33m",
- blue: "\u001b[34m",
- magenta: "\u001b[35m",
- cyan: "\u001b[36m",
- white: "\u001b[37m",
- },
- bg: {
-
- },
- decoration: {
- dim: "\u001b[2m",
- },
- reset: "\u001b[0m",
-};
-
-export const WELCOME_MESSAGE = `${ANSI.fg.cyan + ANSI.decoration.dim}$APP_NAME - Made by Prozilla${ANSI.reset}`
- + `\n${ANSI.decoration.dim}Type 'help' for a list of commands.${ANSI.reset}\n`;
diff --git a/packages/apps/terminal/core/commands/uptime.ts b/packages/apps/terminal/core/commands/uptime.ts
deleted file mode 100644
index 919a63e..0000000
--- a/packages/apps/terminal/core/commands/uptime.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { TimeManager } from "../../../_utils/time.utils";
-import { Command } from "../command";
-
-export const uptime = new Command()
- .setManual({
- purpose: "Display the current uptime of the system"
- })
- .setExecute(function() {
- return `Uptime: ${TimeManager.getUptime(2)}`;
- });
\ No newline at end of file
diff --git a/packages/apps/terminal/package.json b/packages/apps/terminal/package.json
new file mode 100644
index 0000000..80ef409
--- /dev/null
+++ b/packages/apps/terminal/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "@prozilla-os/terminal",
+ "description": "A terminal/shell application for ProzillaOS.",
+ "version": "1.0.1",
+ "homepage": "https://os.prozilla.dev/terminal",
+ "author": {
+ "name": "Prozilla",
+ "email": "business@prozilla.dev",
+ "url": "https://prozilla.dev/"
+ },
+ "main": "src/index.ts",
+ "type": "module",
+ "scripts": {
+ "test": "tsc --watch"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/prozilla-os/ProzillaOS.git",
+ "directory": "packages/apps/terminal"
+ },
+ "license": "MIT",
+ "dependencies": {
+ "@prozilla-os/core": "workspace:*",
+ "anser": "^2.1.1",
+ "escape-carriage": "^1.3.1",
+ "react": "^18.3.1"
+ },
+ "devDependencies": {
+ "typescript": "^5.4.5"
+ },
+ "files": [
+ "src/**/*"
+ ],
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/",
+ "access": "public"
+ }
+}
diff --git a/packages/apps/terminal/components/Ansi.tsx b/packages/apps/terminal/src/components/Ansi.tsx
similarity index 100%
rename from packages/apps/terminal/components/Ansi.tsx
rename to packages/apps/terminal/src/components/Ansi.tsx
diff --git a/packages/apps/terminal/components/InputLine.tsx b/packages/apps/terminal/src/components/InputLine.tsx
similarity index 100%
rename from packages/apps/terminal/components/InputLine.tsx
rename to packages/apps/terminal/src/components/InputLine.tsx
diff --git a/packages/apps/terminal/components/OutputLine.tsx b/packages/apps/terminal/src/components/OutputLine.tsx
similarity index 100%
rename from packages/apps/terminal/components/OutputLine.tsx
rename to packages/apps/terminal/src/components/OutputLine.tsx
diff --git a/packages/apps/terminal/components/Terminal.module.css b/packages/apps/terminal/src/components/Terminal.module.css
similarity index 100%
rename from packages/apps/terminal/components/Terminal.module.css
rename to packages/apps/terminal/src/components/Terminal.module.css
diff --git a/packages/apps/terminal/components/Terminal.tsx b/packages/apps/terminal/src/components/Terminal.tsx
similarity index 89%
rename from packages/apps/terminal/components/Terminal.tsx
rename to packages/apps/terminal/src/components/Terminal.tsx
index 1a64bdd..85af423 100644
--- a/packages/apps/terminal/components/Terminal.tsx
+++ b/packages/apps/terminal/src/components/Terminal.tsx
@@ -1,20 +1,13 @@
import { MouseEventHandler, MutableRefObject, useEffect, useRef, useState } from "react";
import styles from "./Terminal.module.css";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext";
import { OutputLine } from "./OutputLine";
import { InputLine } from "./InputLine";
-import { ANSI, HOSTNAME, USERNAME, WELCOME_MESSAGE } from "../../../config/apps/terminal.config";
-import { CommandsManager } from "../../../features/apps/terminal/commands";
-import { removeFromArray } from "../../../features/_utils/array.utils";
-import { Stream } from "../../../features/apps/terminal/stream";
-import { formatError } from "../../../features/apps/terminal/_utils/terminal.utils";
-import { WindowProps } from "../../windows/WindowView";
-import { VirtualFolder } from "../../../features/virtual-drive/folder/virtualFolder";
-import { CommandResponse } from "../../../features/apps/terminal/command";
-import { APP_NAMES } from "../../../config/apps.config";
-import { useSettingsManager } from "../../../hooks/settings/settingsManagerContext";
-import { SettingsManager } from "../../../features/settings/settingsManager";
-import { clamp } from "../../../features/_utils/math.utils";
+import { ANSI, App, clamp, removeFromArray, SettingsManager, useSettingsManager, useSystemManager, useVirtualRoot, VirtualFolder, WindowProps } from "@prozilla-os/core";
+import { HOSTNAME, USERNAME, WELCOME_MESSAGE } from "../constants/terminal.const";
+import { Stream } from "../core/stream";
+import { CommandResponse } from "../core/command";
+import { formatError } from "../core/_utils/terminal.utils";
+import { CommandsManager } from "../core/commands";
interface TerminalProps extends WindowProps {
path: string;
@@ -28,11 +21,12 @@ interface HistoryEntry {
clear?: boolean;
}
-export function Terminal({ path: startPath, input, setTitle, close: exit, active, focus }: TerminalProps) {
+export function Terminal({ app, path: startPath, input, setTitle, close: exit, active, focus }: TerminalProps) {
+ const systemManager = useSystemManager();
const [inputKey, setInputKey] = useState(0);
const [inputValue, setInputValue] = useState(input ?? "");
const [history, setHistory] = useState([{
- text: WELCOME_MESSAGE.replace("$APP_NAME", APP_NAMES.TERMINAL),
+ text: app ? WELCOME_MESSAGE.replace("$APP_NAME", app.name) : WELCOME_MESSAGE,
isInput: false,
}]);
const virtualRoot = useVirtualRoot();
@@ -215,6 +209,8 @@ export function Terminal({ path: startPath, input, setTitle, close: exit, active
inputs,
timestamp,
settingsManager: settingsManager as SettingsManager,
+ systemManager,
+ app: app as App,
});
if (response == null)
diff --git a/packages/apps/terminal/src/constants/terminal.const.ts b/packages/apps/terminal/src/constants/terminal.const.ts
new file mode 100644
index 0000000..fbf6ab5
--- /dev/null
+++ b/packages/apps/terminal/src/constants/terminal.const.ts
@@ -0,0 +1,43 @@
+import { ANSI } from "@prozilla-os/core";
+
+export const USERNAME = "user";
+export const HOSTNAME = "prozilla-os";
+export const MAX_WIDTH = 50;
+
+export const WELCOME_MESSAGE = `${ANSI.fg.cyan + ANSI.decoration.dim}$APP_NAME - Made by Prozilla${ANSI.reset}`
+ + `\n${ANSI.decoration.dim}Type 'help' for a list of commands.${ANSI.reset}\n`;
+
+export const ASCII_LOGO = `
+ :.
+ -==.
+ .=====:
+ ---::..:=======-.
+ :===+=----------::..
+ =+=---------------:..
+ --------------------:.
+.:-+=----*###*--*####=---.
+:==+----#%+-+%#-##%*+----:.
+ .=----#%+-+%#-*+-%#+---:.
+ ==----*###*--*###*----.
+ ==+-------------------:.
+ ...::---------------:.
+ .::---------::..
+ ....::... `;
+
+export const ANSI_LOGO_COLOR = ANSI.fg.cyan;
+export const ANSI_ASCII_LOGO = `
+ :.
+ -==.
+ .=====:
+ ---::..:=======-.
+ :===+=----------::..
+ =+=---------------:..
+ --------------------:.
+.:-+=----${ANSI.fg.white}*###*${ANSI_LOGO_COLOR}--${ANSI.fg.white}*####=${ANSI_LOGO_COLOR}---.
+:==+----${ANSI.fg.white}#%+${ANSI_LOGO_COLOR}-${ANSI.fg.white}+%#${ANSI_LOGO_COLOR}-${ANSI.fg.white}##%*+${ANSI_LOGO_COLOR}----:.
+ .=----${ANSI.fg.white}#%+${ANSI_LOGO_COLOR}-${ANSI.fg.white}+%#${ANSI_LOGO_COLOR}-${ANSI.fg.white}*+${ANSI_LOGO_COLOR}-${ANSI.fg.white}%#+${ANSI_LOGO_COLOR}---:.
+ ==----${ANSI.fg.white}*###*${ANSI_LOGO_COLOR}--${ANSI.fg.white}*###*${ANSI_LOGO_COLOR}----.
+ ==+-------------------:.
+ ...::---------------:.
+ .::---------::..
+ ....::... `;
diff --git a/packages/apps/terminal/core/_utils/terminal.utils.ts b/packages/apps/terminal/src/core/_utils/terminal.utils.ts
similarity index 82%
rename from packages/apps/terminal/core/_utils/terminal.utils.ts
rename to packages/apps/terminal/src/core/_utils/terminal.utils.ts
index 20b0990..04eebab 100644
--- a/packages/apps/terminal/core/_utils/terminal.utils.ts
+++ b/packages/apps/terminal/src/core/_utils/terminal.utils.ts
@@ -1,4 +1,4 @@
-import { ANSI } from "../../../../config/apps/terminal.config";
+import { ANSI } from "@prozilla-os/core";
export function formatError(commandName: string, error: string): string {
return `${ANSI.fg.red}${commandName}: ${error}${ANSI.reset}`;
diff --git a/packages/apps/terminal/core/command.ts b/packages/apps/terminal/src/core/command.ts
similarity index 90%
rename from packages/apps/terminal/core/command.ts
rename to packages/apps/terminal/src/core/command.ts
index b885ffb..81c7e2f 100644
--- a/packages/apps/terminal/core/command.ts
+++ b/packages/apps/terminal/src/core/command.ts
@@ -1,6 +1,4 @@
-import { SettingsManager } from "../../settings/settingsManager";
-import { VirtualFolder } from "../../virtual-drive/folder/virtualFolder";
-import { VirtualRoot } from "../../virtual-drive/root/virtualRoot";
+import { App, SettingsManager, SystemManager, VirtualFolder, VirtualRoot } from "@prozilla-os/core";
import { Stream } from "./stream";
type Option = {
@@ -24,6 +22,8 @@ export type ExecuteParams = {
inputs?: Record,
timestamp: number,
settingsManager: SettingsManager,
+ systemManager: SystemManager,
+ app: App,
};
type Execute = (args?: string[], params?: ExecuteParams) => CommandResponse | Promise;
diff --git a/packages/apps/terminal/core/commands.ts b/packages/apps/terminal/src/core/commands.ts
similarity index 100%
rename from packages/apps/terminal/core/commands.ts
rename to packages/apps/terminal/src/core/commands.ts
diff --git a/packages/apps/terminal/core/commands/cat.ts b/packages/apps/terminal/src/core/commands/cat.ts
similarity index 94%
rename from packages/apps/terminal/core/commands/cat.ts
rename to packages/apps/terminal/src/core/commands/cat.ts
index 65ec282..401add6 100644
--- a/packages/apps/terminal/core/commands/cat.ts
+++ b/packages/apps/terminal/src/core/commands/cat.ts
@@ -1,4 +1,4 @@
-import { VirtualFile } from "../../../virtual-drive/file";
+import { VirtualFile } from "@prozilla-os/core";
import { formatError } from "../_utils/terminal.utils";
import { Command, ExecuteParams } from "../command";
diff --git a/packages/apps/terminal/core/commands/cd.ts b/packages/apps/terminal/src/core/commands/cd.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/cd.ts
rename to packages/apps/terminal/src/core/commands/cd.ts
diff --git a/packages/apps/terminal/core/commands/clear.ts b/packages/apps/terminal/src/core/commands/clear.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/clear.ts
rename to packages/apps/terminal/src/core/commands/clear.ts
diff --git a/packages/apps/terminal/core/commands/cmatrix.ts b/packages/apps/terminal/src/core/commands/cmatrix.ts
similarity index 91%
rename from packages/apps/terminal/core/commands/cmatrix.ts
rename to packages/apps/terminal/src/core/commands/cmatrix.ts
index 60f5bc7..979f8e3 100644
--- a/packages/apps/terminal/core/commands/cmatrix.ts
+++ b/packages/apps/terminal/src/core/commands/cmatrix.ts
@@ -1,7 +1,4 @@
-import { ANSI } from "../../../../config/apps/terminal.config";
-import { randomFromArray, removeFromArray } from "../../../_utils/array.utils";
-import { randomRange } from "../../../_utils/math.utils";
-import { Vector2 } from "../../../math/vector2";
+import { ANSI, randomFromArray, randomRange, removeFromArray, Vector2 } from "@prozilla-os/core";
import { Command } from "../command";
import { Stream } from "../stream";
diff --git a/packages/apps/terminal/core/commands/compgen.ts b/packages/apps/terminal/src/core/commands/compgen.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/compgen.ts
rename to packages/apps/terminal/src/core/commands/compgen.ts
diff --git a/packages/apps/terminal/core/commands/cowsay.ts b/packages/apps/terminal/src/core/commands/cowsay.ts
similarity index 97%
rename from packages/apps/terminal/core/commands/cowsay.ts
rename to packages/apps/terminal/src/core/commands/cowsay.ts
index b42e157..c66273d 100644
--- a/packages/apps/terminal/core/commands/cowsay.ts
+++ b/packages/apps/terminal/src/core/commands/cowsay.ts
@@ -1,4 +1,4 @@
-import { MAX_WIDTH } from "../../../../config/apps/terminal.config";
+import { MAX_WIDTH } from "../../constants/terminal.const";
import { Command, ExecuteParams } from "../command";
const COW = `
diff --git a/packages/apps/terminal/core/commands/dir.ts b/packages/apps/terminal/src/core/commands/dir.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/dir.ts
rename to packages/apps/terminal/src/core/commands/dir.ts
diff --git a/packages/apps/terminal/core/commands/echo.ts b/packages/apps/terminal/src/core/commands/echo.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/echo.ts
rename to packages/apps/terminal/src/core/commands/echo.ts
diff --git a/packages/apps/terminal/core/commands/exit.ts b/packages/apps/terminal/src/core/commands/exit.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/exit.ts
rename to packages/apps/terminal/src/core/commands/exit.ts
diff --git a/packages/apps/terminal/core/commands/fortune.ts b/packages/apps/terminal/src/core/commands/fortune.ts
similarity index 97%
rename from packages/apps/terminal/core/commands/fortune.ts
rename to packages/apps/terminal/src/core/commands/fortune.ts
index 45ccbbe..9e43f5e 100644
--- a/packages/apps/terminal/core/commands/fortune.ts
+++ b/packages/apps/terminal/src/core/commands/fortune.ts
@@ -1,4 +1,4 @@
-import { randomFromArray } from "../../../_utils/array.utils";
+import { randomFromArray } from "@prozilla-os/core";
import { Command } from "../command";
/**
diff --git a/packages/apps/terminal/core/commands/help.ts b/packages/apps/terminal/src/core/commands/help.ts
similarity index 93%
rename from packages/apps/terminal/core/commands/help.ts
rename to packages/apps/terminal/src/core/commands/help.ts
index 11e5353..911a3e8 100644
--- a/packages/apps/terminal/core/commands/help.ts
+++ b/packages/apps/terminal/src/core/commands/help.ts
@@ -1,4 +1,4 @@
-import { ANSI } from "../../../../config/apps/terminal.config";
+import { ANSI } from "@prozilla-os/core";
import { formatError } from "../_utils/terminal.utils";
import { Command } from "../command";
import { CommandsManager } from "../commands";
diff --git a/packages/apps/terminal/core/commands/hostname.ts b/packages/apps/terminal/src/core/commands/hostname.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/hostname.ts
rename to packages/apps/terminal/src/core/commands/hostname.ts
diff --git a/packages/apps/terminal/core/commands/lolcat.ts b/packages/apps/terminal/src/core/commands/lolcat.ts
similarity index 95%
rename from packages/apps/terminal/core/commands/lolcat.ts
rename to packages/apps/terminal/src/core/commands/lolcat.ts
index 13f5203..94e8f51 100644
--- a/packages/apps/terminal/core/commands/lolcat.ts
+++ b/packages/apps/terminal/src/core/commands/lolcat.ts
@@ -1,4 +1,4 @@
-import { ANSI } from "../../../../config/apps/terminal.config";
+import { ANSI } from "@prozilla-os/core";
import { removeAnsi } from "../_utils/terminal.utils";
import { Command, ExecuteParams } from "../command";
diff --git a/packages/apps/terminal/core/commands/ls.ts b/packages/apps/terminal/src/core/commands/ls.ts
similarity index 88%
rename from packages/apps/terminal/core/commands/ls.ts
rename to packages/apps/terminal/src/core/commands/ls.ts
index dbacfca..ec4dde6 100644
--- a/packages/apps/terminal/core/commands/ls.ts
+++ b/packages/apps/terminal/src/core/commands/ls.ts
@@ -1,5 +1,4 @@
-import { ANSI } from "../../../../config/apps/terminal.config";
-import { VirtualFolder } from "../../../virtual-drive/folder/virtualFolder";
+import { ANSI, VirtualFolder } from "@prozilla-os/core";
import { formatError } from "../_utils/terminal.utils";
import { Command, ExecuteParams } from "../command";
diff --git a/packages/apps/terminal/core/commands/make.ts b/packages/apps/terminal/src/core/commands/make.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/make.ts
rename to packages/apps/terminal/src/core/commands/make.ts
diff --git a/packages/apps/terminal/core/commands/man.ts b/packages/apps/terminal/src/core/commands/man.ts
similarity index 97%
rename from packages/apps/terminal/core/commands/man.ts
rename to packages/apps/terminal/src/core/commands/man.ts
index 1327f18..e45133e 100644
--- a/packages/apps/terminal/core/commands/man.ts
+++ b/packages/apps/terminal/src/core/commands/man.ts
@@ -1,4 +1,4 @@
-import { ANSI } from "../../../../config/apps/terminal.config";
+import { ANSI } from "@prozilla-os/core";
import { formatError } from "../_utils/terminal.utils";
import { Command, ExecuteParams } from "../command";
import { CommandsManager } from "../commands";
diff --git a/packages/apps/terminal/core/commands/mkdir.ts b/packages/apps/terminal/src/core/commands/mkdir.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/mkdir.ts
rename to packages/apps/terminal/src/core/commands/mkdir.ts
diff --git a/packages/apps/terminal/core/commands/neofetch.ts b/packages/apps/terminal/src/core/commands/neofetch.ts
similarity index 75%
rename from packages/apps/terminal/core/commands/neofetch.ts
rename to packages/apps/terminal/src/core/commands/neofetch.ts
index 98c6f9c..4d81cbd 100644
--- a/packages/apps/terminal/core/commands/neofetch.ts
+++ b/packages/apps/terminal/src/core/commands/neofetch.ts
@@ -1,10 +1,5 @@
-import { APPS } from "../../../../config/apps.config";
-import { ANSI } from "../../../../config/apps/terminal.config";
-import { ANSI_ASCII_LOGO, ANSI_LOGO_COLOR, NAME } from "../../../../config/branding.config";
-import { THEMES } from "../../../../config/themes.config";
-import { TimeManager } from "../../../_utils/time.utils";
-import { SettingsManager } from "../../../settings/settingsManager";
-import { AppsManager } from "../../appsManager";
+import { ANSI, SettingsManager, THEMES } from "@prozilla-os/core";
+import { ANSI_ASCII_LOGO, ANSI_LOGO_COLOR } from "../../constants/terminal.const";
import { Command, ExecuteParams } from "../command";
export const neofetch = new Command()
@@ -12,7 +7,7 @@ export const neofetch = new Command()
purpose: "Fetch system information"
})
.setExecute(async function(args, params) {
- const { username, hostname, settingsManager } = params as ExecuteParams;
+ const { username, hostname, app, systemManager, settingsManager } = params as ExecuteParams;
const leftColumn = ANSI_ASCII_LOGO.split("\n");
const rightColumnWidth = (username?.length ?? 0) + (hostname?.length ?? 0) + 1;
@@ -43,12 +38,12 @@ export const neofetch = new Command()
const rightColumn = [
`${ANSI.fg.cyan + username + ANSI.reset}@${ANSI.fg.cyan + hostname + ANSI.reset}`,
"-".repeat(rightColumnWidth),
- formatLine("os", NAME),
- formatLine("uptime", TimeManager.getUptime(2)),
+ formatLine("os", systemManager.systemName),
+ formatLine("uptime", systemManager.getUptime(2)),
formatLine("resolution", window.innerWidth + "x" + window.innerHeight),
formatLine("theme", theme),
formatLine("icons", "Font Awesome"),
- formatLine("terminal", AppsManager.getAppById(APPS.TERMINAL)?.name ?? "Unknown"),
+ formatLine("terminal", app?.name ?? "Unknown"),
formatLine("browser", browserName),
formatLine("platform", navigator.platform),
formatLine("language", navigator.language),
diff --git a/packages/apps/terminal/core/commands/pwd.ts b/packages/apps/terminal/src/core/commands/pwd.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/pwd.ts
rename to packages/apps/terminal/src/core/commands/pwd.ts
diff --git a/packages/apps/terminal/core/commands/reboot.ts b/packages/apps/terminal/src/core/commands/reboot.ts
similarity index 75%
rename from packages/apps/terminal/core/commands/reboot.ts
rename to packages/apps/terminal/src/core/commands/reboot.ts
index 6962c23..33d41da 100644
--- a/packages/apps/terminal/core/commands/reboot.ts
+++ b/packages/apps/terminal/src/core/commands/reboot.ts
@@ -1,4 +1,4 @@
-import { reloadViewport } from "../../../_utils/browser.utils";
+import { reloadViewport } from "@prozilla-os/core";
import { Command } from "../command";
export const reboot = new Command()
diff --git a/packages/apps/terminal/core/commands/reload.ts b/packages/apps/terminal/src/core/commands/reload.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/reload.ts
rename to packages/apps/terminal/src/core/commands/reload.ts
diff --git a/packages/apps/terminal/core/commands/rev.ts b/packages/apps/terminal/src/core/commands/rev.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/rev.ts
rename to packages/apps/terminal/src/core/commands/rev.ts
diff --git a/packages/apps/terminal/core/commands/rm.ts b/packages/apps/terminal/src/core/commands/rm.ts
similarity index 91%
rename from packages/apps/terminal/core/commands/rm.ts
rename to packages/apps/terminal/src/core/commands/rm.ts
index ea89585..1209d62 100644
--- a/packages/apps/terminal/core/commands/rm.ts
+++ b/packages/apps/terminal/src/core/commands/rm.ts
@@ -1,4 +1,4 @@
-import { VirtualFile } from "../../../virtual-drive/file";
+import { VirtualFile } from "@prozilla-os/core";
import { formatError } from "../_utils/terminal.utils";
import { Command, ExecuteParams } from "../command";
diff --git a/packages/apps/terminal/core/commands/rmdir.ts b/packages/apps/terminal/src/core/commands/rmdir.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/rmdir.ts
rename to packages/apps/terminal/src/core/commands/rmdir.ts
diff --git a/packages/apps/terminal/core/commands/sl.ts b/packages/apps/terminal/src/core/commands/sl.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/sl.ts
rename to packages/apps/terminal/src/core/commands/sl.ts
diff --git a/packages/apps/terminal/core/commands/touch.ts b/packages/apps/terminal/src/core/commands/touch.ts
similarity index 94%
rename from packages/apps/terminal/core/commands/touch.ts
rename to packages/apps/terminal/src/core/commands/touch.ts
index 84789b4..4b4e8e6 100644
--- a/packages/apps/terminal/core/commands/touch.ts
+++ b/packages/apps/terminal/src/core/commands/touch.ts
@@ -1,4 +1,4 @@
-import { VirtualFile } from "../../../virtual-drive/file";
+import { VirtualFile } from "@prozilla-os/core";
import { formatError } from "../_utils/terminal.utils";
import { Command, ExecuteParams } from "../command";
diff --git a/packages/apps/terminal/src/core/commands/uptime.ts b/packages/apps/terminal/src/core/commands/uptime.ts
new file mode 100644
index 0000000..c870279
--- /dev/null
+++ b/packages/apps/terminal/src/core/commands/uptime.ts
@@ -0,0 +1,10 @@
+import { Command, ExecuteParams } from "../command";
+
+export const uptime = new Command()
+ .setManual({
+ purpose: "Display the current uptime of the system"
+ })
+ .setExecute(function(args, params) {
+ const { systemManager } = params as ExecuteParams;
+ return `Uptime: ${systemManager.getUptime(2)}`;
+ });
\ No newline at end of file
diff --git a/packages/apps/terminal/core/commands/whatis.ts b/packages/apps/terminal/src/core/commands/whatis.ts
similarity index 91%
rename from packages/apps/terminal/core/commands/whatis.ts
rename to packages/apps/terminal/src/core/commands/whatis.ts
index 9b2c51d..ee8d5b9 100644
--- a/packages/apps/terminal/core/commands/whatis.ts
+++ b/packages/apps/terminal/src/core/commands/whatis.ts
@@ -1,4 +1,4 @@
-import { ANSI } from "../../../../config/apps/terminal.config";
+import { ANSI } from "@prozilla-os/core";
import { formatError } from "../_utils/terminal.utils";
import { Command } from "../command";
import { CommandsManager } from "../commands";
diff --git a/packages/apps/terminal/core/commands/whoami.ts b/packages/apps/terminal/src/core/commands/whoami.ts
similarity index 100%
rename from packages/apps/terminal/core/commands/whoami.ts
rename to packages/apps/terminal/src/core/commands/whoami.ts
diff --git a/packages/apps/terminal/core/stream.ts b/packages/apps/terminal/src/core/stream.ts
similarity index 91%
rename from packages/apps/terminal/core/stream.ts
rename to packages/apps/terminal/src/core/stream.ts
index 1e98bfc..d40fb4d 100644
--- a/packages/apps/terminal/core/stream.ts
+++ b/packages/apps/terminal/src/core/stream.ts
@@ -1,4 +1,4 @@
-import { EventEmitter } from "../../_utils/event.utils";
+import { EventEmitter } from "@prozilla-os/core";
const StreamEvents = {
new: "new",
diff --git a/packages/apps/terminal/src/index.ts b/packages/apps/terminal/src/index.ts
new file mode 100644
index 0000000..6239d9d
--- /dev/null
+++ b/packages/apps/terminal/src/index.ts
@@ -0,0 +1,7 @@
+import { App } from "@prozilla-os/core";
+import { Terminal } from "./components/Terminal";
+
+const terminal = new App("Terminal", "terminal", Terminal)
+ .setIconUrl("https://os.prozilla.dev/assets/apps/icons/terminal.svg");
+
+export { terminal };
\ No newline at end of file
diff --git a/packages/apps/terminal/tsconfig.json b/packages/apps/terminal/tsconfig.json
new file mode 100644
index 0000000..777df14
--- /dev/null
+++ b/packages/apps/terminal/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../../tsconfig.json",
+ "include": ["src/**/*"],
+ "exclude": ["node_modules"]
+}
\ No newline at end of file
diff --git a/packages/apps/text-editor/CHANGELOG.md b/packages/apps/text-editor/CHANGELOG.md
new file mode 100644
index 0000000..ded5c59
--- /dev/null
+++ b/packages/apps/text-editor/CHANGELOG.md
@@ -0,0 +1,9 @@
+# @prozilla-os/text-editor
+
+## 1.0.1
+
+### Patch Changes
+
+- Added terminal and text editor app + adjusted links in app packages
+- Updated dependencies
+ - @prozilla-os/core@1.0.11
diff --git a/packages/apps/text-editor/README.md b/packages/apps/text-editor/README.md
new file mode 100644
index 0000000..f30a2a0
--- /dev/null
+++ b/packages/apps/text-editor/README.md
@@ -0,0 +1,64 @@
+
+
+## About
+
+`@prozilla-os/text-editor` is a text editor application for ProzillaOS.
+
+## Installation
+
+`@prozilla-os/core` is required to run this application.
+
+```sh
+$ npm install @prozilla-os/core @prozilla-os/text-editor
+$ yarn add @prozilla-os/core @prozilla-os/text-editor
+$ pnpm add @prozilla-os/core @prozilla-os/text-editor
+```
+
+## Usage
+
+```tsx
+import { Desktop, ModalsView, ProzillaOS, Taskbar, WindowsView, AppsConfig } from "@prozilla-os/core";
+import { textEditor } from "@prozilla-os/text-editor";
+
+function App() {
+ return (
+
+
+
+
+
+
+ );
+}
+```
+
+## Links
+
+- [Website/demo][website]
+- [GitHub][github]
+- [npm][npm]
+- [Ko-fi][ko-fi]
+
+[website]: https://os.prozilla.dev/text-editor
+[github]: https://github.com/prozilla-os/ProzillaOS/tree/convert-to-monorepo/packages/apps/text-editor
+[npm]: https://www.npmjs.com/package/@prozilla-os/text-editor
+[ko-fi]: https://ko-fi.com/prozilla
\ No newline at end of file
diff --git a/packages/apps/text-editor/components/TextEditor.tsx b/packages/apps/text-editor/components/TextEditor.tsx
deleted file mode 100644
index d79fce0..0000000
--- a/packages/apps/text-editor/components/TextEditor.tsx
+++ /dev/null
@@ -1,226 +0,0 @@
-import { ReactNode, Ref, useEffect, useRef, useState } from "react";
-import styles from "./TextEditor.module.css";
-import { HeaderMenu } from "../_utils/header-menu/HeaderMenu";
-import Markdown from "markdown-to-jsx";
-import { CODE_FORMATS, DEFAULT_ZOOM, EXTENSION_TO_LANGUAGE, ZOOM_FACTOR } from "../../../config/apps/textEditor.config";
-import { AppsManager } from "../../../features/apps/appsManager";
-import { TITLE_SEPARATOR } from "../../../config/windows.config";
-import { MarkdownLink } from "./overrides/MarkdownLink";
-import { MarkdownImage } from "./overrides/MarkdownImage";
-import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext";
-import SyntaxHighlighter from "react-syntax-highlighter";
-import { useWindowedModal } from "../../../hooks/modals/windowedModal";
-import { DEFAULT_FILE_SELECTOR_SIZE } from "../../../config/modals.config";
-import { FileSelector } from "../../modals/file-selector/FileSelector";
-import { SELECTOR_MODE } from "../../../config/apps/fileExplorer.config";
-import { VirtualFile } from "../../../features/virtual-drive/file";
-import { WindowProps } from "../../windows/WindowView";
-import { DropdownAction } from "../../actions/actions/DropdownAction";
-import { ClickAction } from "../../actions/actions/ClickAction";
-import { ModalsManager } from "../../../features/modals/modalsManager";
-import { App } from "../../../features/apps/app";
-import { WindowsManager } from "../../../features/windows/windowsManager";
-import { MarkdownBlockquote } from "./overrides/MarkdownBlockquote";
-import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext";
-import { APP_NAMES } from "../../../config/apps.config";
-import { Divider } from "../../actions/actions/Divider";
-
-const OVERRIDES = {
- a: MarkdownLink,
- img: MarkdownImage,
- blockquote: MarkdownBlockquote,
-};
-
-export interface MarkdownProps {
- modalsManager: ModalsManager;
- setCurrentFile: Function;
- currentFile: VirtualFile;
- app: App;
- windowsManager: WindowsManager;
- children?: ReactNode;
-}
-
-interface TextEditorProps extends WindowProps {
- file?: VirtualFile;
- mode?: "view" | "edit";
- path?: string;
-}
-
-export function TextEditor({ file, path, setTitle, setIconUrl, close, mode, app, modalsManager }: TextEditorProps) {
- const ref = useRef();
- const windowsManager = useWindowsManager();
- const virtualRoot = useVirtualRoot();
- const [currentFile, setCurrentFile] = useState(file as VirtualFile);
- const [currentMode, setCurrentMode] = useState(mode);
- const [content, setContent] = useState(file?.content ?? "");
- const [unsavedChanges, setUnsavedChanges] = useState(file == null);
- const [zoom, setZoom] = useState(DEFAULT_ZOOM);
- const [initialised, setInitialised] = useState(false);
- const { openWindowedModal } = useWindowedModal();
-
- useEffect(() => {
- void (async () => {
- let newContent = "";
-
- // Load file
- if (currentFile) {
- if (currentFile.content) {
- newContent = currentFile.content;
- } else if (currentFile.source) {
- await fetch(currentFile.source).then((response) =>
- response.text()
- ).then((response) => {
- newContent = response;
- });
- }
-
- const iconUrl = currentFile.getIconUrl();
- if (iconUrl)
- setIconUrl?.(iconUrl);
-
- if (newContent?.trim() === "")
- setCurrentMode("edit");
- } else if (app != null) {
- setIconUrl?.(AppsManager.getAppIconUrl(app.id));
- }
-
- setContent(newContent);
-
- if (ref.current) {
- (ref.current as HTMLElement).scrollTo(0, 0);
- }
- })();
- }, [app?.id, currentFile, setIconUrl]);
-
- useEffect(() => {
- // Update title
- let label = currentFile?.id ?? "Untitled";
-
- if (unsavedChanges)
- label += "*";
-
- if (currentMode === "view")
- label += " (preview)";
-
- setTitle?.(app != null ? `${label} ${TITLE_SEPARATOR} ${app.name}` : label);
- }, [currentFile, setTitle, unsavedChanges, currentMode, app?.name]);
-
- useEffect(() => {
- if (!initialised && currentFile == null && path != null) {
- const newFile = virtualRoot?.navigate(path);
-
- if (newFile == null || !newFile.isFile())
- return;
-
- setCurrentFile(newFile as VirtualFile);
- setInitialised(true);
- }
- }, [path, currentFile]);
-
- const newText = () => {
- setCurrentFile(null);
- setCurrentMode("edit");
- setUnsavedChanges(true);
- };
-
- const saveTextAs = () => {
- onChange({ target: { value: content } });
- };
-
- const saveText = () => {
- if (currentFile == null)
- return saveTextAs();
-
- currentFile.setContent(content);
- onChange({ target: { value: content } });
- };
-
- const onChange = (event: Event | { target: { value: string } }) => {
- const value = (event.target as HTMLInputElement).value;
-
- if (currentFile != null) {
- setUnsavedChanges(currentFile.content !== value);
- } else {
- setUnsavedChanges(true);
- }
-
- return setContent(value);
- };
-
- const overrides: Record = {};
- for (const [key, value] of Object.entries(OVERRIDES)) {
- overrides[key] = {
- component: value,
- props: {
- modalsManager,
- setCurrentFile,
- currentFile,
- app,
- windowsManager
- } as MarkdownProps
- };
- }
-
- return (
-
-
-
- { newText(); }} shortcut={["Control", "e"]}/>
- {
- openWindowedModal({
- size: DEFAULT_FILE_SELECTOR_SIZE,
- Modal: (props: object) => {
- setCurrentFile(file as VirtualFile);
- setUnsavedChanges(false);
- }}
- {...props}
- />
- });
- }} shortcut={["Control", "o"]}/>
-
- { saveText(); }} shortcut={["Control", "s"]}/>
- {
- if (windowsManager != null) currentFile?.parent?.open(windowsManager);
- }}/>
-
- { close?.(); }} shortcut={["Control", "q"]}/>
-
-
- {
- setCurrentMode(currentMode === "view" ? "edit" : "view");
- }} shortcut={["Control", "u"]}/>
-
- { setZoom(zoom + ZOOM_FACTOR); }} shortcut={["Control", "+"]}/>
- { setZoom(zoom - ZOOM_FACTOR); }} shortcut={["Control", "-"]}/>
- { setZoom(DEFAULT_ZOOM); }} shortcut={["Control", "0"]}/>
-
-
- {currentMode === "view"
- ? currentFile?.extension != null && CODE_FORMATS.includes(currentFile?.extension)
- ?
{content}
- :
} className={styles.View}>
- {currentFile?.extension === "md"
- ?
{content}
- :
{content}
- }
-
- :
- );
-}
\ No newline at end of file
diff --git a/packages/apps/text-editor/package.json b/packages/apps/text-editor/package.json
new file mode 100644
index 0000000..58b4d99
--- /dev/null
+++ b/packages/apps/text-editor/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@prozilla-os/text-editor",
+ "description": "A text editor application for ProzillaOS.",
+ "version": "1.0.1",
+ "homepage": "https://os.prozilla.dev/text-editor",
+ "author": {
+ "name": "Prozilla",
+ "email": "business@prozilla.dev",
+ "url": "https://prozilla.dev/"
+ },
+ "main": "src/index.ts",
+ "type": "module",
+ "scripts": {
+ "test": "tsc --watch"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/prozilla-os/ProzillaOS.git",
+ "directory": "packages/apps/text-editor"
+ },
+ "license": "MIT",
+ "dependencies": {
+ "@prozilla-os/core": "workspace:*",
+ "react": "^18.3.1"
+ },
+ "devDependencies": {
+ "typescript": "^5.4.5"
+ },
+ "files": [
+ "src/**/*"
+ ],
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/",
+ "access": "public"
+ }
+}
diff --git a/packages/apps/text-editor/components/TextEditor.module.css b/packages/apps/text-editor/src/components/TextEditor.module.css
similarity index 100%
rename from packages/apps/text-editor/components/TextEditor.module.css
rename to packages/apps/text-editor/src/components/TextEditor.module.css
diff --git a/packages/apps/text-editor/src/components/TextEditor.tsx b/packages/apps/text-editor/src/components/TextEditor.tsx
new file mode 100644
index 0000000..456931f
--- /dev/null
+++ b/packages/apps/text-editor/src/components/TextEditor.tsx
@@ -0,0 +1,208 @@
+import { ReactNode, Ref, useEffect, useRef, useState } from "react";
+import styles from "./TextEditor.module.css";
+import Markdown from "markdown-to-jsx";
+import { MarkdownLink } from "./overrides/MarkdownLink";
+import { MarkdownImage } from "./overrides/MarkdownImage";
+import SyntaxHighlighter from "react-syntax-highlighter";
+import { MarkdownBlockquote } from "./overrides/MarkdownBlockquote";
+import { App, ClickAction, CODE_EXTENSIONS, Divider, DropdownAction, FileSelector, FileSelectorMode, HeaderMenu, ModalsManager, useSystemManager, useVirtualRoot, useWindowedModal, useWindowsManager, VirtualFile, WindowProps, WindowsManager } from "@prozilla-os/core";
+import { DEFAULT_ZOOM, EXTENSION_TO_LANGUAGE, ZOOM_FACTOR } from "../constants/textEditor.const";
+
+const OVERRIDES = {
+ a: MarkdownLink,
+ img: MarkdownImage,
+ blockquote: MarkdownBlockquote,
+};
+
+export interface MarkdownProps {
+ modalsManager: ModalsManager;
+ setCurrentFile: Function;
+ currentFile: VirtualFile;
+ app: App;
+ windowsManager: WindowsManager;
+ children?: ReactNode;
+}
+
+interface TextEditorProps extends WindowProps {
+ file?: VirtualFile;
+ mode?: "view" | "edit";
+ path?: string;
+}
+
+export function TextEditor({ file, path, setTitle, setIconUrl, close, mode, app, modalsManager }: TextEditorProps) {
+ const { windowsConfig, modalsConfig } = useSystemManager();
+ const ref = useRef();
+ const windowsManager = useWindowsManager();
+ const virtualRoot = useVirtualRoot();
+ const [currentFile, setCurrentFile] = useState(file as VirtualFile);
+ const [currentMode, setCurrentMode] = useState(mode);
+ const [content, setContent] = useState(file?.content ?? "");
+ const [unsavedChanges, setUnsavedChanges] = useState(file == null);
+ const [zoom, setZoom] = useState(DEFAULT_ZOOM);
+ const [initialised, setInitialised] = useState(false);
+ const { openWindowedModal } = useWindowedModal();
+
+ useEffect(() => {
+ void (async () => {
+ let newContent = "";
+
+ // Load file
+ if (currentFile) {
+ if (currentFile.content) {
+ newContent = currentFile.content;
+ } else if (currentFile.source) {
+ await fetch(currentFile.source).then((response) =>
+ response.text()
+ ).then((response) => {
+ newContent = response;
+ });
+ }
+
+ const iconUrl = currentFile.getIconUrl();
+ if (iconUrl)
+ setIconUrl?.(iconUrl);
+
+ if (newContent?.trim() === "")
+ setCurrentMode("edit");
+ } else if (app != null && app.iconUrl != null) {
+ setIconUrl?.(app.iconUrl);
+ }
+
+ setContent(newContent);
+
+ if (ref.current) {
+ (ref.current as HTMLElement).scrollTo(0, 0);
+ }
+ })();
+ }, [app?.id, currentFile, setIconUrl]);
+
+ useEffect(() => {
+ // Update title
+ let label = currentFile?.id ?? "Untitled";
+
+ if (unsavedChanges)
+ label += "*";
+
+ if (currentMode === "view")
+ label += " (preview)";
+
+ setTitle?.(app != null ? `${label} ${windowsConfig.titleSeparator} ${app.name}` : label);
+ }, [currentFile, setTitle, unsavedChanges, currentMode, app?.name]);
+
+ useEffect(() => {
+ if (!initialised && currentFile == null && path != null) {
+ const newFile = virtualRoot?.navigate(path);
+
+ if (newFile == null || !newFile.isFile())
+ return;
+
+ setCurrentFile(newFile as VirtualFile);
+ setInitialised(true);
+ }
+ }, [path, currentFile]);
+
+ const newText = () => {
+ setCurrentFile(null);
+ setCurrentMode("edit");
+ setUnsavedChanges(true);
+ };
+
+ const saveTextAs = () => {
+ onChange({ target: { value: content } });
+ };
+
+ const saveText = () => {
+ if (currentFile == null)
+ return saveTextAs();
+
+ currentFile.setContent(content);
+ onChange({ target: { value: content } });
+ };
+
+ const onChange = (event: Event | { target: { value: string } }) => {
+ const value = (event.target as HTMLInputElement).value;
+
+ if (currentFile != null) {
+ setUnsavedChanges(currentFile.content !== value);
+ } else {
+ setUnsavedChanges(true);
+ }
+
+ return setContent(value);
+ };
+
+ const overrides: Record = {};
+ for (const [key, value] of Object.entries(OVERRIDES)) {
+ overrides[key] = {
+ component: value,
+ props: {
+ modalsManager,
+ setCurrentFile,
+ currentFile,
+ app,
+ windowsManager
+ } as MarkdownProps
+ };
+ }
+
+ return
+
+
+ { newText(); }} shortcut={["Control", "e"]}/>
+ {
+ openWindowedModal({
+ size: modalsConfig.defaultFileSelectorSize,
+ Modal: (props: object) => {
+ setCurrentFile(file as VirtualFile);
+ setUnsavedChanges(false);
+ }}
+ {...props}
+ />
+ });
+ }} shortcut={["Control", "o"]}/>
+
+ { saveText(); }} shortcut={["Control", "s"]}/>
+ {/* {
+ if (windowsManager != null) currentFile?.parent?.open(windowsManager);
+ }}/> */}
+
+ { close?.(); }} shortcut={["Control", "q"]}/>
+
+
+ {
+ setCurrentMode(currentMode === "view" ? "edit" : "view");
+ }} shortcut={["Control", "u"]}/>
+
+ { setZoom(zoom + ZOOM_FACTOR); }} shortcut={["Control", "+"]}/>
+ { setZoom(zoom - ZOOM_FACTOR); }} shortcut={["Control", "-"]}/>
+ { setZoom(DEFAULT_ZOOM); }} shortcut={["Control", "0"]}/>
+
+
+ {currentMode === "view"
+ ? currentFile?.extension != null && CODE_EXTENSIONS.includes(currentFile?.extension)
+ ?
{content}
+ :
} className={styles.View}>
+ {currentFile?.extension === "md"
+ ?
{content}
+ :
{content}
+ }
+
+ :
;
+}
\ No newline at end of file
diff --git a/packages/apps/text-editor/components/overrides/MarkdownBlockquote.tsx b/packages/apps/text-editor/src/components/overrides/MarkdownBlockquote.tsx
similarity index 96%
rename from packages/apps/text-editor/components/overrides/MarkdownBlockquote.tsx
rename to packages/apps/text-editor/src/components/overrides/MarkdownBlockquote.tsx
index bd44f96..5f96df6 100644
--- a/packages/apps/text-editor/components/overrides/MarkdownBlockquote.tsx
+++ b/packages/apps/text-editor/src/components/overrides/MarkdownBlockquote.tsx
@@ -1,9 +1,9 @@
import { MarkdownProps } from "../TextEditor";
-import { sanitizeProps } from "../../../../features/apps/text-editor/_utils/sanitizeProps";
import { Attributes, Children, cloneElement, DetailedHTMLProps, isValidElement, ReactNode } from "react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faExclamationCircle, faExclamationTriangle, faInfoCircle, faLightbulb } from "@fortawesome/free-solid-svg-icons";
import styles from "../TextEditor.module.css";
+import { sanitizeProps } from "../../core/_utils/sanitizeProps";
type Props = Partial & Attributes & { children: ReactNode, className?: string };
diff --git a/packages/apps/text-editor/components/overrides/MarkdownImage.tsx b/packages/apps/text-editor/src/components/overrides/MarkdownImage.tsx
similarity index 85%
rename from packages/apps/text-editor/components/overrides/MarkdownImage.tsx
rename to packages/apps/text-editor/src/components/overrides/MarkdownImage.tsx
index b1cd68c..169e4a6 100644
--- a/packages/apps/text-editor/components/overrides/MarkdownImage.tsx
+++ b/packages/apps/text-editor/src/components/overrides/MarkdownImage.tsx
@@ -1,7 +1,7 @@
import { useMemo } from "react";
import { MarkdownProps } from "../TextEditor";
-import { sanitizeProps } from "../../../../features/apps/text-editor/_utils/sanitizeProps";
import styles from "../TextEditor.module.css";
+import { sanitizeProps } from "../../core/_utils/sanitizeProps";
interface MarkdownImageProps extends MarkdownProps {
src: string;
diff --git a/packages/apps/text-editor/components/overrides/MarkdownLink.tsx b/packages/apps/text-editor/src/components/overrides/MarkdownLink.tsx
similarity index 66%
rename from packages/apps/text-editor/components/overrides/MarkdownLink.tsx
rename to packages/apps/text-editor/src/components/overrides/MarkdownLink.tsx
index 5aed3c5..c9b6e05 100644
--- a/packages/apps/text-editor/components/overrides/MarkdownLink.tsx
+++ b/packages/apps/text-editor/src/components/overrides/MarkdownLink.tsx
@@ -1,20 +1,9 @@
import { MouseEventHandler, ReactNode, useMemo } from "react";
import { faClipboard, faExternalLink } from "@fortawesome/free-solid-svg-icons";
-import { useContextMenu } from "../../../../hooks/modals/contextMenu";
-import { Actions } from "../../../actions/Actions";
-import { ClickAction } from "../../../actions/actions/ClickAction";
-import { useWindowedModal } from "../../../../hooks/modals/windowedModal";
-import { AppsManager } from "../../../../features/apps/appsManager";
-import { DialogBox } from "../../../modals/dialog-box/DialogBox";
-import { DIALOG_CONTENT_TYPES } from "../../../../config/modals.config";
-import { Vector2 } from "../../../../features/math/vector2";
-import { APPS } from "../../../../config/apps.config";
import { MarkdownProps } from "../TextEditor";
-import { sanitizeProps } from "../../../../features/apps/text-editor/_utils/sanitizeProps";
-import { copyToClipboard, removeUrlProtocol } from "../../../../features/_utils/browser.utils";
-import { TextDisplay } from "../../../actions/actions/TextDisplay";
import styles from "../TextEditor.module.css";
-import { ModalProps } from "../../../modals/ModalView";
+import { Actions, ClickAction, copyToClipboard, DIALOG_CONTENT_TYPES, DialogBox, ModalProps, removeUrlProtocol, TextDisplay, useContextMenu, useWindowedModal, Vector2 } from "@prozilla-os/core";
+import { sanitizeProps } from "../../core/_utils/sanitizeProps";
interface MarkdownLinkProps extends MarkdownProps {
href: string;
@@ -33,11 +22,11 @@ export function MarkdownLink({ href, children, windowsManager, currentFile, setC
if (target.isFile()) {
setCurrentFile(target);
} else {
- windowsManager.open(APPS.FILE_EXPLORER, { path: target.path });
+ windowsManager.open("file-explorer", { path: target.path });
}
} else {
openWindowedModal({
- iconUrl: AppsManager.getAppIconUrl(app.id),
+ iconUrl: app?.iconUrl as string | undefined,
title: "Failed to open link",
size: new Vector2(450, 150),
Modal: (props: ModalProps) =>
diff --git a/packages/apps/text-editor/config/textEditor.config.ts b/packages/apps/text-editor/src/constants/textEditor.const.ts
similarity index 68%
rename from packages/apps/text-editor/config/textEditor.config.ts
rename to packages/apps/text-editor/src/constants/textEditor.const.ts
index 45c8f72..26d5cbd 100644
--- a/packages/apps/text-editor/config/textEditor.config.ts
+++ b/packages/apps/text-editor/src/constants/textEditor.const.ts
@@ -1,16 +1,5 @@
export const DEFAULT_ZOOM = 16;
export const ZOOM_FACTOR = 4;
-export const CODE_FORMATS = [
- "js",
- "jsx",
- "ts",
- "tsx",
- "json",
- "css",
- "html",
- "xml",
- "yml"
-];
export const EXTENSION_TO_LANGUAGE: Record = {
"js": "javascript",
diff --git a/packages/apps/text-editor/core/_utils/sanitizeProps.ts b/packages/apps/text-editor/src/core/_utils/sanitizeProps.ts
similarity index 100%
rename from packages/apps/text-editor/core/_utils/sanitizeProps.ts
rename to packages/apps/text-editor/src/core/_utils/sanitizeProps.ts
diff --git a/packages/apps/text-editor/src/index.ts b/packages/apps/text-editor/src/index.ts
new file mode 100644
index 0000000..0100959
--- /dev/null
+++ b/packages/apps/text-editor/src/index.ts
@@ -0,0 +1,7 @@
+import { App } from "@prozilla-os/core";
+import { TextEditor } from "./components/TextEditor";
+
+const textEditor = new App("Text Editor", "text-editor", TextEditor)
+ .setIconUrl("https://os.prozilla.dev/assets/apps/icons/text-editor.svg");
+
+export { textEditor };
\ No newline at end of file
diff --git a/packages/apps/text-editor/tsconfig.json b/packages/apps/text-editor/tsconfig.json
new file mode 100644
index 0000000..777df14
--- /dev/null
+++ b/packages/apps/text-editor/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../../tsconfig.json",
+ "include": ["src/**/*"],
+ "exclude": ["node_modules"]
+}
\ No newline at end of file
diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index bee4095..bc29d63 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,13 @@
# @prozilla-os/core
+## 1.0.11
+
+### Patch Changes
+
+- Added terminal and text editor app + adjusted links in app packages
+- Updated dependencies
+ - @prozilla-os/file-explorer@1.0.8
+
## 1.0.10
### Patch Changes
diff --git a/packages/core/package.json b/packages/core/package.json
index 3762a82..5177386 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,7 +1,8 @@
{
"name": "@prozilla-os/core",
"description": "A React component library written in TypeScript for building web-based operating systems, made by Prozilla.",
- "version": "1.0.10",
+ "version": "1.0.11",
+ "homepage": "https://os.prozilla.dev/",
"author": {
"name": "Prozilla",
"email": "business@prozilla.dev",
@@ -14,7 +15,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/Prozilla/ProzillaOS.git",
+ "url": "git+https://github.com/prozilla-os/ProzillaOS.git",
"directory": "packages/core"
},
"license": "MIT",
diff --git a/packages/core/src/components/modals/index.ts b/packages/core/src/components/modals/index.ts
index 0434c58..9f34c9a 100644
--- a/packages/core/src/components/modals/index.ts
+++ b/packages/core/src/components/modals/index.ts
@@ -4,4 +4,5 @@ export { FileSelector } from "./file-selector/FileSelector";
export { Share } from "./share/Share";
export { ModalsView } from "./ModalsView";
-export type { ModalProps } from "./ModalView";
\ No newline at end of file
+export type { ModalProps } from "./ModalView";
+export { FileSelectorMode } from "@prozilla-os/file-explorer";
\ No newline at end of file
diff --git a/packages/core/src/constants/index.ts b/packages/core/src/constants/index.ts
index 5418b12..9a24704 100644
--- a/packages/core/src/constants/index.ts
+++ b/packages/core/src/constants/index.ts
@@ -1,3 +1,4 @@
export { DIALOG_CONTENT_TYPES } from "./modals.const";
export { CODE_EXTENSIONS } from "./virtualDrive.const";
-export { ANSI } from "./utils.const";
\ No newline at end of file
+export { ANSI } from "./utils.const";
+export { THEMES } from "./themes.const";
\ No newline at end of file
diff --git a/packages/core/src/features/index.ts b/packages/core/src/features/index.ts
index 4ac4753..2ad8a1f 100644
--- a/packages/core/src/features/index.ts
+++ b/packages/core/src/features/index.ts
@@ -8,5 +8,6 @@ export { StorageManager } from "./storage/storageManager";
export { TrackingManager } from "./tracking/trackingManager";
export { WindowsManager } from "./windows/windowsManager";
export { ZIndexManager } from "./z-index/zIndexManager";
+export { SystemManager } from "./system/systemManager";
export { Vector2 } from "./math/vector2";
\ No newline at end of file
diff --git a/packages/prozilla-os/CHANGELOG.md b/packages/prozilla-os/CHANGELOG.md
index 678f1a2..b1b8e98 100644
--- a/packages/prozilla-os/CHANGELOG.md
+++ b/packages/prozilla-os/CHANGELOG.md
@@ -1,5 +1,16 @@
# prozilla-os
+## 1.0.11
+
+### Patch Changes
+
+- Added terminal and text editor app + adjusted links in app packages
+- Updated dependencies
+ - @prozilla-os/file-explorer@1.0.8
+ - @prozilla-os/core@1.0.11
+ - @prozilla-os/terminal@1.0.1
+ - @prozilla-os/text-editor@1.0.1
+
## 1.0.10
### Patch Changes
diff --git a/packages/prozilla-os/package.json b/packages/prozilla-os/package.json
index 147301a..eecc6f9 100644
--- a/packages/prozilla-os/package.json
+++ b/packages/prozilla-os/package.json
@@ -1,7 +1,7 @@
{
"name": "prozilla-os",
"description": "a React component library written in TypeScript for building web-based operating systems, made by Prozilla.",
- "version": "1.0.10",
+ "version": "1.0.11",
"homepage": "https://os.prozilla.dev/",
"author": {
"name": "Prozilla",
@@ -15,7 +15,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/Prozilla/ProzillaOS.git",
+ "url": "git+https://github.com/prozilla-os/ProzillaOS.git",
"directory": "packages/prozilla-os"
},
"license": "MIT",
@@ -29,7 +29,9 @@
],
"dependencies": {
"@prozilla-os/core": "workspace:*",
- "@prozilla-os/file-explorer": "workspace:*"
+ "@prozilla-os/file-explorer": "workspace:*",
+ "@prozilla-os/terminal": "workspace:*",
+ "@prozilla-os/text-editor": "workspace:*"
},
"devDependencies": {
"typescript": "^5.4.5"
diff --git a/packages/prozilla-os/src/index.ts b/packages/prozilla-os/src/index.ts
index deb6922..12805d6 100644
--- a/packages/prozilla-os/src/index.ts
+++ b/packages/prozilla-os/src/index.ts
@@ -1,2 +1,4 @@
export * from "@prozilla-os/core";
-export * from "@prozilla-os/file-explorer";
\ No newline at end of file
+export * from "@prozilla-os/file-explorer";
+export * from "@prozilla-os/terminal";
+export * from "@prozilla-os/text-editor";
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ff8ad9b..4ec6a84 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -131,6 +131,38 @@ importers:
specifier: ^5.4.5
version: 5.4.5
+ packages/apps/terminal:
+ dependencies:
+ '@prozilla-os/core':
+ specifier: workspace:*
+ version: link:../../core
+ anser:
+ specifier: ^2.1.1
+ version: 2.1.1
+ escape-carriage:
+ specifier: ^1.3.1
+ version: 1.3.1
+ react:
+ specifier: ^18.3.1
+ version: 18.3.1
+ devDependencies:
+ typescript:
+ specifier: ^5.4.5
+ version: 5.4.5
+
+ packages/apps/text-editor:
+ dependencies:
+ '@prozilla-os/core':
+ specifier: workspace:*
+ version: link:../../core
+ react:
+ specifier: ^18.3.1
+ version: 18.3.1
+ devDependencies:
+ typescript:
+ specifier: ^5.4.5
+ version: 5.4.5
+
packages/core:
dependencies:
'@fortawesome/fontawesome-svg-core':
@@ -179,6 +211,12 @@ importers:
'@prozilla-os/file-explorer':
specifier: workspace:*
version: link:../apps/file-explorer
+ '@prozilla-os/terminal':
+ specifier: workspace:*
+ version: link:../apps/terminal
+ '@prozilla-os/text-editor':
+ specifier: workspace:*
+ version: link:../apps/text-editor
devDependencies:
typescript:
specifier: ^5.4.5
diff --git a/src/config/apps.config.ts b/src/config/apps.config.ts
index 361d4e8..1df1c33 100644
--- a/src/config/apps.config.ts
+++ b/src/config/apps.config.ts
@@ -1,7 +1,15 @@
-import { AppsConfig, fileExplorer } from "prozilla-os";
+import { AppsConfig, fileExplorer, terminal, textEditor } from "prozilla-os";
export const appsConfig = new AppsConfig({
apps: [
- fileExplorer.setName("Files"),
+ fileExplorer.setName("Files")
+ .setDescription("Browse and manage your virtual files on ProzillaOS.")
+ .setIconUrl("/assets/apps/icons/file-explorer.svg"),
+ terminal.setName("Commands")
+ .setDescription("A command line tool inspired by the Unix shell that runs entirely in your browser using ProzillaOS. Allows you to interact and manipulate the virtual drive and run silly commands.")
+ .setIconUrl("/assets/apps/icons/terminal.svg"),
+ textEditor.setName("Notes")
+ .setDescription("Text editor for reading and writing text documents in a virtual file system using ProzillaOS.")
+ .setIconUrl("/assets/apps/icons/text-editor.svg"),
],
});
\ No newline at end of file
diff --git a/src/config/branding.config.ts b/src/config/branding.config.ts
index 173c9a3..9633d7e 100644
--- a/src/config/branding.config.ts
+++ b/src/config/branding.config.ts
@@ -1,5 +1,3 @@
-import { ANSI } from "prozilla-os";
-
export const NAME = "ProzillaOS";
export const TAG_LINE = "Web-based Operating System";
@@ -16,24 +14,6 @@ export const ASCII_LOGO = `
.=----#%+-+%#-*+-%#+---:.
==----*###*--*###*----.
==+-------------------:.
- ...::---------------:.
- .::---------::..
- ....::... `;
-
-export const ANSI_LOGO_COLOR = ANSI.fg.cyan;
-export const ANSI_ASCII_LOGO = `
- :.
- -==.
- .=====:
- ---::..:=======-.
- :===+=----------::..
- =+=---------------:..
- --------------------:.
-.:-+=----${ANSI.fg.white}*###*${ANSI_LOGO_COLOR}--${ANSI.fg.white}*####=${ANSI_LOGO_COLOR}---.
-:==+----${ANSI.fg.white}#%+${ANSI_LOGO_COLOR}-${ANSI.fg.white}+%#${ANSI_LOGO_COLOR}-${ANSI.fg.white}##%*+${ANSI_LOGO_COLOR}----:.
- .=----${ANSI.fg.white}#%+${ANSI_LOGO_COLOR}-${ANSI.fg.white}+%#${ANSI_LOGO_COLOR}-${ANSI.fg.white}*+${ANSI_LOGO_COLOR}-${ANSI.fg.white}%#+${ANSI_LOGO_COLOR}---:.
- ==----${ANSI.fg.white}*###*${ANSI_LOGO_COLOR}--${ANSI.fg.white}*###*${ANSI_LOGO_COLOR}----.
- ==+-------------------:.
...::---------------:.
.::---------::..
....::... `;
\ No newline at end of file