├── .github ├── ISSUE_TEMPLATE │ └── bug-report-error-code.md └── dependabot.yml ├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── TODO.md ├── Terbium.png ├── index.js ├── package-lock.json ├── package.json ├── pnpm-lock.yaml └── static ├── TBSIF.example.tbs ├── baremux ├── baretypes.d.ts ├── client.d.ts ├── connection.d.ts ├── index.d.ts ├── index.js ├── index.mjs ├── snapshot.d.ts ├── websocket.d.ts ├── worker.d.ts ├── worker.js └── workerHandlers.d.ts ├── calc ├── calc.css ├── calc.html └── calc.js ├── canvas.html ├── changes ├── 080622.html ├── 081022.html ├── 081622.html ├── 082322.html ├── 092022.html ├── changes.css ├── index.css └── index.html ├── color.html ├── color.js ├── epoxy ├── index.js └── index.mjs ├── help.html ├── hypertabs ├── LICENSE ├── bookmark.png ├── c.html ├── css │ ├── chrome-tabs-dark-theme.css │ ├── chrome-tabs-dark-theme.styl │ ├── chrome-tabs.css │ ├── chrome-tabs.styl │ ├── css.css │ └── main.css ├── dcd.png ├── favicon.ico ├── games.png ├── ht.gif ├── icon.png ├── index.html ├── inobounce.min.js ├── internal │ ├── extensions │ │ ├── index.html │ │ └── marketplace.html │ ├── g │ │ └── index.html │ ├── manager.js │ └── newTab │ │ └── main.html └── js │ ├── bookmarks.js │ ├── chrome-tabs.js │ ├── draggabilly.pkgd.min.js │ ├── extensions.js │ ├── js.js │ ├── weather.js │ ├── x │ ├── DarkMode.js │ ├── core.js │ └── demoex.js │ └── xor.js ├── image ├── image.css ├── image.html └── image.js ├── index.css ├── index.html ├── index.js ├── js ├── canvas.js ├── chrome-tabs.js ├── docks.js ├── keys.js ├── localforage.min.js ├── lock.js ├── new.js ├── not.js ├── notifications.js ├── settings.js ├── shell.js ├── tabs.js ├── terbium.messages.js ├── terbiumframe.js ├── theme.js ├── tms.js └── windows.js ├── libcurl ├── index.cjs ├── index.js └── index.mjs ├── login.css ├── login.html ├── login.js ├── newwin.html ├── package-lock.json ├── package.json ├── player ├── Product.ttf ├── index.js ├── player.css ├── player.html └── player.js ├── resources ├── .gitignore.svg ├── Consolas.ttf ├── Fracital.ttf ├── Inter-Bold.ttf ├── Inter.ttf ├── Poppins-Regular.ttf ├── Product.ttf ├── ProductBold.ttf ├── Roboto.ttf ├── RokuPOSVideo.mp4 ├── Segoe UI Bold Italic.ttf ├── Segoe UI Bold.ttf ├── SegoeUI.ttf ├── TXT.svg ├── Task Manager.svg ├── Terbium Terminal.svg ├── TerbiumText.svg ├── Ubuntu-Medium.ttf ├── am.png ├── apps.svg ├── arc.png ├── arc.svg ├── blocker.svg ├── bookmark.svg ├── calc.svg ├── check.svg ├── close.png ├── close.svg ├── color-picker.svg ├── cropper.svg ├── cursors │ ├── crosshairA.png │ ├── crosshairD.png │ ├── crosshairF.png │ ├── crosshairN.png │ ├── handA.png │ ├── handD.png │ ├── handF.png │ ├── handN.png │ ├── normalA.png │ ├── normalD.png │ ├── normalF.png │ ├── normalN.png │ ├── re-bl_trA.png │ ├── re-bl_trD.png │ ├── re-bl_trF.png │ ├── re-bl_trN.png │ ├── re-br_tlA.png │ ├── re-br_tlD.png │ ├── re-br_tlF.png │ ├── re-br_tlN.png │ ├── re-lrA.png │ ├── re-lrD.png │ ├── re-lrF.png │ ├── re-lrN.png │ ├── re-snA.png │ ├── re-snD.png │ ├── re-snF.png │ ├── re-snN.png │ ├── textA.png │ ├── textD.png │ ├── textF.png │ └── textN.png ├── default.png ├── del.svg ├── discord.png ├── dollar.png ├── dollar.svg ├── download.svg ├── eye.svg ├── fonts │ ├── caveat │ │ ├── caveat-bold.ttf │ │ └── caveat-regular.ttf │ ├── dance │ │ ├── Dancing-Bold.ttf │ │ ├── Dancing-Medium.ttf │ │ ├── Dancing-Regular.ttf │ │ └── Dancing-SemiBold.ttf │ ├── fuzzy │ │ ├── Fuzzy-Bold.ttf │ │ └── Fuzzy-Regular.ttf │ ├── jost │ │ ├── Jost-Bold.ttf │ │ └── Jost.ttf │ └── times │ │ ├── times-bold-italic.ttf │ │ ├── times-bold.ttf │ │ ├── times-italic.ttf │ │ └── times.ttf ├── game.svg ├── games │ ├── shell-shockers.jpg │ ├── shell │ │ ├── shell.jpg │ │ └── slope.webp │ ├── slope.jpg │ ├── slope.webp │ └── slope │ │ └── slope.png ├── help.svg ├── home.svg ├── info.svg ├── layout.svg ├── max.png ├── maxi.svg ├── metropolis-extra-bold.otf ├── metropolis-regular.otf ├── mini.png ├── minimize.svg ├── monitor.svg ├── other.svg ├── play.svg ├── player.svg ├── plus.svg ├── plusalt.svg ├── power.svg ├── ref.svg ├── ruffle.svg ├── search.svg ├── settings.png ├── settings.svg ├── settingsAlt.svg ├── settingsAlt2.svg ├── settingsnight.png ├── settingsterm.png ├── sp.png ├── star.svg ├── star1.svg ├── star2.svg ├── start.svg ├── store.svg ├── td.ico ├── terbium.png ├── terbium.svg ├── terbiumnight.png ├── terbiumterm.png ├── terminal.svg ├── theme - almond.png ├── theme - dark.png ├── theme - fracital.png ├── theme - night.png ├── themePrevs │ ├── theme - almond.png │ ├── theme - dark.png │ ├── theme - fracital.png │ └── theme - night.png ├── tidal.png ├── tiktok.png ├── unmax.svg ├── vsc.ico ├── wallpapers │ ├── darkWall.png │ ├── fracitalWall.png │ └── nightWall.png ├── x.svg ├── yt.png └── ytm.png ├── ruffle ├── 159.index.js ├── 248b39fc24a05d0fbed1.wasm ├── 339.index.js ├── 5cb9c185efe574148035.wasm ├── LICENSE_APACHE ├── LICENSE_MIT ├── assets │ └── logo.svg ├── index.js ├── index.js.LICENSE.txt ├── logo-anim.swf ├── ruffle.html ├── swfs.json └── swfs │ ├── alien_hominid.swf │ ├── bitey1.swf │ ├── flyguy.swf │ ├── marvin_spectrum.swf │ ├── saturday_morning_watchmen.swf │ ├── synj1.swf │ ├── synj2.swf │ └── wasted_sky.swf ├── settings.html ├── styles ├── canvas.css ├── color.css ├── cursors.css ├── help.css ├── newin.css ├── prevs │ └── apps.css └── settings.css ├── sw.js ├── terbium BIG.png ├── terbium.png ├── terminal ├── terminal.css ├── terminal.html └── terminal.js ├── textEditor ├── editor.css ├── editor.html └── editor.js ├── uv.png └── uv ├── sw.js ├── uv.bundle.js ├── uv.client.js ├── uv.config.js ├── uv.handler.js ├── uv.styles.css └── uv.sw.js /.github/ISSUE_TEMPLATE/bug-report-error-code.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report with a given code from the OS 3 | about: This should be used when the OS gives a Error Code and/or Error Message 4 | title: '' 5 | labels: bug 6 | assignees: NovaAppsInc 7 | 8 | --- 9 | 10 | **Error Code and/or Error Message** 11 | Provide the Error Code and/or Error Message provided from the OS; it they required field should be copied to you clipboard if consented to it. 12 | 13 | **Screenshots** 14 | If applicable, add screenshots to help explain your problem. 15 | 16 | **OS Version and platform info** 17 | - Site you used [e.g. someterbiumrepl.repl.co] 18 | - Version on the bottom left of screen. 19 | - Browser [e.g. Chrome, Firefox] 20 | 21 | **Additional context** 22 | Add any other context about the problem here. 23 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | day: "saturday" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "liveServer.settings.port": 5501 3 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # **⚠️ NOTICE/DISCLAIMER ⚠️** 2 | 3 | This version of TerbiumOS will not be recieving any major updates anymore. It may only recieve updates for major security vulnerabilities (e.g. ablity to gain code execution on the backend). For the new version of Terbium, visit [this repo](https://github.com/terbiumos/web-v2) 4 | 5 | # TerbiumOS web 6 | 7 | Terbium is a webOS packed full of features and more! 8 | ![image](https://github.com/TerbiumOS/webOS/blob/main/Terbium.png?raw=true) 9 | 10 | ## Quick Deployments 11 | 12 | [![Run on Replit](https://raw.githubusercontent.com/BinBashBanana/deploy-buttons/master/buttons/remade/replit.svg)](https://replit.com/github/TerbiumOS/webOS) 13 | [![Run on Cyclic](https://raw.githubusercontent.com/BinBashBanana/deploy-buttons/master/buttons/official/cyclic.svg)](https://app.cyclic.sh/api/app/deploy/TerbiumOS/webOS) 14 | [![Deploy to Cloudflare](https://raw.githubusercontent.com/z1g-project/terbium/main/static/resources/cflogo.png)](https://github.com/z1g-project/Terbium/wiki/Deploy-to-Cloudflare-Pages) 15 | [![Run on Glitch](https://raw.githubusercontent.com/BinBashBanana/deploy-buttons/master/buttons/official/glitch.svg)](https://glitch.com/edit/#!/import/github/TerbiumOS/webOS) 16 | [![Deploy to Vercel](https://binbashbanana.github.io/deploy-buttons/buttons/remade/vercel.svg)](https://vercel.com/new/clone?repository-url=https://github.com/TerbiumOS/webOS) 17 | [![Deploy to Koyeb](https://binbashbanana.github.io/deploy-buttons/buttons/remade/koyeb.svg)](https://app.koyeb.com/deploy?type=git&repository=github.com/TerbiumOS/webOS&branch=main&name=deploy-buttons) 18 | 19 | **NOTE** More Services are supported such as Render, and Netlify however there is not a quick url at this time also keep in mind that on Glitch and Replit Proxies are banned. Refer to [this document](https://github.com/titaniumnetwork-dev/Ultraviolet-App/wiki/Circumventing-deployment-restrictions) to view ways to curcomvent this 20 | 21 | ### Getting Started 22 | 23 | To Get started using Terbium what you want to do is either download the repository using the "code" button and downloading as a zip and extracting it or using `git clone https://github.com/terbiumOS/webOS` 24 | 25 | Next go into the directory which by defualt will be called webOS and run the following command in your Operating systems terminal which if your on windows you can type into the file explorer url and just type `cmd` or if your on linux/macos just right click the folder and select open in terminal and then run the commands below 26 | 27 | ```sh 28 | npm install && npm start 29 | ``` 30 | 31 | Wait for everything to install then visit `localhost:6969` to use it! 32 | 33 | ## Contributers 34 | 35 | - [SNOOT](https://github.com/NovaAppsInc) Founder 36 | - [XSTARS](https://github.com/Notplayingallday383) Developer 37 | - [GamerGoat112](https://github.com/GamerGoat112) Fixes from [#20](https://github.com/TerbiumOS/webOS/pull/20) 38 | - [e9x](https://github.com/e9x) Fixes from [#12](https://github.com/TerbiumOS/webOS/pull/12) 39 | - [Abumality](https://github.com/Abnumality) Fixes from [#6](https://github.com/TerbiumOS/webOS/pull/6) 40 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | ### window manager 3 | - make windows positonable/resize depending on side it is dragged to 4 | 5 | ### apps screen 6 | - make the "Search App" also able to open links :moyai: 7 | -------------------------------------------------------------------------------- /Terbium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/Terbium.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import { createServer } from "node:http"; 3 | import path from "path"; 4 | import fs from "fs"; 5 | import { fileURLToPath } from "url"; 6 | import { server as wisp } from "@mercuryworkshop/wisp-js"; 7 | import "ws"; 8 | 9 | console.log("Starting Terbium..."); 10 | const app = express(); 11 | const __filename = fileURLToPath(import.meta.url); 12 | const __dirname = path.dirname(__filename); 13 | 14 | app.use(express.static("static")); 15 | const server = createServer(); 16 | 17 | server.on("request", (req, res) => { 18 | app(req, res); 19 | }); 20 | 21 | server.on("upgrade", (req, socket, head) => { 22 | if (req.url.endsWith("/wisp/")) { 23 | wisp.routeRequest(req, socket, head); 24 | } 25 | }); 26 | 27 | const port = parseInt("6969"); 28 | const manifest = fs.readFileSync(path.join(__dirname, 'package.json'), 'utf-8'); 29 | const { version } = JSON.parse(manifest); 30 | server.listen(port, () => { 31 | console.log(` 32 | \x1b[38;2;50;174;98m@@@@@@@@@@@@@@~ B@@@@@@@@#G?. 33 | \x1b[38;2;50;174;98mB###&@@@@&####^ #@@@&PPPB@@@G. 34 | \x1b[38;2;50;174;98m .. ~@@@@J .. .#@@@P ~&@@@^ \x1b[38;2;60;195;240mWelcome to Legacy Terbium v${version} 35 | \x1b[38;2;50;174;98m^@@@@? .#@@@@###&@@&7 36 | \x1b[38;2;50;174;98m^@@@@? .#@@@#555P&@@B7 \x1b[38;2;182;182;182mLegacy Terbium is running on ${port} 37 | \x1b[38;2;50;174;98m^@@@@? .#@@@P G@@@@ \x1b[38;2;182;182;182mAny problems you encounter let us know! 38 | \x1b[38;2;50;174;98m^@@@@? .#@@@&GGG#@@@@Y 39 | \x1b[38;2;50;174;98m^&@@@? B@@@@@@@@&B5~ 40 | `); 41 | }); 42 | 43 | process.on("SIGINT", () => { 44 | console.log("\x1b[0m"); 45 | process.exit(); 46 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "legacy-terbium", 3 | "version": "1.45-LTS", 4 | "description": "A Instance of Terbium WebOS!", 5 | "type": "module", 6 | "main": "index.js", 7 | "scripts": { 8 | "start": "node index.js" 9 | }, 10 | "keywords": [ 11 | "proxy" 12 | ], 13 | "author": "TerbiumOS", 14 | "dependencies": { 15 | "@mercuryworkshop/wisp-js": "^0.3.3", 16 | "express": "^4.21.2", 17 | "path": "^0.12.7", 18 | "simplebar": "^6.3.0", 19 | "ws": "^8.18.0" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/TerbiumOS/webOS.git" 24 | }, 25 | "bugs": { 26 | "url": "https://github.com/TerbiumOS/webOS/issues" 27 | }, 28 | "homepage": "https://github.com/TerbiumOS/webOS#readme" 29 | } 30 | -------------------------------------------------------------------------------- /static/TBSIF.example.tbs: -------------------------------------------------------------------------------- 1 | // the following is a great example to what TBS file should looks like 2 | // this is a standard TBSIF (Terbium Settings Import Format) script 3 | [wallpaper]"https://i.imgur.com/kcDBAGY.png" 4 | [wallpaperFill]"cover" 5 | [theme]"almond" 6 | [customWinRadius]"8" 7 | [roundWin]"yes" 8 | [roundBtns]"yes" 9 | [customShadow]"rgb(232, 157, 70)" 10 | [shutdown]"https://google.com" 11 | [safeSearch]"2" 12 | [dockFull]"yes" 13 | [shadow]"yes" 14 | [windowsFullscreenOnOpen]"no" 15 | [playerAppAutoplay]"no" 16 | [photoCoverPhotoApp]"no" -------------------------------------------------------------------------------- /static/baremux/baretypes.d.ts: -------------------------------------------------------------------------------- 1 | export type BareHeaders = Record; 2 | export type BareMeta = {}; 3 | export type TransferrableResponse = { 4 | body: ReadableStream | ArrayBuffer | Blob | string; 5 | headers: BareHeaders; 6 | status: number; 7 | statusText: string; 8 | }; 9 | export interface BareTransport { 10 | init: () => Promise; 11 | ready: boolean; 12 | connect: (url: URL, protocols: string[], requestHeaders: BareHeaders, onopen: (protocol: string) => void, onmessage: (data: Blob | ArrayBuffer | string) => void, onclose: (code: number, reason: string) => void, onerror: (error: string) => void) => [(data: Blob | ArrayBuffer | string) => void, (code: number, reason: string) => void]; 13 | request: (remote: URL, method: string, body: BodyInit | null, headers: BareHeaders, signal: AbortSignal | undefined) => Promise; 14 | meta: () => BareMeta; 15 | } 16 | export interface BareWebSocketMeta { 17 | protocol: string; 18 | setCookies: string[]; 19 | } 20 | export type BareHTTPProtocol = 'blob:' | 'http:' | 'https:' | string; 21 | export type BareWSProtocol = 'ws:' | 'wss:' | string; 22 | export declare const maxRedirects = 20; 23 | -------------------------------------------------------------------------------- /static/baremux/client.d.ts: -------------------------------------------------------------------------------- 1 | import { BareHeaders, BareTransport, TransferrableResponse } from './baretypes'; 2 | import { WorkerConnection } from './connection'; 3 | import { BareWebSocket } from './websocket'; 4 | export declare function validProtocol(protocol: string): boolean; 5 | /** 6 | * A Response with additional properties. 7 | */ 8 | export interface BareResponse extends Response { 9 | rawResponse: TransferrableResponse; 10 | rawHeaders: BareHeaders; 11 | } 12 | /** 13 | * A BareResponse with additional properties. 14 | */ 15 | export interface BareResponseFetch extends BareResponse { 16 | finalURL: string; 17 | } 18 | export declare class BareMuxConnection { 19 | worker: WorkerConnection; 20 | constructor(worker?: string | Promise | MessagePort); 21 | getTransport(): Promise; 22 | setTransport(path: string, options: any[], transferables?: Transferable[]): Promise; 23 | setManualTransport(functionBody: string, options: any[], transferables?: Transferable[]): Promise; 24 | setRemoteTransport(transport: BareTransport, name: string): Promise; 25 | getInnerPort(): MessagePort | Promise; 26 | } 27 | export declare class BareClient { 28 | worker: WorkerConnection; 29 | /** 30 | * Create a BareClient. Calls to fetch and connect will wait for an implementation to be ready. 31 | */ 32 | constructor(worker?: string | Promise | MessagePort); 33 | createWebSocket(remote: string | URL, protocols?: string | string[] | undefined, __deprecated_donotuse_websocket?: any, requestHeaders?: BareHeaders): BareWebSocket; 34 | fetch(url: string | URL, init?: RequestInit): Promise; 35 | } 36 | -------------------------------------------------------------------------------- /static/baremux/connection.d.ts: -------------------------------------------------------------------------------- 1 | import { BareHeaders, TransferrableResponse } from "./baretypes"; 2 | export type WorkerMessage = { 3 | type: "fetch" | "websocket" | "set" | "get" | "ping"; 4 | fetch?: { 5 | remote: string; 6 | method: string; 7 | headers: BareHeaders; 8 | body: ReadableStream | ArrayBuffer | undefined; 9 | }; 10 | websocket?: { 11 | url: string; 12 | protocols: string[]; 13 | requestHeaders: BareHeaders; 14 | channel: MessagePort; 15 | }; 16 | client?: { 17 | function: string; 18 | args: any[]; 19 | }; 20 | }; 21 | export type WorkerRequest = { 22 | message: WorkerMessage; 23 | port: MessagePort; 24 | }; 25 | export type WorkerResponse = { 26 | type: "fetch" | "websocket" | "set" | "get" | "pong" | "error"; 27 | fetch?: TransferrableResponse; 28 | name?: string; 29 | error?: Error; 30 | }; 31 | export type BroadcastMessage = { 32 | type: "refreshPort"; 33 | }; 34 | export declare function browserSupportsTransferringStreams(): boolean; 35 | export declare class WorkerConnection { 36 | channel: BroadcastChannel; 37 | port: MessagePort | Promise; 38 | workerPath: string; 39 | constructor(worker?: string | Promise | MessagePort); 40 | createChannel(workerPath?: string, inInit?: boolean): void; 41 | sendMessage(message: WorkerMessage, transferable?: Transferable[]): Promise; 42 | } 43 | -------------------------------------------------------------------------------- /static/baremux/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './baretypes'; 2 | export * from './client'; 3 | export * from './connection'; 4 | export { BareClient as default } from './client'; 5 | export { WebSocketFields } from "./snapshot"; 6 | export { BareWebSocket } from "./websocket"; 7 | export type * from './baretypes'; 8 | export type * from './client'; 9 | export type * from './connection'; 10 | export type * from "./snapshot"; 11 | -------------------------------------------------------------------------------- /static/baremux/snapshot.d.ts: -------------------------------------------------------------------------------- 1 | export declare const nativeFetch: typeof fetch; 2 | export declare const nativeWebSocket: { 3 | new (url: string | URL, protocols?: string | string[]): WebSocket; 4 | prototype: WebSocket; 5 | readonly CONNECTING: 0; 6 | readonly OPEN: 1; 7 | readonly CLOSING: 2; 8 | readonly CLOSED: 3; 9 | }; 10 | export declare const nativeSharedWorker: { 11 | new (scriptURL: string | URL, options?: string | WorkerOptions): SharedWorker; 12 | prototype: SharedWorker; 13 | }; 14 | export declare const nativeLocalStorage: Storage; 15 | export declare const nativeServiceWorker: ServiceWorkerContainer; 16 | export declare const nativePostMessage: { 17 | (message: any, transfer: Transferable[]): void; 18 | (message: any, options?: StructuredSerializeOptions): void; 19 | }; 20 | export declare const WebSocketFields: { 21 | prototype: { 22 | send: (data: string | ArrayBufferLike | Blob | ArrayBufferView) => void; 23 | }; 24 | CLOSED: 3; 25 | CLOSING: 2; 26 | CONNECTING: 0; 27 | OPEN: 1; 28 | }; 29 | -------------------------------------------------------------------------------- /static/baremux/websocket.d.ts: -------------------------------------------------------------------------------- 1 | import type { WorkerConnection } from "./connection"; 2 | import { BareHeaders } from "./baretypes"; 3 | export declare class BareWebSocket extends EventTarget { 4 | protocols: string | string[] | undefined; 5 | url: string; 6 | readyState: number; 7 | channel: MessageChannel; 8 | constructor(remote: string | URL, protocols: string | string[] | undefined, worker: WorkerConnection, requestHeaders?: BareHeaders); 9 | send(...args: any[]): void; 10 | close(code: any, reason: any): void; 11 | } 12 | -------------------------------------------------------------------------------- /static/baremux/worker.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /static/baremux/worker.js: -------------------------------------------------------------------------------- 1 | !function(){"use strict";const e=MessagePort.prototype.postMessage;let t=null;function a(e,t,a){console.error(`error while processing '${a}': `,t),e.postMessage({type:"error",error:t})}async function n(a,n,s){const o=await s.request(new URL(a.fetch.remote),a.fetch.method,a.fetch.body,a.fetch.headers,null);if(!function(){if(null===t){const a=new MessageChannel,n=new ReadableStream;let s;try{e.call(a.port1,n,[n]),s=!0}catch(e){s=!1}return t=s,s}return t}()&&o.body instanceof ReadableStream){const e=new Response(o.body);o.body=await e.arrayBuffer()}o.body instanceof ReadableStream||o.body instanceof ArrayBuffer?e.call(n,{type:"fetch",fetch:o},[o.body]):e.call(n,{type:"fetch",fetch:o})}let s=null,o="";function c(){return new Error("there are no bare clients",{cause:"No BareTransport was set. Try creating a BareMuxConnection and calling setTransport() or setManualTransport() on it before using BareClient."})}function r(t,a){const n=s;let o=[a];t.fetch?.body&&o.push(t.fetch.body),t.websocket?.channel&&o.push(t.websocket.channel),e.call(n,{message:t,port:a},o)}function l(t){t.onmessage=async t=>{const l=t.data.port,i=t.data.message;if("ping"===i.type)e.call(l,{type:"pong"});else if("set"===i.type)try{const t=async function(){}.constructor;if("bare-mux-remote"===i.client.function)s=i.client.args[0],o=`bare-mux-remote (${i.client.args[1]})`;else{const e=new t(i.client.function),[a,n]=await e();s=new a(...i.client.args),o=n}console.log("set transport to ",s,o),e.call(l,{type:"set"})}catch(e){a(l,e,"set")}else if("get"===i.type)l.postMessage({type:"get",name:o});else if("fetch"===i.type)try{if(!s)throw c();if(s instanceof MessagePort)return void r(i,l);s.ready||await s.init(),await n(i,l,s)}catch(e){a(l,e,"fetch")}else if("websocket"===i.type)try{if(!s)throw c();if(s instanceof MessagePort)return void r(i,l);s.ready||await s.init(),await async function(t,a,n){const[s,o]=n.connect(new URL(t.websocket.url),t.websocket.protocols,t.websocket.requestHeaders,(a=>{e.call(t.websocket.channel,{type:"open",args:[a]})}),(a=>{a instanceof ArrayBuffer?e.call(t.websocket.channel,{type:"message",args:[a]},[a]):e.call(t.websocket.channel,{type:"message",args:[a]})}),((a,n)=>{e.call(t.websocket.channel,{type:"close",args:[a,n]})}),(a=>{e.call(t.websocket.channel,{type:"error",args:[a]})}));t.websocket.channel.onmessage=e=>{"data"===e.data.type?s(e.data.data):"close"===e.data.type&&o(e.data.closeCode,e.data.closeReason)},e.call(a,{type:"websocket"})}(i,l,s)}catch(e){a(l,e,"websocket")}}}new BroadcastChannel("bare-mux").postMessage({type:"refreshPort"}),self.onconnect=e=>{l(e.ports[0])},console.debug("bare-mux: running v2.1.7 (build c56d286)")}(); 2 | //# sourceMappingURL=worker.js.map 3 | -------------------------------------------------------------------------------- /static/baremux/workerHandlers.d.ts: -------------------------------------------------------------------------------- 1 | import { BareTransport } from "./baretypes"; 2 | import { WorkerMessage } from "./connection"; 3 | export declare function sendError(port: MessagePort, err: Error, name: string): void; 4 | export declare function handleFetch(message: WorkerMessage, port: MessagePort, transport: BareTransport): Promise; 5 | export declare function handleWebsocket(message: WorkerMessage, port: MessagePort, transport: BareTransport): Promise; 6 | -------------------------------------------------------------------------------- /static/calc/calc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Terbium Calculator 8 | 9 | 10 | 11 |
12 | 13 | 14 |
15 |
16 |
17 | 18 | 19 | 20 | 21 |
22 |
23 | 24 | 25 | 26 | 27 |
28 |
29 | 30 | 31 | 32 | 33 |
34 |
35 | 36 | 37 | 38 | 39 |
40 |
41 | 42 | 45 | 52 | 53 |
54 |
55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /static/canvas.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Canvas 8 | 9 | 10 | 11 | 12 |
13 |
14 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 34 |
35 |
36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /static/changes/080622.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Terbium Changelog 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 25 |
26 |
27 |

