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 @@ +
+
+

+ ProzillaOS +

+

+ License + Stars + Forks + NPM Version +

+
+ +## 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 @@ +
+
+

+ ProzillaOS +

+

+ License + Stars + Forks + NPM Version +

+
+ +## 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}

- } -
- :