commit 52713311797d3e5d2b0ebd5f7a64985f45ace73d Author: Max Date: Tue May 14 23:38:40 2024 +0200 Initial commit diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..a0899bb --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: shalithasuranga +patreon: shalithasuranga +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a3dc9d --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Developer tools' files +.lite_workspace.lua + +# Neutralinojs binaries and builds +/bin +/dist + +# Neutralinojs client (minified) +neutralino.js + +# Neutralinojs related files +.storage +*.log diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/clearapp.iml b/.idea/clearapp.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/clearapp.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..47478b9 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d60d693 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.tmp/window_state.config.json b/.tmp/window_state.config.json new file mode 100644 index 0000000..c844e12 --- /dev/null +++ b/.tmp/window_state.config.json @@ -0,0 +1 @@ +{"height":500,"maxHeight":-1,"maxWidth":-1,"maximize":false,"minHeight":200,"minWidth":400,"resizable":true,"width":800,"x":781,"y":427} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2f31491 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Neutralinojs and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..fe348b7 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# neutralinojs-minimal + +The default template for a Neutralinojs app. It's possible to use your favorite frontend framework by using [these steps](https://neutralino.js.org/docs/getting-started/using-frontend-libraries). + +## Contributors + +[![Contributors](https://contrib.rocks/image?repo=neutralinojs/neutralinojs-minimal)](https://github.com/neutralinojs/neutralinojs-minimal/graphs/contributors) + +## License + +[MIT](LICENSE) + +## Icon credits + +- `trayIcon.png` - Made by [Freepik](https://www.freepik.com) and downloaded from [Flaticon](https://www.flaticon.com) diff --git a/neutralino.config.json b/neutralino.config.json new file mode 100644 index 0000000..f9405c7 --- /dev/null +++ b/neutralino.config.json @@ -0,0 +1,83 @@ +{ + "$schema": "https://raw.githubusercontent.com/neutralinojs/neutralinojs/main/schemas/neutralino.config.schema.json", + "applicationId": "js.neutralino.sample", + "version": "1.0.0", + "defaultMode": "window", + "port": 0, + "documentRoot": "/resources/", + "url": "/", + "enableServer": true, + "enableNativeAPI": true, + "tokenSecurity": "one-time", + "logging": { + "enabled": true, + "writeToLogFile": true + }, + "nativeAllowList": [ + "app.*", + "os.*", + "debug.log" + ], + "globalVariables": { + "TEST1": "Hello", + "TEST2": [ + 2, + 4, + 5 + ], + "TEST3": { + "value1": 10, + "value2": {} + } + }, + "modes": { + "window": { + "title": "clearapp", + "width": 800, + "height": 500, + "minWidth": 400, + "minHeight": 200, + "center": true, + "fullScreen": false, + "alwaysOnTop": false, + "icon": "/resources/icons/appIcon.png", + "enableInspector": true, + "borderless": false, + "maximize": false, + "hidden": false, + "resizable": true, + "exitProcessOnClose": false + }, + "browser": { + "globalVariables": { + "TEST": "Test value browser" + }, + "nativeBlockList": [ + "filesystem.*" + ] + }, + "cloud": { + "url": "/resources/#cloud", + "nativeAllowList": [ + "app.*" + ] + }, + "chrome": { + "width": 800, + "height": 500, + "args": "--user-agent=\"Neutralinojs chrome mode\"", + "nativeBlockList": [ + "filesystem.*", + "os.*" + ] + } + }, + "cli": { + "binaryName": "clearapp", + "resourcesPath": "/resources/", + "extensionsPath": "/extensions/", + "clientLibrary": "/resources/js/neutralino.js", + "binaryVersion": "5.1.0", + "clientVersion": "5.1.0" + } +} \ No newline at end of file diff --git a/resources/icons/appIcon.png b/resources/icons/appIcon.png new file mode 100644 index 0000000..d708bc3 Binary files /dev/null and b/resources/icons/appIcon.png differ diff --git a/resources/icons/logo.gif b/resources/icons/logo.gif new file mode 100644 index 0000000..058c9bf Binary files /dev/null and b/resources/icons/logo.gif differ diff --git a/resources/icons/trayIcon.png b/resources/icons/trayIcon.png new file mode 100644 index 0000000..bcfeb18 Binary files /dev/null and b/resources/icons/trayIcon.png differ diff --git a/resources/index.html b/resources/index.html new file mode 100644 index 0000000..90a1da6 --- /dev/null +++ b/resources/index.html @@ -0,0 +1,27 @@ + + + + + NeutralinoJs sample app + + + +
+

NeutralinoJs

+
+
+ Neutralinojs +
+ Docs · + Video tutorial +
+
+ + + + + + diff --git a/resources/js/main.js b/resources/js/main.js new file mode 100644 index 0000000..09c297f --- /dev/null +++ b/resources/js/main.js @@ -0,0 +1,99 @@ +// This is just a sample app. You can structure your Neutralinojs app code as you wish. +// This example app is written with vanilla JavaScript and HTML. +// Feel free to use any frontend framework you like :) +// See more details: https://neutralino.js.org/docs/how-to/use-a-frontend-library + +/* + Function to display information about the Neutralino app. + This function updates the content of the 'info' element in the HTML + with details regarding the running Neutralino application, including + its ID, port, operating system, and version information. +*/ +function showInfo() { + document.getElementById('info').innerHTML = ` + ${NL_APPID} is running on port ${NL_PORT} inside ${NL_OS} +

+ server: v${NL_VERSION} . client: v${NL_CVERSION} + `; +} + +/* + Function to open the official Neutralino documentation in the default web browser. +*/ +function openDocs() { + Neutralino.os.open("https://neutralino.js.org/docs"); +} + +/* + Function to open a tutorial video on Neutralino's official YouTube channel in the default web browser. +*/ +function openTutorial() { + Neutralino.os.open("https://www.youtube.com/c/CodeZri"); +} + +/* + Function to set up a system tray menu with options specific to the window mode. + This function checks if the application is running in window mode, and if so, + it defines the tray menu items and sets up the tray accordingly. +*/ +function setTray() { + // Tray menu is only available in window mode + if(NL_MODE != "window") { + console.log("INFO: Tray menu is only available in the window mode."); + return; + } + + // Define tray menu items + let tray = { + icon: "/resources/icons/trayIcon.png", + menuItems: [ + {id: "VERSION", text: "Get version"}, + {id: "SEP", text: "-"}, + {id: "QUIT", text: "Quit"} + ] + }; + + // Set the tray menu + Neutralino.os.setTray(tray); +} + +/* + Function to handle click events on the tray menu items. + This function performs different actions based on the clicked item's ID, + such as displaying version information or exiting the application. +*/ +function onTrayMenuItemClicked(event) { + switch(event.detail.id) { + case "VERSION": + // Display version information + Neutralino.os.showMessageBox("Version information", + `Neutralinojs server: v${NL_VERSION} | Neutralinojs client: v${NL_CVERSION}`); + break; + case "QUIT": + // Exit the application + Neutralino.app.exit(); + break; + } +} + +/* + Function to handle the window close event by gracefully exiting the Neutralino application. +*/ +function onWindowClose() { + Neutralino.app.exit(); +} + +// Initialize Neutralino +Neutralino.init(); + +// Register event listeners +Neutralino.events.on("trayMenuItemClicked", onTrayMenuItemClicked); +Neutralino.events.on("windowClose", onWindowClose); + +// Conditional initialization: Set up system tray if not running on macOS +if(NL_OS != "Darwin") { // TODO: Fix https://github.com/neutralinojs/neutralinojs/issues/615 + setTray(); +} + +// Display app information +showInfo(); diff --git a/resources/js/neutralino.d.ts b/resources/js/neutralino.d.ts new file mode 100644 index 0000000..25f0dc3 --- /dev/null +++ b/resources/js/neutralino.d.ts @@ -0,0 +1,746 @@ +// Type definitions for Neutralino 5.1.0 +// Project: https://github.com/neutralinojs +// Definitions project: https://github.com/neutralinojs/neutralino.js + +declare namespace Neutralino { + +namespace filesystem { + interface DirectoryEntry { + entry: string; + path: string; + type: string; + } + interface FileReaderOptions { + pos: number; + size: number; + } + interface DirectoryReaderOptions { + recursive: boolean; + } + interface OpenedFile { + id: number; + eof: boolean; + pos: number; + lastRead: number; + } + interface Stats { + size: number; + isFile: boolean; + isDirectory: boolean; + createdAt: number; + modifiedAt: number; + } + interface Watcher { + id: number; + path: string; + } + function createDirectory(path: string): Promise; + function remove(path: string): Promise; + function writeFile(path: string, data: string): Promise; + function appendFile(path: string, data: string): Promise; + function writeBinaryFile(path: string, data: ArrayBuffer): Promise; + function appendBinaryFile(path: string, data: ArrayBuffer): Promise; + function readFile(path: string, options?: FileReaderOptions): Promise; + function readBinaryFile(path: string, options?: FileReaderOptions): Promise; + function openFile(path: string): Promise; + function createWatcher(path: string): Promise; + function removeWatcher(id: number): Promise; + function getWatchers(): Promise; + function updateOpenedFile(id: number, event: string, data?: any): Promise; + function getOpenedFileInfo(id: number): Promise; + function readDirectory(path: string, options?: DirectoryReaderOptions): Promise; + function copy(source: string, destination: string): Promise; + function move(source: string, destination: string): Promise; + function getStats(path: string): Promise; +} +namespace os { + // debug + enum LoggerType { + WARNING = "WARNING", + ERROR = "ERROR", + INFO = "INFO" + } + // os + enum Icon { + WARNING = "WARNING", + ERROR = "ERROR", + INFO = "INFO", + QUESTION = "QUESTION" + } + enum MessageBoxChoice { + OK = "OK", + OK_CANCEL = "OK_CANCEL", + YES_NO = "YES_NO", + YES_NO_CANCEL = "YES_NO_CANCEL", + RETRY_CANCEL = "RETRY_CANCEL", + ABORT_RETRY_IGNORE = "ABORT_RETRY_IGNORE" + } + //clipboard + enum ClipboardFormat { + unknown = 0, + text = 1, + image = 2 + } + // NL_GLOBALS + enum Mode { + window = 0, + browser = 1, + cloud = 2, + chrome = 3 + } + enum OperatingSystem { + Linux = 0, + Windows = 1, + Darwin = 2, + FreeBSD = 3, + Unknown = 4 + } + enum Architecture { + x64 = 0, + arm = 1, + itanium = 2, + ia32 = 3, + unknown = 4 + } + interface ExecCommandOptions { + stdIn?: string; + background?: boolean; + cwd?: string; + } + interface ExecCommandResult { + pid: number; + stdOut: string; + stdErr: string; + exitCode: number; + } + interface SpawnedProcess { + id: number; + pid: number; + } + interface Envs { + [key: string]: string; + } + interface OpenDialogOptions { + multiSelections?: boolean; + filters?: Filter[]; + defaultPath?: string; + } + interface FolderDialogOptions { + defaultPath?: string; + } + interface SaveDialogOptions { + forceOverwrite?: boolean; + filters?: Filter[]; + defaultPath?: string; + } + interface Filter { + name: string; + extensions: string[]; + } + interface TrayOptions { + icon: string; + menuItems: TrayMenuItem[]; + } + interface TrayMenuItem { + id?: string; + text: string; + isDisabled?: boolean; + isChecked?: boolean; + } + type KnownPath = "config" | "data" | "cache" | "documents" | "pictures" | "music" | "video" | "downloads" | "savedGames1" | "savedGames2"; + function execCommand(command: string, options?: ExecCommandOptions): Promise; + function spawnProcess(command: string, cwd?: string): Promise; + function updateSpawnedProcess(id: number, event: string, data?: any): Promise; + function getSpawnedProcesses(): Promise; + function getEnv(key: string): Promise; + function getEnvs(): Promise; + function showOpenDialog(title?: string, options?: OpenDialogOptions): Promise; + function showFolderDialog(title?: string, options?: FolderDialogOptions): Promise; + function showSaveDialog(title?: string, options?: SaveDialogOptions): Promise; + function showNotification(title: string, content: string, icon?: Icon): Promise; + function showMessageBox(title: string, content: string, choice?: MessageBoxChoice, icon?: Icon): Promise; + function setTray(options: TrayOptions): Promise; + function open(url: string): Promise; + function getPath(name: KnownPath): Promise; +} +namespace computer { + interface MemoryInfo { + physical: { + total: number; + available: number; + }; + virtual: { + total: number; + available: number; + }; + } + interface KernelInfo { + variant: string; + version: string; + } + interface OSInfo { + name: string; + description: string; + version: string; + } + interface CPUInfo { + vendor: string; + model: string; + frequency: number; + architecture: string; + logicalThreads: number; + physicalCores: number; + physicalUnits: number; + } + interface Display { + id: number; + resolution: Resolution; + dpi: number; + bpp: number; + refreshRate: number; + } + interface Resolution { + width: number; + height: number; + } + interface MousePosition { + x: number; + y: number; + } + function getMemoryInfo(): Promise; + function getArch(): Promise; + function getKernelInfo(): Promise; + function getOSInfo(): Promise; + function getCPUInfo(): Promise; + function getDisplays(): Promise; + function getMousePosition(): Promise; +} +namespace storage { + function setData(key: string, data: string): Promise; + function getData(key: string): Promise; + function getKeys(): Promise; +} +namespace debug { + // debug + enum LoggerType { + WARNING = "WARNING", + ERROR = "ERROR", + INFO = "INFO" + } + // os + enum Icon { + WARNING = "WARNING", + ERROR = "ERROR", + INFO = "INFO", + QUESTION = "QUESTION" + } + enum MessageBoxChoice { + OK = "OK", + OK_CANCEL = "OK_CANCEL", + YES_NO = "YES_NO", + YES_NO_CANCEL = "YES_NO_CANCEL", + RETRY_CANCEL = "RETRY_CANCEL", + ABORT_RETRY_IGNORE = "ABORT_RETRY_IGNORE" + } + //clipboard + enum ClipboardFormat { + unknown = 0, + text = 1, + image = 2 + } + // NL_GLOBALS + enum Mode { + window = 0, + browser = 1, + cloud = 2, + chrome = 3 + } + enum OperatingSystem { + Linux = 0, + Windows = 1, + Darwin = 2, + FreeBSD = 3, + Unknown = 4 + } + enum Architecture { + x64 = 0, + arm = 1, + itanium = 2, + ia32 = 3, + unknown = 4 + } + function log(message: string, type?: LoggerType): Promise; +} +namespace app { + interface OpenActionOptions { + url: string; + } + interface RestartOptions { + args: string; + } + function exit(code?: number): Promise; + function killProcess(): Promise; + function restartProcess(options?: RestartOptions): Promise; + function getConfig(): Promise; + function broadcast(event: string, data?: any): Promise; + function readProcessInput(readAll?: boolean): Promise; + function writeProcessOutput(data: string): Promise; + function writeProcessError(data: string): Promise; +} +namespace window { + interface WindowOptions extends WindowSizeOptions, WindowPosOptions { + title?: string; + icon?: string; + fullScreen?: boolean; + alwaysOnTop?: boolean; + enableInspector?: boolean; + borderless?: boolean; + maximize?: boolean; + hidden?: boolean; + maximizable?: boolean; + useSavedState?: boolean; + exitProcessOnClose?: boolean; + extendUserAgentWith?: string; + processArgs?: string; + } + interface WindowSizeOptions { + width?: number; + height?: number; + minWidth?: number; + minHeight?: number; + maxWidth?: number; + maxHeight?: number; + resizable?: boolean; + } + interface WindowPosOptions { + x: number; + y: number; + } + function setTitle(title: string): Promise; + function getTitle(): Promise; + function maximize(): Promise; + function unmaximize(): Promise; + function isMaximized(): Promise; + function minimize(): Promise; + function setFullScreen(): Promise; + function exitFullScreen(): Promise; + function isFullScreen(): Promise; + function show(): Promise; + function hide(): Promise; + function isVisible(): Promise; + function focus(): Promise; + function setIcon(icon: string): Promise; + function move(x: number, y: number): Promise; + function center(): Promise; + function setDraggableRegion(domElementOrId: string | HTMLElement): Promise; + function unsetDraggableRegion(domElementOrId: string | HTMLElement): Promise; + function setSize(options: WindowSizeOptions): Promise; + function getSize(): Promise; + function getPosition(): Promise; + function setAlwaysOnTop(onTop: boolean): Promise; + function create(url: string, options?: WindowOptions): Promise; +} +namespace events { + interface Response { + success: boolean; + message: string; + } + type Builtin = "ready" | "trayMenuItemClicked" | "windowClose" | "serverOffline" | "clientConnect" | "clientDisconnect" | "appClientConnect" | "appClientDisconnect" | "extClientConnect" | "extClientDisconnect" | "extensionReady" | "neuDev_reloadApp"; + function on(event: string, handler: (ev: CustomEvent) => void): Promise; + function off(event: string, handler: (ev: CustomEvent) => void): Promise; + function dispatch(event: string, data?: any): Promise; + function broadcast(event: string, data?: any): Promise; +} +namespace extensions { + interface ExtensionStats { + loaded: string[]; + connected: string[]; + } + function dispatch(extensionId: string, event: string, data?: any): Promise; + function broadcast(event: string, data?: any): Promise; + function getStats(): Promise; +} +namespace updater { + interface Manifest { + applicationId: string; + version: string; + resourcesURL: string; + } + function checkForUpdates(url: string): Promise; + function install(): Promise; +} +namespace clipboard { + interface ClipboardImage { + width: number; + height: number; + bpp: number; + bpr: number; + redMask: number; + greenMask: number; + blueMask: number; + redShift: number; + greenShift: number; + blueShift: number; + data: ArrayBuffer; + } + // debug + enum LoggerType { + WARNING = "WARNING", + ERROR = "ERROR", + INFO = "INFO" + } + // os + enum Icon { + WARNING = "WARNING", + ERROR = "ERROR", + INFO = "INFO", + QUESTION = "QUESTION" + } + enum MessageBoxChoice { + OK = "OK", + OK_CANCEL = "OK_CANCEL", + YES_NO = "YES_NO", + YES_NO_CANCEL = "YES_NO_CANCEL", + RETRY_CANCEL = "RETRY_CANCEL", + ABORT_RETRY_IGNORE = "ABORT_RETRY_IGNORE" + } + //clipboard + enum ClipboardFormat { + unknown = 0, + text = 1, + image = 2 + } + // NL_GLOBALS + enum Mode { + window = 0, + browser = 1, + cloud = 2, + chrome = 3 + } + enum OperatingSystem { + Linux = 0, + Windows = 1, + Darwin = 2, + FreeBSD = 3, + Unknown = 4 + } + enum Architecture { + x64 = 0, + arm = 1, + itanium = 2, + ia32 = 3, + unknown = 4 + } + function getFormat(): Promise; + function readText(): Promise; + function readImage(): Promise; + function writeText(data: string): Promise; + function writeImage(image: ClipboardImage): Promise; + function clear(): Promise; +} +namespace custom { + function getMethods(): Promise; +} +interface InitOptions { + exportCustomMethods?: boolean; +} +function init(options?: InitOptions): void; +type ErrorCode = "NE_FS_DIRCRER" | "NE_FS_RMDIRER" | "NE_FS_FILRDER" | "NE_FS_FILWRER" | "NE_FS_FILRMER" | "NE_FS_NOPATHE" | "NE_FS_COPYFER" | "NE_FS_MOVEFER" | "NE_OS_INVMSGA" | "NE_OS_INVKNPT" | "NE_ST_INVSTKY" | "NE_ST_STKEYWE" | "NE_RT_INVTOKN" | "NE_RT_NATPRME" | "NE_RT_APIPRME" | "NE_RT_NATRTER" | "NE_RT_NATNTIM" | "NE_CL_NSEROFF" | "NE_EX_EXTNOTC" | "NE_UP_CUPDMER" | "NE_UP_CUPDERR" | "NE_UP_UPDNOUF" | "NE_UP_UPDINER"; +interface Error { + code: ErrorCode; + message: string; +} +interface OpenActionOptions { + url: string; +} +interface RestartOptions { + args: string; +} +interface MemoryInfo { + physical: { + total: number; + available: number; + }; + virtual: { + total: number; + available: number; + }; +} +interface KernelInfo { + variant: string; + version: string; +} +interface OSInfo { + name: string; + description: string; + version: string; +} +interface CPUInfo { + vendor: string; + model: string; + frequency: number; + architecture: string; + logicalThreads: number; + physicalCores: number; + physicalUnits: number; +} +interface Display { + id: number; + resolution: Resolution; + dpi: number; + bpp: number; + refreshRate: number; +} +interface Resolution { + width: number; + height: number; +} +interface MousePosition { + x: number; + y: number; +} +interface ClipboardImage { + width: number; + height: number; + bpp: number; + bpr: number; + redMask: number; + greenMask: number; + blueMask: number; + redShift: number; + greenShift: number; + blueShift: number; + data: ArrayBuffer; +} +interface ExtensionStats { + loaded: string[]; + connected: string[]; +} +interface DirectoryEntry { + entry: string; + path: string; + type: string; +} +interface FileReaderOptions { + pos: number; + size: number; +} +interface DirectoryReaderOptions { + recursive: boolean; +} +interface OpenedFile { + id: number; + eof: boolean; + pos: number; + lastRead: number; +} +interface Stats { + size: number; + isFile: boolean; + isDirectory: boolean; + createdAt: number; + modifiedAt: number; +} +interface Watcher { + id: number; + path: string; +} +interface ExecCommandOptions { + stdIn?: string; + background?: boolean; + cwd?: string; +} +interface ExecCommandResult { + pid: number; + stdOut: string; + stdErr: string; + exitCode: number; +} +interface SpawnedProcess { + id: number; + pid: number; +} +interface Envs { + [key: string]: string; +} +interface OpenDialogOptions { + multiSelections?: boolean; + filters?: Filter[]; + defaultPath?: string; +} +interface FolderDialogOptions { + defaultPath?: string; +} +interface SaveDialogOptions { + forceOverwrite?: boolean; + filters?: Filter[]; + defaultPath?: string; +} +interface Filter { + name: string; + extensions: string[]; +} +interface TrayOptions { + icon: string; + menuItems: TrayMenuItem[]; +} +interface TrayMenuItem { + id?: string; + text: string; + isDisabled?: boolean; + isChecked?: boolean; +} +type KnownPath = "config" | "data" | "cache" | "documents" | "pictures" | "music" | "video" | "downloads" | "savedGames1" | "savedGames2"; +interface Manifest { + applicationId: string; + version: string; + resourcesURL: string; +} +interface WindowOptions extends WindowSizeOptions, WindowPosOptions { + title?: string; + icon?: string; + fullScreen?: boolean; + alwaysOnTop?: boolean; + enableInspector?: boolean; + borderless?: boolean; + maximize?: boolean; + hidden?: boolean; + maximizable?: boolean; + useSavedState?: boolean; + exitProcessOnClose?: boolean; + extendUserAgentWith?: string; + processArgs?: string; +} +interface WindowSizeOptions { + width?: number; + height?: number; + minWidth?: number; + minHeight?: number; + maxWidth?: number; + maxHeight?: number; + resizable?: boolean; +} +interface WindowPosOptions { + x: number; + y: number; +} +interface Response { + success: boolean; + message: string; +} +type Builtin = "ready" | "trayMenuItemClicked" | "windowClose" | "serverOffline" | "clientConnect" | "clientDisconnect" | "appClientConnect" | "appClientDisconnect" | "extClientConnect" | "extClientDisconnect" | "extensionReady" | "neuDev_reloadApp"; + +} + +// debug +export enum LoggerType { + WARNING = 'WARNING', + ERROR = 'ERROR', + INFO = 'INFO' + } + +// os +export enum Icon { + WARNING = 'WARNING', + ERROR = 'ERROR', + INFO = 'INFO', + QUESTION = 'QUESTION' +} + +export enum MessageBoxChoice { + OK = 'OK', + OK_CANCEL = 'OK_CANCEL', + YES_NO = 'YES_NO', + YES_NO_CANCEL = 'YES_NO_CANCEL', + RETRY_CANCEL = 'RETRY_CANCEL', + ABORT_RETRY_IGNORE = 'ABORT_RETRY_IGNORE' +} + +//clipboard +export enum ClipboardFormat { + unknown, + text, + image +} + +// NL_GLOBALS +export enum Mode { + window, + browser, + cloud, + chrome +} + +export enum OperatingSystem { + Linux, + Windows, + Darwin, + FreeBSD, + Unknown +} + +export enum Architecture { + x64, + arm, + itanium, + ia32, + unknown +} + + +export interface Response { + success: boolean; + message: string; + } + + export type Builtin = + 'ready' | + 'trayMenuItemClicked' | + 'windowClose' | + 'serverOffline' | + 'clientConnect' | + 'clientDisconnect' | + 'appClientConnect' | + 'appClientDisconnect' | + 'extClientConnect' | + 'extClientDisconnect' | + 'extensionReady' | + 'neuDev_reloadApp' + + +// --- globals --- +/** Mode of the application: window, browser, cloud, or chrome */ +declare const NL_MODE: Mode; +/** Application port */ +declare const NL_PORT: number; +/** Command-line arguments */ +declare const NL_ARGS: string[]; +/** Basic authentication token */ +declare const NL_TOKEN: string; +/** Neutralinojs client version */ +declare const NL_CVERSION: string; +/** Application identifier */ +declare const NL_APPID: string; +/** Application version */ +declare const NL_APPVERSION: string; +/** Application path */ +declare const NL_PATH: string; +/** Returns true if extensions are enabled */ +declare const NL_EXTENABLED: boolean; +/** Operating system name: Linux, Windows, Darwin, FreeBSD, or Uknown */ +declare const NL_OS: OperatingSystem; +/** CPU architecture: x64, arm, itanium, ia32, or unknown */ +declare const NL_ARCH: Architecture; +/** Neutralinojs server version */ +declare const NL_VERSION: string; +/** Current working directory */ +declare const NL_CWD: string; +/** Identifier of the current process */ +declare const NL_PID: string; +/** Source of application resources: bundle or directory */ +declare const NL_RESMODE: string; +/** Release commit of the client library */ +declare const NL_CCOMMIT: string; +/** An array of custom methods */ +declare const NL_CMETHODS: string[]; + diff --git a/resources/styles.css b/resources/styles.css new file mode 100644 index 0000000..5b0e4b9 --- /dev/null +++ b/resources/styles.css @@ -0,0 +1,20 @@ +body { + background-color: white; +} + +#neutralinoapp { + text-align: center; + -webkit-user-select: none; + user-select: none; + cursor: default; +} + +#neutralinoapp h1{ + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + font-size: 20px; +} + +#neutralinoapp > div { + font-size: 16px; + font-weight: normal; +}