Update 08/06/2022 9:21 AM UTC
Version semi stable v1.37

28 |
29 |

Added new customizations

30 |
    31 |
  • Togglable window rounding
  • 32 |
  • Togglable round window buttons
  • 33 |
  • Togglable window shadowing
  • 34 |
  • More to come
  • 35 |
36 |
37 |
38 |

Squashed some BUGS!!!

39 |
    40 |
  • Fixed the apps panel not opening
  • 41 |
  • Fixed the the clock opening but not closing
  • 42 |
  • Removed the https coloring to working on it
    more as it wasn't breaking the url
  • 43 |
44 |
45 |
46 |

Bugs that are being worked on

47 |
    48 |
  • Window focusing focusing the wrong window
  • 49 |
  • Hotkeys not working when focusing on an app
  • 50 |
51 |
52 |
53 |

Things to be done in the future

54 |
    55 |
  • More customization
  • 56 |
  • More apps
  • 57 |
  • More themes
  • 58 |
  • An app store
  • 59 |
60 |
61 |
62 |

Soon to be deprecated

63 |
    64 |
  • The dock launching apps (instead with be for instances of apps)
  • 65 |
  • app searcher (if it doesn't get fixed soon)
  • 66 |
  • Terbium's official canvas app (if it doesn't improve OR I do not want it there anymore)
    to access the canvas app visit here
  • 67 |
68 |
69 |
70 | 71 | 72 | -------------------------------------------------------------------------------- /static/changes/092022.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Terbium Changelog 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 25 |
26 |
27 |

Update 09/20/2022 12:09 AM
Version semi stable v1.42

28 | 31 |
32 |

General changes

33 |
    34 |
  • Better window focusing
  • 35 |
  • Dock has apps that are open and vice versa
  • 36 |
  • Major UI change
  • 37 |
  • A default wallpaper
  • 38 |
  • Some system apps have buttons instead of title
  • 39 |
  • App indicator at the top left of the shell
  • 40 |
  • New apps
  • 41 |
42 |
43 |
44 |

Added new customizations

45 |
    46 |
  • Dock position can be now at the bottom, left or right
  • 47 |
  • Window controls can now be on the left or right
  • 48 |
  • More to come
  • 49 |
50 |
51 |
52 |

Squashed some BUGS!!!

53 |
    54 |
  • Passwords not being actually set
  • 55 |
  • Probably some more
  • 56 |
57 |
58 |
59 |

Bugs that are being worked on

60 |
    61 |
  • Not a bug per say but tabs working on the browser
  • 62 |
63 |
64 |
65 |

Things to be done in the future

66 |
    67 |
  • A wallpaper catalog
  • 68 |
  • Add a new notification full system
  • 69 |
  • bring back the https coloring
  • 70 |
  • Better window resizing
  • 71 |
  • Dock hold apps instances (better)
  • 72 |
  • More customization
  • 73 |
  • More apps
  • 74 |
  • More themes
  • 75 |
  • An app store
  • 76 |
77 |
78 |
79 |

Deprecated

80 |
    81 |
  • app searcher instead it is on apps laucher
  • 82 |
83 |
84 |
85 |

Soon to be deprecated (maybe)

86 |
    87 |
  • Nothing is being deprecated :)
  • 88 |
