Files
daedalOS/utils/constants.ts

403 lines
8.5 KiB
TypeScript
Raw Normal View History

2023-11-18 21:02:03 -08:00
import { type AsyncZipOptions } from "fflate";
import { type Size } from "components/system/Window/RndWindow/useResizable";
import { type ClockSource, type WallpaperFit } from "contexts/session/types";
import { type ThemeName } from "styles/themes";
2021-03-27 21:28:13 -07:00
export const BASE_2D_CONTEXT_OPTIONS: CanvasRenderingContext2DSettings = {
alpha: false,
desynchronized: true,
};
2023-02-13 20:17:12 -08:00
export const IFRAME_CONFIG = {
referrerPolicy: "no-referrer" as React.HTMLAttributeReferrerPolicy,
sandbox:
"allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts",
};
export const DEFAULT_LOCALE = "en";
2021-04-10 22:31:47 -07:00
2022-11-21 19:04:08 -08:00
export const DEFAULT_ASCENDING = true;
export const DEFAULT_CLOCK_SOURCE: ClockSource = "local";
export const DEFAULT_THEME: ThemeName = "defaultTheme";
export const DEFAULT_WALLPAPER = "VANTA";
export const DEFAULT_WALLPAPER_FIT: WallpaperFit = "fill";
2021-08-14 22:13:55 -07:00
2022-03-13 13:58:05 -07:00
export const THIN_SCROLLBAR_WIDTH = 13;
2024-02-01 20:20:16 -08:00
export const THIN_SCROLLBAR_WIDTH_NON_WEBKIT = 9;
2023-09-15 21:11:14 -07:00
export const CLOCK_CANVAS_BASE_WIDTH = 68;
2022-06-23 00:03:23 -07:00
export const SMALLEST_PNG_SIZE = 51;
2021-03-27 21:28:13 -07:00
export const DEFAULT_WINDOW_SIZE: Size = {
2024-02-23 18:56:12 -08:00
height: 510,
width: 640,
2021-03-27 21:28:13 -07:00
};
export const DEFAULT_MAPPED_NAME = "Share";
export const FOCUSABLE_ELEMENT = { tabIndex: -1 };
2023-08-02 21:52:22 -07:00
export const DIV_BUTTON_PROPS = {
as: "div",
role: "button",
...FOCUSABLE_ELEMENT,
};
2022-02-15 12:53:07 -08:00
export const FS_HANDLES = "FileSystemAccessHandles";
2021-11-13 22:26:22 -08:00
export const HOME = "/Users/Public";
2023-02-02 20:08:23 -08:00
export const PICTURES_FOLDER = `${HOME}/Pictures`;
export const VIDEOS_FOLDER = `${HOME}/Videos`;
2023-06-25 22:46:35 -07:00
export const INDEX_FILE = "/index.html";
2023-04-16 23:02:17 -07:00
export const PROMPT_FILE = "prompts.json";
2023-02-02 20:08:23 -08:00
export const SLIDESHOW_FILE = "slideshow.json";
2023-09-21 23:12:36 -07:00
export const SLIDESHOW_TIMEOUT_IN_MILLISECONDS = 15000;
2023-09-15 22:14:28 -07:00
2022-04-22 13:32:38 -07:00
export const ICON_GIF_SECONDS = 2;
export const ICON_GIF_FPS = 24;
2022-10-09 20:43:31 -07:00
export const PEEK_MAX_WIDTH = 200;
2022-11-12 13:54:02 -08:00
export const LIST_VIEW_ANIMATION = {
animate: { opacity: 1 },
initial: { opacity: 0 },
transition: { duration: 0.15 },
};
2024-03-01 20:24:09 -08:00
export const HEIF_IMAGE_FORMATS = new Set([
".heic",
".heics",
".heif",
".heifs",
2025-04-06 08:54:00 -07:00
".hif",
2024-03-01 20:24:09 -08:00
".avci",
".avcs",
]);
2022-06-21 18:18:38 -07:00
export const TIFF_IMAGE_FORMATS = new Set([
".cr2",
".dng",
".nef",
".tif",
".tiff",
]);
2023-03-11 10:40:52 -08:00
export const CLIPBOARD_FILE_EXTENSIONS = new Set([".jpeg", ".jpg", ".png"]);
2025-03-11 19:31:27 -07:00
export const NATIVE_IMAGE_FORMATS = new Set([
".apng",
".avif",
".bmp",
".gif",
".ico",
".jfif",
".jif",
".jpe",
".jpeg",
".jpg",
".pjp",
".pjpeg",
".png",
2022-04-10 09:58:42 -07:00
".svg",
".webp",
".xbm",
]);
2021-03-27 21:28:13 -07:00
2025-03-11 19:31:27 -07:00
export const IMAGE_FILE_EXTENSIONS = new Set([
...NATIVE_IMAGE_FORMATS,
...HEIF_IMAGE_FORMATS,
...TIFF_IMAGE_FORMATS,
".ani",
".cur",
".jxl",
".qoi",
]);
2024-03-24 16:24:21 -07:00
export const UNSUPPORTED_SLIDESHOW_EXTENSIONS = new Set([
2024-03-01 20:24:09 -08:00
...HEIF_IMAGE_FORMATS,
2023-01-17 22:45:34 -08:00
...TIFF_IMAGE_FORMATS,
".jxl",
".qoi",
".svg",
]);
2023-10-13 19:35:19 -07:00
export const TEXT_EDITORS = ["MonacoEditor", "Vim"];
2023-08-04 21:20:12 -07:00
export const CURSOR_FILE_EXTENSIONS = new Set([".ani", ".cur"]);
2024-10-29 09:10:35 -07:00
export const SUMMARIZABLE_FILE_EXTENSIONS = new Set([
2024-10-20 21:48:16 -07:00
".html",
".htm",
".whtml",
".md",
".txt",
2024-10-26 11:41:22 -07:00
".pdf",
]);
2022-08-18 22:29:17 -07:00
export const EDITABLE_IMAGE_FILE_EXTENSIONS = new Set([
".bmp",
".gif",
".ico",
".jfif",
".jpe",
".jpeg",
".jpg",
".png",
".tif",
".tiff",
".webp",
]);
2021-07-31 21:17:00 -07:00
export const MENU_SEPERATOR = { seperator: true };
2021-03-27 21:28:13 -07:00
export const MILLISECONDS_IN_SECOND = 1000;
2021-04-24 21:35:04 -07:00
2023-02-02 20:08:23 -08:00
export const MILLISECONDS_IN_MINUTE = 60000;
export const MILLISECONDS_IN_HOUR = 3600000;
2022-05-12 21:40:07 -07:00
export const MILLISECONDS_IN_DAY = 86400000;
2025-02-08 09:29:39 -08:00
export const ZIP_EXTENSIONS = new Set([".jsdos", ".pk3", ".wsz", ".zip"]);
export const MOUNTABLE_EXTENSIONS = new Set([".iso", ...ZIP_EXTENSIONS]);
2025-08-31 15:55:06 -07:00
export const MOUNTABLE_FS_TYPES = new Set(["FileSystemAccess", "HTTPRequest"]);
2022-06-10 22:44:06 -07:00
export const SPREADSHEET_FORMATS = [
".csv",
".numbers",
".ods",
".xls",
".xlsx",
];
2021-07-03 23:08:32 -07:00
export const MP3_MIME_TYPE = "audio/mpeg";
2023-03-11 10:40:52 -08:00
export const VIDEO_FALLBACK_MIME_TYPE = "video/mp4";
export const NON_BREAKING_HYPHEN = "\u2011";
2021-07-10 21:32:14 -07:00
export const ONE_TIME_PASSIVE_EVENT = {
once: true,
passive: true,
} as AddEventListenerOptions;
2021-08-14 23:14:46 -07:00
export const PREVENT_SCROLL = { preventScroll: true };
export const PROCESS_DELIMITER = "__";
2021-05-01 23:17:13 -07:00
2022-01-02 00:58:12 -08:00
export const SAVE_PATH = `${HOME}/Snapshots`;
2021-08-14 22:34:02 -07:00
2022-08-18 22:29:17 -07:00
export const PICUTRES_PATH = `${HOME}/Pictures`;
2021-09-11 22:11:58 -07:00
export const SHORTCUT_APPEND = " - Shortcut";
export const SHORTCUT_EXTENSION = ".url";
2021-09-25 21:44:16 -07:00
export const SYSTEM_FILES = new Set(["desktop.ini"]);
export const SYSTEM_PATHS = new Set(["/.deletedFiles.log"]);
2021-07-17 22:46:03 -07:00
2021-12-25 22:42:40 -08:00
export const DESKTOP_PATH = `${HOME}/Desktop`;
2021-09-11 21:39:50 -07:00
export const START_MENU_PATH = `${HOME}/Start Menu`;
2025-03-13 12:01:00 -07:00
export const AI_TITLE = "Talos";
export const AI_WINDOW_ID = "ai-chat-window";
2023-01-28 23:13:27 -08:00
export const SYSTEM_SHORTCUT_DIRECTORIES = new Set([DESKTOP_PATH]);
2021-07-10 23:31:45 -07:00
export const TRANSITIONS_IN_MILLISECONDS = {
DOUBLE_CLICK: 500,
LONG_PRESS: 500,
2023-06-10 22:09:25 -07:00
MOUSE_IN_OUT: 300,
2023-07-31 16:34:19 -07:00
TASKBAR_ITEM: 400,
2021-07-10 23:31:45 -07:00
WINDOW: 250,
};
2021-09-25 22:51:56 -07:00
2023-02-22 21:49:35 -08:00
export const TRANSITIONS_IN_SECONDS = {
2023-07-31 16:34:19 -07:00
TASKBAR_ITEM:
TRANSITIONS_IN_MILLISECONDS.TASKBAR_ITEM / MILLISECONDS_IN_SECOND,
2023-02-22 21:49:35 -08:00
WINDOW: TRANSITIONS_IN_MILLISECONDS.WINDOW / MILLISECONDS_IN_SECOND,
};
2023-11-16 22:00:43 -08:00
export const KEYPRESS_DEBOUNCE_MS = 150;
export const LONG_PRESS_DELAY_MS = 750;
2021-11-13 22:26:22 -08:00
export const ONE_DAY_IN_MILLISECONDS = 86400000;
2023-11-24 18:35:12 -08:00
export const DEFAULT_INTERSECTION_OPTIONS: IntersectionObserverInit = {
2023-11-29 19:04:47 -08:00
rootMargin: "3px",
2023-11-24 18:35:12 -08:00
threshold: 0,
};
2025-02-10 22:13:31 -08:00
export const AUDIO_FILE_EXTENSIONS = new Set([
".aac",
".flac",
".m4a",
".oga",
".wav",
]);
2022-05-14 19:47:10 -07:00
2022-06-09 18:44:19 -07:00
export const AUDIO_PLAYLIST_EXTENSIONS = new Set([".asx", ".m3u", ".pls"]);
2025-02-10 22:13:31 -08:00
export const DECODED_VIDEO_FILE_EXTENSIONS = new Set([".avi", ".divx"]);
2021-09-25 22:51:56 -07:00
export const VIDEO_FILE_EXTENSIONS = new Set([
2025-02-10 22:13:31 -08:00
".3gp",
".f4v",
2022-04-26 22:27:25 -07:00
".m4v",
2021-09-25 22:51:56 -07:00
".mkv",
2022-05-14 21:13:07 -07:00
".mov",
2021-09-25 22:51:56 -07:00
".mp4",
".ogg",
".ogm",
".ogv",
".webm",
]);
2021-11-20 23:15:26 -08:00
2023-09-30 11:09:17 -07:00
export const DYNAMIC_PREFIX = ["nostr:"];
export const DYNAMIC_EXTENSION = new Set([
...AUDIO_FILE_EXTENSIONS,
...AUDIO_PLAYLIST_EXTENSIONS,
...IMAGE_FILE_EXTENSIONS,
...TIFF_IMAGE_FORMATS,
...VIDEO_FILE_EXTENSIONS,
".ani",
".exe",
".mp3",
".sav",
".whtml",
]);
2022-08-31 22:50:38 -07:00
export const SAVE_TITLE_CHAR = "\u25CF";
2022-03-13 13:46:47 -07:00
export const ROOT_NAME = "My PC";
2024-01-22 15:55:46 -08:00
export const SYSTEM_PATH = "/System";
2022-03-13 13:46:47 -07:00
export const ROOT_SHORTCUT = `${ROOT_NAME}.url`;
2024-01-22 15:55:46 -08:00
export const ICON_PATH = `${SYSTEM_PATH}/Icons`;
export const PHOTO_ICON = `${ICON_PATH}/photo.webp`;
2021-12-25 22:24:18 -08:00
2022-03-27 01:10:25 -07:00
export const USER_ICON_PATH = `${HOME}/Icons`;
2021-12-25 22:24:18 -08:00
export const ICON_CACHE = `${USER_ICON_PATH}/Cache`;
2022-09-11 13:13:04 -07:00
export const YT_ICON_CACHE = `${ICON_CACHE}/YouTube`;
export const ICON_CACHE_EXTENSION = ".cache";
export const SESSION_FILE = "/session.json";
2022-07-04 01:02:53 -07:00
export const SHORTCUT_ICON = `${ICON_PATH}/shortcut.webp`;
2021-12-25 22:24:18 -08:00
2022-07-27 11:15:24 -07:00
export const FAVICON_BASE_PATH = "/favicon.ico";
2022-07-04 01:02:53 -07:00
export const FOLDER_ICON = `${ICON_PATH}/folder.webp`;
2021-11-20 23:15:26 -08:00
2022-07-04 01:02:53 -07:00
export const FOLDER_BACK_ICON = `${ICON_PATH}/folder_back.webp`;
2022-03-26 21:06:24 -07:00
2022-07-04 01:02:53 -07:00
export const FOLDER_FRONT_ICON = `${ICON_PATH}/folder_front.webp`;
2022-03-26 21:06:24 -07:00
2022-07-04 01:02:53 -07:00
export const COMPRESSED_FOLDER_ICON = `${ICON_PATH}/compressed.webp`;
2022-04-16 22:44:27 -07:00
2022-07-04 01:02:53 -07:00
export const MOUNTED_FOLDER_ICON = `${ICON_PATH}/mounted.webp`;
2021-12-11 21:53:42 -08:00
2022-07-04 01:02:53 -07:00
export const NEW_FOLDER_ICON = `${ICON_PATH}/new_folder.webp`;
2021-11-20 23:15:26 -08:00
2022-07-05 20:24:06 -07:00
export const UNKNOWN_ICON_PATH = `${ICON_PATH}/unknown.webp`;
2023-03-16 20:39:28 -07:00
export const TIMESTAMP_DATE_FORMAT: Intl.DateTimeFormatOptions = {
day: "2-digit",
hour: "2-digit",
hour12: false,
minute: "2-digit",
month: "2-digit",
second: "2-digit",
year: "numeric",
};
2023-11-11 14:39:45 -08:00
export const ICON_RES_MAP: Record<number, number> = {
64: 96,
};
export const MAX_RES_ICON_OVERRIDE: Record<string, [number, number]> = {
desktop: [16, 32],
document: [16, 32],
folder: [16, 16],
mounted: [16, 16],
music: [16, 32],
pc: [16, 16],
pictures: [16, 32],
user: [16, 16],
videos: [16, 32],
};
2023-11-16 21:38:03 -08:00
export const SUPPORTED_ICON_PIXEL_RATIOS = [3, 2, 1];
export const SUPPORTED_ICON_SIZES = [16, 32, 48, 96, 144];
2023-04-07 20:42:33 -07:00
export const MAX_ICON_SIZE = 144;
2025-02-12 19:39:53 -08:00
export const MAX_THUMBNAIL_FILE_SIZE = 1048576; // 1 MB
2022-06-02 23:14:15 -07:00
export const DEFAULT_TEXT_FILE_SAVE_PATH = `${DESKTOP_PATH}/Untitled.txt`;
export const DEFAULT_SCROLLBAR_WIDTH = 17;
export const TASKBAR_HEIGHT = 30;
2022-02-25 20:05:25 -08:00
export const PACKAGE_DATA = {
alias: "daedalOS",
2022-07-23 22:33:40 -07:00
author: {
email: "dustinbrett@gmail.com",
name: "Dustin Brett",
2023-09-11 20:49:29 -07:00
npub: "npub10uc7hg6wdxhhd7ee8x9c5lr9d0ux7272rv2m0mc03ds54q7quxjss02r3p",
2022-07-23 22:33:40 -07:00
url: "https://dustinbrett.com",
},
2022-02-25 20:05:25 -08:00
description: "Desktop environment in the browser",
license: "MIT",
version: "2.0.0",
};
2022-03-13 13:32:44 -07:00
export const BASE_ZIP_CONFIG: AsyncZipOptions = {
consume: true,
level: 0,
mem: 8,
};
2022-04-15 21:24:58 -07:00
export const HIGH_PRIORITY_REQUEST = { priority: "high" } as RequestInit;
export const HIGH_PRIORITY_ELEMENT = {
fetchPriority: "high",
2022-04-15 21:24:58 -07:00
} as React.HTMLAttributes<HTMLElement>;
2024-03-23 09:47:42 -07:00
export const DISBALE_AUTO_INPUT_FEATURES = {
autoCapitalize: "off",
autoComplete: "off",
autoCorrect: "off",
spellCheck: false,
};
export const MAX_ZINDEX = 2147483647;