89 |
90 |
91 | 92 | 93 | -------------------------------------------------------------------------------- /static/changes/changes.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: pro; 3 | src: url(../resources/Product.ttf); 4 | } 5 | 6 | @font-face { 7 | font-family: pop; 8 | src: url(../resources/Poppins-Regular.ttf); 9 | } 10 | 11 | @font-face { 12 | font-family: consolas; 13 | src: url(../resources/Consolas.ttf); 14 | } 15 | 16 | [data-theme="dark"] { 17 | --body: #111; 18 | --color: #d2d2d2; 19 | --button-color: #1fbd4e; 20 | --glammer: #32db5c, #156b2a; 21 | --code-background: #25b74a; 22 | --code-color: white; 23 | --code-border: #73ff96; 24 | --mark-color: white; 25 | --stopDARK: #47CA64; 26 | --stopLIGHT: #2B813E; 27 | } 28 | 29 | [data-theme="night"] { 30 | --body: #181446; 31 | --color: #ffe688; 32 | --button-color: #08062b; 33 | --glammer: #85712b, #ffe99b; 34 | --code-background: #08062b; 35 | --code-color: white; 36 | --code-border: #ffe688; 37 | --mark-color: white; 38 | --stopDARK: #fff7a5; 39 | --stopLIGHT: #777021; 40 | } 41 | 42 | [data-theme="fracital"] { 43 | --body: #222; 44 | --color: #ff40f7; 45 | --button-color: #3c3c3c; 46 | --glammer: #ff5ef7, #9b1c94; 47 | --code-background: #3c3c3c; 48 | --code-color: white; 49 | --code-border: #ff40f7; 50 | --mark-color: #d284cf; 51 | --stopDARK: #FF40F7; 52 | --stopLIGHT: #A5209F; 53 | } 54 | 55 | [data-theme="almond"] { 56 | --body: #131313; 57 | --color: #E89D46; 58 | --button-color: #3c3c3c; 59 | --glammer: #ffbb6d, #b97d38; 60 | --code-background: #3c3c3c; 61 | --code-color: #f1b066; 62 | --code-border: #E89D46; 63 | --mark-color: #ffc787; 64 | --stopDARK: #E89D46; 65 | --stopLIGHT: #94632b; 66 | } 67 | 68 | html { 69 | height: 100%; 70 | scrollbar-color: var(--color) var(--body); 71 | scrollbar-width: thin; 72 | } 73 | 74 | ::-webkit-scrollbar { 75 | width: 6px; 76 | } 77 | 78 | ::-webkit-scrollbar-track { 79 | background: var(--body); 80 | } 81 | 82 | ::-webkit-scrollbar-thumb { 83 | background-color: var(--color); 84 | border-radius: 6px; 85 | } 86 | 87 | body { 88 | font-family: pro; 89 | height: 100%; 90 | margin: 0; 91 | padding: 0; 92 | background-color: var(--body); 93 | color: var(--color); 94 | display: grid; 95 | justify-content: center; 96 | align-content: baseline; 97 | } 98 | 99 | .firstPOST { 100 | height: min-content; 101 | display: grid; 102 | justify-items: center; 103 | } 104 | 105 | h1 { 106 | margin: 0; 107 | width: max-content; 108 | height: min-content; 109 | } 110 | 111 | h2 { 112 | font-size: 33px; 113 | } 114 | 115 | ul { 116 | padding: 0; 117 | margin-top: 0; 118 | font-size: 20px; 119 | list-style: nu; 120 | gap: 4px; 121 | display: grid; 122 | max-width: 30em; 123 | } 124 | 125 | li.lined { 126 | line-height: 1.4; 127 | } 128 | 129 | .glammerGRADIENT { 130 | list-style: decimal-leading-zero; 131 | background: -webkit-linear-gradient(var(--glammer)); 132 | -webkit-background-clip: text; 133 | -webkit-text-fill-color: transparent; 134 | text-decoration: underline; 135 | } 136 | 137 | code { 138 | background-color: var(--code-background); 139 | color: var(--code-color); 140 | padding: 2px 2px 2px 4px; 141 | border-radius: 4px; 142 | border: 1px solid var(--code-border); 143 | font-family: consolas; 144 | } 145 | 146 | mark { 147 | color: var(--mark-color); 148 | background: transparent; 149 | font-weight: bold; 150 | text-decoration: underline; 151 | } 152 | 153 | .logoC { 154 | width: 100%; 155 | justify-content: center; 156 | display: flex; 157 | margin-top: 13px; 158 | } 159 | 160 | .logo { 161 | height: 38px; 162 | cursor: pointer; 163 | } 164 | 165 | .center { 166 | display: grid; 167 | justify-items: center; 168 | } 169 | 170 | a { 171 | color: currentColor; 172 | text-decoration: none; 173 | } 174 | 175 | .container h2 { 176 | text-align: center; 177 | } 178 | 179 | .stopLIGHT { 180 | stop-color: var(--stopLIGHT); 181 | } 182 | 183 | .stopDARK { 184 | stop-color: var(--stopDARK); 185 | } -------------------------------------------------------------------------------- /static/changes/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: pro; 3 | src: url(../resources/Product.ttf); 4 | } 5 | 6 | @font-face { 7 | font-family: pop; 8 | src: url(../resources/Poppins-Regular.ttf); 9 | } 10 | 11 | @font-face { 12 | font-family: consolas; 13 | src: url(../resources/Consolas.ttf); 14 | } 15 | 16 | [data-theme="dark"] { 17 | --body: #111; 18 | --color: #d2d2d2; 19 | --button-color: #1fbd4e; 20 | } 21 | 22 | [data-theme="night"] { 23 | --body: #181446; 24 | --color: #ffe688; 25 | --button-color: #ffe688; 26 | } 27 | 28 | [data-theme="fracital"] { 29 | --body: #222; 30 | --color: #ff40f7; 31 | --button-color: #ff40f7; 32 | } 33 | 34 | [data-theme="almond"] { 35 | --body: #131313; 36 | --color: #E89D46; 37 | --button-color: #E89D46; 38 | } 39 | 40 | html { 41 | height: 100%; 42 | scrollbar-color: var(--color) var(--body); 43 | scrollbar-width: thin; 44 | } 45 | 46 | ::-webkit-scrollbar { 47 | width: 6px; 48 | } 49 | 50 | ::-webkit-scrollbar-track { 51 | background: var(--body); 52 | } 53 | 54 | ::-webkit-scrollbar-thumb { 55 | background-color: var(--color); 56 | border-radius: 6px; 57 | } 58 | 59 | body { 60 | font-family: pro; 61 | height: 100%; 62 | margin: 0; 63 | padding: 0; 64 | background-color: var(--body); 65 | color: var(--color); 66 | display: grid; 67 | justify-items: center; 68 | align-content: baseline; 69 | } 70 | 71 | a { 72 | text-decoration: underline; 73 | color: var(--button-color); 74 | } -------------------------------------------------------------------------------- /static/changes/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Terbium Changelog 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | September 20, 2022 12:09 AM UTC 16 | August 23, 2022 10:01 PM UTC 17 | August 16, 2022 4:06 PM UTC 18 | August 10, 2022 2:17 AM UTC 19 | August 6, 2022 9:21 AM UTC 20 | 21 | 22 | -------------------------------------------------------------------------------- /static/color.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Terbium Color Picker 7 | 8 | 9 | 10 |
11 |
12 |

#ffffff

13 |
rgb(255, 255, 255)
14 |
15 | 16 |
17 |

SNOOT Color Picker v1.2 stable beta

18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /static/help.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Help 9 | 10 | 11 | 12 | 13 |
14 |

Keybinds

15 |

App opening keybinds

16 | 17 | CTRL + ALT + H Open this page 18 | 19 | 20 | CTRL + ALT + S Open Settings 21 | 22 | 23 | CTRL + ALT + B Open new Terbium browser 24 | 25 | 26 | CTRL + ALT + P Open the color picker 27 | 28 | 29 | CTRL + ALT + T Open the terminal 30 | 31 | 32 | SHIFT + Left Arrow Shifts the focused window to the left 33 | 34 | 35 | SHIFT + Right Arrow Shifts the focused window to the right 36 | 37 | 38 | SHIFT + Up Arrow Shifts the focused window 39 | 40 | 41 | SHIFT + Down Arrow Minimizes the focused window up maximized 42 | 43 |

Window controlling keybinds

44 | 45 | CTRL + ALT + C Close all windows 46 | 47 | 48 | CTRL + ALT + X Close the focused window 49 | 50 | 51 | CTRL + ALT + N Minimize the focused window 52 | 53 | 54 | CTRL + ALT + Q Reload the focused window 55 | 56 |

Url Shortcuts

57 | 58 | https://terbium.ga/?app=color open Terbium color picker 59 | 60 | 61 | https://terbium.ga/?app=settings open Terbium settings 62 | 63 | 64 | https://terbium.ga/?app=help open this page 65 | 66 | 67 | https://terbium.ga/?app=canvas open the Terbium canvas app that is in beta 68 | 69 | 70 | https://terbium.ga/?app=yt open the YouTube app 71 | 72 | 73 | https://terbium.ga/?app=code open the Visual Studio Code app 74 | 75 | 76 | https://terbium.ga/?app=cmd or https://terbium.ga/?app=terminal open the terminal app 77 | 78 | 79 | https://terbium.ga/?app=video open the video player app 80 | 81 | 82 | https://terbium.ga/?app=text open the text editor 83 | 84 | 85 | https://terbium.ga/?app=changelog open the Official Terbium changelog app (old and too
much work to keep up with every update, but you can still see old updates) 86 |
87 |
88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /static/hypertabs/bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/hypertabs/bookmark.png -------------------------------------------------------------------------------- /static/hypertabs/c.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Hypertabs Contributors 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |

Contributors

15 |

16 | These are people that contributed to the Hypertabs project. 17 |

18 |
19 |
20 | 21 | B3ATDROP3R 22 |
23 |
24 |
25 | 26 | caracal-js 27 |
28 |
29 | 30 | luphoria 31 |
32 |
33 |
34 | 35 | 36 | -------------------------------------------------------------------------------- /static/hypertabs/css/chrome-tabs-dark-theme.css: -------------------------------------------------------------------------------- 1 | .chrome-tabs.chrome-tabs-dark-theme { 2 | background: #202124; 3 | } 4 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tab .chrome-tab-dividers::before, 5 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tab .chrome-tab-dividers::after { 6 | background: #4a4d51; 7 | } 8 | .chrome-tabs.chrome-tabs-dark-theme 9 | .chrome-tab 10 | .chrome-tab-background 11 | > svg 12 | .chrome-tab-geometry { 13 | fill: #292b2e; 14 | } 15 | .chrome-tabs.chrome-tabs-dark-theme 16 | .chrome-tab[active] 17 | .chrome-tab-background 18 | > svg 19 | .chrome-tab-geometry { 20 | fill: #323639; 21 | } 22 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tab .chrome-tab-title { 23 | color: #9ca1a7; 24 | } 25 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tab[active] .chrome-tab-title { 26 | color: #f1f3f4; 27 | } 28 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tab .chrome-tab-close { 29 | background-image: url("data:image/svg+xml;utf8,"); 30 | } 31 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tab .chrome-tab-close:hover { 32 | background-color: #5f6368; 33 | background-image: url("data:image/svg+xml;utf8,"); 34 | } 35 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tab .chrome-tab-close:hover:active { 36 | background-color: #80868b; 37 | background-image: url("data:image/svg+xml;utf8,"); 38 | } 39 | .chrome-tabs.chrome-tabs-dark-theme .chrome-tabs-bottom-bar { 40 | background: #323639; 41 | } 42 | -------------------------------------------------------------------------------- /static/hypertabs/css/chrome-tabs-dark-theme.styl: -------------------------------------------------------------------------------- 1 | dividersBackgroundColor = #4a4d51 2 | activeTabBackgroundColor = #323639 3 | 4 | .chrome-tabs.chrome-tabs-dark-theme 5 | background #202124 6 | 7 | .chrome-tab 8 | 9 | .chrome-tab-dividers 10 | 11 | &::before, &::after 12 | background #4a4d51 13 | 14 | .chrome-tab-background > svg .chrome-tab-geometry 15 | fill #292b2e 16 | 17 | &[active] .chrome-tab-background > svg .chrome-tab-geometry 18 | fill activeTabBackgroundColor 19 | 20 | .chrome-tab-title 21 | color #9ca1a7 22 | 23 | &[active] .chrome-tab-title 24 | color #f1f3f4 25 | 26 | .chrome-tab-close 27 | background-image url("data:image/svg+xml;utf8,") 28 | 29 | &:hover 30 | background-color #5f6368 31 | background-image url("data:image/svg+xml;utf8,") 32 | 33 | &:active 34 | background-color #80868b 35 | background-image url("data:image/svg+xml;utf8,") 36 | 37 | .chrome-tabs-bottom-bar 38 | background activeTabBackgroundColor 39 | -------------------------------------------------------------------------------- /static/hypertabs/dcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/hypertabs/dcd.png -------------------------------------------------------------------------------- /static/hypertabs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/hypertabs/favicon.ico -------------------------------------------------------------------------------- /static/hypertabs/games.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/hypertabs/games.png -------------------------------------------------------------------------------- /static/hypertabs/ht.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/hypertabs/ht.gif -------------------------------------------------------------------------------- /static/hypertabs/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/hypertabs/icon.png -------------------------------------------------------------------------------- /static/hypertabs/inobounce.min.js: -------------------------------------------------------------------------------- 1 | (function(global){var startY=0;var enabled=false;var supportsPassiveOption=false;try{var opts=Object.defineProperty({},"passive",{get:function(){supportsPassiveOption=true}});window.addEventListener("test",null,opts)}catch(e){}var handleTouchmove=function(evt){var el=evt.target;while(el!==document.body&&el!==document){var style=window.getComputedStyle(el);if(!style){break}if(el.nodeName==="INPUT"&&el.getAttribute("type")==="range"){return}var scrolling=style.getPropertyValue("-webkit-overflow-scrolling");var overflowY=style.getPropertyValue("overflow-y");var height=parseInt(style.getPropertyValue("height"),10);var isScrollable=scrolling==="touch"&&(overflowY==="auto"||overflowY==="scroll");var canScroll=el.scrollHeight>el.offsetHeight;if(isScrollable&&canScroll){var curY=evt.touches?evt.touches[0].screenY:evt.screenY;var isAtTop=startY<=curY&&el.scrollTop===0;var isAtBottom=startY>=curY&&el.scrollHeight-el.scrollTop===height;if(isAtTop||isAtBottom){evt.preventDefault()}return}el=el.parentNode}evt.preventDefault()};var handleTouchstart=function(evt){startY=evt.touches?evt.touches[0].screenY:evt.screenY};var enable=function(){window.addEventListener("touchstart",handleTouchstart,supportsPassiveOption?{passive:false}:false);window.addEventListener("touchmove",handleTouchmove,supportsPassiveOption?{passive:false}:false);enabled=true};var disable=function(){window.removeEventListener("touchstart",handleTouchstart,false);window.removeEventListener("touchmove",handleTouchmove,false);enabled=false};var isEnabled=function(){return enabled};var testDiv=document.createElement("div");document.documentElement.appendChild(testDiv);testDiv.style.WebkitOverflowScrolling="touch";var scrollSupport="getComputedStyle"in window&&window.getComputedStyle(testDiv)["-webkit-overflow-scrolling"]==="touch";document.documentElement.removeChild(testDiv);if(scrollSupport){enable()}var iNoBounce={enable:enable,disable:disable,isEnabled:isEnabled};if(typeof module!=="undefined"&&module.exports){module.exports=iNoBounce}if(typeof global.define==="function"){(function(define){define("iNoBounce",[],function(){return iNoBounce})})(global.define)}else{global.iNoBounce=iNoBounce}})(this); -------------------------------------------------------------------------------- /static/hypertabs/internal/extensions/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Extensions 7 | 8 | 9 | 10 |
11 |

You will have to reload Hypertabs to see changes.

12 |
13 |
14 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /static/hypertabs/internal/manager.js: -------------------------------------------------------------------------------- 1 | const internal_pages = { 2 | // YOU MUST ADD YOUR INTERNAL PAGE TO THIS FILE IF YOU WANT IT TO WORK! 3 | // This index is how HT can reference what page to what file 4 | newtab: "/newwin.html", 5 | // extensionsmarketplace: "Hypertabs/internal/extensions/marketplace.html", 6 | // extensions: "Hypertabs/internal/extensions/index.html", 7 | // games: "Hypertabs/internal/g/index.html" 8 | } 9 | -------------------------------------------------------------------------------- /static/hypertabs/internal/newTab/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | New tab 9 | 10 | 11 | 12 | 21 | 22 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /static/hypertabs/js/bookmarks.js: -------------------------------------------------------------------------------- 1 | function tryParse(x) { 2 | try { 3 | return JSON.parse(x); 4 | } catch (er) { 5 | return null; 6 | } 7 | } 8 | document.head.insertAdjacentHTML( 9 | "beforebegin", 10 | `` 13 | ); 14 | function initBookmarks(dep = 0) { 15 | // If the user fucks up localStorage somehow, this could occur. 16 | // Prevent issues by simply giving up. 17 | if (dep > 5) return; 18 | 19 | // Locally saved bookmarks as Stringified 2D Array 20 | let bookmarksLocal = localStorage.getItem("bookmarks"); 21 | 22 | // Where to add these element 23 | let bookmarks = document.querySelector(".bookmarks"); 24 | 25 | // If valid 26 | if (bookmarksLocal !== null && Array.isArray(tryParse(bookmarksLocal))) { 27 | // Parse 28 | let json = JSON.parse(bookmarksLocal); 29 | // Loop 30 | json.forEach((bookmark) => { 31 | // /fetch/b64/favicon.ico 32 | // Woah 33 | let [site, ico, title] = bookmark; 34 | 35 | // Create the element 36 | let elem = document.createElement("a"); 37 | elem.textContent = title; 38 | elem.setAttribute("id", "bookmarka"); 39 | elem.style.backgroundImage = "url(" + ico + ")"; 40 | elem.style.color = localStorage.getItem("tabacttit"); 41 | elem.href = site; 42 | 43 | elem.addEventListener("contextmenu", function (e) { 44 | [0].forEach.call(document.getElementsByClassName("bkmks"), (a) => { 45 | a.parentElement.removeChild(a); 46 | }); 47 | e.preventDefault(); 48 | let { pageX, pageY } = e; 49 | let menu = document.createElement("div"); 50 | menu.style.position = "fixed"; 51 | menu.style.left = pageX + "px"; 52 | menu.style.top = pageY + "px"; 53 | menu.style.backgroundColor = localStorage.getItem("tabbkg"); 54 | menu.setAttribute("id", "bmenu"); 55 | let ul = document.createElement("ul"); 56 | ul.setAttribute("id", "bul"); 57 | ul.style.color = localStorage.getItem("nt"); 58 | [ 59 | { 60 | name: "Delete", 61 | func: () => { 62 | elem.parentElement.removeChild(elem); 63 | removeBookmark(bookmark); 64 | }, 65 | }, 66 | ].forEach((i) => { 67 | let li = document.createElement("li"); 68 | li.style.color = localStorage.getItem("nt"); 69 | ul.appendChild(li); 70 | li.setAttribute("id", "bul"); 71 | li.setAttribute("class", "bkmks"); 72 | li.textContent = i.name; 73 | li.addEventListener("click", (e) => { 74 | e.preventDefault(); 75 | i.func(); 76 | }); 77 | }); 78 | menu.appendChild(ul); 79 | 80 | let a = function () { 81 | if (menu.parentElement) menu.parentElement.removeChild(menu); 82 | window.removeEventListener("input", a); 83 | }; 84 | document.body.appendChild(menu); 85 | window.addEventListener("click", a); 86 | }); 87 | 88 | bookmarks.appendChild(elem); 89 | }); 90 | } else { 91 | // Initialize new locally stored bookmark 92 | localStorage.setItem("bookmarks", "[ ]"); 93 | initBookmarks(dep + 1); 94 | } 95 | // JSON.parse 96 | // localStorage.getItem 97 | // [ [ "domain.com", "favicon", "title" ], [ ".org", "favicon", "b3at is smart" ] ] 98 | } 99 | 100 | // this is where bookmark code goes 101 | window.addEventListener("DOMContentLoaded", initBookmarks); 102 | document.body.style.backgroundColor = localStorage.getItem("tabact"); 103 | function removeBookmark(a) { 104 | let data = JSON.parse(localStorage.getItem("bookmarks")); 105 | index = data.indexOf(a); 106 | console.log(a); 107 | data.splice(index, 1); 108 | localStorage.setItem("bookmarks", JSON.stringify(data)); 109 | } 110 | -------------------------------------------------------------------------------- /static/hypertabs/js/extensions.js: -------------------------------------------------------------------------------- 1 | const _setInfo = setInfo; 2 | class Tab { 3 | static async getActive() { 4 | return document.getElementById(getActiveFrameId()).contentDocument; 5 | } 6 | static async getList() { 7 | let children = document.querySelector(".chrome-tabs-content").children; 8 | for (child in children) { 9 | console.log(typeof child); 10 | if (typeof child === "number") { 11 | console.log(children[child].attributes); 12 | } 13 | } 14 | } 15 | } 16 | class Page { 17 | static async register(info) { 18 | let img = document.createElement("img"); 19 | img.className = "extenico"; 20 | img.src = info.icon64; 21 | img.setAttribute("onclick", info.name + ".Menu()"); 22 | console.log(document.getElementById("extensionlist")); 23 | document.getElementById("extensionlist").appendChild(img); 24 | } 25 | static async showEx(details) { 26 | let ediv = document.createElement("div"); 27 | ediv.style.width = "512px"; 28 | ediv.style.height = "512px"; 29 | } 30 | static async URL(tab) {} 31 | static async params(tab) {} 32 | static async frame(tab) {} 33 | } 34 | class Util { 35 | static formUrl(url) { 36 | let purl; 37 | try { 38 | purl = new URL(url); 39 | console.log(purl); 40 | } catch { 41 | alert( 42 | "An extension has caused an issue while making a web request! ", 43 | console.trace() 44 | ); 45 | } 46 | return xor.encode(purl.origin + purl.pathname + purl.search); 47 | } 48 | } 49 | class Request { 50 | static async post(url, headers = {}, data) { 51 | url = Util.formUrl(url); 52 | console.log(url); 53 | let res = await fetch(prefix + url, { 54 | method: "POST", 55 | mode: "cors", 56 | cache: "no-cache", 57 | credentials: "same-origin", 58 | headers: headers, 59 | redirect: "follow", 60 | referrerPolicy: "no-referrer", 61 | body: JSON.stringify(data), 62 | }); 63 | return res; 64 | } 65 | static async get(url, headers = {}) { 66 | url = Util.formUrl(url); 67 | let res = await fetch(prefix + url, { 68 | method: "GET", 69 | mode: "cors", 70 | cache: "no-cache", 71 | headers: headers, 72 | redirect: "follow", 73 | referrerPolicy: "no-referrer", 74 | }); 75 | return res; 76 | } 77 | static async put(url, headers = {}, data = {}) { 78 | url = Util.formUrl(url); 79 | let res = await fetch(prefix+ url, { 80 | method: "PUT", 81 | mode: "cors", 82 | cache: "no-cache", 83 | credentials: "same-origin", 84 | headers: headers, 85 | redirect: "follow", 86 | referrerPolicy: "no-referrer", 87 | body: JSON.stringify(data), 88 | }); 89 | return res; 90 | } 91 | // finish this one 92 | static async delete(url, headers = {}, data = {}) { 93 | url = Util.formUrl(url); 94 | let res = await fetch(prefix + url, { 95 | method: "DELETE", 96 | mode: "cors", 97 | cache: "no-cache", 98 | credentials: "same-origin", 99 | headers: headers, 100 | redirect: "follow", 101 | referrerPolicy: "no-referrer", 102 | body: JSON.stringify(data), 103 | }); 104 | return res; 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /static/hypertabs/js/weather.js: -------------------------------------------------------------------------------- 1 | class Info { 2 | // do web requests 3 | static async getResponse(url) { 4 | let resp = await fetch(url), 5 | json = await resp.json(); 6 | return json; 7 | } 8 | // get users approximate city, latitude, and longitude based on IP 9 | static async getIpLoc() { 10 | let data = await this.getResponse( 11 | `${path}${xor.encode("http://ip-api.com/json/" + ip)}` 12 | ); 13 | let latlon = `${data.lat},${data.lon}`, 14 | city = data.city; 15 | return { latlon, city }; 16 | } 17 | // get weather.gov zone (not needed) 18 | static async getZone(latlon) { 19 | let data = await this.getResponse( 20 | `https://api.weather.gov/points/${latlon}` 21 | ); 22 | 23 | return data.properties.forecastZone; 24 | } 25 | // return array of city, latlon, and weather.gov zone 26 | static async getNearestZone() { 27 | let { city, latlon } = await this.getIpLoc(), 28 | zone = await this.getZone(latlon); 29 | 30 | return { city, latlon, zone }; 31 | } 32 | } 33 | class Weather { 34 | // gets weather and returns the current. 35 | static async getCurrents(latlon) { 36 | let data = await Info.getResponse( 37 | `/currentw?lat=${latlon.replace(",", "&lon=")}` 38 | ), 39 | temp = data.observation.imperial.temp, 40 | weather = data.observation.phrase_22char, 41 | icn = data.observation.icon_code; 42 | return { temp, weather, icn }; 43 | } 44 | // gets extended weather data and returns it. 45 | static async getAlert(latlon) { 46 | let data = await Info.getResponse( 47 | `/alertw&lat=${latlon.replace(",", "&lon=")}` 48 | ); 49 | // if (data == Error) { 50 | // return; 51 | // } else { 52 | // return data.alerts[0].eventDescription; 53 | // } 54 | return null; 55 | } 56 | } 57 | async function StartWeather() { 58 | let ipdat = await Info.getIpLoc(), 59 | weather = await Weather.getCurrents(ipdat.latlon); 60 | // alert = await Weather.getAlert(ipdat.location); 61 | document.getElementById( 62 | "winfo" 63 | ).innerHTML = `${ipdat.city}
${weather.temp}°F | ${weather.weather}`; 64 | // console.log(weather.alert.length); 65 | // if (!alert == null) { 66 | // document.getElementById('alerts').setAttribute('onclick', `location.href = '/fetch/aHR0cHM6Ly9mb3JlY2FzdC53ZWF0aGVyLmdvdg==/MapClick.php?&lat=${ipdat.latlon.replace(',', '&lon=')}'`); 67 | // document.getElementById('alerts').innerHTML = `${alert}`; 68 | // } else { 69 | // return; 70 | // }; 71 | } 72 | window.onload = () => { 73 | StartWeather(); 74 | }; 75 | -------------------------------------------------------------------------------- /static/hypertabs/js/x/core.js: -------------------------------------------------------------------------------- 1 | // empty file referencing HT core. 2 | -------------------------------------------------------------------------------- /static/hypertabs/js/x/demoex.js: -------------------------------------------------------------------------------- 1 | Page.register({ 2 | icon64: 3 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACyUlEQVR4Xu2aTYiNURjHp5mmCSOpaTSaEA1ZKF8LsRiUUpqyQMpiwm7EREnTyJ5RFppSaqyUslRKMsrCUrKShY1IRr5Cycfjdzr35s5/5n3ve2djznPfX/039z3Pc/vd+3bvOe85LS0lJSX/EzNbqK81BYjvJTfJAr3mGoRXkLvkF9mu112D8HHyxSKX9bpbkG0n1yrigdfWLLc+oovIgxr5wGkd5xJEO8kjkX9nzfDLj2QbuSfygREd6xJEr6q5xV/+bh3rDiQPqXmFSR3rDiR7yHs1rzCk492B5C21rvCb9Oh4VyC4jfwR8SovdLw7kJxU6xpu63hXILhRjYVRrXEFghNqLAxojRuQ67B/i5wstmidG5AbUNtZWKd1brDpK70slmudG5B7prazsFjrXBDELM7x69GltS5AbJOaZrBea12A2H41zaBfa12A2Ak1zeCA1roAsTNqmoHPmSBiI2qawR2tdYEVvwOmtNYFiA2qaQ59Wp88SO1TyxyGtT55kFqjljk80frkQaqVfFXTHDZoj+SxmZsfeYxpffIgNaqWOXwgS7VH0iC0VS3rcFF7JA9Sz9Uyh++kV3skDUJn1bIOE9ojaRDqJt/UMoewf+DrQSlCY2pZhynz9KgMmS6r/3RYCYcnWrVXsiAzrIYFGNc+yWJxZvhYDQtwSXslCzJ95KMaFuCC9koWi6vEsCXeKOOkXfslCSKn1K4gYW2xTPsliTU+QaryiuzSfkmCyBD5KYJFCeeJ058rILHH4kpwLny2eCd1at+kQKDXZj87WJRP5ApZrb2TAoFj5M10t4YI/y7hgzxJ1mr/JLB4hvg8eVtrNkdekhvkHDlINpMl+p7zEounSwbJQyu2y5xHWGHeJ4dJh77XvMfikvoouW7xzEHWkbsqP8hTi9/+EfO4BY/UStJPdlaym+wgq0ibji8pKSkpKSkpKcpfD60zBiqrtQkAAAAASUVORK5CYII=", 4 | Info: "Dark Mode extension for Hypertabs by luphoria.", 5 | Description: 6 | "This extension can toggle a dark mode on pages viewed via Hypertabs.", 7 | page: "demo", 8 | name: "Demo", 9 | }); 10 | 11 | 12 | class Demo { 13 | static async demoFunc() { 14 | 15 | } 16 | } 17 | 18 | setInfo = (parameters) => { 19 | // anything you want to run onload you put here 20 | 21 | 22 | _setInfo(parameters); 23 | }; 24 | -------------------------------------------------------------------------------- /static/hypertabs/js/xor.js: -------------------------------------------------------------------------------- 1 | // xor function in one place for easy modification 2 | class xor { 3 | static encode(str) { 4 | if (!str) return str; 5 | return encodeURIComponent( 6 | str 7 | .toString() 8 | .split('') 9 | .map((char, ind) => 10 | ind % 2 ? String.fromCharCode(char.charCodeAt() ^ 2) : char 11 | ) 12 | .join('') 13 | ); 14 | } 15 | static decode(str) { 16 | if (!str) return str; 17 | let [input, ...search] = str.split('?'); 18 | 19 | return ( 20 | decodeURIComponent(input) 21 | .split('') 22 | .map((char, ind) => 23 | ind % 2 ? String.fromCharCode(char.charCodeAt(0) ^ 2) : char 24 | ) 25 | .join('') + (search.length ? '?' + search.join('?') : '') 26 | ); 27 | } 28 | } 29 | // and setting path easily. (wait this is in the js.js file as prefix though?) 30 | path = "/sw/"; 31 | -------------------------------------------------------------------------------- /static/image/image.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: pro; 3 | src: url(../resources/Product.ttf); 4 | } 5 | 6 | [data-theme="dark"] { 7 | --taskbar-bg: #282928; 8 | --body: #1c1c1c; 9 | --color: #d4d4d4; 10 | --button-background: #282928; 11 | --button-color: #41bc5d; 12 | 13 | --cursorText: url("../resources/cursors/textD.png") 0 16, text; 14 | --cursorNormal: url("../resources/cursors/normalD.png"), default; 15 | --cursorHand: url("../resources/cursors/handD.png"), pointer; 16 | 17 | --switch-thumb: #41bc5d; 18 | --switch-back: #313131; 19 | --switch-back-shadow: #2b843f; 20 | } 21 | 22 | [data-theme="night"] { 23 | --taskbar-bg: #26206A; 24 | --body: #181446; 25 | --color: #ffe688; 26 | --button-background: #26206a; 27 | --button-color: #ffe688; 28 | 29 | --cursorText: url("../resources/cursors/textN.png") 0 16, text; 30 | --cursorNormal: url("../resources/cursors/normalN.png"), default; 31 | --cursorHand: url("../resources/cursors/handN.png"), pointer; 32 | 33 | --switch-thumb: #ffe688; 34 | --switch-back: #332c84; 35 | --switch-back-shadow: #ffe6887d; 36 | } 37 | 38 | [data-theme="fracital"] { 39 | --taskbar-bg: #383838; 40 | --body: #222; 41 | --color: #ff40f7; 42 | --button-background: #383838; 43 | --button-color: #ff40f7; 44 | 45 | --cursorText: url("../resources/cursors/textF.png") 0 16, text; 46 | --cursorNormal: url("../resources/cursors/normalF.png"), default; 47 | --cursorHand: url("../resources/cursors/handF.png"), pointer; 48 | 49 | --switch-thumb: #ff40f7; 50 | --switch-back: #424242d3; 51 | --switch-back-shadow: #ff40f787; 52 | } 53 | 54 | [data-theme="almond"] { 55 | --taskbar-bg: #282928; 56 | --body: #131313; 57 | --color: #E89D46; 58 | --button-background: #313131; 59 | --button-color: #CF8B3C; 60 | 61 | --cursorText: url("../resources/cursors/textA.png") 0 16, text; 62 | --cursorNormal: url("../resources/cursors/normalA.png"), default; 63 | --cursorHand: url("../resources/cursors/handA.png"), pointer; 64 | 65 | --switch-thumb: #E89D46; 66 | --switch-back: #424242d3; 67 | --switch-back-shadow: #E89D4687; 68 | } 69 | 70 | html { 71 | font-family: pro; 72 | height: 100%; 73 | } 74 | 75 | body { 76 | cursor: var(--cursorNormal); 77 | color: var(--color); 78 | background-color: var(--body); 79 | margin: 0; 80 | height: 100%; 81 | display: grid; 82 | justify-items: center; 83 | align-content: center; 84 | } 85 | 86 | img { 87 | border-radius: 2px; 88 | filter: drop-shadow(0 0 10px #000000ad); 89 | } 90 | 91 | .imageControls { 92 | display: flex; 93 | width: min-content; 94 | position: absolute; 95 | left: 0; 96 | overflow: hidden; 97 | border-bottom-right-radius: 12px; 98 | } 99 | 100 | .btn { 101 | background-color: var(--button-background); 102 | color: var(--button-color); 103 | border: none; 104 | cursor: var(--cursorHand); 105 | transition: 200ms ease-in-out; 106 | font-size: 17px; 107 | border-radius: 5px; 108 | } 109 | 110 | .shown { 111 | visibility: visible; 112 | } 113 | 114 | .backy { 115 | height: 68px; 116 | } 117 | 118 | .fill { 119 | fill: var(--button-color); 120 | } 121 | 122 | input[type="checkbox"] { 123 | -webkit-appearance: none; 124 | position: relative; 125 | background-color: var(--switch-back); 126 | width: 34px; 127 | height: 16px; 128 | border-radius: 8px; 129 | cursor: var(--cursorHand); 130 | } 131 | 132 | input[type="checkbox"]::before { 133 | transition: 0.2s ease-in-out; 134 | content: ""; 135 | position: absolute; 136 | right: 18px; 137 | height: 16px; 138 | width: 16px; 139 | transform: scale(1.2); 140 | background-color: var(--switch-thumb); 141 | border-radius: 14px; 142 | box-shadow: 0 0 3px 1px var(--switch-back-shadow); 143 | } 144 | 145 | input:checked[type="checkbox"]::before { 146 | right: 0; 147 | } 148 | 149 | .settingsWindow { 150 | z-index: -1; 151 | display: grid; 152 | justify-content: center; 153 | opacity: 0; 154 | transition: 200ms ease-in-out; 155 | position: absolute; 156 | inset: 0; 157 | background-color: var(--taskbar-bg); 158 | } 159 | 160 | .settingsContent { 161 | height: min-content; 162 | display: grid; 163 | justify-content: left; 164 | width: max-content; 165 | } 166 | 167 | .settingsItem { 168 | align-items: center; 169 | padding: 8px 12px; 170 | background-color: var(--body); 171 | border-radius: 6px; 172 | display: flex; 173 | gap: 4px; 174 | } 175 | 176 | .btnQ { 177 | padding: 4px 12px; 178 | } -------------------------------------------------------------------------------- /static/image/image.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Terbium Image Viewer 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |
18 |
Image On Window
19 | 20 | 21 |
22 |
23 |
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /static/js/canvas.js: -------------------------------------------------------------------------------- 1 | // const canvas = document.createElement('canvas'); 2 | const canvas = document.getElementById('canvas'); 3 | const toolbar = document.getElementById('toolbar'); 4 | const ctx = canvas.getContext('2d'); 5 | let newCANVAS = document.getElementById("new"); 6 | //get canvas offsets 7 | const canvasX = canvas.offsetLeft; 8 | const canvasY = canvas.offsetTop; 9 | 10 | canvas.width = window.innerWidth - canvasX; 11 | canvas.height = window.innerHeight - canvasY; 12 | 13 | //painting vars 14 | let painting = false; 15 | let lineWidth = 3; 16 | let color; 17 | let startX; 18 | let startY; 19 | let empty = true; 20 | 21 | toolbar.addEventListener("click", e => { 22 | //check the target button of the toolbar 23 | if(e.target.id === "clear") { 24 | ctx.clearRect(0, 0, canvas.width, canvas.height); 25 | empty = true; 26 | } 27 | if(e.target.id === "save") { 28 | var canvasURI = canvas.toDataURL("image/png"); 29 | const sl = document.createElement("a"); 30 | const span = document.createElement("span"); 31 | if(document.getElementById("save").classList.contains("last")) { 32 | if(empty == true) { 33 | alert("you haven't drawn anything bozo") 34 | } else { 35 | document.getElementById("save").classList.remove("last"); 36 | sl.classList.add("last"); 37 | sl.classList.add("link"); 38 | sl.innerText = "untitled.png" 39 | toolbar.appendChild(sl); 40 | sl.appendChild(span); 41 | sl.download = 'untitled.jpg'; 42 | sl.href = canvas.toDataURL(); 43 | } 44 | } 45 | } 46 | }); 47 | 48 | // newCANVAS.addEventListener("click", () => { 49 | // let size = prompt("choose the dimensions\n\nlike this '32 52' each parameter seperated by a space\n\nif you don't the script will interpret it fully as the width and set the height to '1'"); 50 | // if(size == false) { 51 | // return; 52 | // } else { 53 | // size.toLowerCase() 54 | // let text = size.split(" "); 55 | // let width = text[0]; 56 | // let height = text[1]; 57 | // console.log(width + "+" + height); 58 | // canvas.width = width; 59 | // canvas.height = height; 60 | // document.body.appendChild(canvas); 61 | // } 62 | // }) 63 | 64 | toolbar.addEventListener("change", e => { 65 | if(e.target.id === 'stroke') { 66 | ctx.strokeStyle = e.target.value; 67 | } 68 | if(e.target.id === 'lineWidth') { 69 | lineWidth = e.target.value; 70 | } 71 | }); 72 | 73 | const draw = (e) => { 74 | if(!painting) return; 75 | ctx.lineWidth = lineWidth; 76 | ctx.lineCap = 'round'; 77 | ctx.lineTo(e.clientX - canvasX, e.clientY); 78 | ctx.stroke(); 79 | } 80 | 81 | canvas.addEventListener("mouseleave", () => { 82 | if(painting) { 83 | painting = false; 84 | ctx.stroke(); 85 | ctx.beginPath(); 86 | } 87 | }) 88 | 89 | canvas.addEventListener("mousedown", (e) => { 90 | empty = false; 91 | painting = true; 92 | startX = e.clientX; 93 | startY = e.clientY; 94 | }); 95 | 96 | canvas.addEventListener("mouseup", (e) => { 97 | painting = false; 98 | ctx.stroke(); 99 | ctx.beginPath(); 100 | }); 101 | 102 | canvas.addEventListener("mousemove", draw); 103 | 104 | window.addEventListener("resize", () => { 105 | canvas.width = window.innerWidth - canvasX; 106 | canvas.height = window.innerHeight - canvasY; 107 | }); -------------------------------------------------------------------------------- /static/js/keys.js: -------------------------------------------------------------------------------- 1 | let frame = document.getElementById("frame"); 2 | 3 | window.addEventListener("keydown", e => { 4 | switch(e.key.toLowerCase()) { 5 | case "shift q": 6 | frame.contentWindow.location.reload(); 7 | break; 8 | default: 9 | break; 10 | } 11 | }) -------------------------------------------------------------------------------- /static/js/lock.js: -------------------------------------------------------------------------------- 1 | const cancelLock = document.querySelector(".cancel"); 2 | 3 | cancelLock.addEventListener("click", () => { 4 | window.open("./index.html", "_self"); 5 | }) -------------------------------------------------------------------------------- /static/js/new.js: -------------------------------------------------------------------------------- 1 | const searchi = document.getElementById("searchq"); 2 | const search = document.getElementById("search"); 3 | const closeA = document.getElementById("alertx"); 4 | const alerty = document.getElementById("alert"); 5 | const style = document.getElementById("relsn"); 6 | const favi = document.getElementById("favi"); 7 | const logo = document.getElementById("logo"); 8 | 9 | class xor { 10 | static encode(str) { 11 | if (!str) return str; 12 | return 'hvtrs8%2F-' + encodeURIComponent( 13 | str 14 | .toString() 15 | .split('') 16 | .map((char, ind) => 17 | ind % 2 ? String.fromCharCode(char.charCodeAt() ^ 2) : char 18 | ) 19 | .join('') 20 | ); 21 | }; 22 | static decode(str) { 23 | if (!str) return str; 24 | let [input, ...search] = str.split('?'); 25 | 26 | return 'hvtrs8%2F-' ( 27 | decodeURIComponent(input) 28 | .split('') 29 | .map((char, ind) => 30 | ind % 2 ? String.fromCharCode(char.charCodeAt(0) ^ 2) : char 31 | ) 32 | .join('') + (search.length ? '?' + search.join('?') : '') 33 | ); 34 | }; 35 | }; 36 | 37 | function isUrl(val = '') { 38 | if (/^http(s?):\/\//.test(val) || val.includes('.') && val.substr(0, 1) !== ' ') return true; 39 | return false; 40 | }; 41 | 42 | function ser() { 43 | event.preventDefault(); 44 | let url = searchi.value.trim(); 45 | window.parent.document.getElementById("searchbar").value = url; 46 | let safeSearch = localStorage.getItem("ss"); 47 | if(safeSearch === null) { 48 | if (!isUrl(url)) url = `https://searx.org/search?q=${url}&safesearch=0`; 49 | } else if(safeSearch === "ss_0") { 50 | if (!isUrl(url)) url = `https://searx.org/search?q=${url}&safesearch=0`; 51 | } else if(safeSearch === "ss_1") { 52 | if (!isUrl(url)) url = `https://searx.org/search?q=${url}&safesearch=1`; 53 | } else if(safeSearch === "ss_2") { 54 | if (!isUrl(url)) url = `https://searx.org/search?q=${url}&safesearch=2`; 55 | } 56 | window.open("sw" + "/" + xor.encode(url), "_self"); 57 | } 58 | 59 | searchi.addEventListener("focus", () => { 60 | searchi.addEventListener("keydown", (e) => { 61 | if(e.keyCode == "9") { 62 | e.preventDefault(); 63 | return; 64 | } 65 | if(e.keyCode == "13") { 66 | e.preventDefault(); 67 | ser() 68 | } 69 | }) 70 | if (search.classList.contains("rectDown")) { 71 | search.classList.remove("rectDown"); 72 | search.classList.add("rectUp"); 73 | return; 74 | } else { 75 | search.classList.add("rectUp"); 76 | return; 77 | } 78 | }); 79 | 80 | searchi.addEventListener("blur", () => { 81 | if (search.classList.contains("rectUp")) { 82 | search.classList.remove("rectUp"); 83 | search.classList.add("rectDown"); 84 | return; 85 | } else { 86 | search.classList.add("rectDown"); 87 | return; 88 | } 89 | }); 90 | 91 | if(closeA) { 92 | closeA.addEventListener("click", () => { 93 | alerty.style.display = "none"; 94 | }); 95 | } 96 | 97 | const parent = window.parent.document; 98 | const siteFrame = parent.querySelector(".iframething"); 99 | const urlbar = parent.querySelector("#urlbar"); 100 | const urlToOpen = window.parent.parent.document.querySelector(".winFocus").getAttribute("urltoopen"); 101 | 102 | if (urlToOpen != "undefined") { 103 | const parentDomain = window.parent.parent.document.location.hostname; 104 | if(parentDomain === "localhost") { 105 | siteFrame.setAttribute("src", `//${parentDomain}:${window.parent.document.location.port}/sw/${xor.encode(urlToOpen)}`); 106 | urlbar.value = urlToOpen; 107 | } else { 108 | siteFrame.setAttribute("src", `https://${parentDomain}/sw/${xor.encode(urlToOpen)}`); 109 | urlbar.value = urlToOpen; 110 | } 111 | } -------------------------------------------------------------------------------- /static/js/not.js: -------------------------------------------------------------------------------- 1 | let message = `The new update is here, read about it here!` 2 | terbiumNotification('./terbium.png', 'System Notification', message, 6600); -------------------------------------------------------------------------------- /static/js/notifications.js: -------------------------------------------------------------------------------- 1 | let notification = document.createElement("div"); 2 | function terbiumNotification(icon, author, message, time) { 3 | notification.className = "notification"; 4 | notification.style.opacity = "0"; 5 | notification.innerHTML = ` 6 |
7 |
8 | 9 |
10 |
11 | ${author} 12 |
13 |
14 | ${message} 15 |
16 |
17 | `; 18 | let height = notification.offsetHeight + "px"; 19 | notification.style.transform = `translateY(${height})`; 20 | setTimeout(() => { 21 | notification.style.opacity = "1"; 22 | notification.style.transform = `translateX(0)`; 23 | setTimeout(() => { 24 | notification.style.opacity = "0"; 25 | notification.style.transform = `translateY(${height})`; 26 | setTimeout(() => { 27 | notification.remove(); 28 | }, 200) 29 | }, time); 30 | }, 1000); 31 | document.body.appendChild(notification); 32 | } -------------------------------------------------------------------------------- /static/js/tabs.js: -------------------------------------------------------------------------------- 1 | const active_Window = () => {document.querySelector('.chrome-tab[active]')}; // fill this after 2 | const content_Window = (id) => {return document.getElementById(id).content_Window}; 3 | let tabNum = 1; 4 | class Tab { 5 | static create (url = './newwin.html') { 6 | let frameW = document.createElement("iframe"), 7 | div = document.createElement('div'), 8 | browserC = document.getElementsByClassName('chrome-tabs-content')[0], 9 | frameC = document.getElementById('frameC'); 10 | div.setAttribute('num',tabNum); 11 | div.setAttribute('class','chrome-tab'); 12 | 13 | div.setAttribute('active',''); 14 | div.setAttribute('onclick',`Tab.switch(this.getAttribute('num'))`); 15 | div.innerHTML = ` 16 |
17 |
New Tab
18 |
19 |
20 |
21 | `; 22 | frameW.setAttribute('id',tabNum); 23 | frameW.setAttribute('class','frame') 24 | frameW.setAttribute('frameborder','0') 25 | frameW.src=url; 26 | browserC.appendChild(div); 27 | frameC.appendChild(frameW); 28 | if (tabNum > 0) { 29 | this.switch(tabNum) 30 | } 31 | 32 | let tabs = document.getElementsByClassName('chrome-tab'); 33 | for (let i = 0; i < tabs.length; i++) { 34 | tabs[i].style.transform = `translate3d(${239*i}px, 0, 0)`; 35 | } 36 | tabNum++; 37 | // check for overflow in .chrome-tabs 38 | if (document.getElementsByClassName('chrome-tabs-content')[0].offsetWidth > document.getElementsByClassName('chrome-tabs')[0].offsetWidth) { 39 | document.getElementsByClassName('chrome-tabs')[0].style.height = "56px" 40 | } 41 | } 42 | static remove(id) { 43 | document.getElementsByClassName('chrome-tabs-content') 44 | if (document.querySelector(`.chrome-tab[num='${id}']`).hasAttribute('active') && document.querySelector(`.chrome-tab[num='${id}']`).previousElementSibling != null) { 45 | document.querySelector(`.chrome-tab[num='${id}']`).previousElementSibling.setAttribute('active','') 46 | document.getElementById(document.querySelector(`.chrome-tab[num='${id}']`).previousElementSibling.getAttribute('num')).style.display = 'unset'; 47 | } 48 | document.querySelector(`.chrome-tab[num='${id}']`).remove(); 49 | document.getElementById(id).remove(); 50 | let tabs = document.getElementsByClassName('chrome-tab'); 51 | for (let i = 0; i < tabs.length; i++) { 52 | tabs[i].style.transform = `translate3d(${239*i}px, 0, 0)`; 53 | } 54 | } 55 | static switch(to) { 56 | let curtab = document.querySelector('.chrome-tab[active]'); 57 | document.getElementById(curtab.getAttribute('num')).style.display = 'none'; 58 | curtab.removeAttribute('active'); 59 | document.getElementById(to).style.display = 'unset'; 60 | document.querySelector(`.chrome-tab[num='${to}']`).setAttribute('active',''); 61 | } 62 | 63 | } -------------------------------------------------------------------------------- /static/js/terbium.messages.js: -------------------------------------------------------------------------------- 1 | let id; 2 | 3 | window.onmessage = (e) => { 4 | id = e.data; 5 | } 6 | 7 | window.onclick = function() { 8 | let windows = window.parent.document.querySelectorAll('.win'); 9 | for (let i = 0; i < windows.length; i++) { 10 | windows[i].style.zIndex = "1"; 11 | } 12 | window.parent.document.getElementById(id).style.zIndex = 2; 13 | } -------------------------------------------------------------------------------- /static/js/theme.js: -------------------------------------------------------------------------------- 1 | let themeMAIN = window.parent.document.querySelector("html"); 2 | switch(localStorage.getItem("theme")) { 3 | case "dark": 4 | document.documentElement.setAttribute("data-theme", "dark"); 5 | break 6 | case "night": 7 | document.documentElement.setAttribute("data-theme", "night"); 8 | break 9 | case "fracital": 10 | document.documentElement.setAttribute("data-theme", "fracital"); 11 | break 12 | case "almond": 13 | document.documentElement.setAttribute("data-theme", "almond"); 14 | break 15 | } -------------------------------------------------------------------------------- /static/login.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: prod; 3 | src: url(./resources/Product.ttf); 4 | } 5 | 6 | @font-face { 7 | font-family: rob; 8 | src: url(./resources/Roboto.ttf); 9 | } 10 | 11 | * { 12 | margin: 0; 13 | padding: 0; 14 | } 15 | 16 | html { 17 | height: 100%; 18 | width: 100%; 19 | } 20 | 21 | body { 22 | height: 100%; 23 | width: 100%; 24 | font-family: rob; 25 | } 26 | 27 | .showHide { 28 | margin: 6px 7px 0px 2px; 29 | } 30 | 31 | .eye { 32 | width: 27px; 33 | height: 27px; 34 | cursor: pointer; 35 | } 36 | 37 | .eye path { 38 | transition: 200ms ease; 39 | fill: #5b5b5b; 40 | } 41 | 42 | .eye path.showing { 43 | fill: #46D966; 44 | } 45 | 46 | .loginDetails { 47 | background-color: #222222; 48 | position: absolute; 49 | inset: 0; 50 | z-index: 9999999999; 51 | display: grid; 52 | justify-items: center; 53 | align-content: center; 54 | gap: 4px; 55 | backdrop-filter: blur(9px); 56 | } 57 | 58 | .skip { 59 | color: gray; 60 | cursor: pointer; 61 | font-size: 14px; 62 | } 63 | 64 | .inputC { 65 | display: grid; 66 | width: 275px; 67 | border-radius: 6px; 68 | box-shadow: 0 4px 7px 3px #0000004a; 69 | } 70 | 71 | .input { 72 | display: flex; 73 | align-items: center; 74 | position: relative; 75 | justify-content: center; 76 | border-top-left-radius: 6px; 77 | border-top-right-radius: 6px; 78 | background-color: #2d2d2d; 79 | overflow: hidden; 80 | gap: 4px; 81 | transition: 200ms ease-in-out; 82 | } 83 | 84 | .inputC .bott { 85 | background-color: #5b5b5b; 86 | transition: 200ms ease-in-out; 87 | height: 4px; 88 | border-bottom-left-radius: 4px; 89 | border-bottom-right-radius: 4px; 90 | overflow: hidden; 91 | display: flex; 92 | } 93 | 94 | .secureAmount { 95 | display: grid; 96 | width: 25%; 97 | height: 100%; 98 | } 99 | 100 | .err { 101 | animation: wrong 200ms ease-in-out; 102 | } 103 | 104 | input.pass { 105 | font-family: prod; 106 | height: 45px; 107 | background: #2d2d2d; 108 | border: none; 109 | font-size: 1.4em; 110 | outline: none; 111 | transition: 200ms ease-in-out; 112 | text-align: center; 113 | color: #45ff7c; 114 | width: 100%; 115 | } 116 | 117 | input.pass:focus { 118 | background-color: #373737; 119 | color: #5b5b5b; 120 | } 121 | 122 | .inputC.focus .input { 123 | background-color: #373737; 124 | } 125 | 126 | .inputC.focus .bott { 127 | background-color: #1ea356; 128 | } 129 | 130 | .inputC.err .bott { 131 | background-color: #ff9090; 132 | } 133 | 134 | .inputC.success .bott { 135 | background-color: #84ffb7; 136 | } 137 | 138 | .inputC.err input.pass { 139 | background-color: #ff5757; 140 | color: white; 141 | } 142 | 143 | .inputC.success input.pass { 144 | background-color: #41df83; 145 | color: white; 146 | } 147 | 148 | .passState { 149 | color: #1ea356; 150 | font-family: prod; 151 | font-size: 21px; 152 | font-weight: bold; 153 | } 154 | 155 | .spinner { 156 | transition: width ease-in-out 0.3s; 157 | position: absolute; 158 | } 159 | 160 | .spinner.noSpin { 161 | width: 0; 162 | height: 0; 163 | animation: none; 164 | } 165 | 166 | .spinner.spin { 167 | animation: rotate 2s linear infinite; 168 | z-index: 2; 169 | width: 28px; 170 | fill: none; 171 | } 172 | 173 | .spinner .path { 174 | stroke: #228e3d; 175 | -webkit-animation: dash 1.5s ease-in-out infinite; 176 | animation: dash 1.5s ease-in-out infinite; 177 | } 178 | 179 | @-webkit-keyframes rotate { 180 | 100% { 181 | transform: rotate(360deg); 182 | } 183 | } 184 | 185 | @keyframes rotate { 186 | 100% { 187 | transform: rotate(360deg); 188 | } 189 | } 190 | 191 | @-webkit-keyframes dash { 192 | 0% { 193 | stroke-dasharray: 1, 150; 194 | stroke-dashoffset: 0; 195 | } 196 | 197 | 50% { 198 | stroke-dasharray: 90, 150; 199 | stroke-dashoffset: -35; 200 | } 201 | 202 | 100% { 203 | stroke-dasharray: 90, 150; 204 | stroke-dashoffset: -124; 205 | } 206 | } 207 | 208 | @keyframes dash { 209 | 0% { 210 | stroke-dasharray: 1, 150; 211 | stroke-dashoffset: 0; 212 | } 213 | 214 | 50% { 215 | stroke-dasharray: 90, 150; 216 | stroke-dashoffset: -35; 217 | } 218 | 219 | 100% { 220 | stroke-dasharray: 90, 150; 221 | stroke-dashoffset: -124; 222 | } 223 | } -------------------------------------------------------------------------------- /static/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Terbium 8 | 9 | 10 | 11 |
12 |

Create A Password

13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 |
24 |
25 |
Strength
26 | 27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /static/login.js: -------------------------------------------------------------------------------- 1 | let params = { 2 | count: false, 3 | letters: false, 4 | numbers: false, 5 | special: false, 6 | } 7 | 8 | let secureAmount = document.getElementById('secureAmount'); 9 | function strengthChecker() { 10 | let password = document.getElementById('pass').value; 11 | let strengthMessage = document.getElementById('strengthMessage'); 12 | params.letters = (/[a-z]+/.test(password)) ? true : false; 13 | params.numbers = (/[0-9]+/.test(password)) ? true : false; 14 | params.special = (/[!\"$%&/()=?@~`\\.\';:+-^_]+/.test(password)) ? true : false; 15 | params.count = (password.length > 8) ? true : false; 16 | 17 | let strength = Object.values(params).filter(value => value); 18 | secureAmount.innerHTML = ""; 19 | for(let i in strength) { 20 | let span = document.createElement('span'); 21 | span.classList.add('secureAmount'); 22 | secureAmount.appendChild(span); 23 | } 24 | let spanRef = document.querySelectorAll('.secureAmount'); 25 | for(let i = 0; i < spanRef.length; i++) { 26 | switch(spanRef.length - 1) { 27 | case 0: 28 | spanRef[i].style.backgroundColor = '#ff5c5c'; 29 | strengthMessage.innerHTML = 'Strength: Weak'; 30 | break; 31 | case 1: 32 | spanRef[i].style.backgroundColor = '#ffb74d'; 33 | strengthMessage.innerHTML = 'Strength: Medium'; 34 | break; 35 | case 2: 36 | spanRef[i].style.backgroundColor = '#ffeb3b'; 37 | strengthMessage.innerHTML = 'Strength: Strong'; 38 | break; 39 | case 3: 40 | spanRef[i].style.backgroundColor = '#87f78b'; 41 | strengthMessage.innerHTML = 'Strength: Secure'; 42 | break; 43 | } 44 | } 45 | } 46 | 47 | function toggle() { 48 | let password = document.getElementById('pass'); 49 | let eye = document.getElementById('showHide'); 50 | if(password.type === 'password'){ 51 | password.type = 'text'; 52 | eye.querySelector('.eye').querySelector("path").classList.add('showing'); 53 | } else { 54 | password.type = 'password'; 55 | eye.querySelector('.eye').querySelector("path").classList.remove('showing'); 56 | } 57 | } -------------------------------------------------------------------------------- /static/newwin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | New Window 9 | 10 | 11 | 12 | 13 | 23 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /static/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "static", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "static", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "localforage": "^1.10.0" 13 | } 14 | }, 15 | "node_modules/immediate": { 16 | "version": "3.0.6", 17 | "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 18 | "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" 19 | }, 20 | "node_modules/lie": { 21 | "version": "3.1.1", 22 | "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", 23 | "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", 24 | "dependencies": { 25 | "immediate": "~3.0.5" 26 | } 27 | }, 28 | "node_modules/localforage": { 29 | "version": "1.10.0", 30 | "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", 31 | "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", 32 | "dependencies": { 33 | "lie": "3.1.1" 34 | } 35 | } 36 | }, 37 | "dependencies": { 38 | "immediate": { 39 | "version": "3.0.6", 40 | "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 41 | "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" 42 | }, 43 | "lie": { 44 | "version": "3.1.1", 45 | "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", 46 | "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", 47 | "requires": { 48 | "immediate": "~3.0.5" 49 | } 50 | }, 51 | "localforage": { 52 | "version": "1.10.0", 53 | "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", 54 | "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", 55 | "requires": { 56 | "lie": "3.1.1" 57 | } 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /static/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "static", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "localforage": "^1.10.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /static/player/Product.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/player/Product.ttf -------------------------------------------------------------------------------- /static/resources/.gitignore.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/resources/Consolas.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Consolas.ttf -------------------------------------------------------------------------------- /static/resources/Fracital.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Fracital.ttf -------------------------------------------------------------------------------- /static/resources/Inter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Inter-Bold.ttf -------------------------------------------------------------------------------- /static/resources/Inter.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Inter.ttf -------------------------------------------------------------------------------- /static/resources/Poppins-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Poppins-Regular.ttf -------------------------------------------------------------------------------- /static/resources/Product.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Product.ttf -------------------------------------------------------------------------------- /static/resources/ProductBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/ProductBold.ttf -------------------------------------------------------------------------------- /static/resources/Roboto.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Roboto.ttf -------------------------------------------------------------------------------- /static/resources/RokuPOSVideo.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/RokuPOSVideo.mp4 -------------------------------------------------------------------------------- /static/resources/Segoe UI Bold Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Segoe UI Bold Italic.ttf -------------------------------------------------------------------------------- /static/resources/Segoe UI Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Segoe UI Bold.ttf -------------------------------------------------------------------------------- /static/resources/SegoeUI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/SegoeUI.ttf -------------------------------------------------------------------------------- /static/resources/TXT.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/resources/Task Manager.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/resources/Ubuntu-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/Ubuntu-Medium.ttf -------------------------------------------------------------------------------- /static/resources/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/am.png -------------------------------------------------------------------------------- /static/resources/apps.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /static/resources/arc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/arc.png -------------------------------------------------------------------------------- /static/resources/arc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /static/resources/blocker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /static/resources/bookmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/calc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /static/resources/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/resources/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/close.png -------------------------------------------------------------------------------- /static/resources/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/resources/color-picker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /static/resources/cropper.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/cursors/crosshairA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/crosshairA.png -------------------------------------------------------------------------------- /static/resources/cursors/crosshairD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/crosshairD.png -------------------------------------------------------------------------------- /static/resources/cursors/crosshairF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/crosshairF.png -------------------------------------------------------------------------------- /static/resources/cursors/crosshairN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/crosshairN.png -------------------------------------------------------------------------------- /static/resources/cursors/handA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/handA.png -------------------------------------------------------------------------------- /static/resources/cursors/handD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/handD.png -------------------------------------------------------------------------------- /static/resources/cursors/handF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/handF.png -------------------------------------------------------------------------------- /static/resources/cursors/handN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/handN.png -------------------------------------------------------------------------------- /static/resources/cursors/normalA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/normalA.png -------------------------------------------------------------------------------- /static/resources/cursors/normalD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/normalD.png -------------------------------------------------------------------------------- /static/resources/cursors/normalF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/normalF.png -------------------------------------------------------------------------------- /static/resources/cursors/normalN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/normalN.png -------------------------------------------------------------------------------- /static/resources/cursors/re-bl_trA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-bl_trA.png -------------------------------------------------------------------------------- /static/resources/cursors/re-bl_trD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-bl_trD.png -------------------------------------------------------------------------------- /static/resources/cursors/re-bl_trF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-bl_trF.png -------------------------------------------------------------------------------- /static/resources/cursors/re-bl_trN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-bl_trN.png -------------------------------------------------------------------------------- /static/resources/cursors/re-br_tlA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-br_tlA.png -------------------------------------------------------------------------------- /static/resources/cursors/re-br_tlD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-br_tlD.png -------------------------------------------------------------------------------- /static/resources/cursors/re-br_tlF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-br_tlF.png -------------------------------------------------------------------------------- /static/resources/cursors/re-br_tlN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-br_tlN.png -------------------------------------------------------------------------------- /static/resources/cursors/re-lrA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-lrA.png -------------------------------------------------------------------------------- /static/resources/cursors/re-lrD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-lrD.png -------------------------------------------------------------------------------- /static/resources/cursors/re-lrF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-lrF.png -------------------------------------------------------------------------------- /static/resources/cursors/re-lrN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-lrN.png -------------------------------------------------------------------------------- /static/resources/cursors/re-snA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-snA.png -------------------------------------------------------------------------------- /static/resources/cursors/re-snD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-snD.png -------------------------------------------------------------------------------- /static/resources/cursors/re-snF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-snF.png -------------------------------------------------------------------------------- /static/resources/cursors/re-snN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/re-snN.png -------------------------------------------------------------------------------- /static/resources/cursors/textA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/textA.png -------------------------------------------------------------------------------- /static/resources/cursors/textD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/textD.png -------------------------------------------------------------------------------- /static/resources/cursors/textF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/textF.png -------------------------------------------------------------------------------- /static/resources/cursors/textN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/cursors/textN.png -------------------------------------------------------------------------------- /static/resources/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/default.png -------------------------------------------------------------------------------- /static/resources/del.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/discord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/discord.png -------------------------------------------------------------------------------- /static/resources/dollar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/dollar.png -------------------------------------------------------------------------------- /static/resources/dollar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/eye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /static/resources/fonts/caveat/caveat-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/caveat/caveat-bold.ttf -------------------------------------------------------------------------------- /static/resources/fonts/caveat/caveat-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/caveat/caveat-regular.ttf -------------------------------------------------------------------------------- /static/resources/fonts/dance/Dancing-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/dance/Dancing-Bold.ttf -------------------------------------------------------------------------------- /static/resources/fonts/dance/Dancing-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/dance/Dancing-Medium.ttf -------------------------------------------------------------------------------- /static/resources/fonts/dance/Dancing-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/dance/Dancing-Regular.ttf -------------------------------------------------------------------------------- /static/resources/fonts/dance/Dancing-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/dance/Dancing-SemiBold.ttf -------------------------------------------------------------------------------- /static/resources/fonts/fuzzy/Fuzzy-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/fuzzy/Fuzzy-Bold.ttf -------------------------------------------------------------------------------- /static/resources/fonts/fuzzy/Fuzzy-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/fuzzy/Fuzzy-Regular.ttf -------------------------------------------------------------------------------- /static/resources/fonts/jost/Jost-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/jost/Jost-Bold.ttf -------------------------------------------------------------------------------- /static/resources/fonts/jost/Jost.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/jost/Jost.ttf -------------------------------------------------------------------------------- /static/resources/fonts/times/times-bold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/times/times-bold-italic.ttf -------------------------------------------------------------------------------- /static/resources/fonts/times/times-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/times/times-bold.ttf -------------------------------------------------------------------------------- /static/resources/fonts/times/times-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/times/times-italic.ttf -------------------------------------------------------------------------------- /static/resources/fonts/times/times.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/fonts/times/times.ttf -------------------------------------------------------------------------------- /static/resources/game.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/games/shell-shockers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/games/shell-shockers.jpg -------------------------------------------------------------------------------- /static/resources/games/shell/shell.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/games/shell/shell.jpg -------------------------------------------------------------------------------- /static/resources/games/shell/slope.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/games/shell/slope.webp -------------------------------------------------------------------------------- /static/resources/games/slope.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/games/slope.jpg -------------------------------------------------------------------------------- /static/resources/games/slope.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/games/slope.webp -------------------------------------------------------------------------------- /static/resources/games/slope/slope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/games/slope/slope.png -------------------------------------------------------------------------------- /static/resources/help.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/resources/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/resources/layout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/max.png -------------------------------------------------------------------------------- /static/resources/maxi.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/resources/metropolis-extra-bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/metropolis-extra-bold.otf -------------------------------------------------------------------------------- /static/resources/metropolis-regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/metropolis-regular.otf -------------------------------------------------------------------------------- /static/resources/mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/mini.png -------------------------------------------------------------------------------- /static/resources/minimize.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/monitor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/resources/other.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/resources/player.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/resources/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/plusalt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/power.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/resources/ref.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/resources/ruffle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | image/svg+xml 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /static/resources/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/settings.png -------------------------------------------------------------------------------- /static/resources/settings.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/resources/settingsAlt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/resources/settingsAlt2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/settingsnight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/settingsnight.png -------------------------------------------------------------------------------- /static/resources/settingsterm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/settingsterm.png -------------------------------------------------------------------------------- /static/resources/sp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/sp.png -------------------------------------------------------------------------------- /static/resources/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/resources/star1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/star2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/start.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/resources/store.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /static/resources/td.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/td.ico -------------------------------------------------------------------------------- /static/resources/terbium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/terbium.png -------------------------------------------------------------------------------- /static/resources/terbium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/resources/terbiumnight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/terbiumnight.png -------------------------------------------------------------------------------- /static/resources/terbiumterm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/terbiumterm.png -------------------------------------------------------------------------------- /static/resources/terminal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/resources/theme - almond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/theme - almond.png -------------------------------------------------------------------------------- /static/resources/theme - dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/theme - dark.png -------------------------------------------------------------------------------- /static/resources/theme - fracital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/theme - fracital.png -------------------------------------------------------------------------------- /static/resources/theme - night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/theme - night.png -------------------------------------------------------------------------------- /static/resources/themePrevs/theme - almond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/themePrevs/theme - almond.png -------------------------------------------------------------------------------- /static/resources/themePrevs/theme - dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/themePrevs/theme - dark.png -------------------------------------------------------------------------------- /static/resources/themePrevs/theme - fracital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/themePrevs/theme - fracital.png -------------------------------------------------------------------------------- /static/resources/themePrevs/theme - night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/themePrevs/theme - night.png -------------------------------------------------------------------------------- /static/resources/tidal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/tidal.png -------------------------------------------------------------------------------- /static/resources/tiktok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/tiktok.png -------------------------------------------------------------------------------- /static/resources/unmax.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /static/resources/vsc.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/vsc.ico -------------------------------------------------------------------------------- /static/resources/wallpapers/darkWall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/wallpapers/darkWall.png -------------------------------------------------------------------------------- /static/resources/wallpapers/fracitalWall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/wallpapers/fracitalWall.png -------------------------------------------------------------------------------- /static/resources/wallpapers/nightWall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/wallpapers/nightWall.png -------------------------------------------------------------------------------- /static/resources/x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/resources/yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/yt.png -------------------------------------------------------------------------------- /static/resources/ytm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/resources/ytm.png -------------------------------------------------------------------------------- /static/ruffle/248b39fc24a05d0fbed1.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/248b39fc24a05d0fbed1.wasm -------------------------------------------------------------------------------- /static/ruffle/5cb9c185efe574148035.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/5cb9c185efe574148035.wasm -------------------------------------------------------------------------------- /static/ruffle/LICENSE_MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Ruffle LLC and Ruffle contributors 2 | 3 | Permission is hereby granted, free of charge, to any 4 | person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the 6 | Software without restriction, including without 7 | limitation the rights to use, copy, modify, merge, 8 | publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice 14 | shall be included in all copies or substantial portions 15 | of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 18 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 19 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 20 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 24 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 | DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /static/ruffle/assets/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/ruffle/index.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | JSZip v3.10.1 - A JavaScript class for generating and reading zip files 4 | 5 | 6 | (c) 2009-2016 Stuart Knightley 7 | Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. 8 | 9 | JSZip uses the library pako released under the MIT license : 10 | https://github.com/nodeca/pako/blob/main/LICENSE 11 | */ 12 | -------------------------------------------------------------------------------- /static/ruffle/logo-anim.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/logo-anim.swf -------------------------------------------------------------------------------- /static/ruffle/swfs.json: -------------------------------------------------------------------------------- 1 | { 2 | "swfs": [ 3 | { 4 | "location": "logo-anim.swf", 5 | "title": "Ruffle Logo", 6 | "author": "Ruffle contributors", 7 | "authorLink": "https://ruffle.rs", 8 | "config": { 9 | "autoplay": "on", 10 | "backgroundColor": "#31497D", 11 | "letterbox": "off", 12 | "unmuteOverlay": "hidden" 13 | } 14 | }, 15 | { 16 | "location": "swfs/bitey1.swf", 17 | "title": "Bitey of Brackenwood", 18 | "author": "Adam Phillips", 19 | "authorLink": "https://bitey.com", 20 | "type": "Animation" 21 | }, 22 | { 23 | "location": "swfs/saturday_morning_watchmen.swf", 24 | "title": "Saturday Morning Watchmen", 25 | "author": "Harry Partridge", 26 | "authorLink": "https://twitter.com/HappyHarryToons", 27 | "type": "Animation" 28 | }, 29 | { 30 | "location": "swfs/synj1.swf", 31 | "title": "Synj vs. Horrid Part 1", 32 | "author": "Dan Paladin", 33 | "authorLink": "https://www.thebehemoth.com", 34 | "type": "Animation" 35 | }, 36 | { 37 | "location": "swfs/synj2.swf", 38 | "title": "Synj vs. Horrid Part 2", 39 | "author": "Dan Paladin", 40 | "authorLink": "https://www.thebehemoth.com", 41 | "type": "Animation" 42 | }, 43 | 44 | { 45 | "location": "swfs/alien_hominid.swf", 46 | "title": "Alien Hominid", 47 | "author": "Tom Fulp and Dan Paladin", 48 | "authorLink": "https://www.newgrounds.com", 49 | "type": "Game" 50 | }, 51 | { 52 | "location": "swfs/flyguy.swf", 53 | "title": "FlyGuy", 54 | "author": "Trevor van Meter", 55 | "authorLink": "https://www.heytvm.com", 56 | "type": "Game" 57 | }, 58 | { 59 | "location": "swfs/marvin_spectrum.swf", 60 | "title": "Marvin Spectrum", 61 | "author": "Bryan Singh", 62 | "authorLink": "https://www.hotbryan.com", 63 | "type": "Game" 64 | }, 65 | { 66 | "location": "swfs/wasted_sky.swf", 67 | "title": "Wasted Sky", 68 | "author": "Tom Fulp", 69 | "authorLink": "https://www.newgrounds.com", 70 | "type": "Game" 71 | } 72 | ] 73 | } 74 | -------------------------------------------------------------------------------- /static/ruffle/swfs/alien_hominid.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/alien_hominid.swf -------------------------------------------------------------------------------- /static/ruffle/swfs/bitey1.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/bitey1.swf -------------------------------------------------------------------------------- /static/ruffle/swfs/flyguy.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/flyguy.swf -------------------------------------------------------------------------------- /static/ruffle/swfs/marvin_spectrum.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/marvin_spectrum.swf -------------------------------------------------------------------------------- /static/ruffle/swfs/saturday_morning_watchmen.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/saturday_morning_watchmen.swf -------------------------------------------------------------------------------- /static/ruffle/swfs/synj1.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/synj1.swf -------------------------------------------------------------------------------- /static/ruffle/swfs/synj2.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/synj2.swf -------------------------------------------------------------------------------- /static/ruffle/swfs/wasted_sky.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/ruffle/swfs/wasted_sky.swf -------------------------------------------------------------------------------- /static/styles/canvas.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: Metro; 3 | src: url(../resources/metropolis-extra-bold.otf); 4 | } 5 | 6 | @font-face { 7 | font-family: Ubuntu; 8 | src: url(../resources/Ubuntu-Medium.ttf); 9 | } 10 | 11 | @font-face { 12 | font-family: Roboto; 13 | src: url(../resources/Roboto.ttf); 14 | } 15 | 16 | ::selection { 17 | background: #696969; 18 | color: #1d1d1d; 19 | } 20 | 21 | * { 22 | margin: 0; 23 | padding: 0; 24 | } 25 | 26 | body {font-family: Roboto; 27 | background: #1c1c1c; 28 | color: white; 29 | height: 100%; 30 | width: 100%; 31 | padding: 0; 32 | margin: 0; 33 | overflow: hidden; 34 | display: flex; 35 | } 36 | 37 | a span { 38 | width: 0; 39 | height: 3px; 40 | background: #ffffff; 41 | border-radius: 5px; 42 | transition: ease 0.3s; 43 | } 44 | 45 | .link { 46 | transition: ease 0.3s; 47 | display: grid; 48 | width: max-content; 49 | margin-left: 0.9em; 50 | text-decoration: none; 51 | color: #ffffff; 52 | height: 22px; 53 | } 54 | 55 | a:hover { 56 | cursor: pointer; 57 | } 58 | 59 | a:hover span { 60 | width: 100%; 61 | } 62 | 63 | canvas { 64 | cursor: crosshair; 65 | background: #e4e4e4; 66 | } 67 | 68 | .container { 69 | height: min-content; 70 | display: flex; 71 | width: 8.5em; 72 | padding: 5px; 73 | } 74 | 75 | #toolbar { 76 | display: flex; 77 | flex-direction: column; 78 | padding: 11px; 79 | width: 100%; 80 | background-color: #0d0d0d; 81 | cursor: default; 82 | border-radius: 9px; 83 | text-align: center; 84 | } 85 | 86 | #toolbar * { 87 | margin-bottom: 10px; 88 | } 89 | 90 | .add { 91 | width: 100%; 92 | height: 28px; 93 | } 94 | 95 | .new { 96 | transition: ease 0.2s; 97 | width: 28px; 98 | height: 28px; 99 | } 100 | 101 | .new:hover { 102 | color: #3fb153; 103 | cursor: pointer; 104 | } 105 | 106 | #toolbar label { 107 | font-size: 12px; 108 | margin-bottom: 1px; 109 | } 110 | 111 | input::-webkit-outer-spin-button, 112 | input::-webkit-inner-spin-button { 113 | -webkit-appearance: none; 114 | } 115 | 116 | input[type=number] { 117 | -moz-appearance: textfield; 118 | height: 20px; 119 | padding-left: 5px; 120 | } 121 | 122 | #lineWidth { 123 | width: calc(100% - 7px) !important; 124 | } 125 | 126 | input { 127 | width: 100%; 128 | background-color: #242424; 129 | color: white; 130 | border: 1px solid #404040; 131 | outline: 1px solid #242424; 132 | border-radius: 5px; 133 | overflow: hidden; 134 | } 135 | 136 | select { 137 | width: 100%; 138 | background-color: #242424; 139 | color: white; 140 | border: 1px solid #404040; 141 | outline: 1px solid #242424; 142 | border-radius: 5px; 143 | overflow: hidden; 144 | height: 26px; 145 | padding-left: 3px; 146 | transition: ease 0.3s; 147 | } 148 | 149 | select:hover { 150 | background-color: #151515; 151 | color: white; 152 | border: 1px solid #2b2b2b; 153 | outline: 1px solid #151515; 154 | cursor: pointer; 155 | } 156 | 157 | #stroke { 158 | border: none; 159 | background: none; 160 | outline: none; 161 | } 162 | 163 | .clear { 164 | background: #ff7070; 165 | border: none; 166 | border-radius: 5px; 167 | color: white; 168 | padding: 3px 5px; 169 | transition: ease 0.3s; 170 | } 171 | 172 | .last { 173 | margin-bottom: 0px !important; 174 | } 175 | 176 | .strokec:hover { 177 | cursor: cell !important; 178 | } 179 | 180 | .linewidth:hover { 181 | cursor: text !important; 182 | } 183 | 184 | .clear:hover { 185 | background: #d04141; 186 | cursor: pointer; 187 | } 188 | 189 | .btn { 190 | padding: 3px 5px; 191 | border-radius: 5px; 192 | background-color: #242424; 193 | color: white; 194 | border: 1px solid #404040; 195 | outline: 1px solid #242424; 196 | cursor: pointer; 197 | transition: ease 0.3s; 198 | } 199 | 200 | .btn:hover { 201 | background-color: #151515; 202 | color: white; 203 | border: 1px solid #2b2b2b; 204 | outline: 1px solid #151515; 205 | cursor: pointer; 206 | } -------------------------------------------------------------------------------- /static/styles/color.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: pro; 3 | src: url(../resources/Product.ttf); 4 | } 5 | 6 | [data-theme="dark"] { 7 | --body: #1c1c1c; 8 | --color: #cdcdcd; 9 | 10 | --cursorText: url(../resources/cursors/textD.png) 0 16, text; 11 | --cursorNormal: url(../resources/cursors/normalD.png), default; 12 | --cursorHand: url(../resources/cursors/handD.png), pointer; 13 | --cursorCrosshair: url(../resources/cursors/crosshairD.png) 16 16, crosshair; 14 | } 15 | 16 | [data-theme="night"] { 17 | --body: #181446; 18 | --color: #fff7a5; 19 | 20 | --cursorText: url(../resources/cursors/textN.png) 0 16, text; 21 | --cursorNormal: url(../resources/cursors/normalN.png), default; 22 | --cursorHand: url(../resources/cursors/handN.png), pointer; 23 | --cursorCrosshair: url(../resources/cursors/crosshairN.png) 16 16, crosshair; 24 | } 25 | 26 | [data-theme="fracital"] { 27 | --body: #222; 28 | --color: #ff40f7; 29 | 30 | --cursorText: url(../resources/cursors/textF.png) 0 16, text; 31 | --cursorNormal: url(../resources/cursors/normalF.png), default; 32 | --cursorHand: url(../resources/cursors/handF.png), pointer; 33 | --cursorCrosshair: url(../resources/cursors/crosshairF.png) 16 16, crosshair; 34 | } 35 | [data-theme="almond"] { 36 | --body: #131313; 37 | --color: #E89D46; 38 | 39 | --cursorText: url(../resources/cursors/textA.png) 0 16, text; 40 | --cursorNormal: url(../resources/cursors/normalA.png), default; 41 | --cursorHand: url(../resources/cursors/handA.png), pointer; 42 | --cursorCrosshair: url(../resources/cursors/crosshairA.png) 16 16, crosshair; 43 | } 44 | 45 | html { 46 | height: 100%; 47 | } 48 | 49 | h3 { 50 | margin: 0; 51 | } 52 | 53 | body { 54 | background-color: var(--body); 55 | color: var(--color); 56 | margin: 0; 57 | height: 100%; 58 | display: grid; 59 | align-content: center; 60 | justify-items: center; 61 | font-family: pro; 62 | cursor: var(--cursorNormal); 63 | } 64 | 65 | .colorPickerContainer { 66 | width: 100%; 67 | display: grid; 68 | justify-items: center; 69 | align-items: center; 70 | gap: 14px; 71 | } 72 | 73 | .picker { 74 | display: grid; 75 | justify-content: center; 76 | align-items: center; 77 | height: max-content; 78 | overflow: hidden; 79 | border-radius: 10px; 80 | } 81 | 82 | canvas { 83 | height: 200px; 84 | width: 250px; 85 | border-bottom-left-radius: 5px; 86 | border-bottom-right-radius: 5px; 87 | cursor: var(--cursorCrosshair); 88 | } 89 | 90 | .color-indi { 91 | display: inline-block; 92 | width: 250px; 93 | height: 56px; 94 | background-color: #ffffff; 95 | border-top-left-radius: 5px; 96 | border-top-right-radius: 5px; 97 | border-bottom: none; 98 | display: flex; 99 | justify-content: center; 100 | align-items: center; 101 | flex-direction: column; 102 | cursor: var(--cursorText); 103 | } 104 | 105 | #hex { 106 | margin: 0; 107 | height: min-content; 108 | width: min-content; 109 | color: #000000; 110 | font-size: 25px; 111 | } 112 | 113 | .rgbEquivalent { 114 | color: #000000; 115 | padding: 4px 6px; 116 | border-radius: 4px; 117 | } -------------------------------------------------------------------------------- /static/styles/cursors.css: -------------------------------------------------------------------------------- 1 | [data-theme="dark"] { 2 | --cursorText: url("/resources/cursors/textD.png") 0 16, text; 3 | --cursorNormal: url("/resources/cursors/normalD.png"), default; 4 | --cursorHand: url("/resources/cursors/handD.png"), pointer; 5 | } 6 | 7 | [data-theme="night"] { 8 | --cursorText: url("/resources/cursors/textN.png") 0 16, text; 9 | --cursorNormal: url("/resources/cursors/normalN.png"), default; 10 | --cursorHand: url("/resources/cursors/handN.png"), pointer; 11 | } 12 | 13 | [data-theme="fracital"] { 14 | --cursorText: url("/resources/cursors/textF.png") 0 16, text; 15 | --cursorNormal: url("/resources/cursors/normalF.png"), default; 16 | --cursorHand: url("/resources/cursors/handF.png"), pointer; 17 | } 18 | 19 | [data-theme="almond"] { 20 | --cursorText: url("/resources/cursors/textA.png") 0 16, text; 21 | --cursorNormal: url("/resources/cursors/normalA.png"), default; 22 | --cursorHand: url("/resources/cursors/handA.png"), pointer; 23 | } 24 | 25 | html { 26 | cursor: var(--cursorNormal); 27 | } 28 | 29 | input { 30 | cursor: var(--cursorText); 31 | } 32 | 33 | .ce { 34 | cursor: var(--cursorText) !important; 35 | } -------------------------------------------------------------------------------- /static/styles/help.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: Metro; 3 | src: url(../resources/metropolis-extra-bold.otf); 4 | } 5 | 6 | @font-face { 7 | font-family: Ubuntu; 8 | src: url(../resources/Ubuntu-Medium.ttf); 9 | } 10 | 11 | @font-face { 12 | font-family: Roboto; 13 | src: url(../resources/Roboto.ttf); 14 | } 15 | 16 | [data-theme="dark"] { 17 | --body: #1c1c1c; 18 | --color: white; 19 | --category-title-color: #41bc5d; 20 | --userselect-background: #696969; 21 | --userselect-color: #1d1d1d; 22 | 23 | /* commands */ 24 | --commmands-background: #151515; 25 | --commands-outline: #131313; 26 | --commmands-boxshadow: #151515; 27 | 28 | --command-background: #131313; 29 | --command-outline: #292929; 30 | --command-border: #131313; 31 | 32 | --cursorText: url(../resources/cursors/textD.png) 0 16, default; 33 | --cursorNormal: url(../resources/cursors/normalD.png), default; 34 | --cursorHand: url(../resources/cursors/handD.png), default; 35 | } 36 | 37 | [data-theme="night"] { 38 | --body: #181446; 39 | --color: #ffe688; 40 | --category-title-color: #ffe688; 41 | --userselect-background: #32299b; 42 | --userselect-color: #fff7a5; 43 | 44 | /* commands */ 45 | --commmands-background: #08062b; 46 | --commands-outline: #07052b; 47 | --commmands-boxshadow: #08062b; 48 | 49 | --command-background: #08062b; 50 | --command-outline: #efe688; 51 | --command-border: #08062b; 52 | 53 | --cursorText: url(../resources/cursors/textN.png) 0 16, default; 54 | --cursorNormal: url(../resources/cursors/normalN.png), default; 55 | --cursorHand: url(../resources/cursors/handN.png), default; 56 | } 57 | 58 | [data-theme="fracital"] { 59 | --body: #222; 60 | --color: #ff40f7; 61 | --category-title-color: #ff40f7; 62 | --userselect-background: #575757; 63 | --userselect-color: #ff40f7; 64 | 65 | /* commands */ 66 | --commmands-background: #151515; 67 | --commands-outline: #282828; 68 | --commmands-boxshadow: #151515; 69 | 70 | --command-background: #262626; 71 | --command-outline: #424242; 72 | --command-border: #262626; 73 | 74 | --cursorText: url(../resources/cursors/textF.png) 0 16, default; 75 | --cursorNormal: url(../resources/cursors/normalF.png), default; 76 | --cursorHand: url(../resources/cursors/handF.png), default; 77 | } 78 | 79 | [data-theme="almond"] { 80 | --body: #131313; 81 | --color: #E89D46; 82 | --category-title-color: #E89D46; 83 | --userselect-background: #ffffff1a; 84 | --userselect-color: #FFC889; 85 | 86 | /* commands */ 87 | --commmands-background: #222222; 88 | --commands-outline: #363636; 89 | --commmands-boxshadow: #151515; 90 | 91 | --command-background: #222; 92 | --command-outline: #424242; 93 | --command-border: #262626; 94 | 95 | --cursorText: url(../resources/cursors/textA.png) 0 16, default; 96 | --cursorNormal: url(../resources/cursors/normalA.png), default; 97 | --cursorHand: url(../resources/cursors/handA.png), default; 98 | } 99 | 100 | ::selection { 101 | background: var(--userselect-background); 102 | color: var(--userselect-color); 103 | } 104 | 105 | * { 106 | margin: 0; 107 | padding: 0; 108 | } 109 | 110 | html { 111 | scrollbar-color: var(--color) var(--body); 112 | scrollbar-width: thin; 113 | } 114 | 115 | ::-webkit-scrollbar { 116 | width: 6px; 117 | } 118 | 119 | ::-webkit-scrollbar-track { 120 | background: var(--body); 121 | } 122 | 123 | ::-webkit-scrollbar-thumb { 124 | background-color: var(--color); 125 | border-radius: 6px; 126 | } 127 | 128 | body { 129 | font-family: Roboto; 130 | margin: 0; 131 | background-color: var(--body); 132 | color: var(--color); 133 | display: grid; 134 | min-height: 100vh; 135 | justify-items: center; 136 | align-content: center; 137 | cursor: var(--cursorNormal); 138 | } 139 | 140 | .commands { 141 | display: grid; 142 | justify-content: center; 143 | align-items: center; 144 | background-color: var(--commmands-background); 145 | outline: 1px solid var(--commands-outline); 146 | box-shadow: 0px 0px 12px 6px var(--commmands-boxshadow); 147 | border-radius: 6px; 148 | margin-bottom: 22px; 149 | margin-top: 22px; 150 | padding: 7px 10px; 151 | gap: 8px; 152 | } 153 | 154 | command { 155 | cursor: var(--cursorText); 156 | } 157 | 158 | code { 159 | background-color: var(--command-background); 160 | outline: 1px solid var(--command-outline); 161 | border: 1px solid var(--command-border); 162 | padding: 3px 6px; 163 | border-radius: 6px; 164 | } 165 | 166 | [category-title] { 167 | color: var(--category-title-color); 168 | } -------------------------------------------------------------------------------- /static/styles/prevs/apps.css: -------------------------------------------------------------------------------- 1 | @keyframes imgload { 2 | 0% { 3 | opacity: 0%; 4 | height: 0em; 5 | width: 0em; 6 | } 7 | 100% { 8 | opacity: 100%; 9 | height: 3em; 10 | width: 3em; 11 | } 12 | } 13 | 14 | * { 15 | user-select: none; 16 | -moz-user-select: none; 17 | -webkit-user-drag: none; 18 | -webkit-user-select: none; 19 | -ms-user-select: none; 20 | } 21 | 22 | html { 23 | margin: 0; 24 | height: 0; 25 | width: 100%; 26 | height: 100%; 27 | } 28 | 29 | body { 30 | display: grid; 31 | justify-items: center; 32 | align-items: center; 33 | background-color: #1c1c1c; 34 | height: 100%; 35 | width: 100%; 36 | margin: 0; 37 | padding: 0; 38 | } 39 | 40 | img { 41 | animation: imgload ease 0.5s; 42 | animation-iteration-count: 1; 43 | animation-fill-mode: forwards; 44 | width: 3em; 45 | height: 2em; 46 | } -------------------------------------------------------------------------------- /static/sw.js: -------------------------------------------------------------------------------- 1 | /*global UVServiceWorker,__uv$config*/ 2 | /* 3 | * Stock service worker script. 4 | * Users can provide their own sw.js if they need to extend the functionality of the service worker. 5 | * Ideally, this will be registered under the scope in uv.config.js so it will not need to be modified. 6 | * However, if a user changes the location of uv.bundle.js/uv.config.js or sw.js is not relative to them, they will need to modify this script locally. 7 | */ 8 | try { 9 | importScripts('/uv/uv.bundle.js'); 10 | importScripts('/uv/uv.config.js'); 11 | importScripts(__uv$config.sw || '/uv/uv.sw.js'); 12 | importScripts('/libcurl/index.js'); 13 | importScripts('/epoxy/index.js'); 14 | 15 | const uv = new UVServiceWorker(); 16 | 17 | self.addEventListener('fetch', event => { 18 | event.respondWith( 19 | (async ()=>{ 20 | if (uv.route(event)) { 21 | return await uv.fetch(event); 22 | } 23 | return await fetch(event.request); 24 | })() 25 | ); 26 | }); 27 | 28 | uv.on('request', (event) => { 29 | event.data.headers['user-agent'] = 30 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 HyperTabs/1.4.0'; 31 | }); 32 | } catch (e) { 33 | console.error(e); 34 | } -------------------------------------------------------------------------------- /static/terbium BIG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/terbium BIG.png -------------------------------------------------------------------------------- /static/terbium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/terbium.png -------------------------------------------------------------------------------- /static/terminal/terminal.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Terbium Terminal 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /static/textEditor/editor.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Text Editor 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
Font
16 | 31 |
32 |
33 |
Font Size
34 |
35 | 36 |
37 |
38 | 39 | 40 | 41 | 42 |
43 |
44 | 45 | 46 | 47 | 48 |
49 |
50 |
51 |
52 |
53 |
54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /static/uv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerbiumOS/webOS/d6fadeb4d915162923241da43bfe9e81f129adca/static/uv.png -------------------------------------------------------------------------------- /static/uv/sw.js: -------------------------------------------------------------------------------- 1 | /*global UVServiceWorker,__uv$config*/ 2 | /* 3 | * Stock service worker script. 4 | * Users can provide their own sw.js if they need to extend the functionality of the service worker. 5 | * Ideally, this will be registered under the scope in uv.config.js so it will not need to be modified. 6 | * However, if a user changes the location of uv.bundle.js/uv.config.js or sw.js is not relative to them, they will need to modify this script locally. 7 | */ 8 | importScripts('/uv/uv.bundle.js'); 9 | importScripts('/uv/uv.config.js'); 10 | importScripts(__uv$config.sw || '/uv/uv.sw.js'); 11 | 12 | const uv = new UVServiceWorker(); 13 | 14 | async function handleRequest(event) { 15 | if (uv.route(event)) { 16 | return await uv.fetch(event); 17 | } 18 | 19 | return await fetch(event.request) 20 | } 21 | 22 | uv.on('request', (event) => { 23 | event.data.headers['user-agent'] = 24 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 HyperTabs/1.4.0'; 25 | }); 26 | 27 | self.addEventListener('fetch', (event) => { 28 | event.respondWith(handleRequest(event)); 29 | }); -------------------------------------------------------------------------------- /static/uv/uv.config.js: -------------------------------------------------------------------------------- 1 | /*global Ultraviolet*/ 2 | self.__uv$config = { 3 | prefix: '/sw/', 4 | encodeUrl: Ultraviolet.codec.xor.encode, 5 | decodeUrl: Ultraviolet.codec.xor.decode, 6 | handler: '/uv/uv.handler.js', 7 | client: '/uv/uv.client.js', 8 | bundle: '/uv/uv.bundle.js', 9 | config: '/uv/uv.config.js', 10 | sw: '/uv/uv.sw.js', 11 | }; 12 | -------------------------------------------------------------------------------- /static/uv/uv.styles.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: Inter; 3 | src: url(../fonts/inter.ttf); 4 | } 5 | 6 | @media (max-width: 768px) { 7 | .logo { 8 | width: 100px; 9 | height: 100px; 10 | } 11 | 12 | h1 { 13 | font-size: 28px; 14 | } 15 | 16 | .desc { 17 | font-size: 20px; 18 | } 19 | } 20 | 21 | body { 22 | background-color: rgba(0, 0, 0, 0.5); 23 | background-repeat: no-repeat; 24 | background-size: cover; 25 | color: #ffffff; 26 | font-family: Inter; 27 | margin: 0; 28 | padding: 0; 29 | padding-top: 64px; 30 | opacity: 0; 31 | animation: fade-in 0.5s ease-in-out forwards; 32 | text-align: center; 33 | } 34 | 35 | .flex-center { 36 | display: flex; 37 | justify-content: center; 38 | align-items: center; 39 | } 40 | 41 | h1 { 42 | margin-top: 20px; 43 | font-size: 38px; 44 | font-weight: 700; 45 | text-align: center; 46 | } 47 | 48 | .desc { 49 | margin-top: 10px; 50 | font-size: 24px; 51 | text-align: center; 52 | } 53 | 54 | .left-margin { 55 | margin-left: 20px; 56 | } 57 | 58 | button, 59 | footer a, 60 | .second-bar a, 61 | #searchButton { 62 | transition: transform 0.3s ease; 63 | } 64 | 65 | button:hover, 66 | footer a:hover, 67 | .second-bar a:hover, 68 | #searchButton:hover { 69 | transform: scale(1.1); 70 | } 71 | 72 | table { 73 | margin-left: 47%; 74 | } 75 | 76 | button { 77 | background-color: #ffffff28; 78 | border-radius: 6px; 79 | padding: 6px 8px; 80 | border: none; 81 | color: #ffffff; 82 | font-weight: 600; 83 | font-size: 14px; 84 | font-family: Inter; 85 | cursor: pointer; 86 | transition: 150ms ease-in-out; 87 | margin-left: 10px; 88 | } 89 | 90 | a { 91 | color: #ffffff; 92 | text-decoration: none; 93 | } 94 | 95 | textarea { 96 | width: 400px; 97 | background-color: transparent; 98 | color: white; 99 | height: 40px; 100 | font-size: 16px; 101 | padding: 0 10px; 102 | border: none; 103 | border-radius: 4px; 104 | opacity: 0; 105 | animation: fade-in 0.5s ease-in-out forwards; 106 | } 107 | 108 | .fade-out { 109 | animation: fade-out 0.5s ease-in-out forwards; 110 | } 111 | 112 | @keyframes fade-in { 113 | 0% { 114 | opacity: 0; 115 | } 116 | 117 | 100% { 118 | opacity: 1; 119 | } 120 | } 121 | 122 | @keyframes fade-out { 123 | 0% { 124 | opacity: 1; 125 | } 126 | 127 | 100% { 128 | opacity: 0; 129 | } 130 | } 131 | 132 | .config-label { 133 | font-weight: bold; 134 | color: #ffffff; 135 | } 136 | 137 | .config-input { 138 | padding: 5px; 139 | border: 1px solid #ccc; 140 | color: #fff; 141 | background-color: #646363; 142 | border-radius: 4px; 143 | } 144 | 145 | .config-select { 146 | padding: 5px; 147 | border: 1px solid #ccc; 148 | border-radius: 4px; 149 | color: white; 150 | background-color: #3D3C3C; 151 | } --------------------------------------------------------------------------------