Full Code of ElectronNET/Electron.NET for AI

main c8268fae0eab cached
477 files
1.6 MB
395.7k tokens
1110 symbols
1 requests
Download .txt
Showing preview only (1,739K chars total). Download the full file or copy to clipboard to get everything.
Repository: ElectronNET/Electron.NET
Branch: main
Commit: c8268fae0eab
Files: 477
Total size: 1.6 MB

Directory structure:
gitextract_uhomav4p/

├── .gitattributes
├── .github/
│   ├── CONTRIBUTING.md
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── feature_request.md
│   │   └── question.md
│   └── workflows/
│       ├── Build and Publish.yml
│       ├── PR Validation.yml
│       ├── integration-tests.yml
│       ├── pr-comment.yml
│       ├── publish-wiki.yml
│       ├── retry-test-jobs.yml
│       └── trailing-whitespace-check.yml
├── .gitignore
├── .nuke/
│   ├── build.schema.json
│   └── parameters.json
├── .vscode/
│   ├── launch.json
│   └── tasks.json
├── Changelog.md
├── LICENSE
├── NuGet.config
├── README.md
├── artifacts/
│   └── .gitkeep
├── assets/
│   └── images/
│       └── electron.net-logo.psd
├── build.cmd
├── build.ps1
├── build.sh
├── docs/
│   ├── .docproj/
│   │   ├── DocProj.props
│   │   └── DocProj.targets
│   ├── API/
│   │   ├── App.md
│   │   ├── AutoUpdater.md
│   │   ├── Clipboard.md
│   │   ├── Dialog.md
│   │   ├── Dock.md
│   │   ├── GlobalShortcut.md
│   │   ├── HostHook.md
│   │   ├── IpcMain.md
│   │   ├── Menu.md
│   │   ├── NativeTheme.md
│   │   ├── Notification.md
│   │   ├── Overview.md
│   │   ├── PowerMonitor.md
│   │   ├── Screen.md
│   │   ├── Shell.md
│   │   ├── Tray.md
│   │   ├── WebContents.md
│   │   └── WindowManager.md
│   ├── About.md
│   ├── Core/
│   │   ├── Advanced-Migration-Topics.md
│   │   ├── Migration-Checks.md
│   │   ├── Migration-Guide.md
│   │   └── What's-New.md
│   ├── Docs.shproj
│   ├── GettingStarted/
│   │   ├── ASP.Net.md
│   │   ├── Console-App.md
│   │   └── System-Requirements.md
│   ├── Home.md
│   ├── RelInfo/
│   │   └── Package-Description.md
│   ├── Using/
│   │   ├── Configuration.md
│   │   ├── Custom_main.md
│   │   ├── Debugging.md
│   │   ├── Package-Building.md
│   │   └── Startup-Methods.md
│   ├── _Footer.md
│   ├── _Sidebar.md
│   └── md-styles.css
├── global.json
├── nuke/
│   ├── .editorconfig
│   ├── Build.cs
│   ├── CommonPropsParser.cs
│   ├── Configuration.cs
│   ├── Directory.Build.props
│   ├── Directory.Build.targets
│   ├── Extensions/
│   │   └── StringExtensions.cs
│   ├── ReleaseNotes.cs
│   ├── ReleaseNotesParser.cs
│   ├── SemVersion.cs
│   └── _build.csproj
└── src/
    ├── .editorconfig
    ├── ElectronNET/
    │   ├── .electron/
    │   │   └── .gitkeep
    │   ├── ElectronNET.csproj
    │   └── build/
    │       ├── ElectronNET.Core.props
    │       ├── ElectronNET.Core.targets
    │       ├── ElectronNET.DesignTime.targets
    │       ├── ElectronNET.LateImport.targets
    │       ├── ElectronNET.MigrationChecks.targets
    │       ├── ElectronNETRules.Project.xaml
    │       ├── ElectronNETRules.Project2.xaml
    │       ├── electron-builder.json
    │       ├── package.template.json
    │       └── update_electron_versions.py
    ├── ElectronNET.API/
    │   ├── API/
    │   │   ├── ApiBase.cs
    │   │   ├── App.cs
    │   │   ├── AutoUpdater.cs
    │   │   ├── BrowserView.cs
    │   │   ├── BrowserWindow.cs
    │   │   ├── Clipboard.cs
    │   │   ├── CommandLine.cs
    │   │   ├── Cookies.cs
    │   │   ├── Dialog.cs
    │   │   ├── Dock.cs
    │   │   ├── Electron.cs
    │   │   ├── Entities/
    │   │   │   ├── AboutPanelOptions.cs
    │   │   │   ├── AddRepresentationOptions.cs
    │   │   │   ├── AppDetailsOptions.cs
    │   │   │   ├── AutoResizeOptions.cs
    │   │   │   ├── BitmapOptions.cs
    │   │   │   ├── Blob.cs
    │   │   │   ├── BlockMapDataHolder.cs
    │   │   │   ├── BrowserViewConstructorOptions.cs
    │   │   │   ├── BrowserWindowOptions.cs
    │   │   │   ├── CPUUsage.cs
    │   │   │   ├── Certificate.cs
    │   │   │   ├── CertificatePrincipal.cs
    │   │   │   ├── CertificateTrustDialogOptions.cs
    │   │   │   ├── ChromeExtensionInfo.cs
    │   │   │   ├── ClearStorageDataOptions.cs
    │   │   │   ├── Cookie.cs
    │   │   │   ├── CookieChangedCause.cs
    │   │   │   ├── CookieDetails.cs
    │   │   │   ├── CookieFilter.cs
    │   │   │   ├── CreateFromBitmapOptions.cs
    │   │   │   ├── CreateFromBufferOptions.cs
    │   │   │   ├── CreateInterruptedDownloadOptions.cs
    │   │   │   ├── Data.cs
    │   │   │   ├── DefaultFontFamily.cs
    │   │   │   ├── DevToolsMode.cs
    │   │   │   ├── Display.cs
    │   │   │   ├── DisplayBalloonOptions.cs
    │   │   │   ├── DockBounceType.cs
    │   │   │   ├── EnableNetworkEmulationOptions.cs
    │   │   │   ├── Extension.cs
    │   │   │   ├── FileFilter.cs
    │   │   │   ├── FileIconOptions.cs
    │   │   │   ├── FileIconSize.cs
    │   │   │   ├── FocusOptions.cs
    │   │   │   ├── GPUFeatureStatus.cs
    │   │   │   ├── IPostData.cs
    │   │   │   ├── ImportCertificateOptions.cs
    │   │   │   ├── InputEvent.cs
    │   │   │   ├── InputEventType.cs
    │   │   │   ├── JumpListCategory.cs
    │   │   │   ├── JumpListCategoryType.cs
    │   │   │   ├── JumpListItem.cs
    │   │   │   ├── JumpListItemType.cs
    │   │   │   ├── JumpListSettings.cs
    │   │   │   ├── LoadURLOptions.cs
    │   │   │   ├── LoginItemLaunchItem.cs
    │   │   │   ├── LoginItemSettings.cs
    │   │   │   ├── LoginItemSettingsOptions.cs
    │   │   │   ├── LoginSettings.cs
    │   │   │   ├── Margins.cs
    │   │   │   ├── MemoryInfo.cs
    │   │   │   ├── MenuItem.cs
    │   │   │   ├── MenuRole.cs
    │   │   │   ├── MenuType.cs
    │   │   │   ├── MessageBoxOptions.cs
    │   │   │   ├── MessageBoxResult.cs
    │   │   │   ├── MessageBoxType.cs
    │   │   │   ├── ModifierType.cs
    │   │   │   ├── NativeImage.cs
    │   │   │   ├── NativeImageJsonConverter.cs
    │   │   │   ├── NotificationAction.cs
    │   │   │   ├── NotificationOptions.cs
    │   │   │   ├── OnDidFailLoadInfo.cs
    │   │   │   ├── OnDidNavigateInfo.cs
    │   │   │   ├── OnTopLevel.cs
    │   │   │   ├── OpenDevToolsOptions.cs
    │   │   │   ├── OpenDialogOptions.cs
    │   │   │   ├── OpenDialogProperty.cs
    │   │   │   ├── OpenExternalOptions.cs
    │   │   │   ├── PageSize.cs
    │   │   │   ├── PathName.cs
    │   │   │   ├── Point.cs
    │   │   │   ├── PrintOptions.cs
    │   │   │   ├── PrintToPDFOptions.cs
    │   │   │   ├── PrinterInfo.cs
    │   │   │   ├── ProcessMetric.cs
    │   │   │   ├── ProcessVersions.cs
    │   │   │   ├── ProgressBarMode.cs
    │   │   │   ├── ProgressBarOptions.cs
    │   │   │   ├── ProgressInfo.cs
    │   │   │   ├── ProxyConfig.cs
    │   │   │   ├── ReadBookmark.cs
    │   │   │   ├── Rectangle.cs
    │   │   │   ├── RelaunchOptions.cs
    │   │   │   ├── ReleaseNoteInfo.cs
    │   │   │   ├── RemovePassword.cs
    │   │   │   ├── ResizeOptions.cs
    │   │   │   ├── SaveDialogOptions.cs
    │   │   │   ├── SaveDialogProperty.cs
    │   │   │   ├── Scheme.cs
    │   │   │   ├── SemVer.cs
    │   │   │   ├── SharingItem.cs
    │   │   │   ├── ShortcutDetails.cs
    │   │   │   ├── ShortcutLinkOperation.cs
    │   │   │   ├── Size.cs
    │   │   │   ├── ThemeSourceMode.cs
    │   │   │   ├── ThumbarButton.cs
    │   │   │   ├── ThumbarButtonFlag.cs
    │   │   │   ├── TitleBarOverlay.cs
    │   │   │   ├── TitleBarStyle.cs
    │   │   │   ├── ToBitmapOptions.cs
    │   │   │   ├── ToDataUrlOptions.cs
    │   │   │   ├── ToPNGOptions.cs
    │   │   │   ├── TrayClickEventArgs.cs
    │   │   │   ├── UpdateCancellationToken.cs
    │   │   │   ├── UpdateCheckResult.cs
    │   │   │   ├── UpdateFileInfo.cs
    │   │   │   ├── UpdateInfo.cs
    │   │   │   ├── UploadFile.cs
    │   │   │   ├── UploadRawData.cs
    │   │   │   ├── UserTask.cs
    │   │   │   ├── Vibrancy.cs
    │   │   │   └── WebPreferences.cs
    │   │   ├── Extensions/
    │   │   │   ├── MenuItemExtensions.cs
    │   │   │   └── ThumbarButtonExtensions.cs
    │   │   ├── GlobalShortcut.cs
    │   │   ├── HostHook.cs
    │   │   ├── HybridSupport.cs
    │   │   ├── IpcMain.cs
    │   │   ├── Menu.cs
    │   │   ├── NativeTheme.cs
    │   │   ├── Notification.cs
    │   │   ├── PowerMonitor.cs
    │   │   ├── Process.cs
    │   │   ├── QuitEventArgs.cs
    │   │   ├── Screen.cs
    │   │   ├── Session.cs
    │   │   ├── Shell.cs
    │   │   ├── Tray.cs
    │   │   ├── WebContents.cs
    │   │   ├── WebRequest.cs
    │   │   ├── WindowManager.cs
    │   │   └── web-request.md
    │   ├── Bridge/
    │   │   ├── BridgeConnector.cs
    │   │   ├── Events.cs
    │   │   └── SocketIOFacade.cs
    │   ├── Common/
    │   │   ├── Extensions.cs
    │   │   ├── ProcessRunner.cs
    │   │   ├── RunnerParams.cs
    │   │   └── TimeSpanExtensions.cs
    │   ├── Converter/
    │   │   ├── ModifierTypeListConverter.cs
    │   │   ├── PageSizeConverter.cs
    │   │   └── TitleBarOverlayConverter.cs
    │   ├── ElectronNET.API.csproj
    │   ├── ElectronNET.API.csproj.DotSettings
    │   ├── ElectronNetRuntime.cs
    │   ├── Runtime/
    │   │   ├── Controllers/
    │   │   │   ├── RuntimeControllerBase.cs
    │   │   │   ├── RuntimeControllerDotNetFirst.cs
    │   │   │   └── RuntimeControllerElectronFirst.cs
    │   │   ├── Data/
    │   │   │   ├── BuildInfo.cs
    │   │   │   ├── DotnetAppType.cs
    │   │   │   ├── LifetimeState.cs
    │   │   │   └── StartupMethod.cs
    │   │   ├── Helpers/
    │   │   │   ├── LaunchOrderDetector.cs
    │   │   │   ├── PortHelper.cs
    │   │   │   └── UnpackagedDetector.cs
    │   │   ├── IElectronNetRuntimeController.cs
    │   │   ├── Services/
    │   │   │   ├── ElectronProcess/
    │   │   │   │   ├── ElectronProcessActive.cs
    │   │   │   │   ├── ElectronProcessBase.cs
    │   │   │   │   └── ElectronProcessPassive.cs
    │   │   │   ├── LifetimeServiceBase.cs
    │   │   │   └── SocketBridge/
    │   │   │       └── SocketBridgeService.cs
    │   │   └── StartupManager.cs
    │   └── Serialization/
    │       ├── ElectronJson.cs
    │       └── JsonToBoxedPrimitivesConverter.cs
    ├── ElectronNET.AspNet/
    │   ├── API/
    │   │   ├── ServiceCollectionExtensions.cs
    │   │   ├── WebApplicationBuilderExtensions.cs
    │   │   └── WebHostBuilderExtensions.cs
    │   ├── ElectronNET.AspNet.csproj
    │   └── Runtime/
    │       ├── Controllers/
    │       │   ├── RuntimeControllerAspNetBase.cs
    │       │   ├── RuntimeControllerAspNetDotnetFirst.cs
    │       │   └── RuntimeControllerAspNetElectronFirst.cs
    │       ├── Helpers/
    │       │   └── ServerReadyStartupFilter.cs
    │       └── Services/
    │           └── AspNetLifetimeAdapter.cs
    ├── ElectronNET.Build/
    │   ├── ElectronNET.Build.csproj
    │   ├── ElectronNET.Build.csproj.DotSettings
    │   ├── PrintItemMetadata.cs
    │   ├── RemoveEnvironmentVariables.cs
    │   └── ReplaceMsBuildPropertiesTask.cs
    ├── ElectronNET.ConsoleApp/
    │   ├── ElectronNET.ConsoleApp.csproj
    │   ├── Program.cs
    │   └── Properties/
    │       ├── PublishProfiles/
    │       │   ├── linux-x64.pubxml
    │       │   ├── publish-win-x64.pubxml
    │       │   └── win-x64.pubxml
    │       ├── electron-builder.json
    │       └── launchSettings.json
    ├── ElectronNET.Host/
    │   ├── .gitignore
    │   ├── .vscode/
    │   │   ├── launch.json
    │   │   └── tasks.json
    │   ├── ElectronHostHook/
    │   │   ├── .gitignore
    │   │   ├── connector.js
    │   │   ├── connector.ts
    │   │   ├── index.js
    │   │   ├── index.ts
    │   │   ├── package.json
    │   │   └── tsconfig.json
    │   ├── ElectronNET.Host.esproj
    │   ├── api/
    │   │   ├── app.js
    │   │   ├── app.ts
    │   │   ├── autoUpdater.js
    │   │   ├── autoUpdater.ts
    │   │   ├── browserView.js
    │   │   ├── browserView.ts
    │   │   ├── browserWindows.js
    │   │   ├── browserWindows.ts
    │   │   ├── clipboard.js
    │   │   ├── clipboard.ts
    │   │   ├── commandLine.js
    │   │   ├── commandLine.ts
    │   │   ├── dialog.js
    │   │   ├── dialog.ts
    │   │   ├── dock.js
    │   │   ├── dock.ts
    │   │   ├── globalShortcut.js
    │   │   ├── globalShortcut.ts
    │   │   ├── ipc.js
    │   │   ├── ipc.ts
    │   │   ├── menu.js
    │   │   ├── menu.ts
    │   │   ├── nativeTheme.js
    │   │   ├── nativeTheme.ts
    │   │   ├── notification.js
    │   │   ├── notification.ts
    │   │   ├── powerMonitor.js
    │   │   ├── powerMonitor.ts
    │   │   ├── process.js
    │   │   ├── process.ts
    │   │   ├── screen.js
    │   │   ├── screen.ts
    │   │   ├── shell.js
    │   │   ├── shell.ts
    │   │   ├── tray.js
    │   │   ├── tray.ts
    │   │   ├── webContents.js
    │   │   └── webContents.ts
    │   ├── eslint.config.js
    │   ├── globals.d.ts
    │   ├── main.js
    │   ├── package.json
    │   ├── scripts/
    │   │   └── blazor-preload.js
    │   ├── splashscreen/
    │   │   └── index.html
    │   ├── tsconfig.json
    │   ├── tsconfig.tsbuildinfo
    │   └── types-shims.d.ts
    ├── ElectronNET.IntegrationTests/
    │   ├── Common/
    │   │   ├── IntegrationFactAttribute.cs
    │   │   └── IntegrationTestBase.cs
    │   ├── ElectronFixture.cs
    │   ├── ElectronNET.IntegrationTests.csproj
    │   ├── GlobalUsings.cs
    │   ├── Properties/
    │   │   └── electron-builder.json
    │   ├── Tests/
    │   │   ├── AppTests.cs
    │   │   ├── AutoUpdaterTests.cs
    │   │   ├── BrowserViewTests.cs
    │   │   ├── BrowserWindowTests.cs
    │   │   ├── ClipboardTests.cs
    │   │   ├── CookiesTests.cs
    │   │   ├── GlobalShortcutTests.cs
    │   │   ├── HostHookTests.cs
    │   │   ├── IpcMainTests.cs
    │   │   ├── MenuTests.cs
    │   │   ├── MultiEventRegistrationTests.cs
    │   │   ├── NativeImageTests.cs
    │   │   ├── NativeThemeTests.cs
    │   │   ├── NotificationTests.cs
    │   │   ├── ProcessTests.cs
    │   │   ├── ScreenTests.cs
    │   │   ├── SessionTests.cs
    │   │   ├── ShellTests.cs
    │   │   ├── ThumbarButtonTests.cs
    │   │   ├── TrayTests.cs
    │   │   └── WebContentsTests.cs
    │   └── xunit.runner.json
    ├── ElectronNET.Lean.sln
    ├── ElectronNET.Samples.ElectronHostHook/
    │   ├── Controllers/
    │   │   └── HomeController.cs
    │   ├── ElectronHostHook/
    │   │   ├── .gitignore
    │   │   ├── connector.ts
    │   │   ├── index.ts
    │   │   ├── package.json
    │   │   └── tsconfig.json
    │   ├── ElectronNET.Samples.ElectronHostHook.csproj
    │   ├── Program.cs
    │   ├── Properties/
    │   │   ├── electron-builder.json
    │   │   └── launchSettings.json
    │   └── Views/
    │       └── Home/
    │           └── Index.cshtml
    ├── ElectronNET.WebApp/
    │   ├── Controllers/
    │   │   ├── AboutController.cs
    │   │   ├── AppSysInformationController.cs
    │   │   ├── ClipboardController.cs
    │   │   ├── CrashHangController.cs
    │   │   ├── DesktopCapturerController.cs
    │   │   ├── DialogsController.cs
    │   │   ├── HomeController.cs
    │   │   ├── HostHookController.cs
    │   │   ├── IpcController.cs
    │   │   ├── ManageWindowsController.cs
    │   │   ├── MenusController.cs
    │   │   ├── NotificationsController.cs
    │   │   ├── PdfController.cs
    │   │   ├── ShellController.cs
    │   │   ├── ShortcutsController.cs
    │   │   ├── TrayController.cs
    │   │   ├── UpdateController.cs
    │   │   └── WindowsController.cs
    │   ├── ElectronHostHook/
    │   │   ├── .gitignore
    │   │   ├── connector.js
    │   │   ├── connector.ts
    │   │   ├── excelCreator.js
    │   │   ├── excelCreator.ts
    │   │   ├── index.js
    │   │   ├── index.ts
    │   │   ├── package.json
    │   │   └── tsconfig.json
    │   ├── ElectronNET.WebApp.csproj
    │   ├── Program.cs
    │   ├── Properties/
    │   │   ├── PublishProfiles/
    │   │   │   ├── linux-x64.pubxml
    │   │   │   └── win-x64.pubxml
    │   │   ├── electron-builder.json
    │   │   └── launchSettings.json
    │   ├── Startup.cs
    │   ├── Views/
    │   │   ├── About/
    │   │   │   └── Index.cshtml
    │   │   ├── AppSysInformation/
    │   │   │   └── Index.cshtml
    │   │   ├── Clipboard/
    │   │   │   └── Index.cshtml
    │   │   ├── CrashHang/
    │   │   │   ├── Index.cshtml
    │   │   │   ├── ProcessCrash.cshtml
    │   │   │   └── ProcessHang.cshtml
    │   │   ├── DesktopCapturer/
    │   │   │   └── Index.cshtml
    │   │   ├── Dialogs/
    │   │   │   └── Index.cshtml
    │   │   ├── Home/
    │   │   │   └── Index.cshtml
    │   │   ├── HostHook/
    │   │   │   └── Index.cshtml
    │   │   ├── Ipc/
    │   │   │   └── Index.cshtml
    │   │   ├── Menus/
    │   │   │   └── Index.cshtml
    │   │   ├── Notifications/
    │   │   │   └── Index.cshtml
    │   │   ├── Pdf/
    │   │   │   └── Index.cshtml
    │   │   ├── Shell/
    │   │   │   └── Index.cshtml
    │   │   ├── Shortcuts/
    │   │   │   └── Index.cshtml
    │   │   ├── Tray/
    │   │   │   └── Index.cshtml
    │   │   ├── Update/
    │   │   │   └── Index.cshtml
    │   │   └── Windows/
    │   │       ├── DemoWindow.cshtml
    │   │       ├── HandleErrorCrashes.cshtml
    │   │       └── Index.cshtml
    │   ├── appsettings.Development.json
    │   ├── appsettings.json
    │   └── wwwroot/
    │       └── assets/
    │           ├── app-icon/
    │           │   └── mac/
    │           │       └── app.icns
    │           ├── code-blocks.js
    │           ├── css/
    │           │   ├── about.css
    │           │   ├── demo.css
    │           │   ├── fonts/
    │           │   │   ├── SourceSansPro-Black.otf
    │           │   │   ├── SourceSansPro-BlackIt.otf
    │           │   │   ├── SourceSansPro-Bold.otf
    │           │   │   ├── SourceSansPro-BoldIt.otf
    │           │   │   ├── SourceSansPro-ExtraLight.otf
    │           │   │   ├── SourceSansPro-ExtraLightIt.otf
    │           │   │   ├── SourceSansPro-It.otf
    │           │   │   ├── SourceSansPro-Light.otf
    │           │   │   ├── SourceSansPro-LightIt.otf
    │           │   │   ├── SourceSansPro-Regular.otf
    │           │   │   ├── SourceSansPro-Semibold.otf
    │           │   │   └── SourceSansPro-SemiboldIt.otf
    │           │   ├── github.css
    │           │   ├── global.css
    │           │   ├── nativize.css
    │           │   ├── nav.css
    │           │   ├── print.css
    │           │   ├── section.css
    │           │   └── variables.css
    │           ├── demo-btns.js
    │           ├── ex-links.js
    │           ├── imports.js
    │           ├── mac/
    │           │   ├── child.plist
    │           │   ├── info.plist
    │           │   └── parent.plist
    │           └── nav.js
    ├── ElectronNET.sln
    ├── ElectronNET.sln.DotSettings
    ├── common.props
    └── testEnvironments.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing

## Project Scope

The Electron.NET project ultimately tries to provide a framework for developing cross-platform client applications on the basis of .NET and Electron. Anything that is related to this goal will be considered. The project aims to be as close to Electron with .NET as a basis as possible. If your contribution does not reflect that goal, the chances of accepting it are limited.

## Code License

This is an open source project falling under the [MIT License](../LICENSE). By using, distributing, or contributing to this project, you accept and agree that all code within the Electron.NET project and its libraries are licensed under MIT license.

## Becoming a Contributor

Usually appointing someone as a contributor follows this process:

1. An individual contributes actively via discussions (reporting bugs, giving feedback to existing or opening new issues) and / or pull requests
2. The individual is either directly asked, invited or asks for contributor rights on the project
3. The individual uses the contribution rights to sustain or increase the active contributions

Every contributor might have to sign the contributor's license agreement (CLA) to establish a legal trust between the project and its contributors.

## Working on Electron.NET

### Issue Discussion

Discussion of issues should be placed transparently in the issue tracker here on GitHub.

* [General issues, bugs, new features](https://github.com/ElectronNET/Electron.NET/issues)
* [General discussions, help, exchange of ideas](https://github.com/ElectronNET/Electron.NET/discussions)

### Modifying the code

Electron.NET and its libraries uses features from the latest versions of C# (e.g., C# 10). You will therefore need a C# compiler that is up for the job.

1. Fork and clone the repo.
2. First try to build the ElectronNET.Core library and see if you get the tests running.
3. You will be required to resolve some dependencies via NuGet.

The build system of Electron.NET uses NUKE.

### Code Conventions

Most parts in the Electron.NET project are fairly straight forward. Among these are:

* Always use statement blocks for control statements, e.g., in a for-loop, if-condition, ...
* You may use a simple (throw) statement in case of enforcing contracts on argument
* Be explicit about modifiers (some files follow an older convention of the code base, but we settled on the explicit style)

### Development Workflow

1. If no issue already exists for the work you'll be doing, create one to document the problem(s) being solved and self-assign.
2. Otherwise please let us know that you are working on the problem. Regular status updates (e.g. "still in progress", "no time anymore", "practically done", "pull request issued") are highly welcome.
3. Create a new branch—please don't work in the `main` branch directly. It is reserved for releases. We recommend naming the branch to match the issue being addressed (`feature/#777` or `issue-777`).
4. Add failing tests for the change you want to make. Tests are crucial and should be taken from W3C (or other specification).
5. Fix stuff. Always go from edge case to edge case.
6. All tests should pass now. Also your new implementation should not break existing tests.
7. Update the documentation to reflect any changes. (or document such changes in the original issue)
8. Push to your fork or push your issue-specific branch to the main repository, then submit a pull request against `develop`.

Just to illustrate the git workflow for Electron.NET a little bit more we've added the following graphs.

Initially, Electron.NET starts at the `main` branch. This branch should contain the latest stable (or released) version.

Here we now created a new branch called `develop`. This is the development branch.

Now active work is supposed to be done. Therefore a new branch should be created. Let's create one:

```sh
git checkout -b feature/#777
```

There may be many of these feature branches. Most of them are also pushed to the server for discussion or synchronization.

```sh
git push -u origin feature/#777
```

Now feature branches may be closed when they are done. Here we simply merge with the feature branch(es). For instance the following command takes the `feature/#777` branch from the server and merges it with the `develop` branch.

```sh
git checkout develop
git pull
git pull origin feature/#777
git push
```

Finally, we may have all the features that are needed to release a new version of Electron.NET. Here we tag the release. For instance for the 1.0 release we use `v1.0`.

```sh
git checkout main
git merge develop
git tag v1.0
```

(The last part is automatically performed by our CI system. Don't tag manually.)

### Versioning

The rules of [semver](http://semver.org/) don't necessarily apply here, but we will try to stay quite close to them.

Prior to version 1.0.0 we use the following scheme:

1. MINOR versions for reaching a feature milestone potentially combined with dramatic API changes
2. PATCH versions for refinements (e.g. performance improvements, bug fixes)

After releasing version 1.0.0 the scheme changes to become:

1. MAJOR versions at maintainers' discretion following significant changes to the codebase (e.g., API changes)
2. MINOR versions for backwards-compatible enhancements (e.g., performance improvements)
3. PATCH versions for backwards-compatible bug fixes (e.g., spec compliance bugs, support issues)

#### Code style

Regarding code style like indentation and whitespace, **follow the conventions you see used in the source already.** In general most of the [C# coding guidelines from Microsoft](https://msdn.microsoft.com/en-us/library/ff926074.aspx) are followed. This project prefers type inference with `var` to explicitly stating (redundant) information.

It is also important to keep a certain `async`-flow and to always use `ConfigureAwait(false)` in conjunction with an `await` expression.

## Backwards Compatibility

We always try to remain backwards compatible beyond the currently supported versions of .NET.

For instance, in December 2025 there have been activity to remove .NET 6 support from the codebase. We rejected this. Key points:

1. We have absolutely no need to drop `.net6` support. It doesn't hurt us in any way.
2. Many are still using `.net6`, including Electron.NET (non-Core) users. It doesn't make sense to force them to update two things at the same time (.NET + Electron.NET).
3. We MUST NOT and NEVER update `Microsoft.Build.Utilities.Core`. This will make Electron.NET stop working on older Visual Studio and MSBuild versions. There's are also no reasons to update it in the first place.

It's important to note that the Microsoft label of "Out of support" on .NET has almost no practical meaning. We've rarely (if ever) seen any bugs fixed in the same .NET version which mattered. The bugs that all new .NET versions have are much worse than mature .NET versions which are declared as "out of support". Keep in mind that the LTS matters most for active development / ongoing supported projects. If, e.g., a TV has been released a decade ago it most likely won't be patched. Still, you might want to deploy applications to it, which then naturally would involve being based on "out of support" versions of the framework.

TL;DR: Unless there is a technical reason (e.g., a crucial new API not being available) we should not drop "out of support" .NET versions. At the time of writing (December 2025) the minimum supported .NET version remains at `.net6`.

## Timeline

**All of this information is related to ElectronNET.Core pre-v1!**

We pretty much release whenever we have something new (i.e., do fixes such as a 0.1.1, or add new features, such as a 0.2.0) quite quickly.

We will go for a 1.0.0 release of this as early as ~mid of January 2026 (unless we find some critical things or want to extend the beta phase for ElectronNET.Core). This should be sufficient time to get some user input and have enough experience to call it stable.


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [GregorBiswanger, FlorianRappl]
patreon: # Replace with a single Patreon username
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: https://donorbox.org/electron-net


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

<!-- Please search existing issues to avoid creating duplicates. -->

<!-- Which version of Electron.NET CLI and API are you using? -->
<!-- Please always try to use latest version before report. -->
* **Version**: 

<!-- Which version of .NET Core and Node.js are you using (if applicable)? -->

<!-- What target are you building for? -->
* **Target**: 

<!-- Enter your issue details below this comment. -->
<!-- If you want, you can donate to increase issue priority (https://donorbox.org/electron-net) -->

Steps to Reproduce:

1.
2.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: Feature
assignees: ''

---

<!-- Please search existing feature request to avoid creating duplicates. -->

<!-- If you want, you can donate to increase feature request priority (https://donorbox.org/electron-net) -->
<!-- Describe the feature you'd like. -->


================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: Question
about: The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/questions/tagged/electron.net
  or via chat in https://gitter.im/ElectronNET/community.
title: ''
labels: question
assignees: ''

---

🚨 The issue tracker is not for questions 🚨

The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/questions/tagged/electron.net or via chat in https://gitter.im/ElectronNET/community.


================================================
FILE: .github/workflows/Build and Publish.yml
================================================
name: Build and Publish

on: [push]

env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}

concurrency:
  group: build-publish-${{ github.ref }}
  cancel-in-progress: true

jobs:
  Integration-Tests:
    uses: ./.github/workflows/integration-tests.yml
    name: '1'

  Publish:
    needs: [Integration-Tests]
    runs-on: windows-latest
    timeout-minutes: 10
    name: '2 / Publish'

    steps:
    - uses: actions/checkout@v4

    - name: Setup dotnet
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: |
          6.0.x
          8.0.x
          10.0.x

    - name: Build
      run: |
        if ($env:GITHUB_REF -eq "refs/heads/main") {
          .\build.ps1 -Target Publish
        } elseif ($env:GITHUB_REF -eq "refs/heads/develop") {
          .\build.ps1 -Target PrePublish
        } else {
          .\build.ps1
        }


================================================
FILE: .github/workflows/PR Validation.yml
================================================
name: PR Validation

on: [pull_request]

concurrency:
  group: pr-validation-${{ github.ref }}
  cancel-in-progress: true

jobs:
  Whitespace-Check:
    uses: ./.github/workflows/trailing-whitespace-check.yml
    secrets: inherit
    name: '1'
    
  Tests:
    needs: Whitespace-Check
    uses: ./.github/workflows/integration-tests.yml
    secrets: inherit
    name: '2'

  build:
    needs: [Whitespace-Check, Tests]
    runs-on: windows-latest
    timeout-minutes: 10
    name: '3 / Build'

    steps:
    - uses: actions/checkout@v4

    - name: Setup dotnet
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: |
          6.0.x
          8.0.x
          10.0.x

    - name: Build
      run: .\build.ps1


================================================
FILE: .github/workflows/integration-tests.yml
================================================
name: Tests

on:
  workflow_call:

concurrency:
  group: integration-tests-${{ github.ref }}
  cancel-in-progress: true

jobs:
  tests:
    name: ${{ matrix.os }} API-${{ matrix.electronVersion }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-22.04, ubuntu-24.04, windows-2022, windows-2025, macos-14, macos-15-intel, macos-26]
        electronVersion: ['30.4.0', '38.2.2']
        include:
          - os: ubuntu-22.04
            rid: linux-x64
          - os: ubuntu-24.04
            rid: linux-x64
          - os: windows-2022
            rid: win-x64
          - os: windows-2025
            rid: win-x64
          - os: macos-14
            rid: osx-arm64
          - os: macos-15-intel
            rid: osx-x64
          - os: macos-26
            rid: osx-arm64

    env:
      DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
      DOTNET_NOLOGO: 1
      CI: true
      ELECTRON_ENABLE_LOGGING: 1

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Random delay (0-20 seconds)
        shell: bash
        run: |
          DELAY=$((RANDOM % 21))
          echo "Waiting for $DELAY seconds..."
          sleep $DELAY

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '10.0.x'

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'

      - name: Restore
        run: dotnet restore -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj

      - name: Build
        run: dotnet build --no-restore -c Release -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj

      - name: Install Linux GUI dependencies
        if: runner.os == 'Linux'
        run: |
          set -e
          sudo apt-get update
          . /etc/os-release
          if [ "$VERSION_ID" = "24.04" ]; then ALSA_PKG=libasound2t64; else ALSA_PKG=libasound2; fi
          echo "Using ALSA package: $ALSA_PKG"
          sudo apt-get install -y xvfb \
            libgtk-3-0 libnss3 libgdk-pixbuf-2.0-0 libdrm2 libgbm1 libxss1 libxtst6 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 libx11-xcb1 "$ALSA_PKG"

      - name: Run tests (Linux)
        if: runner.os == 'Linux'
        continue-on-error: true
        run: |
          mkdir -p test-results
          xvfb-run -a dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj \
            -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} \
            --logger "trx;LogFileName=${{ matrix.os }}-electron-${{ matrix.electronVersion }}.trx" \
            --logger "console;verbosity=detailed" \
            --results-directory test-results

      - name: Run tests (Windows)
        if: runner.os == 'Windows'
        continue-on-error: true
        run: |
          New-Item -ItemType Directory -Force -Path test-results | Out-Null
          dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} --logger "trx;LogFileName=${{ matrix.os }}-electron-${{ matrix.electronVersion }}.trx" --logger "console;verbosity=detailed" --results-directory test-results

      - name: Run tests (macOS)
        if: runner.os == 'macOS'
        continue-on-error: true
        run: |
          mkdir -p test-results
          dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:ElectronVersion=${{ matrix.electronVersion }} --logger "trx;LogFileName=${{ matrix.os }}-electron-${{ matrix.electronVersion }}.trx" --logger "console;verbosity=detailed" --results-directory test-results

      - name: Upload raw test results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-results-${{ matrix.os }}-electron-${{ matrix.electronVersion }}
          path: test-results/*.trx
          retention-days: 7

  summary:
    name: Test Results
    runs-on: ubuntu-24.04
    if: always()
    needs: [tests]

    permissions:
      actions: read
      contents: read
      checks: write
      pull-requests: write

    steps:
      - name: Download all test results
        uses: actions/download-artifact@v4
        with:
          path: test-results

      - name: Setup .NET (for CTRF conversion)
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '10.0.x'

      - name: Install CTRF TRX→CTRF converter (dotnet tool)
        run: |
          dotnet new tool-manifest
          dotnet tool install DotnetCtrfJsonReporter --local

      - name: Convert TRX → CTRF and clean names (filePath=OS|Electron X.Y.Z)
        shell: bash
        run: |
          set -euo pipefail
          mkdir -p ctrf
          shopt -s globstar nullglob
          conv=0
          for trx in test-results/**/*.trx; do
            base="$(basename "$trx" .trx)"  # e.g. ubuntu-22.04-electron-30.4.0
            os="${base%%-electron-*}"
            electron="${base#*-electron-}"
            label="$os|Electron $electron"
            outdir="ctrf/${label}"
            mkdir -p "$outdir"
            out="${outdir}/ctrf-report.json"

            dotnet tool run DotnetCtrfJsonReporter -p "$trx" -d "$outdir" -f "ctrf-report.json"

            jq --arg fp "$label" '.results.tests |= map(.filePath = $fp)' "$out" > "${out}.tmp" && mv "${out}.tmp" "$out"

            echo "Converted & normalized $trx -> $out"
            conv=$((conv+1))
          done
          echo "Processed $conv TRX file(s)"

      - name: Publish Test Report
        if: always()
        uses: ctrf-io/github-test-reporter@v1
        with:
          report-path: 'ctrf/**/*.json'
          summary: true
          pull-request: false
          status-check: false
          status-check-name: 'Integration Tests'
          use-suite-name: true
          update-comment: true
          always-group-by: true
          overwrite-comment: true
          exit-on-fail: true
          group-by: 'suite'
          upload-artifact: true
          fetch-previous-results: true
          summary-report: false
          summary-delta-report: true
          github-report: true
          test-report: false
          test-list-report: false
          failed-report: true
          failed-folded-report: false
          skipped-report: true
          suite-folded-report: true
          suite-list-report: false
          file-report: true
          previous-results-report: true
          insights-report: true
          flaky-report: true
          flaky-rate-report: true
          fail-rate-report: false
          slowest-report: false
          report-order: 'summary-delta-report,failed-report,skipped-report,suite-folded-report,file-report,previous-results-report,github-report'
        env:
          GITHUB_TOKEN: ${{ github.token }}

      - name: Save PR Number
        if: github.event_name == 'pull_request'
        run: echo "PR_NUMBER=${{ github.event.pull_request.number }}" >> $GITHUB_ENV

      - name: Write PR Number to File
        if: github.event_name == 'pull_request'
        run: echo "$PR_NUMBER" > pr_number.txt
        shell: bash

      - name: Upload PR Number Artifact
        if: github.event_name == 'pull_request'
        uses: actions/upload-artifact@v4
        with:
          name: pr_number
          path: pr_number.txt

      - name: Summary
        run: echo "All matrix test jobs completed."


================================================
FILE: .github/workflows/pr-comment.yml
================================================
name: Create PR Comments

on:
  workflow_run:
    workflows: [ "PR Validation" ]
    types: [completed]

permissions:
  contents: read
  actions: read
  pull-requests: write

jobs:
  pr-comment:
    name: Post Test Result as PR comment
    runs-on: ubuntu-24.04
    if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion != 'cancelled'

    steps:
      - name: Download CTRF artifact
        uses: dawidd6/action-download-artifact@v8
        with:
          github_token: ${{ github.token }}
          run_id: ${{ github.event.workflow_run.id }}
          name: ctrf-report
          path: ctrf

      - name: Download PR Number Artifact
        uses: dawidd6/action-download-artifact@v8
        with:
          github_token: ${{ github.token }}
          run_id: ${{ github.event.workflow_run.id }}
          name: pr_number
          path: pr_number

      - name: Read PR Number
        run: |
          set -Eeuo pipefail
          FILE='pr_number/pr_number.txt'

          # Ensure file exists
          if [ ! -f "$FILE" ] || [ -L "$FILE" ]; then
            echo "Error: $FILE is missing or is not a regular file." >&2
            exit 1
          fi

          # Chec file size
          if [ "$(wc -c < "$FILE" | tr -d ' ')" -gt 200 ]; then
            echo "Error: $FILE is too large." >&2
            exit 1
          fi

          # Read first line
          PR_NUMBER=""
          IFS= read -r PR_NUMBER < "$FILE" || true

          # Validate whether it's a number
          if ! [[ "$PR_NUMBER" =~ ^[0-9]{1,10}$ ]]; then
            echo "Error: PR_NUMBER is not a valid integer on the first line." >&2
            exit 1
          fi

          printf 'PR_NUMBER=%s\n' "$PR_NUMBER" >> "$GITHUB_ENV"

      - name: Post PR Comment
        uses: ctrf-io/github-test-reporter@v1
        with:
          report-path: 'ctrf/**/*.json'
          issue: ${{ env.PR_NUMBER }}

          summary: true
          pull-request: true
          use-suite-name: true
          update-comment: true
          always-group-by: true
          overwrite-comment: true
          upload-artifact: false

          pull-request-report: true
        env:
          GITHUB_TOKEN: ${{ github.token }}


================================================
FILE: .github/workflows/publish-wiki.yml
================================================
name: Publish wiki
on:
  push:
    branches: [electronnet_core, main]
  workflow_dispatch:
concurrency:
  group: publish-wiki
  cancel-in-progress: true
permissions:
  contents: write
jobs:
  publish-wiki:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      - name: Remove level 1 headings from Markdown files
        shell: bash
        run: |
          find docs/ -name '*.md' -exec sed -i '1d' {} \;
      - name: Move all files to root folder
        shell: bash
        run: |
          mv docs/*/* docs/
      - name: Delete unwanted files
        shell: bash
        run: |
          # rm docs/*.xlsm
          # rm docs/*.pptx
          rm docs/*.shproj
      - name: Stripping file extensions....
        uses: softworkz/strip-markdown-extensions-from-links-action@main
        with:
          path: ./docs/
      - name: Copy Changelog
        shell: bash
        run: |
          cp Changelog.md docs/RelInfo/ 2>/dev/null || true
      - name: Copy images to wiki/wiki folder
        shell: bash
        run: |
          mkdir docs/wiki
          cp docs/*.svg docs/wiki/ 2>/dev/null || true
          cp docs/*.png docs/wiki/ 2>/dev/null || true
          cp docs/*.jpg docs/wiki/ 2>/dev/null || true
          cp docs/*.gif docs/wiki/ 2>/dev/null || true
          cp docs/*.mp4 docs/wiki/ 2>/dev/null || true
      - name: Commit and push changes
        run: |
          git config --global user.name "GitHub Action"
          git config --global user.email "action@github.com"
          git add -A
          git commit -m "Automatically update Markdown files" || echo "No changes to commit"
      - uses: Andrew-Chen-Wang/github-wiki-action@v4.4.0
        with:
          path: docs/
          ignore: |
            '**/*.xlsm'
            '**/*.pptx'
            '**/*.shproj'


================================================
FILE: .github/workflows/retry-test-jobs.yml
================================================
name: Tests auto-rerun

on:
  workflow_run:
    workflows: [ "PR Validation", "Build and Publish" ]
    types: [ completed ]

jobs:
  rerun-failed-matrix-jobs-once:
    if: >
      ${{
        github.event.workflow_run.conclusion == 'failure' &&
        github.event.workflow_run.run_attempt == 1
      }}
    runs-on: ubuntu-24.04

    permissions:
      actions: write
      contents: read

    steps:
      - name: Decide whether to rerun (only if matrix jobs failed)
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          REPO: ${{ github.repository }}
          RUN_ID: ${{ github.event.workflow_run.id }}
        run: |
          echo "Inspecting jobs of workflow run $RUN_ID in $REPO"

          jobs_json="$(gh api -R $REPO repos/$REPO/actions/runs/$RUN_ID/jobs)"

          echo "Jobs and conclusions:"
          echo "$jobs_json" | jq '.jobs[] | {name: .name, conclusion: .conclusion}'

          failed_matrix_jobs=$(echo "$jobs_json" | jq -r '
            [ .jobs[]
              | select(.conclusion == "failure"
                       and (.name | contains(" API-")))
            ]
            | length // 0
          ')
          failed_matrix_jobs=${failed_matrix_jobs:-0}

          if [ "${failed_matrix_jobs}" -gt 0 ]; then
            echo "Detected failing Integration Tests jobs – re-running failed jobs for this run."
            gh run rerun -R "$REPO" "$RUN_ID" --failed
          else
            echo "Only non-matrix jobs (like Test Results) failed – not auto-rerunning."
          fi


================================================
FILE: .github/workflows/trailing-whitespace-check.yml
================================================
name: Whitespace Check

on:
  workflow_call:

jobs:
  check-whitespace:
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Check for trailing whitespace
      run: |
        echo "Checking for trailing whitespace in changed files..."

        # Get the base branch
        BASE_SHA="${{ github.event.pull_request.base.sha }}"
        HEAD_SHA="${{ github.event.pull_request.head.sha }}"

        # Get list of changed files (excluding deleted files)
        CHANGED_FILES=$(git diff --name-only --diff-filter=d "$BASE_SHA" "$HEAD_SHA")

        if [ -z "$CHANGED_FILES" ]; then
          echo "No files to check."
          exit 0
        fi

        # File patterns to check (text files)
        PATTERNS="\.cs$|\.csproj$|\.sln$|\.ts$|\.html$|\.css$|\.scss$"

        # Directories and file patterns to exclude
        EXCLUDE_PATTERNS="(^|\/)(\.|node_modules|bin|obj|artifacts|packages|\.vs|\.nuke\/temp)($|\/)"

        ERRORS_FOUND=0
        TEMP_FILE=$(mktemp)

        while IFS= read -r file; do
          # Skip if file doesn't exist (shouldn't happen with --diff-filter=d, but just in case)
          if [ ! -f "$file" ]; then
            continue
          fi

          # Check if file matches patterns to check
          if ! echo "$file" | grep -qE "$PATTERNS"; then
            continue
          fi

          # Check if file should be excluded
          if echo "$file" | grep -qE "$EXCLUDE_PATTERNS"; then
            continue
          fi

          # Find trailing whitespace lines, excluding XML doc placeholder lines that are exactly "/// " (one space)
          MATCHES=$(grep -n '[[:space:]]$' "$file" | grep -vE '^[0-9]+:[[:space:]]*/// $' || true)

          if [ -n "$MATCHES" ]; then
            echo "❌ Trailing whitespace found in: $file"
            echo "$MATCHES" | head -10
            TOTAL=$(echo "$MATCHES" | wc -l)
            if [ "$TOTAL" -gt 10 ]; then
              echo "   ... and $(($TOTAL - 10)) more lines"
            fi
            echo "1" >> "$TEMP_FILE"
          fi
        done <<< "$CHANGED_FILES"

        ERRORS_FOUND=$(wc -l < "$TEMP_FILE" 2>/dev/null || echo "0")
        rm -f "$TEMP_FILE"

        if [ "$ERRORS_FOUND" -gt 0 ]; then
          echo ""
          echo "❌ Found trailing whitespace in $ERRORS_FOUND file(s)."
          echo "Please remove trailing whitespace from the files listed above."
          exit 1
        else
          echo "✅ No trailing whitespace found in changed files."
          exit 0
        fi


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
project.fragment.lock.json
artifacts/
!/artifacts/.gitkeep

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
#*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Mac Only settings file
.DS_Store

# Nuke build tool
.nuke/temp
/publish.cmd


================================================
FILE: .nuke/build.schema.json
================================================
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "Host": {
      "type": "string",
      "enum": [
        "AppVeyor",
        "AzurePipelines",
        "Bamboo",
        "Bitbucket",
        "Bitrise",
        "GitHubActions",
        "GitLab",
        "Jenkins",
        "Rider",
        "SpaceAutomation",
        "TeamCity",
        "Terminal",
        "TravisCI",
        "VisualStudio",
        "VSCode"
      ]
    },
    "ExecutableTarget": {
      "type": "string",
      "enum": [
        "Clean",
        "Compile",
        "Default",
        "Package",
        "PrePublish",
        "Publish",
        "PublishPackages",
        "PublishPreRelease",
        "PublishRelease",
        "Restore",
        "RunUnitTests"
      ]
    },
    "Verbosity": {
      "type": "string",
      "description": "",
      "enum": [
        "Verbose",
        "Normal",
        "Minimal",
        "Quiet"
      ]
    },
    "NukeBuild": {
      "properties": {
        "Continue": {
          "type": "boolean",
          "description": "Indicates to continue a previously failed build attempt"
        },
        "Help": {
          "type": "boolean",
          "description": "Shows the help text for this build assembly"
        },
        "Host": {
          "description": "Host for execution. Default is 'automatic'",
          "$ref": "#/definitions/Host"
        },
        "NoLogo": {
          "type": "boolean",
          "description": "Disables displaying the NUKE logo"
        },
        "Partition": {
          "type": "string",
          "description": "Partition to use on CI"
        },
        "Plan": {
          "type": "boolean",
          "description": "Shows the execution plan (HTML)"
        },
        "Profile": {
          "type": "array",
          "description": "Defines the profiles to load",
          "items": {
            "type": "string"
          }
        },
        "Root": {
          "type": "string",
          "description": "Root directory during build execution"
        },
        "Skip": {
          "type": "array",
          "description": "List of targets to be skipped. Empty list skips all dependencies",
          "items": {
            "$ref": "#/definitions/ExecutableTarget"
          }
        },
        "Target": {
          "type": "array",
          "description": "List of targets to be invoked. Default is '{default_target}'",
          "items": {
            "$ref": "#/definitions/ExecutableTarget"
          }
        },
        "Verbosity": {
          "description": "Logging verbosity during build execution. Default is 'Normal'",
          "$ref": "#/definitions/Verbosity"
        }
      }
    }
  },
  "allOf": [
    {
      "properties": {
        "CommonPropsFilePath": {
          "type": "string",
          "description": "common.props file path - to determine the configured version"
        },
        "Configuration": {
          "type": "string",
          "description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)",
          "enum": [
            "Debug",
            "Release"
          ]
        },
        "ReleaseNotesFilePath": {
          "type": "string",
          "description": "ReleaseNotesFilePath - To determine the lates changelog version"
        },
        "Solution": {
          "type": "string",
          "description": "Path to a solution file that is automatically loaded"
        }
      }
    },
    {
      "$ref": "#/definitions/NukeBuild"
    }
  ]
}


================================================
FILE: .nuke/parameters.json
================================================
{
  "$schema": "./build.schema.json",
  "Solution": "src/ElectronNET.Lean.sln"
}

================================================
FILE: .vscode/launch.json
================================================
{
   // Use IntelliSense to find out which attributes exist for C# debugging
   // Use hover for the description of the existing attributes
   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceRoot}/src/ElectronNET.CLI/bin/Debug/net8.0/dotnet-electronize.dll",
            "args": [],
            "cwd": "${workspaceRoot}/src/ElectronNET.CLI",
            // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
            "console": "internalConsole",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart"
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

================================================
FILE: .vscode/tasks.json
================================================
{
  "version": "2.0.0",
  "command": "dotnet",
  "args": [],
  "tasks": [
    {
      "label": "build",
      "type": "shell",
      "command": "dotnet",
      "args": ["build", "${workspaceRoot}/src/ElectronNET.CLI/ElectronNET.CLI.csproj"],
      "problemMatcher": "$msCompile",
      "group": {
        "_id": "build",
        "isDefault": false
      }
    }
  ]
}


================================================
FILE: Changelog.md
================================================
# 0.4.1

## ElectronNET.Core

- Updated documentation for preload scripts (#1031) @AeonSake
- Updated timeout for electron-builder (#1013) @softworkz
- Updated disposal avoiding exceptions on teardown (#1026) @softworkz
- Updated migration guide (#1015) @hilin
- Fixed handling of `Center` property for windows (#1001)
- Fixed false alarm for `ELECTRON001`, `ELECTRON008`, and `ELECTRON009` (#1012) @softworkz
- Added missing methods on `Cookies` (#1000)
- Added overload for `GetAllDisplaysAsync` with timeout (#1033) @softworkz
- Added `OnBoundsChanged` event (#1014) @softworkz
- Added new events for `ipcMain` (#1019) @DYH1319

# 0.4.0

## ElectronNET.Core

- Fixed ElectronSingleInstance handling (#996) @softworkz
- Fixed `PackageId` handling (#993) @softworkz
- Added cross-platform npm restore and check mismatch on publish (#988) @softworkz

# 0.3.1

## ElectronNET.Core

- Fixed issue transforming the project ID (#989, #990) @softworkz

# 0.3.0

## ElectronNET.Core

- Updated infrastructure (#937, #939) @softworkz
- Updated all model classes to Electron API 39.2 (#949) @softworkz
- Fixed output path for `electron-builder` (#942) @softworkz
- Fixed floating point display resolution (#944) @softworkz
- Fixed error in case of missing electron-host-hook (#978)
- Fixed previous API break using exposed `JsonElement` objects (#938) @softworkz
- Fixed and improved several test cases (#962) @softworkz
- Fixed startup of Electron.NET from VS Code Debug Adapter (#952)
- Fixed the `BrowserWindowOptions` (#945) @softworkz
- Fixed example for `AutoMenuHide` to reflect platform capabilities (#982) @markatosi
- Added several migration checks for publishing (#966) @softworkz
- Added more test runners for E2E tests (#950, #951) @agracio
- Added dynamic updates for tray menu (#973) @davidroth
- Added matrix tests with 6 runners and 2 electron version (#948) @softworkz
- Added additional APIs for WebContents (#958) @agracio
- Added documentation for MacOS package publish (#983) @markatosi
- Added sample application for `ElectronHostHook` (#967) @adityashirsatrao007

# 0.2.0

## ElectronNET.Core

- Updated dependencies (#930) @softworkz
- Updated integration tests (#931) @softworkz
- Updated `ElectronNET.Host` (#935) @softworkz
- Removed transition period specific build configuration (#928) @softworkz
- Added `IsRunningBlazor` option to `BrowserWindowOptions` (#926)
- Added platform support attributes (#929) @softworkz

# 0.1.0

## ElectronNET.Core

- Updated `PrintToPDFOptions` to also allow specifying the `PageSize` with an object (#769)
- Updated splashscreen image to have 0 margin (#622)
- Updated the IPC API w.r.t. naming and consistency (#905) @agracio
- Updated the IPC bridge w.r.t. synchronization and thread-safety (#918) @agracio
- Updated serialization to use `System.Text.Json` replacing `Newtonsoft.Json` (#917) @Denny09310
- Fixed parameter handling for the `sendToIpcRenderer` function (#922) @softworkz
- Fixed synchronization on removing event handlers (#921) @softworkz
- Fixed creation of windows with `contextIsolation` enabled (#906) @NimbusFox
- Fixed single instance behavior using the `ElectronSingleInstance` property (#901)
- Fixed potential race conditions (#908) @softworkz
- Added option to use `ElectronSplashScreen` with an HTML file (#799)
- Added option to provide floating point value as aspect ratios with `SetAspectRatio` (#793)
- Added option to provide `TitleBarOverlay` as an object (#911) @Denny09310
- Added `TitleBarOverlay` property to `BrowserWindowOptions` (#909)
- Added `RoundedCorners` property to `BrowserWindowOptions`
- Added integration tests and robustness checks (#913) @softworkz
- Added .NET 10 as an explicit target

# 0.0.18

## ElectronNET.Core

### Highlights

- **Complete MSBuild Integration**: Eliminated CLI tool dependency, moved all build processes to MSBuild with deep Visual Studio integration
- **Modernized Architecture**: Restructured process lifecycle with .NET launching first and running Electron as child process for better control and reliability
- **Cross-Platform Development**: Build and debug Linux applications directly from Windows Visual Studio via WSL integration
- **Flexible Electron Versioning**: Removed version lock-in, users can now select any Electron version with build-time validation
- **Enhanced Debugging Experience**: ASP.NET-first debugging with Hot Reload support and improved process termination handling
- **Console App Support**: No longer requires ASP.NET - now works with simple console applications for file system or remote server HTML/JS

### Build System & Project Structure

- Eliminated electron.manifest.json configuration file, replaced with MSBuild project properties
- Introduced new package structure: ElectronNET.Core (main package), ElectronNET.Core.Api (API definitions), ElectronNET.Core.AspNet (ASP.NET integration)
- Added Runtime Identifier (RID) selection as part of project configuration
- Restructured build folder layout to use standard .NET format (bin\net8.0\win-x64) instead of bin\Desktop
- Implemented incremental build support for Electron assets to improve build performance
- Added custom MSBuild tasks for Electron-specific build operations

### Development Experience

- Implemented unpackaged run-mode for development using regular .NET builds with unpackaged Electron configuration
- Added support for building Linux packages on Windows via WSL integration
- Enabled running and debugging Linux application outputs on Windows through WSL
- Integrated TypeScript compilation with ASP.NET tooling for consistent builds
- Added process orchestration supporting 8 different launch scenarios (packaged/unpackaged × console/ASP.NET × dotnet-first/electron-first)

### Debugging & Runtime

- Dramatically improved debugging experience with ASP.NET-first launch mode
- Added Hot Reload support for ASP.NET code during development
- Implemented proper process termination handling for all exit scenarios
- Minimized startup times through optimized build and launch procedures

### Technical Improvements

- Enhanced splash screen handling with automatic path resolution
- Improved ElectronHostHook integration as proper npm package dependency
- Updated to latest TypeScript version with ESLint configuration
- Added support for custom main.js files in projects
- Implemented version management through common.props file
- Added build-time Electron version compatibility validation

### Package & Distribution

- Integrated MSBuild publishing mechanisms for creating Electron packages
- Added folder publishing support with improved parameter handling
- Implemented automated package.json generation from MSBuild properties
- Added GitHub release automation with proper versioning
- Reduced package sizes by eliminating unnecessary TypeScript dependencies

### Migration & Compatibility

- Maintained backward compatibility for existing ElectronHostHook implementations
- Removed ASP.NET requirement: Now works with simple console applications for file system or remote server HTML/JS scenarios
- Added support for both console and ASP.NET Core application types
- Preserved all existing Electron API functionality while modernizing architecture
- Added migration path for existing projects through updated package structure

This represents a comprehensive modernization of Electron.NET, addressing the major pain points around debugging, build complexity, and platform limitations while maintaining full API compatibility.


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2017-2025 Gregor Biswanger, Robert Mühsig, Florian Rappl

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.


================================================
FILE: NuGet.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="artifacts" />
  </config>
  <packageSources>
    <clear />
    <add key="LocalDev" value="artifacts" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

================================================
FILE: README.md
================================================
[![Electron.NET Logo](https://github.com/ElectronNET/Electron.NET/raw/main/assets/images/electron.net-logo.png)](https://github.com/ElectronNET/Electron.NET)

[![donate](https://img.shields.io/badge/Donate-Donorbox-green.svg)](https://donorbox.org/electron-net) [![Gitter](https://badges.gitter.im/ElectronNET/community.svg)](https://gitter.im/ElectronNET/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Build status](https://github.com/ElectronNET/Electron.NET/actions/workflows/ci.yml/badge.svg)](https://github.com/ElectronNET/Electron.NET/actions/workflows/ci.yml)

# Electron.NET Core is here!

## A Complete Transformation

`ElectronNET.Core` represents a fundamental modernization of Electron.NET, addressing years of accumulated pain points while preserving full API compatibility. This isn't just an update — it's a complete rethinking of how .NET developers build and debug cross-platform desktop applications with Electron.

Read more: [**What's New in `ElectronNET.Core`**](https://github.com/ElectronNET/Electron.NET/wiki/What's-New)

Build cross platform desktop applications with .NET 6/8/10 - from console apps to ASP.NET Core (Razor Pages, MVC) to Blazor.

## Wait - how does that work exactly?

Well... there are lots of different approaches how to get a X-plat desktop app running. Electron.NET provides a range of ways to build .NET-based solutions using Electron at the side of presentation.

While the classic Electron.NET setup (using an ASP.NET host run by the Electron side) is still the primary way, there's more flexibility now. Both .NET and Electron are now able to launch the other for better lifetime management, and when you don't need a local web server (like when running content from files or remote servers), you can drop the ASP.NET stack altogether and go with a lightweight console app instead.

## 📦 NuGet

* ElectronNET.Core: [![NuGet](https://img.shields.io/nuget/v/ElectronNET.Core.svg?style=flat-square)](https://www.nuget.org/packages/ElectronNET.Core.API/)
* ElectronNET.Core.API: [![NuGet](https://img.shields.io/nuget/v/ElectronNET.Core.API.svg?style=flat-square)](https://www.nuget.org/packages/ElectronNET.Core.API/)
* ElectronNET.Core.AspNet: [![NuGet](https://img.shields.io/nuget/v/ElectronNET.Core.AspNet.svg?style=flat-square)](https://www.nuget.org/packages/ElectronNET.Core.AspNet/)

## 🛠 Requirements to Run

You should have installed:

* .NET 6/8 or later.
* The minimum base OS is the same as [.NET 6](https://github.com/dotnet/core/blob/main/release-notes/6.0/supported-os.md) / [.NET 8](https://github.com/dotnet/core/blob/main/release-notes/8.0/supported-os.md).
* Node.JS using at least [Version 22.x](https://nodejs.org).

## 👩‍🏫 Usage with ASP.NET

- Create a new ASP.NET Core project
- Install the following two NuGet packages:

```ps1
dotnet add package ElectronNET.Core

dotnet add package ElectronNET.Core.AspNet
```

### Classic ASP.NET Core

#### Enable Electron.NET on Startup

To do so, use the `UseElectron` extension method on a `WebApplicationBuilder`, an `IWebHostBuilder` or any descendants.

> [!NOTE]  
> New in Electron.NET Core is that you provide a callback method as an argument to `UseElectron()`, which ensures that you get to know the right moment to set up your application UI.

#### Program.cs

```csharp	
using ElectronNET.API;
using ElectronNET.API.Entities;

public static void Main(string[] args)
{
    WebHost.CreateDefaultBuilder(args)
        .UseElectron(args, ElectronAppReady)
        .UseStartup<Startup>()
        .Build()
        .Run();
}

public static async Task ElectronAppReady()
{
    var browserWindow = await Electron.WindowManager.CreateWindowAsync(
        new BrowserWindowOptions { Show = false });

    browserWindow.OnReadyToShow += () => browserWindow.Show();
}
```

### Minimal API Example

For a minimal API you can use:

```csharp
using ElectronNET;
using ElectronNET.API;
using ElectronNET.API.Entities;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddElectron(); // <- might be useful to set up DI

builder.UseElectron(args, async () =>
{
    var browserWindow = await Electron.WindowManager.CreateWindowAsync(
        new BrowserWindowOptions { Show = false, AutoHideMenuBar = true });

    browserWindow.OnReadyToShow += () => browserWindow.Show();
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}

app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
```

### Blazor

For a project with Blazor you can use:

```cs
using ElectronNET.API;
using ElectronNET.API.Entities;

var builder = WebApplication.CreateBuilder(args);

builder.Services
    .AddRazorComponents()
    .AddInteractiveWebAssemblyComponents();

builder.Services.AddElectron(); // <-- might be useful to set up DI

builder.UseElectron(args, async () =>
{
    var options = new BrowserWindowOptions {
        Show = false,
        IsRunningBlazor = true, // <-- crucial
    };
    if (OperatingSystem.IsWindows() || OperatingSystem.IsLinux())
        options.AutoHideMenuBar = true;
    var browserWindow = await Electron.WindowManager.CreateWindowAsync(options);
    browserWindow.OnReadyToShow += () => browserWindow.Show();
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseWebAssemblyDebugging();
}
else
{
    app.UseExceptionHandler("/Error", createScopeForErrors: true);
}

app.UseStaticFiles();
app.UseAntiforgery();

app.MapRazorComponents<BlazorApp.Components.App>()
    .AddInteractiveWebAssemblyRenderMode();

app.Run();
```

The `IsRunningBlazor` option makes sure to set up the renderer in a way that Blazor can just run without any interference. This includes things such as HMR for development.

## 🚀 Starting and Debugging the Application

Just press `F5` in Visual Studio or use dotnet for debugging.

## 📔 Usage of the Electron API

Complete documentation is available on the Wiki.

In this YouTube video, we show you how you can create a new project, use the Electron.NET API, debug a application and build an executable desktop app for Windows: [Electron.NET - Getting Started](https://www.youtube.com/watch?v=nuM6AojRFHk)  
  
  > [!NOTE]  
  > The video hasn't been updated for the changes in ElectronNET.Core, so it is partially outdated.

## 👨‍💻 Authors

* **[Gregor Biswanger](https://github.com/GregorBiswanger)** - (Microsoft MVP, Intel Black Belt and Intel Software Innovator) is a freelance lecturer, consultant, trainer, author and speaker. He is a consultant for large and medium-sized companies, organizations and agencies for software architecture, web- and cross-platform development. You can find Gregor often on the road attending or speaking at international conferences. - [Cross-Platform-Blog](http://www.cross-platform-blog.com) - Twitter [@BFreakout](https://www.twitter.com/BFreakout)  
* **[Dr. Florian Rappl](https://github.com/FlorianRappl)** - Software Developer - from Munich, Germany. Microsoft MVP & Web Geek. - [The Art of Micro Frontends](https://microfrontends.art) - [Homepage](https://florian-rappl.de) - Twitter [@florianrappl](https://twitter.com/florianrappl)
* **[softworkz](https://github.com/softworkz)** - Full Range Developer - likes to start where others gave up. MS MVP alumni and Munich citizen as well.
* **[Robert Muehsig](https://github.com/robertmuehsig)** - Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek. - [codeinside Blog](https://blog.codeinside.eu) - Twitter [@robert0muehsig](https://twitter.com/robert0muehsig)  
  
See also the list of [contributors](https://github.com/ElectronNET/Electron.NET/graphs/contributors) who participated in this project.
  
## 🙋‍♀️🙋‍♂ Contributing

Feel free to submit a pull request if you find any bugs (to see a list of active issues, visit the [Issues section](https://github.com/ElectronNET/Electron.NET/issues).
Please make sure all commits are properly documented.

## 🙏 Donate

We do this open source work in our free time. If you'd like us to invest more time on it, please [donate](https://donorbox.org/electron-net). Donation can be used to increase some issue priority. Thank you!

[![donate](https://img.shields.io/badge/Donate-Donorbox-green.svg)](https://donorbox.org/electron-net)

Alternatively, consider using a GitHub sponsorship for the core maintainers:

- [Gregor Biswanger](https://github.com/sponsors/GregorBiswanger)
- [Florian Rappl](https://github.com/sponsors/FlorianRappl)

Any support appreciated! 🍻

## 🎉 License

MIT-licensed. See [LICENSE](https://github.com/ElectronNET/Electron.NET/blob/main/LICENSE) for details.

**Enjoy!**



================================================
FILE: artifacts/.gitkeep
================================================


================================================
FILE: build.cmd
================================================
:; set -eo pipefail
:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
:; ${SCRIPT_DIR}/build.sh "$@"
:; exit $?

@ECHO OFF
powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %*


================================================
FILE: build.ps1
================================================
[CmdletBinding()]
Param(
    [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
    [string[]]$BuildArguments
)

Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)"

Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent

###########################################################################
# CONFIGURATION
###########################################################################

$BuildProjectFile = "$PSScriptRoot\nuke\_build.csproj"
$TempDirectory = "$PSScriptRoot\\.nuke\temp"

$DotNetGlobalFile = "$PSScriptRoot\\global.json"
$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1"
$DotNetChannel = "Current"

$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
$env:DOTNET_MULTILEVEL_LOOKUP = 0

###########################################################################
# EXECUTION
###########################################################################

function ExecSafe([scriptblock] $cmd) {
    & $cmd
    if ($LASTEXITCODE) { exit $LASTEXITCODE }
}

# If dotnet CLI is installed globally and it matches requested version, use for execution
if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and `
     $(dotnet --version) -and $LASTEXITCODE -eq 0) {
    $env:DOTNET_EXE = (Get-Command "dotnet").Path
}
else {
    # Download install script
    $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1"
    New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)

    # If global.json exists, load expected version
    if (Test-Path $DotNetGlobalFile) {
        $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json)
        if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) {
            $DotNetVersion = $DotNetGlobal.sdk.version
        }
    }

    # Install by channel or version
    $DotNetDirectory = "$TempDirectory\dotnet-win"
    if (!(Test-Path variable:DotNetVersion)) {
        ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }
    } else {
        ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }
    }
    $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
}

Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)"

ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet }
ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments }


================================================
FILE: build.sh
================================================
#!/usr/bin/env bash

bash --version 2>&1 | head -n 1

set -eo pipefail
SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)

###########################################################################
# CONFIGURATION
###########################################################################

BUILD_PROJECT_FILE="$SCRIPT_DIR/nuke/_build.csproj"
TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp"

DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json"
DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh"
DOTNET_CHANNEL="Current"

export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export DOTNET_MULTILEVEL_LOOKUP=0

###########################################################################
# EXECUTION
###########################################################################

function FirstJsonValue {
    perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}"
}

# If dotnet CLI is installed globally and it matches requested version, use for execution
if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then
    export DOTNET_EXE="$(command -v dotnet)"
else
    # Download install script
    DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh"
    mkdir -p "$TEMP_DIRECTORY"
    curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL"
    chmod +x "$DOTNET_INSTALL_FILE"

    # If global.json exists, load expected version
    if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then
        DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")")
        if [[ "$DOTNET_VERSION" == ""  ]]; then
            unset DOTNET_VERSION
        fi
    fi

    # Install by channel or version
    DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix"
    if [[ -z ${DOTNET_VERSION+x} ]]; then
        "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path
    else
        "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path
    fi
    export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet"
fi

echo "Microsoft (R) .NET SDK version $("$DOTNET_EXE" --version)"

"$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet
"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@"


================================================
FILE: docs/.docproj/DocProj.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <TargetPlatformVersion>8.1</TargetPlatformVersion>
    <IsCodeSharingProject>true</IsCodeSharingProject>
    <DefineCommonItemSchemas>true</DefineCommonItemSchemas>
  </PropertyGroup>
  
  <PropertyGroup>
    <MdIncludes>**/*.md;**/*.markdown</MdIncludes>
    <ImageIncludes>**/*.png;**/*.bmp;**/*.jpg;**/*.gif;**/*.mp4</ImageIncludes>
    <WebIncludes>**/*.css;**/*.js;**/*.json</WebIncludes>
  </PropertyGroup>
  
  <ItemGroup>
    <Compile Remove="**/*" />
    <Content Remove="**/*" />
  </ItemGroup>
  
  <ItemGroup>
    <None Include="$(ImageIncludes)" />
    <None Include="$(WebIncludes)" />
    <None Include="$(MdIncludes)" />
  </ItemGroup>
  
</Project>


================================================
FILE: docs/.docproj/DocProj.targets
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>    
    <ProjectCapability Include="SourceItemsFromImports;SharedImports;SharedAssetsProject"/>
    <ProjectCapability Include="HandlesOwnReload"/>
    <ProjectCapability Include="UserSourceItems"/>    
    <ProjectCapability Include="OpenProjectFile"/>    
    <ProjectCapability Include="UseFileGlobs"/>    
    <ProjectCapability Include="SingleFileGenerators"/>    
  </ItemGroup>

  <Target Name="Compile">
  </Target>

  <Target Name="Build">
  </Target>

  <Target Name="Clean">
  </Target>

  <Target Name="_CheckForInvalidConfigurationAndPlatform">
  </Target>
</Project>


================================================
FILE: docs/API/App.md
================================================
# Electron.App

Control your application's event lifecycle.

## Overview

The `Electron.App` API provides comprehensive control over your application's lifecycle, including startup, shutdown, window management, and system integration. It handles application-level events and provides methods for managing the overall application state.

## Properties

#### 📋 `CommandLine`
A `CommandLine` object that allows you to read and manipulate the command line arguments that Chromium uses.

#### 📋 `IsReady`
Application host fully started.

#### 📋 `Name`
A string property that indicates the current application's name, which is the name in the application's package.json file.

Usually the name field of package.json is a short lowercase name, according to the npm modules spec. You should usually also specify a productName field, which is your application's full capitalized name, and which will be preferred over name by Electron.

#### 📋 `NameAsync`
A `Task<string>` property that indicates the current application's name, which is the name in the application's package.json file.

Usually the name field of package.json is a short lowercase name, according to the npm modules spec. You should usually also specify a productName field, which is your application's full capitalized name, and which will be preferred over name by Electron.

#### 📋 `UserAgentFallback`
A string which is the user agent string Electron will use as a global fallback.

This is the user agent that will be used when no user agent is set at the webContents or session level. It is useful for ensuring that your entire app has the same user agent. Set to a custom value as early as possible in your app's initialization to ensure that your overridden value is used.

#### 📋 `UserAgentFallbackAsync`
A `Task<string>` which is the user agent string Electron will use as a global fallback.

This is the user agent that will be used when no user agent is set at the webContents or session level. It is useful for ensuring that your entire app has the same user agent. Set to a custom value as early as possible in your app's initialization to ensure that your overridden value is used.

## Methods

#### 🧊 `void AddRecentDocument(string path)`
Adds path to the recent documents list. This list is managed by the OS. On Windows you can visit the list from the task bar, and on macOS you can visit it from dock menu.

#### 🧊 `void ClearRecentDocuments()`
Clears the recent documents list.

#### 🧊 `void Exit(int exitCode = 0)`
All windows will be closed immediately without asking user and the BeforeQuit and WillQuit events will not be emitted.

**Parameters:**
- `exitCode` - Exits immediately with exitCode. exitCode defaults to 0.

#### 🧊 `void Focus()`
On Linux, focuses on the first visible window. On macOS, makes the application the active app. On Windows, focuses on the application's first window.

#### 🧊 `void Focus(FocusOptions focusOptions)`
On Linux, focuses on the first visible window. On macOS, makes the application the active app. On Windows, focuses on the application's first window.

You should seek to use the `FocusOptions.Steal` option as sparingly as possible.

**Parameters:**
- `focusOptions` - Focus options

#### 🧊 `Task<ProcessMetric[]> GetAppMetricsAsync(CancellationToken cancellationToken = default)`
Memory and cpu usage statistics of all the processes associated with the app.

**Returns:**

Array of ProcessMetric objects that correspond to memory and cpu usage statistics of all the processes associated with the app.

#### 🧊 `Task<string> GetAppPathAsync(CancellationToken cancellationToken = default)`
The current application directory.

**Returns:**

The current application directory.

#### 🧊 `Task<int> GetBadgeCountAsync(CancellationToken cancellationToken = default)`
The current value displayed in the counter badge.

**Returns:**

The current value displayed in the counter badge.

#### 🧊 `Task<string> GetCurrentActivityTypeAsync(CancellationToken cancellationToken = default)`
The type of the currently running activity.

**Returns:**

The type of the currently running activity.

#### 🧊 `Task<GPUFeatureStatus> GetGpuFeatureStatusAsync(CancellationToken cancellationToken = default)`
The Graphics Feature Status from chrome://gpu/.

Note: This information is only usable after the gpu-info-update event is emitted.

**Returns:**

The Graphics Feature Status from chrome://gpu/.

#### 🧊 `Task<JumpListSettings> GetJumpListSettingsAsync(CancellationToken cancellationToken = default)`
Jump List settings for the application.

**Returns:**

Jump List settings.

#### 🧊 `Task<string> GetLocaleAsync(CancellationToken cancellationToken = default)`
The current application locale. Possible return values are documented [here](https://www.electronjs.org/docs/api/locales).

Note: When distributing your packaged app, you have to also ship the locales folder.

Note: On Windows, you have to call it after the Ready events gets emitted.

**Returns:**

The current application locale.

#### 🧊 `Task<LoginItemSettings> GetLoginItemSettingsAsync(CancellationToken cancellationToken = default)`
If you provided path and args options to SetLoginItemSettings then you need to pass the same arguments here for LoginItemSettings.OpenAtLogin to be set correctly.

**Returns:**

Login item settings.

#### 🧊 `Task<string> GetPathAsync(PathName pathName, CancellationToken cancellationToken = default)`
The path to a special directory. If GetPathAsync is called without called SetAppLogsPath being called first, a default directory will be created equivalent to calling SetAppLogsPath without a path parameter.

**Parameters:**
- `pathName` - Special directory.

**Returns:**

A path to a special directory or file associated with name.

#### 🧊 `Task<string> GetVersionAsync(CancellationToken cancellationToken = default)`
The version of the loaded application. If no version is found in the application's package.json file, the version of the current bundle or executable is returned.

**Returns:**

The version of the loaded application.

#### 🧊 `Task<bool> HasSingleInstanceLockAsync(CancellationToken cancellationToken = default)`
This method returns whether or not this instance of your app is currently holding the single instance lock. You can request the lock with RequestSingleInstanceLockAsync and release with ReleaseSingleInstanceLock.

**Returns:**

Whether this instance of your app is currently holding the single instance lock.

#### 🧊 `void Hide()`
Hides all application windows without minimizing them.

#### 🧊 `Task<int> ImportCertificateAsync(ImportCertificateOptions options, CancellationToken cancellationToken = default)`
Imports the certificate in pkcs12 format into the platform certificate store. callback is called with the result of import operation, a value of 0 indicates success while any other value indicates failure according to chromium net_error_list.

**Parameters:**
- `options` - Import certificate options
- `cancellationToken` - The cancellation token

**Returns:**

Result of import. Value of 0 indicates success.

#### 🧊 `void InvalidateCurrentActivity()`
Invalidates the current Handoff user activity.

#### 🧊 `Task<bool> IsAccessibilitySupportEnabledAsync(CancellationToken cancellationToken = default)`
true if Chrome's accessibility support is enabled, false otherwise. This API will return true if the use of assistive technologies, such as screen readers, has been detected. See Chromium's accessibility docs for more details.

**Returns:**

true if Chrome's accessibility support is enabled, false otherwise.

#### 🧊 `Task<bool> IsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default)`
This method checks if the current executable is the default handler for a protocol (aka URI scheme).

Note: On macOS, you can use this method to check if the app has been registered as the default protocol handler for a protocol. You can also verify this by checking ~/Library/Preferences/com.apple.LaunchServices.plist on the macOS machine. Please refer to Apple's documentation for details.

The API uses the Windows Registry and LSCopyDefaultHandlerForURLScheme internally.

**Parameters:**
- `protocol` - The name of your protocol, without ://
- `cancellationToken` - The cancellation token

**Returns:**

Whether the current executable is the default handler for a protocol (aka URI scheme).

#### 🧊 `Task<bool> IsUnityRunningAsync(CancellationToken cancellationToken = default)`
Whether the current desktop environment is Unity launcher.

**Returns:**

Whether the current desktop environment is Unity launcher.

#### 🧊 `void Quit()`
Try to close all windows. The BeforeQuit event will be emitted first. If all windows are successfully closed, the WillQuit event will be emitted and by default the application will terminate. This method guarantees that all beforeunload and unload event handlers are correctly executed. It is possible that a window cancels the quitting by returning false in the beforeunload event handler.

#### 🧊 `void ReleaseSingleInstanceLock()`
Releases all locks that were created by makeSingleInstance. This will allow multiple instances of the application to once again run side by side.

#### 🧊 `void Relaunch()`
Relaunches the app when current instance exits. By default the new instance will use the same working directory and command line arguments with current instance.

Note that this method does not quit the app when executed, you have to call Quit or Exit after calling Relaunch() to make the app restart.

When Relaunch() is called for multiple times, multiple instances will be started after current instance exited.

#### 🧊 `void Relaunch(RelaunchOptions relaunchOptions)`
Relaunches the app when current instance exits. By default the new instance will use the same working directory and command line arguments with current instance. When RelaunchOptions.Args is specified, the RelaunchOptions.Args will be passed as command line arguments instead. When RelaunchOptions.ExecPath is specified, the RelaunchOptions.ExecPath will be executed for relaunch instead of current app.

Note that this method does not quit the app when executed, you have to call Quit or Exit after calling Relaunch() to make the app restart.

When Relaunch() is called for multiple times, multiple instances will be started after current instance exited.

**Parameters:**
- `relaunchOptions` - Options for the relaunch

#### 🧊 `Task<bool> RemoveAsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default)`
This method checks if the current executable as the default handler for a protocol (aka URI scheme). If so, it will remove the app as the default handler.

**Parameters:**
- `protocol` - The name of your protocol, without ://
- `cancellationToken` - The cancellation token

**Returns:**

Whether the call succeeded.

#### 🧊 `Task<bool> RequestSingleInstanceLockAsync(Action<string[], string> newInstanceOpened, CancellationToken cancellationToken = default)`
The return value of this method indicates whether or not this instance of your application successfully obtained the lock. If it failed to obtain the lock, you can assume that another instance of your application is already running with the lock and exit immediately.

I.e.This method returns true if your process is the primary instance of your application and your app should continue loading. It returns false if your process should immediately quit as it has sent its parameters to another instance that has already acquired the lock.

On macOS, the system enforces single instance automatically when users try to open a second instance of your app in Finder, and the open-file and open-url events will be emitted for that.However when users start your app in command line, the system's single instance mechanism will be bypassed, and you have to use this method to ensure single instance.

**Parameters:**
- `newInstanceOpened` - Lambda with an array of the second instance's command line arguments. The second parameter is the working directory path.
- `cancellationToken` - The cancellation token

**Returns:**

This method returns false if your process is the primary instance of the application and your app should continue loading. And returns true if your process has sent its parameters to another instance, and you should immediately quit.

#### 🧊 `void ResignCurrentActivity()`
Marks the current Handoff user activity as inactive without invalidating it.

#### 🧊 `void SetAccessibilitySupportEnabled(bool enabled)`
Manually enables Chrome's accessibility support, allowing to expose accessibility switch to users in application settings. See Chromium's accessibility docs for more details. Disabled (false) by default.

This API must be called after the Ready event is emitted.

Note: Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.

**Parameters:**
- `enabled` - Enable or disable accessibility tree rendering

#### 🧊 `void SetAppLogsPath(string path)`
Sets or creates a directory your app's logs which can then be manipulated with GetPathAsync or SetPath.

Calling SetAppLogsPath without a path parameter will result in this directory being set to ~/Library/Logs/YourAppName on macOS, and inside the userData directory on Linux and Windows.

**Parameters:**
- `path` - A custom path for your logs. Must be absolute

#### 🧊 `void SetAppUserModelId(string id)`
Changes the Application User Model ID to id.

**Parameters:**
- `id` - Model Id

#### 🧊 `Task<bool> SetAsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default)`
Sets the current executable as the default handler for a protocol (aka URI scheme). It allows you to integrate your app deeper into the operating system. Once registered, all links with your-protocol:// will be opened with the current executable. The whole link, including protocol, will be passed to your application as a parameter.

Note: On macOS, you can only register protocols that have been added to your app's info.plist, which cannot be modified at runtime. However, you can change the file during build time via Electron Forge, Electron Packager, or by editing info.plist with a text editor. Please refer to Apple's documentation for details.

Note: In a Windows Store environment (when packaged as an appx) this API will return true for all calls but the registry key it sets won't be accessible by other applications. In order to register your Windows Store application as a default protocol handler you must declare the protocol in your manifest.

The API uses the Windows Registry and LSSetDefaultHandlerForURLScheme internally.

**Parameters:**
- `protocol` - The name of your protocol, without ://. For example, if you want your app to handle electron:// links, call this method with electron as the parameter.
- `cancellationToken` - The cancellation token

**Returns:**

Whether the call succeeded.

#### 🧊 `Task<bool> SetBadgeCountAsync(int count, CancellationToken cancellationToken = default)`
Sets the counter badge for current app. Setting the count to 0 will hide the badge. On macOS it shows on the dock icon. On Linux it only works for Unity launcher.

Note: Unity launcher requires the existence of a .desktop file to work, for more information please read Desktop Environment Integration.

**Parameters:**
- `count` - Counter badge
- `cancellationToken` - The cancellation token

**Returns:**

Whether the call succeeded.

#### 🧊 `void SetJumpList(JumpListCategory[] categories)`
Sets or removes a custom Jump List for the application. If categories is null the previously set custom Jump List (if any) will be replaced by the standard Jump List for the app (managed by Windows).

Note: If a JumpListCategory object has neither the Type nor the Name property set then its Type is assumed to be tasks. If the Name property is set but the Type property is omitted then the Type is assumed to be custom.

Note: Users can remove items from custom categories, and Windows will not allow a removed item to be added back into a custom category until after the next successful call to SetJumpList. Any attempt to re-add a removed item to a custom category earlier than that will result in the entire custom category being omitted from the Jump List. The list of removed items can be obtained using GetJumpListSettingsAsync.

**Parameters:**
- `categories` - Array of JumpListCategory objects

#### 🧊 `void SetLoginItemSettings(LoginSettings loginSettings)`
Set the app's login item settings.

To work with Electron's autoUpdater on Windows, which uses Squirrel, you'll want to set the launch path to Update.exe, and pass arguments that specify your application name.

**Parameters:**
- `loginSettings` - Login settings

#### 🧊 `void SetPath(PathName name, string path)`
Overrides the path to a special directory or file associated with name. If the path specifies a directory that does not exist, an Error is thrown. In that case, the directory should be created with fs.mkdirSync or similar.

You can only override paths of a name defined in GetPathAsync.

By default, web pages' cookies and caches will be stored under the PathName.UserData directory. If you want to change this location, you have to override the PathName.UserData path before the Ready event of the App module is emitted.

**Parameters:**
- `name` - Special directory name
- `path` - New path to a special directory

#### 🧊 `void SetUserActivity(string type, object userInfo)`
Creates an NSUserActivity and sets it as the current activity. The activity is eligible for Handoff to another device afterward.

**Parameters:**
- `type` - Uniquely identifies the activity. Maps to NSUserActivity.activityType.
- `userInfo` - App-specific state to store for use by another device

#### 🧊 `Task<bool> SetUserTasksAsync(UserTask[] userTasks, CancellationToken cancellationToken = default)`
Adds tasks to the UserTask category of the JumpList on Windows.

Note: If you'd like to customize the Jump List even more use SetJumpList instead.

**Parameters:**
- `userTasks` - Array of UserTask objects
- `cancellationToken` - The cancellation token

**Returns:**

Whether the call succeeded.

#### 🧊 `void Show()`
Shows application windows after they were hidden. Does not automatically focus them.

#### 🧊 `void ShowAboutPanel()`
Show the app's about panel options. These options can be overridden with SetAboutPanelOptions.

## Events

#### ⚡ `AccessibilitySupportChanged`
Emitted when Chrome's accessibility support changes. This event fires when assistive technologies, such as screen readers, are enabled or disabled. See https://www.chromium.org/developers/design-documents/accessibility for more details.

#### ⚡ `BrowserWindowBlur`
Emitted when a BrowserWindow blurred.

#### ⚡ `BrowserWindowCreated`
Emitted when a new BrowserWindow is created.

#### ⚡ `BrowserWindowFocus`
Emitted when a BrowserWindow gets focused.

#### ⚡ `OpenFile`
Emitted when a macOS user wants to open a file with the application. The open-file event is usually emitted when the application is already open and the OS wants to reuse the application to open the file. open-file is also emitted when a file is dropped onto the dock and the application is not yet running.

On Windows, you have to parse the arguments using App.CommandLine to get the filepath.

#### ⚡ `OpenUrl`
Emitted when a macOS user wants to open a URL with the application. Your application's Info.plist file must define the URL scheme within the CFBundleURLTypes key, and set NSPrincipalClass to AtomApplication.

#### ⚡ `Quitting`
Emitted when the application is quitting.

Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.

#### ⚡ `Ready`
Emitted when the application has finished basic startup.

#### ⚡ `WebContentsCreated`
Emitted when a new WebContents is created.

#### ⚡ `WillQuit`
Emitted when all windows have been closed and the application will quit.

See the description of the WindowAllClosed event for the differences between the WillQuit and WindowAllClosed events.

Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.

#### ⚡ `WindowAllClosed`
Emitted when all windows have been closed.

If you do not subscribe to this event and all windows are closed, the default behavior is to quit the app; however, if you subscribe, you control whether the app quits or not.If the user pressed Cmd + Q, or the developer called Quit, Electron will first try to close all the windows and then emit the WillQuit event, and in this case the WindowAllClosed event would not be emitted.

## Usage Examples

### Application Lifecycle

```csharp
// Handle app startup
Electron.App.Ready += () =>
{
    Console.WriteLine("App is ready!");
};

// Handle window management
Electron.App.WindowAllClosed += () =>
{
    if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
    {
        Electron.App.Quit();
    }
};

// Prevent quit
Electron.App.BeforeQuit += async (args) =>
{
    var result = await Electron.Dialog.ShowMessageBoxAsync("Do you want to quit?");
    if (result.Response == 1) // Cancel
    {
        args.PreventDefault = true;
    }
};
```

### Protocol Handling

```csharp
// Register custom protocol
var success = await Electron.App.SetAsDefaultProtocolClientAsync("myapp");

// Check if registered
var isDefault = await Electron.App.IsDefaultProtocolClientAsync("myapp");
```

### Jump List (Windows)

```csharp
// Set user tasks
await Electron.App.SetUserTasksAsync(new[]
{
    new UserTask
    {
        Program = "myapp.exe",
        Arguments = "--new-document",
        Title = "New Document",
        Description = "Create a new document"
    }
});
```

### Application Information

```csharp
// Get app information
var appPath = await Electron.App.GetAppPathAsync();
var version = await Electron.App.GetVersionAsync();
var locale = await Electron.App.GetLocaleAsync();

// Set app name
await Electron.App.NameAsync; // Get current name
Electron.App.Name = "My Custom App Name";
```

### Badge Count (macOS/Linux)

```csharp
// Set badge count
await Electron.App.SetBadgeCountAsync(5);

// Get current badge count
var count = await Electron.App.GetBadgeCountAsync();
```

## Related APIs

- [Electron.WindowManager](WindowManager.md) - Window creation and management
- [Electron.Dialog](Dialog.md) - User interaction dialogs
- [Electron.Menu](Menu.md) - Application menus

## Additional Resources

- [Electron App Documentation](https://electronjs.org/docs/api/app) - Official Electron app API
- [Startup Methods](../Using/Startup-Methods.md) - Different application startup modes


================================================
FILE: docs/API/AutoUpdater.md
================================================
# Electron.AutoUpdater

Handle application updates and installation processes.

## Overview

The `Electron.AutoUpdater` API provides comprehensive functionality for handling application updates, including checking for updates, downloading, and installation. It supports multiple update providers and platforms with automatic update capabilities.

## Properties

#### 📋 `bool AllowDowngrade`
Whether to allow version downgrade. Default is false.

#### 📋 `bool AllowPrerelease`
GitHub provider only. Whether to allow update to pre-release versions. Defaults to true if application version contains prerelease components.

#### 📋 `bool AutoDownload`
Whether to automatically download an update when it is found. Default is true.

#### 📋 `bool AutoInstallOnAppQuit`
Whether to automatically install a downloaded update on app quit. Applicable only on Windows and Linux.

#### 📋 `string Channel`
Get the update channel. Not applicable for GitHub. Doesn't return channel from the update configuration, only if was previously set.

#### 📋 `Task<string> ChannelAsync`
Get the update channel. Not applicable for GitHub. Doesn't return channel from the update configuration, only if was previously set.

#### 📋 `Task<SemVer> CurrentVersionAsync`
Get the current application version.

#### 📋 `bool FullChangelog`
GitHub provider only. Get all release notes (from current version to latest), not just the latest. Default is false.

#### 📋 `Dictionary<string, string> RequestHeaders`
The request headers.

#### 📋 `Task<Dictionary<string, string>> RequestHeadersAsync`
Get the current request headers.

#### 📋 `string UpdateConfigPath`
For test only. Configuration path for updates.

## Methods

#### 🧊 `Task<UpdateCheckResult> CheckForUpdatesAndNotifyAsync()`
Asks the server whether there is an update and notifies the user if an update is available.

#### 🧊 `Task<UpdateCheckResult> CheckForUpdatesAsync()`
Asks the server whether there is an update.

#### 🧊 `Task<string> DownloadUpdateAsync()`
Start downloading update manually. Use this method if AutoDownload option is set to false.

**Returns:**

Path to downloaded file.

#### 🧊 `Task<string> GetFeedURLAsync()`
Get the current feed URL.

**Returns:**

Feed URL.

#### 🧊 `void QuitAndInstall(bool isSilent = false, bool isForceRunAfter = false)`
Restarts the app and installs the update after it has been downloaded. Should only be called after update-downloaded has been emitted.

Note: QuitAndInstall() will close all application windows first and only emit before-quit event on app after that. This is different from the normal quit event sequence.

**Parameters:**
- `isSilent` - Windows-only: Runs the installer in silent mode. Defaults to false
- `isForceRunAfter` - Run the app after finish even on silent install. Not applicable for macOS

## Events

#### ⚡ `OnCheckingForUpdate`
Emitted when checking if an update has started.

#### ⚡ `OnDownloadProgress`
Emitted on download progress.

#### ⚡ `OnError`
Emitted when there is an error while updating.

#### ⚡ `OnUpdateAvailable`
Emitted when there is an available update. The update is downloaded automatically if AutoDownload is true.

#### ⚡ `OnUpdateDownloaded`
Emitted on download complete.

#### ⚡ `OnUpdateNotAvailable`
Emitted when there is no available update.

## Usage Examples

### Basic Auto-Update Setup

```csharp
// Configure auto-updater
Electron.AutoUpdater.AutoDownload = true;
Electron.AutoUpdater.AutoInstallOnAppQuit = true;

// Check for updates
var updateCheck = await Electron.AutoUpdater.CheckForUpdatesAsync();
if (updateCheck.UpdateInfo != null)
{
    Console.WriteLine($"Update available: {updateCheck.UpdateInfo.Version}");
}
```

### Manual Update Management

```csharp
// Disable auto-download for manual control
Electron.AutoUpdater.AutoDownload = false;

// Check for updates
var result = await Electron.AutoUpdater.CheckForUpdatesAsync();
if (result.UpdateInfo != null)
{
    Console.WriteLine($"Update found: {result.UpdateInfo.Version}");

    // Ask user confirmation
    var confirmResult = await Electron.Dialog.ShowMessageBoxAsync(
        "Update Available",
        $"Version {result.UpdateInfo.Version} is available. Download now?");

    if (confirmResult.Response == 1) // Yes
    {
        // Download update manually
        var downloadPath = await Electron.AutoUpdater.DownloadUpdateAsync();
        Console.WriteLine($"Downloaded to: {downloadPath}");

        // Install update
        Electron.AutoUpdater.QuitAndInstall();
    }
}
```

### Update Event Handling

```csharp
// Handle update events
Electron.AutoUpdater.OnCheckingForUpdate += () =>
{
    Console.WriteLine("Checking for updates...");
};

Electron.AutoUpdater.OnUpdateAvailable += (updateInfo) =>
{
    Console.WriteLine($"Update available: {updateInfo.Version}");
};

Electron.AutoUpdater.OnUpdateNotAvailable += (updateInfo) =>
{
    Console.WriteLine("No updates available");
};

Electron.AutoUpdater.OnDownloadProgress += (progressInfo) =>
{
    Console.WriteLine($"Download progress: {progressInfo.Percent}%");
};

Electron.AutoUpdater.OnUpdateDownloaded += (updateInfo) =>
{
    Console.WriteLine($"Update downloaded: {updateInfo.Version}");

    // Show notification to user
    Electron.Notification.Show(new NotificationOptions
    {
        Title = "Update Downloaded",
        Body = $"Version {updateInfo.Version} is ready to install.",
        Actions = new[]
        {
            new NotificationAction { Text = "Install Now", Type = NotificationActionType.Button },
            new NotificationAction { Text = "Later", Type = NotificationActionType.Button }
        }
    });
};

Electron.AutoUpdater.OnError += (error) =>
{
    Console.WriteLine($"Update error: {error}");
    Electron.Dialog.ShowErrorBox("Update Error", $"Failed to update: {error}");
};
```

### GitHub Provider Configuration

```csharp
// Configure for GitHub releases
Electron.AutoUpdater.AllowPrerelease = true; // Allow pre-release versions
Electron.AutoUpdater.FullChangelog = true;  // Get full changelog
Electron.AutoUpdater.AllowDowngrade = false; // Prevent downgrades

// Set request headers if needed
Electron.AutoUpdater.RequestHeaders = new Dictionary<string, string>
{
    ["Authorization"] = "token your-github-token",
    ["User-Agent"] = "MyApp-Updater"
};
```

### Update Installation

```csharp
// Install update immediately
if (updateDownloaded)
{
    Electron.AutoUpdater.QuitAndInstall();
}

// Silent install (Windows only)
Electron.AutoUpdater.QuitAndInstall(isSilent: true, isForceRunAfter: true);
```

### Version Management

```csharp
// Get current version
var currentVersion = await Electron.AutoUpdater.CurrentVersionAsync;
Console.WriteLine($"Current version: {currentVersion}");

// Get update channel
var channel = await Electron.AutoUpdater.ChannelAsync;
Console.WriteLine($"Update channel: {channel}");

// Set custom feed URL
// Note: This would typically be configured in electron-builder.json
var feedUrl = await Electron.AutoUpdater.GetFeedURLAsync();
Console.WriteLine($"Feed URL: {feedUrl}");
```

## Related APIs

- [Electron.App](App.md) - Application lifecycle events during updates
- [Electron.Notification](Notification.md) - Notify users about update status
- [Electron.Dialog](Dialog.md) - Show update confirmation dialogs

## Additional Resources

- [Electron AutoUpdater Documentation](https://electronjs.org/docs/api/auto-updater) - Official Electron auto-updater API


================================================
FILE: docs/API/Clipboard.md
================================================
# Electron.Clipboard

Perform copy and paste operations on the system clipboard.

## Overview

The `Electron.Clipboard` API provides comprehensive access to the system clipboard, supporting multiple data formats including text, HTML, RTF, images, and custom data. It enables reading from and writing to the clipboard with platform-specific behavior.

## Methods

#### 🧊 `Task<string[]> AvailableFormatsAsync(string type = "")`
Get an array of supported formats for the clipboard type.

**Parameters:**
- `type` - Clipboard type

**Returns:**

An array of supported formats for the clipboard type.

#### 🧊 `void Clear(string type = "")`
Clears the clipboard content.

**Parameters:**
- `type` - Clipboard type

#### 🧊 `Task<ReadBookmark> ReadBookmarkAsync()`
Returns an Object containing title and url keys representing the bookmark in the clipboard. The title and url values will be empty strings when the bookmark is unavailable.

**Returns:**

Object containing title and url keys representing the bookmark in the clipboard.

#### 🧊 `Task<string> ReadFindTextAsync()`
macOS: The text on the find pasteboard. This method uses synchronous IPC when called from the renderer process. The cached value is reread from the find pasteboard whenever the application is activated.

**Returns:**

The text on the find pasteboard.

#### 🧊 `Task<string> ReadHTMLAsync(string type = "")`
Read the content in the clipboard as HTML markup.

**Parameters:**
- `type` - Clipboard type

**Returns:**

The content in the clipboard as markup.

#### 🧊 `Task<NativeImage> ReadImageAsync(string type = "")`
Read an image from the clipboard.

**Parameters:**
- `type` - Clipboard type

**Returns:**

An image from the clipboard.

#### 🧊 `Task<string> ReadRTFAsync(string type = "")`
Read the content in the clipboard as RTF.

**Parameters:**
- `type` - Clipboard type

**Returns:**

The content in the clipboard as RTF.

#### 🧊 `Task<string> ReadTextAsync(string type = "")`
Read the content in the clipboard as plain text.

**Parameters:**
- `type` - Clipboard type

**Returns:**

The content in the clipboard as plain text.

#### 🧊 `void Write(Data data, string type = "")`
Writes data to the clipboard.

**Parameters:**
- `data` - Data object to write
- `type` - Clipboard type

#### 🧊 `void WriteBookmark(string title, string url, string type = "")`
Writes the title and url into the clipboard as a bookmark.

Note: Most apps on Windows don't support pasting bookmarks into them so you can use clipboard.write to write both a bookmark and fallback text to the clipboard.

**Parameters:**
- `title` - Bookmark title
- `url` - Bookmark URL
- `type` - Clipboard type

#### 🧊 `void WriteFindText(string text)`
macOS: Writes the text into the find pasteboard as plain text. This method uses synchronous IPC when called from the renderer process.

**Parameters:**
- `text` - Text to write to find pasteboard

#### 🧊 `void WriteHTML(string markup, string type = "")`
Writes markup to the clipboard.

**Parameters:**
- `markup` - HTML markup to write
- `type` - Clipboard type

#### 🧊 `void WriteImage(NativeImage image, string type = "")`
Writes an image to the clipboard.

**Parameters:**
- `image` - Image to write to clipboard
- `type` - Clipboard type

#### 🧊 `void WriteRTF(string text, string type = "")`
Writes the text into the clipboard in RTF.

**Parameters:**
- `text` - RTF content to write
- `type` - Clipboard type

#### 🧊 `void WriteText(string text, string type = "")`
Writes the text into the clipboard as plain text.

**Parameters:**
- `text` - Text content to write
- `type` - Clipboard type

## Usage Examples

### Basic Text Operations

```csharp
// Read text from clipboard
var text = await Electron.Clipboard.ReadTextAsync();
Console.WriteLine($"Clipboard text: {text}");

// Write text to clipboard
Electron.Clipboard.WriteText("Hello, Electron.NET!");

// Read with specific type
var html = await Electron.Clipboard.ReadHTMLAsync("public.main");
```

### Rich Content Handling

```csharp
// Copy formatted text
var htmlContent = "<h1>Title</h1><p>Some <strong>bold</strong> text</p>";
Electron.Clipboard.WriteHTML(htmlContent);

// Read RTF content
var rtf = await Electron.Clipboard.ReadRTFAsync();
Console.WriteLine($"RTF content: {rtf}");
```

### Image Operations

```csharp
// Read image from clipboard
var image = await Electron.Clipboard.ReadImageAsync();
if (image != null)
{
    Console.WriteLine($"Image size: {image.Size.Width}x{image.Size.Height}");
}

// Write image to clipboard
var nativeImage = NativeImage.CreateFromPath("screenshot.png");
Electron.Clipboard.WriteImage(nativeImage);
```

### Bookmark Management

```csharp
// Read bookmark from clipboard
var bookmark = await Electron.Clipboard.ReadBookmarkAsync();
if (!string.IsNullOrEmpty(bookmark.Title))
{
    Console.WriteLine($"Bookmark: {bookmark.Title} -> {bookmark.Url}");
}

// Write bookmark to clipboard
Electron.Clipboard.WriteBookmark("Electron.NET", "https://github.com/ElectronNET/Electron.NET");
```

### Advanced Clipboard Operations

```csharp
// Check available formats
var formats = await Electron.Clipboard.AvailableFormatsAsync();
Console.WriteLine($"Available formats: {string.Join(", ", formats)}");

// Clear clipboard
Electron.Clipboard.Clear();

// Write custom data
var data = new Data
{
    Text = "Custom data",
    Html = "<p>Custom HTML</p>",
    Image = nativeImage
};
Electron.Clipboard.Write(data);
```

### macOS Find Pasteboard

```csharp
// macOS specific find pasteboard operations
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    // Read find text
    var findText = await Electron.Clipboard.ReadFindTextAsync();
    Console.WriteLine($"Find text: {findText}");

    // Write find text
    Electron.Clipboard.WriteFindText("search term");
}
```

## Related APIs

- [Electron.Shell](Shell.md) - Work with file paths from clipboard
- [Electron.Notification](Notification.md) - Show clipboard operation results

## Additional Resources

- [Electron Clipboard Documentation](https://electronjs.org/docs/api/clipboard) - Official Electron clipboard API


================================================
FILE: docs/API/Dialog.md
================================================
# Electron.Dialog

Display native system dialogs for opening and saving files, alerting, etc.

## Overview

The `Electron.Dialog` API provides access to native system dialogs for file operations, message boxes, and certificate trust dialogs. These dialogs are modal and provide a consistent user experience across different platforms.

## Methods

#### 🧊 `Task<MessageBoxResult> ShowMessageBoxAsync(BrowserWindow browserWindow, MessageBoxOptions messageBoxOptions)`
Shows a message box, it will block the process until the message box is closed. It returns the index of the clicked button. If a callback is passed, the dialog will not block the process.

**Parameters:**
- `browserWindow` - The browserWindow argument allows the dialog to attach itself to a parent window, making it modal.
- `messageBoxOptions` - Message content and configuration

**Returns:**

The API call will be asynchronous and the result will be passed via MessageBoxResult.

#### 🧊 `Task<MessageBoxResult> ShowMessageBoxAsync(BrowserWindow browserWindow, string message)`
Shows a message box, it will block the process until the message box is closed. It returns the index of the clicked button. If a callback is passed, the dialog will not block the process.

**Parameters:**
- `browserWindow` - The browserWindow argument allows the dialog to attach itself to a parent window, making it modal.
- `message` - Message content

**Returns:**

The API call will be asynchronous and the result will be passed via MessageBoxResult.

#### 🧊 `Task<MessageBoxResult> ShowMessageBoxAsync(MessageBoxOptions messageBoxOptions)`
Shows a message box, it will block the process until the message box is closed. It returns the index of the clicked button. If a callback is passed, the dialog will not block the process.

**Parameters:**
- `messageBoxOptions` - Message content and configuration

**Returns:**

The API call will be asynchronous and the result will be passed via MessageBoxResult.

#### 🧊 `Task<MessageBoxResult> ShowMessageBoxAsync(string message)`
Shows a message box, it will block the process until the message box is closed. It returns the index of the clicked button. If a callback is passed, the dialog will not block the process.

**Parameters:**
- `message` - Message content

**Returns:**

The API call will be asynchronous and the result will be passed via MessageBoxResult.

#### 🧊 `Task<string[]> ShowOpenDialogAsync(BrowserWindow browserWindow, OpenDialogOptions options)`
Note: On Windows and Linux an open dialog can not be both a file selector and a directory selector, so if you set properties to ['openFile', 'openDirectory'] on these platforms, a directory selector will be shown.

**Parameters:**
- `browserWindow` - The browserWindow argument allows the dialog to attach itself to a parent window, making it modal.
- `options` - Dialog configuration options

**Returns:**

An array of file paths chosen by the user

#### 🧊 `Task<string> ShowSaveDialogAsync(BrowserWindow browserWindow, SaveDialogOptions options)`
Dialog for save files.

**Parameters:**
- `browserWindow` - The browserWindow argument allows the dialog to attach itself to a parent window, making it modal.
- `options` - Dialog configuration options

**Returns:**

Returns String, the path of the file chosen by the user, if a callback is provided it returns an empty string.

#### 🧊 `void ShowErrorBox(string title, string content)`
Displays a modal dialog that shows an error message.

This API can be called safely before the ready event the app module emits, it is usually used to report errors in early stage of startup.If called before the app readyevent on Linux, the message will be emitted to stderr, and no GUI dialog will appear.

**Parameters:**
- `title` - The title to display in the error box.
- `content` - The text content to display in the error box.

#### 🧊 `Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, CertificateTrustDialogOptions options)`
On macOS, this displays a modal dialog that shows a message and certificate information, and gives the user the option of trusting/importing the certificate. If you provide a browserWindow argument the dialog will be attached to the parent window, making it modal.

**Parameters:**
- `browserWindow` - Parent window for modal behavior
- `options` - Certificate trust dialog options

#### 🧊 `Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions options)`
On macOS, this displays a modal dialog that shows a message and certificate information, and gives the user the option of trusting/importing the certificate. If you provide a browserWindow argument the dialog will be attached to the parent window, making it modal.

**Parameters:**
- `options` - Certificate trust dialog options

## Usage Examples

### File Operations

```csharp
// Open multiple files
var files = await Electron.Dialog.ShowOpenDialogAsync(window, new OpenDialogOptions
{
    Properties = new[] { OpenDialogProperty.OpenFile, OpenDialogProperty.MultiSelections }
});

// Save with custom extension
var path = await Electron.Dialog.ShowSaveDialogAsync(window, new SaveDialogOptions
{
    DefaultPath = "backup.json",
    Filters = new[] { new FileFilter { Name = "JSON", Extensions = new[] { "json" } } }
});
```

### User Confirmation

```csharp
// Confirmation dialog
var result = await Electron.Dialog.ShowMessageBoxAsync(window, new MessageBoxOptions
{
    Type = MessageBoxType.Question,
    Title = "Confirm Delete",
    Message = $"Delete {filename}?",
    Buttons = new[] { "Cancel", "Delete" },
    DefaultId = 0,
    CancelId = 0
});

if (result.Response == 1)
{
    // Delete file
}
```

### Error Handling

```csharp
// Error dialog
Electron.Dialog.ShowErrorBox("Save Failed", "Could not save file. Please check permissions and try again.");

// Warning dialog
await Electron.Dialog.ShowMessageBoxAsync(new MessageBoxOptions
{
    Type = MessageBoxType.Warning,
    Title = "Warning",
    Message = "This operation may take several minutes.",
    Buttons = new[] { "Continue", "Cancel" }
});
```

## Related APIs

- [Electron.WindowManager](WindowManager.md) - Parent windows for modal dialogs
- [Electron.App](App.md) - Application lifecycle events
- [Electron.Shell](Shell.md) - File operations with selected paths

## Additional Resources

- [Electron Dialog Documentation](https://electronjs.org/docs/api/dialog) - Official Electron dialog API


================================================
FILE: docs/API/Dock.md
================================================
# Electron.Dock

Control your app in the macOS dock.

## Overview

The `Electron.Dock` API provides control over your application's appearance and behavior in the macOS dock. This includes bouncing the dock icon, setting badges, managing menus, and controlling visibility.

## Properties

#### 📋 `IReadOnlyCollection<MenuItem> MenuItems`
Gets a read-only collection of all current dock menu items.

## Methods

#### 🧊 `Task<int> BounceAsync(DockBounceType type, CancellationToken cancellationToken = default)`
When `DockBounceType.Critical` is passed, the dock icon will bounce until either the application becomes active or the request is canceled. When `DockBounceType.Informational` is passed, the dock icon will bounce for one second. However, the request remains active until either the application becomes active or the request is canceled.

Note: This method can only be used while the app is not focused; when the app is focused it will return -1.

**Parameters:**
- `type` - Can be critical or informational. The default is informational.
- `cancellationToken` - The cancellation token

**Returns:**

An ID representing the request.

#### 🧊 `void CancelBounce(int id)`
Cancel the bounce of id.

**Parameters:**
- `id` - Id of the request

#### 🧊 `void DownloadFinished(string filePath)`
Bounces the Downloads stack if the filePath is inside the Downloads folder.

**Parameters:**
- `filePath` - Path to the downloaded file

#### 🧊 `Task<string> GetBadgeAsync(CancellationToken cancellationToken = default)`
Gets the string to be displayed in the dock's badging area.

**Returns:**

The badge string of the dock.

#### 🧊 `Task<Menu> GetMenu(CancellationToken cancellationToken = default)`
Gets the application's dock menu.

**Returns:**

The application's dock menu.

#### 🧊 `void Hide()`
Hides the dock icon.

#### 🧊 `Task<bool> IsVisibleAsync(CancellationToken cancellationToken = default)`
Whether the dock icon is visible. The app.dock.show() call is asynchronous so this method might not return true immediately after that call.

**Returns:**

Whether the dock icon is visible.

#### 🧊 `void SetBadge(string text)`
Sets the string to be displayed in the dock's badging area.

**Parameters:**
- `text` - Badge text to display

#### 🧊 `void SetIcon(string image)`
Sets the image associated with this dock icon.

**Parameters:**
- `image` - Icon image path

#### 🧊 `void SetMenu(MenuItem[] menuItems)`
Sets the application's dock menu.

**Parameters:**
- `menuItems` - Array of menu items for the dock menu

#### 🧊 `void Show()`
Shows the dock icon.

## Usage Examples

### Basic Dock Operations

```csharp
// Hide/Show dock icon
Electron.Dock.Hide();
await Task.Delay(2000);
Electron.Dock.Show();

// Check visibility
var isVisible = await Electron.Dock.IsVisibleAsync();
Console.WriteLine($"Dock visible: {isVisible}");
```

### Badge Notifications

```csharp
// Set badge count
Electron.Dock.SetBadge("5");

// Get current badge
var badge = await Electron.Dock.GetBadgeAsync();
Console.WriteLine($"Current badge: {badge}");

// Clear badge
Electron.Dock.SetBadge("");
```

### Dock Icon Animation

```csharp
// Bounce for attention
var bounceId = await Electron.Dock.BounceAsync(DockBounceType.Critical);
Console.WriteLine($"Bounce ID: {bounceId}");

// Cancel bounce after 3 seconds
await Task.Delay(3000);
Electron.Dock.CancelBounce(bounceId);

// Informational bounce
await Electron.Dock.BounceAsync(DockBounceType.Informational);
```

### Dock Menu

```csharp
// Create dock menu
var dockMenuItems = new[]
{
    new MenuItem { Label = "Show Window", Click = () => ShowMainWindow() },
    new MenuItem { Label = "Settings", Click = () => OpenSettings() },
    new MenuItem { Type = MenuType.Separator },
    new MenuItem { Label = "Exit", Click = () => Electron.App.Quit() }
};

// Set dock menu
Electron.Dock.SetMenu(dockMenuItems);

// Get current menu
var currentMenu = await Electron.Dock.GetMenu();
Console.WriteLine($"Menu items: {Electron.Dock.MenuItems.Count}");
```

### Download Notifications

```csharp
// Notify about completed download
var downloadPath = "/Users/username/Downloads/document.pdf";
Electron.Dock.DownloadFinished(downloadPath);
```

### Custom Dock Icon

```csharp
// Set custom dock icon
Electron.Dock.SetIcon("assets/custom-dock-icon.png");

// Set icon based on status
if (isConnected)
{
    Electron.Dock.SetIcon("assets/connected-icon.png");
}
else
{
    Electron.Dock.SetIcon("assets/disconnected-icon.png");
}
```

### Application Integration

```csharp
// Update dock badge based on unread count
UpdateDockBadge(unreadMessageCount);

void UpdateDockBadge(int count)
{
    if (count > 0)
    {
        Electron.Dock.SetBadge(count.ToString());
    }
    else
    {
        Electron.Dock.SetBadge("");
    }
}

// Animate dock when receiving message
private async void OnMessageReceived()
{
    await Electron.Dock.BounceAsync(DockBounceType.Informational);
    Electron.Dock.SetBadge((unreadCount + 1).ToString());
}
```

## Related APIs

- [Electron.App](App.md) - Application lifecycle events
- [Electron.Notification](Notification.md) - Desktop notifications
- [Electron.Menu](Menu.md) - Menu items for dock menu

## Additional Resources

- [Electron Dock Documentation](https://electronjs.org/docs/api/dock) - Official Electron dock API


================================================
FILE: docs/API/GlobalShortcut.md
================================================
# Electron.GlobalShortcut

Register global keyboard shortcuts that work even when the application is not focused.

## Overview

The `Electron.GlobalShortcut` API provides the ability to register global keyboard shortcuts that can be triggered even when the application does not have keyboard focus. This is useful for creating system-wide hotkeys and shortcuts.

## Methods

#### 🧊 `Task<bool> IsRegisteredAsync(string accelerator)`
Check if the accelerator is registered.

**Parameters:**
- `accelerator` - Keyboard shortcut to check

**Returns:**

Whether this application has registered the accelerator.

#### 🧊 `void Register(string accelerator, Action function)`
Registers a global shortcut of accelerator. The callback is called when the registered shortcut is pressed by the user.

**Parameters:**
- `accelerator` - Keyboard shortcut combination
- `function` - Callback function to execute when shortcut is pressed

#### 🧊 `void Unregister(string accelerator)`
Unregisters the global shortcut of accelerator.

**Parameters:**
- `accelerator` - Keyboard shortcut to unregister

#### 🧊 `void UnregisterAll()`
Unregisters all of the global shortcuts.

## Usage Examples

### Basic Global Shortcuts

```csharp
// Register global shortcuts
Electron.GlobalShortcut.Register("CommandOrControl+N", () =>
{
    CreateNewDocument();
});

Electron.GlobalShortcut.Register("CommandOrControl+O", () =>
{
    OpenDocument();
});

Electron.GlobalShortcut.Register("CommandOrControl+S", () =>
{
    SaveDocument();
});
```

### Media Control Shortcuts

```csharp
// Media playback shortcuts
Electron.GlobalShortcut.Register("MediaPlayPause", () =>
{
    TogglePlayback();
});

Electron.GlobalShortcut.Register("MediaNextTrack", () =>
{
    NextTrack();
});

Electron.GlobalShortcut.Register("MediaPreviousTrack", () =>
{
    PreviousTrack();
});
```

### Application Control Shortcuts

```csharp
// Application control shortcuts
Electron.GlobalShortcut.Register("CommandOrControl+Shift+Q", async () =>
{
    var result = await Electron.Dialog.ShowMessageBoxAsync("Quit Application?", "Are you sure you want to quit?");
    if (result.Response == 1) // Yes
    {
        Electron.App.Quit();
    }
});

Electron.GlobalShortcut.Register("CommandOrControl+Shift+H", () =>
{
    ToggleMainWindow();
});
```

### Dynamic Shortcut Management

```csharp
// Register shortcuts based on user preferences
public void RegisterUserShortcuts(Dictionary<string, Action> shortcuts)
{
    foreach (var shortcut in shortcuts)
    {
        Electron.GlobalShortcut.Register(shortcut.Key, shortcut.Value);
    }
}

// Check if shortcut is available
public async Task<bool> IsShortcutAvailable(string accelerator)
{
    return await Electron.GlobalShortcut.IsRegisteredAsync(accelerator);
}

// Unregister specific shortcut
public void UnregisterShortcut(string accelerator)
{
    Electron.GlobalShortcut.Unregister(accelerator);
}
```

### Platform-Specific Shortcuts

```csharp
// macOS specific shortcuts
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    Electron.GlobalShortcut.Register("Command+Comma", () =>
    {
        OpenPreferences();
    });

    Electron.GlobalShortcut.Register("Command+H", () =>
    {
        Electron.App.Hide();
    });
}

// Windows/Linux shortcuts
else
{
    Electron.GlobalShortcut.Register("Ctrl+Shift+P", () =>
    {
        OpenPreferences();
    });

    Electron.GlobalShortcut.Register("Alt+F4", () =>
    {
        Electron.App.Quit();
    });
}
```

### Shortcut Validation

```csharp
// Validate shortcuts before registration
public async Task<bool> TryRegisterShortcut(string accelerator, Action callback)
{
    if (await Electron.GlobalShortcut.IsRegisteredAsync(accelerator))
    {
        Console.WriteLine($"Shortcut {accelerator} is already registered");
        return false;
    }

    try
    {
        Electron.GlobalShortcut.Register(accelerator, callback);
        Console.WriteLine($"Successfully registered shortcut: {accelerator}");
        return true;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Failed to register shortcut {accelerator}: {ex.Message}");
        return false;
    }
}
```

## Related APIs

- [Electron.App](App.md) - Application lifecycle events
- [Electron.Menu](Menu.md) - Menu-based shortcuts
- [Electron.WindowManager](WindowManager.md) - Window focus management

## Additional Resources

- [Electron GlobalShortcut Documentation](https://electronjs.org/docs/api/global-shortcut) - Official Electron global shortcut API


================================================
FILE: docs/API/HostHook.md
================================================
# Electron.HostHook

Execute native JavaScript/TypeScript code from the host process.

## Overview

The `Electron.HostHook` API allows you to execute native JavaScript/TypeScript code from the host process. This enables advanced integration scenarios where you need to run custom JavaScript code or access Node.js APIs directly.

## Methods

#### 🧊 `void Call(string socketEventName, params dynamic[] arguments)`
Execute native JavaScript/TypeScript code synchronously.

**Parameters:**
- `socketEventName` - Socket name registered on the host
- `arguments` - Optional parameters

#### 🧊 `Task<T> CallAsync<T>(string socketEventName, params dynamic[] arguments)`
Execute native JavaScript/TypeScript code asynchronously with type-safe return values.

**Parameters:**
- `T` - Expected return type
- `socketEventName` - Socket name registered on the host
- `arguments` - Optional parameters

**Returns:**

Task<T> with the result from the executed host code.

## Usage Examples

### Basic Host Hook Execution

```csharp
// Execute simple JavaScript function
Electron.HostHook.Call("myFunction", "parameter1", 42);

// Execute with callback-style result
var result = await Electron.HostHook.CallAsync<string>("getUserName", userId);
Console.WriteLine($"User name: {result}");
```

### Advanced Integration

```csharp
// Call custom Electron API
var fileContent = await Electron.HostHook.CallAsync<string>("readFile", "config.json");
Console.WriteLine($"Config: {fileContent}");

// Execute with multiple parameters
var processedData = await Electron.HostHook.CallAsync<object[]>("processData", rawData, options);

// Call with complex objects
var settings = new { theme = "dark", language = "en" };
var updatedSettings = await Electron.HostHook.CallAsync<object>("updateSettings", settings);
```

### Error Handling

```csharp
try
{
    // Execute host function with error handling
    var result = await Electron.HostHook.CallAsync<string>("riskyOperation", inputData);
    Console.WriteLine($"Success: {result}");
}
catch (Exception ex)
{
    // Handle execution errors
    Console.WriteLine($"Host hook error: {ex.Message}");
    Electron.Dialog.ShowErrorBox("Operation Failed", "Could not execute host function.");
}
```

### Type-Safe Operations

```csharp
// Strongly typed return values
var userInfo = await Electron.HostHook.CallAsync<UserInfo>("getUserInfo", userId);
Console.WriteLine($"User: {userInfo.Name}, Email: {userInfo.Email}");

// Array results
var fileList = await Electron.HostHook.CallAsync<string[]>("listFiles", directoryPath);
foreach (var file in fileList)
{
    Console.WriteLine($"File: {file}");
}

// Complex object results
var systemStats = await Electron.HostHook.CallAsync<SystemStatistics>("getSystemStats");
Console.WriteLine($"CPU: {systemStats.CpuUsage}%, Memory: {systemStats.MemoryUsage}%");
```

### Custom ElectronHostHook Setup

```csharp
// In your ElectronHostHook/index.ts
import { app } from 'electron';

export function getAppVersion(): string {
    return app.getVersion();
}

export async function readConfigFile(): Promise<string> {
    const fs = require('fs').promises;
    return await fs.readFile('config.json', 'utf8');
}

export function customNotification(message: string): void {
    // Custom notification logic
    console.log(`Custom notification: ${message}`);
}
```

### Integration with .NET Code

```csharp
// Use host hook in your application logic
public async Task<string> GetApplicationVersion()
{
    return await Electron.HostHook.CallAsync<string>("getAppVersion");
}

public async Task LoadConfiguration()
{
    try
    {
        var config = await Electron.HostHook.CallAsync<ConfigObject>("readConfigFile");
        ApplyConfiguration(config);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Failed to load config: {ex.Message}");
        UseDefaultConfiguration();
    }
}

public void ShowCustomNotification(string message)
{
    Electron.HostHook.Call("customNotification", message);
}
```

## Related APIs

- [Electron.IpcMain](IpcMain.md) - Inter-process communication
- [Electron.App](App.md) - Application lifecycle events
- [Electron.WebContents](WebContents.md) - Web content integration

## Additional Resources

- [Host Hook Documentation](../Core/Advanced-Migration-Topics.md) - Setting up custom host hooks


================================================
FILE: docs/API/IpcMain.md
================================================
# Electron.IpcMain

Communicate asynchronously from the main process to renderer processes.

## Overview

The `Electron.IpcMain` API provides inter-process communication between the main process and renderer processes. It allows you to send messages, listen for events, and handle communication between different parts of your Electron application.

## Methods

#### 🧊 `Task On(string channel, Action<object> listener)`
Listens to channel, when a new message arrives listener would be called with listener(event, args...).

**Parameters:**
- `channel` - Channel name to listen on
- `listener` - Callback method to handle incoming messages

#### 🧊 `void OnSync(string channel, Func<object, object> listener)`
Send a message to the renderer process synchronously via channel. Note: Sending a synchronous message will block the whole renderer process.

**Parameters:**
- `channel` - Channel name to listen on
- `listener` - Synchronous callback method

#### 🧊 `void Once(string channel, Action<object> listener)`
Adds a one time listener method for the event. This listener is invoked only the next time a message is sent to channel, after which it is removed.

**Parameters:**
- `channel` - Channel name to listen on
- `listener` - Callback method to handle the message once

#### 🧊 `void RemoveAllListeners(string channel)`
Removes all listeners of the specified channel.

**Parameters:**
- `channel` - Channel name to remove listeners from

#### 🧊 `void Send(BrowserView browserView, string channel, params object[] data)`
Send a message to the BrowserView renderer process asynchronously via channel.

**Parameters:**
- `browserView` - Target browser view
- `channel` - Channel name to send on
- `data` - Arguments to send

#### 🧊 `void Send(BrowserWindow browserWindow, string channel, params object[] data)`
Send a message to the renderer process asynchronously via channel.

**Parameters:**
- `browserWindow` - Target browser window
- `channel` - Channel name to send on
- `data` - Arguments to send

## Usage Examples

### Basic Message Handling

```csharp
// Listen for messages from renderer
await Electron.IpcMain.On("request-data", (args) =>
{
    Console.WriteLine($"Received request: {args}");
    // Process the request and send response
});

// Send response back to renderer
Electron.IpcMain.Send(mainWindow, "data-response", processedData);
```

### Synchronous Communication

```csharp
// Handle synchronous requests
Electron.IpcMain.OnSync("get-user-info", (request) =>
{
    var userId = request.ToString();
    var userInfo = GetUserInfo(userId);
    return userInfo;
});
```

### One-time Event Handling

```csharp
// Handle initialization request once
Electron.IpcMain.Once("app-initialized", (args) =>
{
    Console.WriteLine("App initialized, setting up...");
    InitializeApplication();
});
```

### Complex Data Exchange

```csharp
// Send complex data to renderer
var appData = new
{
    Version = "1.0.0",
    Features = new[] { "feature1", "feature2" },
    Settings = new { Theme = "dark", Language = "en" }
};

Electron.IpcMain.Send(mainWindow, "app-config", appData);

// Listen for settings updates
await Electron.IpcMain.On("update-settings", (settings) =>
{
    var config = JsonConvert.DeserializeObject<AppSettings>(settings.ToString());
    ApplySettings(config);
});
```

### Multi-Window Communication

```csharp
// Send message to specific window
var settingsWindow = await Electron.WindowManager.CreateWindowAsync();
Electron.IpcMain.Send(settingsWindow, "show-settings", currentSettings);

// Broadcast to all windows
foreach (var window in Electron.WindowManager.BrowserWindows)
{
    Electron.IpcMain.Send(window, "notification", message);
}
```

### Error Handling

```csharp
// Handle IPC errors gracefully
await Electron.IpcMain.On("risky-operation", async (args) =>
{
    try
    {
        var result = await PerformRiskyOperation(args);
        Electron.IpcMain.Send(mainWindow, "operation-success", result);
    }
    catch (Exception ex)
    {
        Electron.IpcMain.Send(mainWindow, "operation-error", ex.Message);
    }
});
```

### Integration with Host Hooks

```csharp
// Use with custom host functionality
await Electron.IpcMain.On("execute-host-function", async (args) =>
{
    var functionName = args.ToString();
    var result = await Electron.HostHook.CallAsync<string>(functionName);

    Electron.IpcMain.Send(mainWindow, "function-result", result);
});
```

## Related APIs

- [Electron.HostHook](HostHook.md) - Execute custom JavaScript functions
- [Electron.WindowManager](WindowManager.md) - Target specific windows for communication
- [Electron.WebContents](WebContents.md) - Send messages to web content

## Additional Resources

- [Electron IPC Documentation](https://electronjs.org/docs/api/ipc-main) - Official Electron IPC API


================================================
FILE: docs/API/Menu.md
================================================
# Electron.Menu

Create application menus, context menus, and menu items with full keyboard shortcut support.

## Overview

The `Electron.Menu` API provides comprehensive control over application menus and context menus. It supports native platform menus with custom menu items, submenus, keyboard shortcuts, and role-based menu items.

## Properties

#### 📋 `IReadOnlyDictionary<int, ReadOnlyCollection<MenuItem>> ContextMenuItems`
Gets a read-only dictionary of all current context menu items, keyed by browser window ID.

#### 📋 `IReadOnlyCollection<MenuItem> MenuItems`
Gets a read-only collection of all current application menu items.

## Methods

#### 🧊 `void ContextMenuPopup(BrowserWindow browserWindow)`
Shows the context menu for the specified browser window.

**Parameters:**
- `browserWindow` - The browser window to show the context menu for

#### 🧊 `void SetApplicationMenu(MenuItem[] menuItems)`
Sets the application menu for the entire application.

**Parameters:**
- `menuItems` - Array of MenuItem objects defining the application menu

#### 🧊 `void SetContextMenu(BrowserWindow browserWindow, MenuItem[] menuItems)`
Sets a context menu for a specific browser window.

**Parameters:**
- `browserWindow` - The browser window to attach the context menu to
- `menuItems` - Array of MenuItem objects defining the context menu

## Usage Examples

### Application Menu

```csharp
// Create application menu
var menuItems = new[]
{
    new MenuItem
    {
        Label = "File",
        Submenu = new[]
        {
            new MenuItem { Label = "New", Click = () => CreateNewDocument() },
            new MenuItem { Label = "Open", Click = () => OpenDocument() },
            new MenuItem { Type = MenuType.Separator },
            new MenuItem { Label = "Exit", Click = () => Electron.App.Quit() }
        }
    },
    new MenuItem
    {
        Label = "Edit",
        Submenu = new[]
        {
            new MenuItem { Role = MenuRole.Undo },
            new MenuItem { Role = MenuRole.Redo },
            new MenuItem { Type = MenuType.Separator },
            new MenuItem { Role = MenuRole.Cut },
            new MenuItem { Role = MenuRole.Copy },
            new MenuItem { Role = MenuRole.Paste }
        }
    },
    new MenuItem
    {
        Label = "View",
        Submenu = new[]
        {
            new MenuItem { Role = MenuRole.Reload },
            new MenuItem { Role = MenuRole.ForceReload },
            new MenuItem { Role = MenuRole.ToggleDevTools },
            new MenuItem { Type = MenuType.Separator },
            new MenuItem { Role = MenuRole.ResetZoom },
            new MenuItem { Role = MenuRole.ZoomIn },
            new MenuItem { Role = MenuRole.ZoomOut }
        }
    },
    new MenuItem
    {
        Label = "Window",
        Submenu = new[]
        {
            new MenuItem { Role = MenuRole.Minimize },
            new MenuItem { Role = MenuRole.Close }
        }
    }
};

// Set application menu
Electron.Menu.SetApplicationMenu(menuItems);
```

### Context Menu

```csharp
// Create context menu for specific window
var contextMenuItems = new[]
{
    new MenuItem { Label = "Copy", Click = () => CopySelectedText() },
    new MenuItem { Label = "Paste", Click = () => PasteText() },
    new MenuItem { Type = MenuType.Separator },
    new MenuItem { Label = "Inspect Element", Click = () => InspectElement() }
};

// Set context menu for window
Electron.Menu.SetContextMenu(mainWindow, contextMenuItems);

// Show context menu programmatically
Electron.Menu.ContextMenuPopup(mainWindow);
```

### Menu with Keyboard Shortcuts

```csharp
// Create menu with keyboard shortcuts
var menuItems = new[]
{
    new MenuItem
    {
        Label = "File",
        Submenu = new[]
        {
            new MenuItem
            {
                Label = "New",
                Accelerator = "CmdOrCtrl+N",
                Click = () => CreateNewDocument()
            },
            new MenuItem
            {
                Label = "Open",
                Accelerator = "CmdOrCtrl+O",
                Click = () => OpenDocument()
            },
            new MenuItem
            {
                Label = "Save",
                Accelerator = "CmdOrCtrl+S",
                Click = () => SaveDocument()
            }
        }
    }
};

Electron.Menu.SetApplicationMenu(menuItems);
```

### Dynamic Menu Updates

```csharp
// Update menu items dynamically
var fileMenu = Electron.Menu.MenuItems.FirstOrDefault(m => m.Label == "File");
if (fileMenu?.Submenu != null)
{
    var saveItem = fileMenu.Submenu.FirstOrDefault(m => m.Label == "Save");
    if (saveItem != null)
    {
        saveItem.Enabled = HasUnsavedChanges;
    }
}
```

### Platform-Specific Menus

```csharp
// macOS specific menu items
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    var macMenuItems = new[]
    {
        new MenuItem
        {
            Label = "MyApp",
            Submenu = new[]
            {
                new MenuItem { Role = MenuRole.About },
                new MenuItem { Type = MenuType.Separator },
                new MenuItem { Role = MenuRole.Services },
                new MenuItem { Type = MenuType.Separator },
                new MenuItem { Role = MenuRole.Hide },
                new MenuItem { Role = MenuRole.HideOthers },
                new MenuItem { Role = MenuRole.Unhide },
                new MenuItem { Type = MenuType.Separator },
                new MenuItem { Role = MenuRole.Quit }
            }
        }
    };

    // Insert before File menu
    var allMenus = new List<MenuItem>(macMenuItems);
    allMenus.AddRange(menuItems);
    Electron.Menu.SetApplicationMenu(allMenus.ToArray());
}
```

## Related APIs

- [Electron.WindowManager](WindowManager.md) - Windows for context menus
- [Electron.App](App.md) - Application lifecycle events
- [Electron.GlobalShortcut](GlobalShortcut.md) - Global keyboard shortcuts

## Additional Resources

- [Electron Menu Documentation](https://electronjs.org/docs/api/menu) - Official Electron menu API


================================================
FILE: docs/API/NativeTheme.md
================================================
# Electron.NativeTheme

Detect and respond to changes in Chromium's native color theme.

## Overview

The `Electron.NativeTheme` API provides access to Chromium's native color theme information and allows you to detect and respond to changes in the system's dark/light mode settings. This enables your application to automatically adapt to the user's theme preferences.

## Methods

#### 🧊 `Task<ThemeSourceMode> GetThemeSourceAsync()`
Get the current theme source setting.

**Returns:**

A `ThemeSourceMode` property that can be `ThemeSourceMode.System`, `ThemeSourceMode.Light` or `ThemeSourceMode.Dark`.

#### 🧊 `void SetThemeSource(ThemeSourceMode themeSourceMode)`
Setting this property to `ThemeSourceMode.System` will remove the override and everything will be reset to the OS default. By default 'ThemeSource' is `ThemeSourceMode.System`.

**Parameters:**
- `themeSourceMode` - The new ThemeSource

#### 🧊 `Task<bool> ShouldUseDarkColorsAsync()`
Check if the system is currently using dark colors.

**Returns:**

A bool for if the OS / Chromium currently has a dark mode enabled or is being instructed to show a dark-style UI.

#### 🧊 `Task<bool> ShouldUseHighContrastColorsAsync()`
Check if the system is currently using high contrast colors.

**Returns:**

A bool for if the OS / Chromium currently has high-contrast mode enabled or is being instructed to show a high-contrast UI.

#### 🧊 `Task<bool> ShouldUseInvertedColorSchemeAsync()`
Check if the system is currently using an inverted color scheme.

**Returns:**

A bool for if the OS / Chromium currently has an inverted color scheme or is being instructed to use an inverted color scheme.

## Events

#### ⚡ `Updated`
Emitted when something in the underlying NativeTheme has changed. This normally means that either the value of ShouldUseDarkColorsAsync, ShouldUseHighContrastColorsAsync or ShouldUseInvertedColorSchemeAsync has changed.

## Usage Examples

### Basic Theme Detection

```csharp
// Check current theme
var isDarkMode = await Electron.NativeTheme.ShouldUseDarkColorsAsync();
Console.WriteLine($"Dark mode: {isDarkMode}");

// Get current theme source
var themeSource = await Electron.NativeTheme.GetThemeSourceAsync();
Console.WriteLine($"Theme source: {themeSource}");
```

### Theme Change Monitoring

```csharp
// Monitor theme changes
Electron.NativeTheme.Updated += () =>
{
    Console.WriteLine("Theme updated");
    UpdateApplicationTheme();
};

async void UpdateApplicationTheme()
{
    var isDarkMode = await Electron.NativeTheme.ShouldUseDarkColorsAsync();
    var isHighContrast = await Electron.NativeTheme.ShouldUseHighContrastColorsAsync();

    // Update application appearance
    ApplyTheme(isDarkMode, isHighContrast);
}
```

### Manual Theme Control

```csharp
// Force dark theme
Electron.NativeTheme.SetThemeSource(ThemeSourceMode.Dark);

// Force light theme
Electron.NativeTheme.SetThemeSource(ThemeSourceMode.Light);

// Follow system theme
Electron.NativeTheme.SetThemeSource(ThemeSourceMode.System);
```

### Application Theme Integration

```csharp
public async Task InitializeThemeSupport()
{
    // Set initial theme based on system preference
    var isDarkMode = await Electron.NativeTheme.ShouldUseDarkColorsAsync();
    ApplyTheme(isDarkMode);

    // Monitor theme changes
    Electron.NativeTheme.Updated += async () =>
    {
        var darkMode = await Electron.NativeTheme.ShouldUseDarkColorsAsync();
        ApplyTheme(darkMode);
    };
}

private void ApplyTheme(bool isDarkMode)
{
    if (isDarkMode)
    {
        // Apply dark theme
        SetDarkThemeColors();
        UpdateWindowTheme("dark");
    }
    else
    {
        // Apply light theme
        SetLightThemeColors();
        UpdateWindowTheme("light");
    }
}
```

### Advanced Theme Management

```csharp
// Check all theme properties
var isDarkMode = await Electron.NativeTheme.ShouldUseDarkColorsAsync();
var isHighContrast = await Electron.NativeTheme.ShouldUseHighContrastColorsAsync();
var isInverted = await Electron.NativeTheme.ShouldUseInvertedColorSchemeAsync();

Console.WriteLine($"Dark mode: {isDarkMode}");
Console.WriteLine($"High contrast: {isHighContrast}");
Console.WriteLine($"Inverted: {isInverted}");

// Apply appropriate theme
if (isHighContrast)
{
    ApplyHighContrastTheme();
}
else if (isDarkMode)
{
    ApplyDarkTheme();
}
else
{
    ApplyLightTheme();
}
```

### Theme-Aware Window Creation

```csharp
// Create window with theme-appropriate settings
var isDarkMode = await Electron.NativeTheme.ShouldUseDarkColorsAsync();

var windowOptions = new BrowserWindowOptions
{
    Width = 1200,
    Height = 800,
    Title = "My Application",
    BackgroundColor = isDarkMode ? "#1a1a1a" : "#ffffff",
    WebPreferences = new WebPreferences
    {
        // Additional web preferences based on theme
    }
};

var window = await Electron.WindowManager.CreateWindowAsync(windowOptions);
```

## Related APIs

- [Electron.WindowManager](WindowManager.md) - Apply theme to windows
- [Electron.Screen](Screen.md) - Screen-related theme considerations
- [Electron.App](App.md) - Application-level theme events

## Additional Resources

- [Electron NativeTheme Documentation](https://electronjs.org/docs/api/native-theme) - Official Electron native theme API
- [Theme Support](../Core/What's-New.md) - Understanding theme functionality
- [User Experience](../Using/Configuration.md) - Design theme-aware applications


================================================
FILE: docs/API/Notification.md
================================================
# Electron.Notification

Show native desktop notifications with custom content and actions.

## Overview

The `Electron.Notification` API provides the ability to show native desktop notifications with custom titles, bodies, icons, and actions. Notifications work across Windows, macOS, and Linux with platform-specific behavior.

## Methods

#### 🧊 `Task<bool> IsSupportedAsync()`
Check if desktop notifications are supported on the current platform.

**Returns:**

Whether or not desktop notifications are supported on the current system.

#### 🧊 `void Show(NotificationOptions notificationOptions)`
Create OS desktop notifications with the specified options.

**Parameters:**
- `notificationOptions` - Notification configuration options

## Usage Examples

### Basic Notification

```csharp
// Simple notification
Electron.Notification.Show(new NotificationOptions
{
    Title = "My Application",
    Body = "This is a notification message",
    Icon = "assets/notification-icon.png"
});
```

### Notification with Actions

```csharp
// Notification with reply action
Electron.Notification.Show(new NotificationOptions
{
    Title = "New Message",
    Body = "You have a new message from John",
    Icon = "assets/message-icon.png",
    Actions = new[]
    {
        new NotificationAction { Text = "Reply", Type = NotificationActionType.Button },
        new NotificationAction { Text = "View", Type = NotificationActionType.Button }
    },
    OnClick = () => OpenMessageWindow(),
    OnAction = (action) =>
    {
        if (action == "Reply")
        {
            ShowReplyDialog();
        }
        else if (action == "View")
        {
            OpenMessageWindow();
        }
    }
});
```

### Rich Notifications

```csharp
// Rich notification with all options
Electron.Notification.Show(new NotificationOptions
{
    Title = "Download Complete",
    Subtitle = "Your file has finished downloading",
    Body = "document.pdf has been downloaded to your Downloads folder.",
    Icon = "assets/download-icon.png",
    ImageUrl = "file://" + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets/preview.png"),
    Sound = NotificationSound.Default,
    Urgency = NotificationUrgency.Normal,
    Category = "transfer.complete",
    Tag = "download-123",
    Actions = new[]
    {
        new NotificationAction { Text = "Open", Type = NotificationActionType.Button },
        new NotificationAction { Text = "Show in Folder", Type = NotificationActionType.Button }
    },
    OnShow = () => Console.WriteLine("Notification shown"),
    OnClick = () => OpenDownloadedFile(),
    OnClose = () => Console.WriteLine("Notification closed"),
    OnAction = (action) =>
    {
        if (action == "Open")
        {
            OpenDownloadedFile();
        }
        else if (action == "Show in Folder")
        {
            ShowInFolder();
        }
    }
});
```

### Platform-Specific Notifications

```csharp
// Windows toast notification
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
    Electron.Notification.Show(new NotificationOptions
    {
        Title = "Background Task",
        Body = "Your backup is complete",
        Icon = "assets/app-icon.ico",
        Tag = "backup-complete",
        RequireInteraction = true
    });
}

// macOS notification with sound
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    Electron.Notification.Show(new NotificationOptions
    {
        Title = "Alert",
        Body = "Something needs your attention",
        Sound = NotificationSound.Default,
        Actions = new[]
        {
            new NotificationAction { Text = "View", Type = NotificationActionType.Button }
        }
    });
}
```

### Notification Management

```csharp
// Check notification support
var isSupported = await Electron.Notification.IsSupportedAsync();
Console.WriteLine($"Notifications supported: {isSupported}");

// Create notification with events
var notification = new NotificationOptions
{
    Title = "Task Complete",
    Body = "Your long-running task has finished",
    OnShow = () => Console.WriteLine("Notification displayed"),
    OnClick = () => OpenTaskResults(),
    OnClose = () => Console.WriteLine("Notification dismissed")
};

Electron.Notification.Show(notification);
```

## Related APIs

- [Electron.App](App.md) - Application lifecycle events
- [Electron.Tray](Tray.md) - System tray integration with notifications
- [Electron.Screen](Screen.md) - Position notifications based on screen layout

## Additional Resources

- [Electron Notification Documentation](https://electronjs.org/docs/api/notification) - Official Electron notification API


================================================
FILE: docs/API/Overview.md
================================================
# API Reference Overview

The ElectronNET.Core API provides comprehensive access to Electron's native desktop functionality through a .NET interface. This section documents all the available API classes and their methods, events, and usage patterns.

## API Classes

### Core Application Management
- **[Electron.App](App.md)** - Control your application's event lifecycle, manage app metadata, and handle system-level operations
- **[Electron.WindowManager](WindowManager.md)** - Create and manage browser windows, control window behavior and appearance
- **[Electron.Menu](Menu.md)** - Create application menus, context menus, and menu items with full keyboard shortcut support

### User Interface & Interaction
- **[Electron.Dialog](Dialog.md)** - Display native system dialogs for opening/saving files, showing messages and alerts
- **[Electron.Notification](Notification.md)** - Show native desktop notifications with custom content and actions
- **[Electron.Tray](Tray.md)** - Create system tray icons with context menus and tooltip support
- **[Electron.Dock](Dock.md)** - macOS dock integration for bounce effects and badge counts

### System Integration
- **[Electron.Shell](Shell.md)** - Desktop integration for opening files, URLs, and accessing system paths
- **[Electron.Clipboard](Clipboard.md)** - Read from and write to the system clipboard with multiple data formats
- **[Electron.Screen](Screen.md)** - Access display and screen information for responsive layouts
- **[Electron.NativeTheme](NativeTheme.md)** - Detect and respond to system theme changes (light/dark mode)

### Communication & Automation
- **[Electron.IpcMain](IpcMain.md)** - Inter-process communication between main process and renderer processes
- **[Electron.HostHook](HostHook.md)** - Custom host hook functionality for advanced integration scenarios
- **[Electron.GlobalShortcut](GlobalShortcut.md)** - Register global keyboard shortcuts that work even when app is not focused
- **[Electron.AutoUpdater](AutoUpdater.md)** - Handle application updates and installation processes

### System Monitoring
- **[Electron.PowerMonitor](PowerMonitor.md)** - Monitor system power events like sleep, wake, and battery status


## API Relationships

### Window and Dialog Integration
- Use `BrowserWindow` instances as parent windows for dialogs
- Dialogs automatically become modal when parent window is provided
- Window events coordinate with application lifecycle events

### IPC Communication
- `IpcMain` handles communication from renderer processes
- Use with `Electron.WindowManager` for window-specific messaging
- Coordinate with `Electron.App` events for application-wide communication

### System Integration
- `Shell` operations work with file paths from `Dialog` operations
- `Screen` information helps create properly sized windows
- `Notification` and `Tray` provide complementary user interaction methods

## 🚀 Next Steps

- **[Electron.App](App.md)** - Start with application lifecycle management
- **[Electron.WindowManager](WindowManager.md)** - Learn window creation and management
- **[Electron.Dialog](Dialog.md)** - Add file operations and user interactions
- **[Electron.Menu](Menu.md)** - Implement application menus and shortcuts

## 📚 Additional Resources

- **[Electron Documentation](https://electronjs.org/docs)** - Official Electron API reference
- **[Getting Started](../GettingStarted/ASP.Net.md)** - Development setup guides
- **[Migration Guide](../Core/Migration-Guide.md)** - Moving from previous versions


================================================
FILE: docs/API/PowerMonitor.md
================================================
# Electron.PowerMonitor

Monitor system power events like sleep, wake, and battery status.

## Overview

The `Electron.PowerMonitor` API provides access to system power events and state changes. This includes monitoring when the system is going to sleep, waking up, or changing power sources.

## Events

#### ⚡ `OnAC`
Emitted when the system changes to AC power.

#### ⚡ `OnBattery`
Emitted when system changes to battery power.

#### ⚡ `OnLockScreen`
Emitted when the system is about to lock the screen.

#### ⚡ `OnResume`
Emitted when system is resuming.

#### ⚡ `OnShutdown`
Emitted when the system is about to reboot or shut down.

#### ⚡ `OnSuspend`
Emitted when the system is suspending.

#### ⚡ `OnUnLockScreen`
Emitted when the system is about to unlock the screen.

## Usage Examples

### Basic Power Event Monitoring

```csharp
// Monitor system sleep/wake
Electron.PowerMonitor.OnSuspend += () =>
{
    Console.WriteLine("System going to sleep");
    // Save application state
    SaveApplicationState();
};

Electron.PowerMonitor.OnResume += () =>
{
    Console.WriteLine("System waking up");
    // Restore application state
    RestoreApplicationState();
};
```

### Screen Lock/Unlock Monitoring

```csharp
// Handle screen lock events
Electron.PowerMonitor.OnLockScreen += () =>
{
    Console.WriteLine("Screen locking");
    // Pause real-time operations
    PauseRealTimeOperations();
};

Electron.PowerMonitor.OnUnLockScreen += () =>
{
    Console.WriteLine("Screen unlocking");
    // Resume real-time operations
    ResumeRealTimeOperations();
};
```

### Power Source Changes

```csharp
// Monitor power source changes
Electron.PowerMonitor.OnAC += () =>
{
    Console.WriteLine("Switched to AC power");
    // Adjust power-intensive operations
    EnablePowerIntensiveFeatures();
};

Electron.PowerMonitor.OnBattery += () =>
{
    Console.WriteLine("Switched to battery power");
    // Reduce power consumption
    EnablePowerSavingMode();
};
```

### System Shutdown Handling

```csharp
// Handle system shutdown
Electron.PowerMonitor.OnShutdown += () =>
{
    Console.WriteLine("System shutting down");
    // Save critical data and exit gracefully
    SaveAndExit();
};
```

### Application State Management

```csharp
private bool isSuspended = false;

public void InitializePowerMonitoring()
{
    // Track suspension state
    Electron.PowerMonitor.OnSuspend += () =>
    {
        isSuspended = true;
        OnSystemSleep();
    };

    Electron.PowerMonitor.OnResume += () =>
    {
        isSuspended = false;
        OnSystemWake();
    };

    // Handle screen lock for security
    Electron.PowerMonitor.OnLockScreen += () =>
    {
        OnScreenLocked();
    };
}

private void OnSystemSleep()
{
    // Pause network operations
    PauseNetworkOperations();

    // Save unsaved work
    AutoSaveDocuments();

    // Reduce resource usage
    MinimizeResourceUsage();
}

private void OnSystemWake()
{
    // Resume network operations
    ResumeNetworkOperations();

    // Check for updates
    CheckForUpdates();

    // Restore full functionality
    RestoreFullFunctionality();
}

private void OnScreenLocked()
{
    // Hide sensitive information
    HideSensitiveData();

    // Pause real-time features
    PauseRealTimeFeatures();
}
```

### Battery Status Monitoring

```csharp
// Monitor battery status changes
Electron.PowerMonitor.OnAC += () =>
{
    Console.WriteLine("Plugged in - full performance mode");
    EnableFullPerformanceMode();
};

Electron.PowerMonitor.OnBattery += () =>
{
    Console.WriteLine("On battery - power saving mode");
    EnablePowerSavingMode();
};
```

## Related APIs

- [Electron.App](App.md) - Application lifecycle events
- [Electron.Notification](Notification.md) - Notify users about power events

## Additional Resources

- [Electron PowerMonitor Documentation](https://electronjs.org/docs/api/power-monitor) - Official Electron power monitor API


================================================
FILE: docs/API/Screen.md
================================================
# Electron.Screen

Access display and screen information for responsive layouts.

## Overview

The `Electron.Screen` API provides access to screen and display information, including screen size, display metrics, cursor position, and multi-monitor configurations. This is essential for creating responsive applications that adapt to different screen configurations.

## Methods

#### 🧊 `Task<Display[]> GetAllDisplaysAsync()`
Gets information about all available displays.

**Returns:**

An array of displays that are currently available.

#### 🧊 `Task<Point> GetCursorScreenPointAsync()`
Gets the current position of the mouse cursor on screen.

**Returns:**

The current absolute position of the mouse pointer.

#### 🧊 `Task<Display> GetDisplayMatchingAsync(Rectangle rectangle)`
Gets the display that most closely intersects the provided bounds.

**Parameters:**
- `rectangle` - The rectangle to find the matching display for

**Returns:**

The display that most closely intersects the provided bounds.

#### 🧊 `Task<Display> GetDisplayNearestPointAsync(Point point)`
Gets the display that is closest to the specified point.

**Parameters:**
- `point` - The point to find the nearest display for

**Returns:**

The display nearest the specified point.

#### 🧊 `Task<int> GetMenuBarHeightAsync()`
macOS: The height of the menu bar in pixels.

**Returns:**

The height of the menu bar in pixels.

#### 🧊 `Task<Display> GetPrimaryDisplayAsync()`
Gets information about the primary display (main screen).

**Returns:**

The primary display.

## Events

#### ⚡ `OnDisplayAdded`
Emitted when a new Display has been added.

#### ⚡ `OnDisplayMetricsChanged`
Emitted when one or more metrics change in a display. The changedMetrics is an array of strings that describe the changes. Possible changes are bounds, workArea, scaleFactor and rotation.

#### ⚡ `OnDisplayRemoved`
Emitted when oldDisplay has been removed.

## Usage Examples

### Display Information

```csharp
// Get primary display
var primaryDisplay = await Electron.Screen.GetPrimaryDisplayAsync();
Console.WriteLine($"Primary display: {primaryDisplay.Size.Width}x{primaryDisplay.Size.Height}");

// Get all displays
var displays = await Electron.Screen.GetAllDisplaysAsync();
Console.WriteLine($"Available displays: {displays.Length}");

// Get display near cursor
var cursorPoint = await Electron.Screen.GetCursorScreenPointAsync();
var nearestDisplay = await Electron.Screen.GetDisplayNearestPointAsync(cursorPoint);
Console.WriteLine($"Nearest display scale factor: {nearestDisplay.ScaleFactor}");
```

### Multi-Monitor Setup

```csharp
// Get all displays for multi-monitor setup
var displays = await Electron.Screen.GetAllDisplaysAsync();

foreach (var display in displays)
{
    Console.WriteLine($"Display {display.Id}:");
    Console.WriteLine($"  Size: {display.Size.Width}x{display.Size.Height}");
    Console.WriteLine($"  Position: {display.Bounds.X},{display.Bounds.Y}");
    Console.WriteLine($"  Scale Factor: {display.ScaleFactor}");
    Console.WriteLine($"  Work Area: {display.WorkArea.Width}x{display.WorkArea.Height}");
}
```

### Responsive Window Placement

```csharp
// Create window on appropriate display
var displays = await Electron.Screen.GetAllDisplaysAsync();
var targetDisplay = displays.FirstOrDefault(d => d.Bounds.X > 0) ?? displays.First();

var windowOptions = new BrowserWindowOptions
{
    Width = Math.Min(1200, targetDisplay.WorkArea.Width),
    Height = Math.Min(800, targetDisplay.WorkArea.Height),
    X = targetDisplay.WorkArea.X + (targetDisplay.WorkArea.Width - 1200) / 2,
    Y = targetDisplay.WorkArea.Y + (targetDisplay.WorkArea.Height - 800) / 2
};

var window = await Electron.WindowManager.CreateWindowAsync(windowOptions);
```

### Display Change Monitoring

```csharp
// Monitor display changes
Electron.Screen.OnDisplayAdded += (display) =>
{
    Console.WriteLine($"Display added: {display.Id}");
    UpdateWindowPositions();
};

Electron.Screen.OnDisplayRemoved += (display) =>
{
    Console.WriteLine($"Display removed: {display.Id}");
    UpdateWindowPositions();
};

Electron.Screen.OnDisplayMetricsChanged += (display, metrics) =>
{
    Console.WriteLine($"Display {display.Id} metrics changed: {string.Join(", ", metrics)}");
    UpdateWindowPositions();
};

void UpdateWindowPositions()
{
    // Recalculate window positions based on current displays
}
```

### macOS Menu Bar Height

```csharp
// Account for menu bar height on macOS
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    var menuBarHeight = await Electron.Screen.GetMenuBarHeightAsync();

    var windowOptions = new BrowserWindowOptions
    {
        Y = menuBarHeight, // Position below menu bar
        TitleBarStyle = TitleBarStyle.Hidden // Hide title bar for custom look
    };
}
```

## Related APIs

- [Electron.WindowManager](WindowManager.md) - Position windows based on screen information
- [Electron.App](App.md) - Handle display-related application events

## Additional Resources

- [Electron Screen Documentation](https://electronjs.org/docs/api/screen) - Official Electron screen API


================================================
FILE: docs/API/Shell.md
================================================
# Electron.Shell

Desktop integration for opening files, URLs, and accessing system paths.

## Overview

The `Electron.Shell` API provides system integration functionality for opening files and URLs with their default applications, managing trash/recycle bin, and creating/reading shortcut links.

## Methods

#### 🧊 `void Beep()`
Play the beep sound.

#### 🧊 `Task<string> OpenExternalAsync(string url)`
Open the given external protocol URL in the desktop's default manner (e.g., mailto: URLs in the user's default mail agent).

**Parameters:**
- `url` - Max 2081 characters on windows

**Returns:**

The error message corresponding to the failure if a failure occurred, otherwise empty string.

#### 🧊 `Task<string> OpenExternalAsync(string url, OpenExternalOptions options)`
Open the given external protocol URL with additional options.

**Parameters:**
- `url` - Max 2081 characters on windows
- `options` - Controls the behavior of OpenExternal

**Returns:**

The error message corresponding to the failure if a failure occurred, otherwise empty string.

#### 🧊 `Task<string> OpenPathAsync(string path)`
Open the given file in the desktop's default manner.

**Parameters:**
- `path` - The path to the directory or file

**Returns:**

The error message corresponding to the failure if a failure occurred, otherwise empty string.

#### 🧊 `Task<ShortcutDetails> ReadShortcutLinkAsync(string shortcutPath)`
Resolves the shortcut link at shortcutPath. An exception will be thrown when any error happens.

**Parameters:**
- `shortcutPath` - The path to the shortcut

**Returns:**

ShortcutDetails of the shortcut.

#### 🧊 `Task ShowItemInFolderAsync(string fullPath)`
Show the given file in a file manager. If possible, select the file.

**Parameters:**
- `fullPath` - The full path to the directory or file

#### 🧊 `Task<bool> TrashItemAsync(string fullPath)`
Move the given file to trash and returns a bool status for the operation.

**Parameters:**
- `fullPath` - The full path to the directory or file

**Returns:**

Whether the item was successfully moved to the trash.

#### 🧊 `Task<bool> WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperation operation, ShortcutDetails options)`
Creates or updates a shortcut link at shortcutPath.

**Parameters:**
- `shortcutPath` - The path to the shortcut
- `operation` - Default is ShortcutLinkOperation.Create
- `options` - Structure of a shortcut

**Returns:**

Whether the shortcut was created successfully.

## Usage Examples

### File Operations

```csharp
// Open file with default application
var error = await Electron.Shell.OpenPathAsync(filePath);
if (string.IsNullOrEmpty(error))
{
    Console.WriteLine("File opened successfully");
}
else
{
    Console.WriteLine($"Failed to open file: {error}");
}

// Show file in file manager
await Electron.Shell.ShowItemInFolderAsync(filePath);

// Move file to trash
var trashed = await Electron.Shell.TrashItemAsync(filePath);
Console.WriteLine($"File trashed: {trashed}");
```

### URL Operations

```csharp
// Open URL in default browser
var error = await Electron.Shell.OpenExternalAsync("https://electron.net");
if (!string.IsNullOrEmpty(error))
{
    Console.WriteLine($"Failed to open URL: {error}");
}

// Open email client
await Electron.Shell.OpenExternalAsync("mailto:user@example.com");

// Open with options
var error = await Electron.Shell.OpenExternalAsync("https://example.com", new OpenExternalOptions
{
    Activate = true
});
```

### System Integration

```csharp
// Play system beep
Electron.Shell.Beep();

// Create desktop shortcut
var success = await Electron.Shell.WriteShortcutLinkAsync(
    @"C:\Users\Public\Desktop\MyApp.lnk",
    ShortcutLinkOperation.Create,
    new ShortcutDetails
    {
        Target = "C:\\Program Files\\MyApp\\MyApp.exe",
        Description = "My Application",
        WorkingDirectory = "C:\\Program Files\\MyApp"
    }
);

// Read shortcut information
var details = await Electron.Shell.ReadShortcutLinkAsync(@"C:\Users\Public\Desktop\MyApp.lnk");
Console.WriteLine($"Target: {details.Target}");
```

### Integration with Dialog API

```csharp
// Use with file dialog results
var files = await Electron.Dialog.ShowOpenDialogAsync(window, options);
if (files.Length > 0)
{
    var selectedFile = files[0];

    // Open the selected file
    await Electron.Shell.OpenPathAsync(selectedFile);

    // Show in file manager
    await Electron.Shell.ShowItemInFolderAsync(selectedFile);
}
```

## Related APIs

- [Electron.Dialog](Dialog.md) - Select files to open with Shell
- [Electron.App](App.md) - Application lifecycle events
- [Electron.Clipboard](Clipboard.md) - Copy file paths for Shell operations

## Additional Resources

- [Electron Shell Documentation](https://electronjs.org/docs/api/shell) - Official Electron shell API


================================================
FILE: docs/API/Tray.md
================================================
# Electron.Tray

Add icons and context menus to the system's notification area.

## Overview

The `Electron.Tray` API provides the ability to add icons and context menus to the system's notification area (system tray). This allows applications to provide quick access to common functions and maintain a presence in the system even when windows are closed.

## Properties

#### 📋 `IReadOnlyCollection<MenuItem> MenuItems`
Gets a read-only collection of all current tray menu items.

## Methods

#### 🧊 `void Destroy()`
Destroys the tray icon immediately.

#### 🧊 `void DisplayBalloon(DisplayBalloonOptions options)`
Windows: Displays a tray balloon notification.

**Parameters:**
- `options` - Balloon notification options

#### 🧊 `Task<bool> IsDestroyedAsync()`
Check if the tray icon has been destroyed.

**Returns:**

Whether the tray icon is destroyed.

#### 🧊 `void SetImage(string image)`
Sets the image associated with this tray icon.

**Parameters:**
- `image` - New image for the tray icon

#### 🧊 `void SetPressedImage(string image)`
Sets the image associated with this tray icon when pressed on macOS.

**Parameters:**
- `image` - Image for pressed state

#### 🧊 `void SetTitle(string title)`
macOS: Sets the title displayed aside of the tray icon in the status bar.

**Parameters:**
- `title` - Title text

#### 🧊 `void SetToolTip(string toolTip)`
Sets the hover text for this tray icon.

**Parameters:**
- `toolTip` - Tooltip text

#### 🧊 `void Show(string image)`
Shows the tray icon without a context menu.

**Parameters:**
- `image` - The image to use for the tray icon

#### 🧊 `void Show(string image, MenuItem menuItem)`
Shows the tray icon with a single menu item.

**Parameters:**
- `image` - The image to use for the tray icon
- `menuItem` - Single menu item for the tray context menu

#### 🧊 `void Show(string image, MenuItem[] menuItems)`
Shows the tray icon with multiple menu items.

**Parameters:**
- `image` - The image to use for the tray icon
- `menuItems` - Array of menu items for the tray context menu

## Events

#### ⚡ `OnBalloonClick`
Windows: Emitted when the tray balloon is clicked.

#### ⚡ `OnBalloonClosed`
Windows: Emitted when the tray balloon is closed because of timeout or user manually closes it.

#### ⚡ `OnBalloonShow`
Windows: Emitted when the tray balloon shows.

#### ⚡ `OnClick`
Emitted when the tray icon is clicked.

#### ⚡ `OnDoubleClick`
macOS, Windows: Emitted when the tray icon is double clicked.

#### ⚡ `OnRightClick`
macOS, Windows: Emitted when the tray icon is right clicked.

## Usage Examples

### Basic Tray Icon

```csharp
// Simple tray icon
await Electron.Tray.Show("assets/tray-icon.png");

// Tray icon with single menu item
await Electron.Tray.Show("assets/tray-icon.png", new MenuItem
{
    Label = "Show Window",
    Click = () => ShowMainWindow()
});
```

### Tray with Context Menu

```csharp
// Tray with multiple menu items
var trayMenuItems = new[]
{
    new MenuItem { Label = "Show Window", Click = () => ShowMainWindow() },
    new MenuItem { Label = "Settings", Click = () => OpenSettings() },
    new MenuItem { Type = MenuType.Separator },
    new MenuItem { Label = "Exit", Click = () => Electron.App.Quit() }
};

await Electron.Tray.Show("assets/tray-icon.png", trayMenuItems);
```

### Dynamic Tray Updates

```csharp
// Update tray tooltip based on status
await Electron.Tray.SetToolTip("MyApp - Connected");

// Change tray icon based on state
if (isConnected)
{
    await Electron.Tray.SetImage("assets/connected.png");
}
else
{
    await Electron.Tray.SetImage("assets/disconnected.png");
}
```

### Tray Event Handling

```csharp
// Handle tray clicks
Electron.Tray.OnClick += (clickArgs, bounds) =>
{
    if (clickArgs.AltKey || clickArgs.ShiftKey)
    {
        // Alt+Click or Shift+Click - show context menu
        Electron.Menu.ContextMenuPopup(Electron.WindowManager.BrowserWindows.First());
    }
    else
    {
        // Regular click - toggle main window
        ToggleMainWindow();
    }
};

Electron.Tray.OnRightClick += (clickArgs, bounds) =>
{
    // Show context menu on right click
    Electron.Menu.ContextMenuPopup(Electron.WindowManager.BrowserWindows.First());
};
```

### Windows Balloon Notifications

```csharp
// Show Windows balloon notification
await Electron.Tray.DisplayBalloon(new DisplayBalloonOptions
{
    Title = "Background Task Complete",
    Content = "Your file has been processed successfully.",
    Icon = "assets/notification-icon.ico"
});

// Handle balloon events
Electron.Tray.OnBalloonClick += () =>
{
    ShowMainWindow();
    Electron.WindowManager.BrowserWindows.First().Focus();
};
```

### macOS Tray Features

```csharp
// macOS specific tray features
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    await Electron.Tray.SetTitle("MyApp");

    // Use template image for dark mode support
    await Electron.Tray.SetImage("assets/tray-template.png");
    await Electron.Tray.SetPressedImage("assets/tray-pressed-template.png");
}
```

### Application Integration

```csharp
// Integrate with application lifecycle
Electron.App.WindowAllClosed += () =>
{
    // Keep app running in tray when windows are closed
    if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
    {
        Electron.App.Hide();
    }
};

// Handle tray double-click
Electron.Tray.OnDoubleClick += (clickArgs, bounds) =>
{
    ShowMainWindow();
    Electron.WindowManager.BrowserWindows.First().Focus();
};
```

## Related APIs

- [Electron.Menu](Menu.md) - Context menus for tray icons
- [Electron.Notification](Notification.md) - Desktop notifications
- [Electron.App](App.md) - Application lifecycle events
- [Electron.WindowManager](WindowManager.md) - Windows to show/hide from tray

## Additional Resources

- [Electron Tray Documentation](https://electronjs.org/docs/api/tray) - Official Electron tray API


================================================
FILE: docs/API/WebContents.md
================================================
# Electron.WebContents

Render and control web pages.

## Overview

The `Electron.WebContents` API provides control over web page content within Electron windows. It handles page loading, navigation, JavaScript execution, and web page lifecycle events.

## Properties

#### 📋 `int Id`
Gets the unique identifier for this web contents.

#### 📋 `Session Session`
Manage browser sessions, cookies, cache, proxy settings, etc.

## Methods

#### 🧊 `void ExecuteJavaScriptAsync(string code, bool userGesture = false)`
Evaluates script code in page.

In the browser window some HTML APIs like `requestFullScreen` can only be invoked by a gesture from the user. Setting `userGesture` to `true` will remove this limitation.

Code execution will be suspended until web page stop loading.

**Parameters:**
- `code` - The code to execute
- `userGesture` - if set to `true` simulate a user gesture

**Returns:**

The result of the executed code.

#### 🧊 `Task<PrinterInfo[]> GetPrintersAsync()`
Get system printers.

**Returns:**

Array of available printers.

#### 🧊 `Task<string> GetUrl()`
Get the URL of the loaded page.

It's useful if a web-server redirects you and you need to know where it redirects. For instance, It's useful in case of Implicit Authorization.

**Returns:**

URL of the loaded page.

#### 🧊 `void InsertCSS(bool isBrowserWindow, string path)`
Inserts CSS into the web page.

See: https://www.electronjs.org/docs/api/web-contents#contentsinsertcsscss-options

Works for both BrowserWindows and BrowserViews.

**Parameters:**
- `isBrowserWindow` - Whether the webContents belong to a BrowserWindow or not (the other option is a BrowserView)
- `path` - Absolute path to the CSS file location

#### 🧊 `Task LoadURLAsync(string url)`
Loads the url in the window. The url must contain the protocol prefix.

The async method will resolve when the page has finished loading, and rejects if the page fails to load.

A noop rejection handler is already attached, which avoids unhandled rejection errors.

Loads the `url` in the window. The `url` must contain the protocol prefix, e.g. the `http://` or `file://`. If the load should bypass http cache then use the `pragma` header to achieve it.

**Parameters:**
- `url` - URL to load

#### 🧊 `Task LoadURLAsync(string url, LoadURLOptions options)`
Loads the url with additional options.

The async method will resolve when the page has finished loading, and rejects if the page fails to load.

A noop rejection handler is already attached, which avoids unhandled rejection errors.

Loads the `url` in the window. The `url` must contain the protocol prefix, e.g. the `http://` or `file://`. If the load should bypass http cache then use the `pragma` header to achieve it.

**Parameters:**
- `url` - URL to load
- `options` - Loading options

#### 🧊 `void OpenDevTools()`
Opens the devtools.

#### 🧊 `void OpenDevTools(OpenDevToolsOptions openDevToolsOptions)`
Opens the devtools with options.

**Parameters:**
- `openDevToolsOptions` - Developer tools options

#### 🧊 `Task<bool> PrintAsync(PrintOptions options = null)`
Prints window's web page.

**Parameters:**
- `options` - Print options

**Returns:**

Whether the print operation succeeded.

#### 🧊 `Task<bool> PrintToPDFAsync(string path, PrintToPDFOptions options = null)`
Prints window's web page as PDF with Chromium's preview printing custom settings.The landscape will be ignored if @page CSS at-rule is used in the web page. By default, an empty options will be regarded as: Use page-break-before: always; CSS style to force to print to a new page.

**Parameters:**
- `path` - Output file path
- `options` - PDF generation options

**Returns:**

Whether the PDF generation succeeded.

## Events

#### ⚡ `InputEvent`
Emitted when an input event is sent to the WebContents.

#### ⚡ `OnCrashed`
Emitted when the renderer process crashes or is killed.

#### ⚡ `OnDidFailLoad`
Emitted when the load failed.

#### ⚡ `OnDidFinishLoad`
Emitted when the navigation is done, i.e. the spinner of the tab has stopped spinning, and the onload event was dispatched.

#### ⚡ `OnDidNavigate`
Emitted when a main frame navigation is done.

#### ⚡ `OnDidRedirectNavigation`
Emitted after a server side redirect occurs during navigation.

#### ⚡ `OnDidStartNavigation`
Emitted when any frame (including main) starts navigating.

#### ⚡ `OnDomReady`
Emitted when the document in the top-level frame is loaded.

#### ⚡ `OnWillRedirect`
Emitted when a server side redirect occurs during navigation.

## Usage Examples

### Page Loading

```csharp
// Load URL with options
await webContents.LoadURLAsync("https://example.com", new LoadURLOptions
{
    UserAgent = "MyApp/1.0",
    ExtraHeaders = "Authorization: Bearer token123"
});

// Load local file
await webContents.LoadURLAsync("file://" + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app/index.html"));

// Get current URL
var currentUrl = await webContents.GetUrl();
Console.WriteLine($"Current URL: {currentUrl}");
```

### JavaScript Execution

```csharp
// Execute simple JavaScript
var result = await webContents.ExecuteJavaScriptAsync("document.title");
Console.WriteLine($"Page title: {result}");

// Execute with user gesture simulation
await webContents.ExecuteJavaScriptAsync("document.requestFullscreen()", true);

// Execute complex code
var userAgent = await webContents.ExecuteJavaScriptAsync("navigator.userAgent");
Console.WriteLine($"User agent: {userAgent}");
```

### Developer Tools

```csharp
// Open dev tools
webContents.OpenDevTools();

// Open with specific options
webContents.OpenDevTools(new OpenDevToolsOptions
{
    Mode = DevToolsMode.Detached,
    Activate = true
});
```

### CSS Injection

```csharp
// Inject CSS file
webContents.InsertCSS(true, "styles/custom-theme.css");

// Inject CSS for BrowserView
webContents.InsertCSS(false, "styles/browser-view.css");
```

### Printing Operations

```csharp
// Print web page
var printSuccess = await webContents.PrintAsync(new PrintOptions
{
    Silent = false,
    PrintBackground = true,
    DeviceName = "My Printer"
});

if (printSuccess)
{
    Console.WriteLine("Print job sent successfully");
}
```

### PDF Generation

```csharp
// Generate PDF
var pdfSuccess = await webContents.PrintToPDFAsync("document.pdf", new PrintToPDFOptions
{
    MarginsType = PrintToPDFMarginsType.None,
    PageSize = PrintToPDFPageSize.A4,
    PrintBackground = true,
    Landscape = false
});

if (pdfSuccess)
{
    Console.WriteLine("PDF generated successfully");
}
```

### Navigation Monitoring

```csharp
// Monitor navigation events
webContents.OnDidStartNavigation += (url) =>
{
    Console.WriteLine($"Starting navigation to: {url}");
};

webContents.OnDidNavigate += (navInfo) =>
{
    Console.WriteLine($"Navigated to: {navInfo.Url}");
};

webContents.OnDidFinishLoad += () =>
{
    Console.WriteLine("Page finished loading");
};

webContents.OnDidFailLoad += (failInfo) =>
{
    Console.WriteLine($"Page failed to load: {failInfo.ErrorCode} - {failInfo.ErrorDescription}");
};
```

### Content Interaction

```csharp
// Wait for DOM ready
webContents.OnDomReady += () =>
{
    Console.WriteLine("DOM is ready");
    // Safe to execute DOM-related JavaScript now
};

// Handle page crashes
webContents.OnCrashed += (killed) =>
{
    Console.WriteLine($"Renderer crashed, killed: {killed}");
    // Optionally reload the page
};
```

## Related APIs

- [Electron.WindowManager](WindowManager.md) - Windows containing web contents
- [Electron.Session](Session.md) - Session management for web contents
- [Electron.IpcMain](IpcMain.md) - Communication with web contents

## Additional Resources

- [Electron WebContents Documentation](https://electronjs.org/docs/api/web-contents) - Official Electron web contents API
- [Web Content Management](../Core/What's-New.md) - Understanding web content handling
- [Security Considerations](../Using/Configuration.md) - Secure web content integration


================================================
FILE: docs/API/WindowManager.md
================================================
# Electron.WindowManager

Create and manage browser windows, control window behavior and appearance.

## Overview

The `Electron.WindowManager` API provides comprehensive control over browser windows in your Electron application. It handles window creation, management, and coordination with the application lifecycle.

## Properties

#### 📋 `IReadOnlyCollection<BrowserView> BrowserViews`
Gets a read-only collection of all currently open browser views.

#### 📋 `IReadOnlyCollection<BrowserWindow> BrowserWindows`
Gets a read-only collection of all currently open browser windows.

#### 📋 `bool IsQuitOnWindowAllClosed`
Controls whether the application quits when all windows are closed. Default is true.

## Methods

#### 🧊 `Task<BrowserView> CreateBrowserViewAsync()`
Creates a new browser view with default options.

**Returns:**

The created BrowserView instance.

#### 🧊 `Task<BrowserView> CreateBrowserViewAsync(BrowserViewConstructorOptions options)`
Creates a new browser view with custom options.

**Parameters:**
- `options` - Browser view configuration options

**Returns:**

The created BrowserView instance.

#### 🧊 `Task<BrowserWindow> CreateWindowAsync(string loadUrl = "http://localhost")`
Creates a new browser window with default options.

**Parameters:**
- `loadUrl` - URL to load in the window. Defaults to "http://localhost"

**Returns:**

The created BrowserWindow instance.

#### 🧊 `Task<BrowserWindow> CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://localhost")`
Creates a new browser window with custom options.

**Parameters:**
- `options` - Window configuration options
- `loadUrl` - URL to load in the window. Defaults to "http://localhost"

**Returns:**

The created BrowserWindow instance.

## Usage Examples

### Basic Window Creation

```csharp
// Create window with default options
var mainWindow = await Electron.WindowManager.CreateWindowAsync();

// Create window with custom options
var settingsWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions
{
    Width = 800,
    Height = 600,
    Show = false,
    Title = "Settings",
    WebPreferences = new WebPreferences
    {
        NodeIntegration = false,
        ContextIsolation = true
    }
}, "https://localhost:5001/settings");
```

### Window Management

```csharp
// Get all windows
var windows = Electron.WindowManager.BrowserWindows;
Console.WriteLine($"Open windows: {windows.Count}");

// Configure quit behavior
Electron.WindowManager.IsQuitOnWindowAllClosed = false; // Keep app running when windows close

// Handle window lifecycle
Electron.App.WindowAllClosed += () =>
{
    Console.WriteLine("All windows closed");
    if (Electron.WindowManager.IsQuitOnWindowAllClosed)
    {
        Electron.App.Quit();
    }
};
```

### Browser View Integration

```csharp
// Create browser view
var browserView = await Electron.WindowManager.CreateBrowserViewAsync(new BrowserViewConstructorOptions
{
    WebPreferences = new WebPreferences
    {
        NodeIntegration = false,
        ContextIsolation = true
    }
});

// Add to window
await mainWindow.SetBrowserViewAsync(browserView);
await browserView.WebContents.LoadURLAsync("https://example.com");

// Set view bounds
await mainWindow.SetBoundsAsync(browserView, new Rectangle
{
    X = 0,
    Y = 100,
    Width = 800,
    Height = 400
});
```

### Window Options Configuration

```csharp
// Comprehensive window options
var options = new BrowserWindowOptions
{
    Width = 1200,
    Height = 800,
    MinWidth = 600,
    MinHeight = 400,
    MaxWidth = 1920,
    MaxHeight = 1080,
    X = 100,
    Y = 100,
    Center = true,
    Frame = true,
    Title = "My Application",
    Icon = "assets/app-icon.png",
    Show = false,
    AlwaysOnTop = false,
    SkipTaskbar = false,
    Kiosk = false,
    TitleBarStyle = TitleBarStyle.Default,
    BackgroundColor = "#FFFFFF",
    DarkTheme = false,
    Transparent = false,
    WebPreferences = new WebPreferences
    {
        NodeIntegration = false,
        ContextIsolation = true,
        EnableWebSQL = false,
        Partition = "persist:electron",
        ZoomFactor = 1.0f,
        DevTools = true
    }
};
```

### Multi-Window Applications

```csharp
// Create main window
var mainWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions
{
    Width = 1200,
    Height = 800,
    Show = false
});

// Create secondary window
var secondaryWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions
{
    Width = 600,
    Height = 400,
    Parent = mainWindow,
    Modal = true,
    Show = false
});

// Load different content
await mainWindow.WebContents.LoadURLAsync("https://localhost:5001");
await secondaryWindow.WebContents.LoadURLAsync("https://localhost:5001/settings");

// Show windows when ready
mainWindow.OnReadyToShow += () => mainWindow.Show();
secondaryWindow.OnReadyToShow += () => secondaryWindow.Show();
```

## Related APIs

- [Electron.App](App.md) - Application lifecycle and window events
- [Electron.Dialog](Dialog.md) - Parent windows for modal dialogs
- [Electron.Menu](Menu.md) - Window-specific menus
- [Electron.WebContents](WebContents.md) - Window content management

## Additional Resources

- [Electron Window Management Documentation](https://electronjs.org/docs/api/browser-window) - Official Electron window API


================================================
FILE: docs/About.md
================================================


# About this Project

Electron.NET has been developed by a small number of people in the hope that it may be useful for others.

Support for this project in all forms is very welcome, no matter whether in form of code contributions or donations.

## 💬 Community

[![Gitter](https://badges.gitter.im/ElectronNET/community.svg)](https://gitter.im/ElectronNET/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)

Besides the chat on Gitter and the issues [discussed here](https://github.com/ElectronNET/Electron.NET/issues) you can also use [StackOverflow](https://stackoverflow.com/questions/tagged/electron.net) with the tag `electron.net`.


## 🙋‍♀️🙋‍♂ Contributing

Feel free to submit a pull request if you find any bugs (to see a list of active issues, visit the [Issues section](https://github.com/ElectronNET/Electron.NET/issues).
Please make sure all commits are properly documented.


## 🙏 Donate

We do this open source work in our free time. If you'd like us to invest more time on it, please [donate](https://donorbox.org/electron-net). Donation can be used to increase some issue priority. Thank you!

[![donate](https://img.shields.io/badge/Donate-Donorbox-green.svg)](https://donorbox.org/electron-net)

Alternatively, consider using a GitHub sponsorship for the core maintainers:

- [Gregor Biswanger](https://github.com/sponsors/GregorBiswanger)
- [Florian Rappl](https://github.com/sponsors/FlorianRappl)

Any support appreciated! 🍻


## 👨‍💻 Authors

* **[Gregor Biswanger](https://github.com/GregorBiswanger)** - (Microsoft MVP, Intel Black Belt and Intel Software Innovator) is a freelance lecturer, consultant, trainer, author and speaker. He is a consultant for large and medium-sized companies, organizations and agencies for software architecture, web- and cross-platform development. You can find Gregor often on the road attending or speaking at international conferences. - [Cross-Platform-Blog](http://www.cross-platform-blog.com) - Twitter [@BFreakout](https://www.twitter.com/BFreakout)  
  &nbsp;  
* **[Dr. Florian Rappl](https://github.com/FlorianRappl)** - Software Developer - from Munich, Germany. Microsoft MVP & Web Geek. - [The Art of Micro Frontends](https://microfrontends.art) - [Homepage](https://florian-rappl.de) - Twitter [@florianrappl](https://twitter.com/florianrappl)  
  &nbsp;  
* [**softworkz**](https://github.com/softworkz) - full range developer - likes to start where others gave up - MS MVP alumni and Munich citizen as well. Has not been involved in the evolution of Electron.NET but rather dropped off the update and overhaul for ElectronNET.Core in a kind-of drive-by action.  
  &nbsp;  
* **[Robert Muehsig](https://github.com/robertmuehsig)** - Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek. - [codeinside Blog](https://blog.codeinside.eu) - Twitter [@robert0muehsig](https://twitter.com/robert0muehsig)  
  
See also the list of [contributors](https://github.com/ElectronNET/Electron.NET/graphs/contributors) who participated in this project.
  

## 🎉 License

MIT-licensed. See [LICENSE](https://github.com/ElectronNET/Electron.NET?tab=MIT-1-ov-file#readme) for details.


================================================
FILE: docs/Core/Advanced-Migration-Topics.md
================================================
# Advanced Migration Topics

This guide covers advanced scenarios and edge cases that may require additional configuration when migrating to ElectronNET.Core.

## Custom ASP.NET Port Configuration

### Port Configuration Changes

**Previous Approach:**  
Specifying the WebPort in `electron.manifest.json` is no longer supported because the ASP.NET-first launch mode makes this timing-dependent.

**New Approach:**  
Configure custom ASP.NET ports through MSBuild metadata:

```xml
<ItemGroup>
  <AssemblyMetadata Include="AspNetHttpPort" Value="4000" />
</ItemGroup>
```

## Custom ElectronHostHook Configuration

> [!NOTE]  
> These changes are only required in case you are using a custom ElectronHostHook implementation!  
> If you have an ElectronHostHook folder in your project but you did not customize that code and aren't using its demo features (Excel and ZIP), you can also just remove that folder from your project.


### TypeScript and Node.js Updates

**Update package.json:**

This shows the relevant changes only: All shown versions are the new required minimum versions.

```json
{
  "devDependencies": {
    "@types/node": "^22.18",
    "typescript": "^5.9.3"
  },
  "dependencies": {
    "socket.io": "^4.8.1",
  }
}
```

**Update Project File:**  

The below modifications will allow you to use the latest TypeScript compiler in your ASP.Net project.

```xml
<PackageReference Include="Microsoft.TypeScript.MSBuild" Version="5.9.3" />

<PropertyGroup>
  <TypeScriptModuleKind>commonjs</TypeScriptModuleKind>
  <TypeScriptUseNodeJS>true</TypeScriptUseNodeJS>
  <TypeScriptTSConfig>ElectronHostHook/tsconfig.json</TypeScriptTSConfig>
</PropertyGroup>

<ItemGroup>
  <Compile Remove="publish\**" />
  <Content Remove="publish\**" />
  <EmbeddedResource Remove="publish\**" />
  <None Remove="publish\**" />
  <TypeScriptCompile Remove="**\node_modules\**" />
</ItemGroup>
```

### Integration Benefits

- **Modern TypeScript** - Latest language features and better type checking
- **Updated Node.js Types** - Compatibility with Node.js 22.x APIs
- **ESLint Integration** - Better code quality and consistency
- **MSBuild Compilation** - Integrated with Visual Studio build process

## Troubleshooting Advanced Scenarios

### Multi-Project Solutions

When using ElectronNET.Core in multi-project solutions:

1. **Install ElectronNET.Core.Api** in class library projects
2. **Install ElectronNET.Core and ElectronNET.Core.AspNet** only in the startup project
3. **Share configuration** through project references or shared files


## Next Steps

- **[Migration Guide](Migration-Guide.md)** - Complete migration process
- **[What's New?](What's-New.md)** - Overview of all ElectronNET.Core features
- **[Getting Started](../GettingStarted/ASP.Net.md)** - Development workflows


================================================
FILE: docs/Core/Migration-Checks.md
================================================
# Migration Checks

Electron.NET includes automatic build-time validation checks that help users migrating from previous versions avoid common configuration issues. These checks run automatically during the build process and provide helpful guidance when problems are detected.

## Overview

When you build an Electron.NET project, the following validation checks are performed:

| Code | Check | Description |
|------|-------|-------------|
| [ELECTRON001](#1-packagejson-rules) | package.json location rules | Ensures `package.json`/`package-lock.json` aren’t present in unsupported locations (root `package.json` handled separately) |
| [ELECTRON008](#1-packagejson-rules) | root package.json contains electron | Warns when root `package.json` contains the word `electron` (case-insensitive) |
| [ELECTRON009](#1-packagejson-rules) | root package.json copied to output | Warns when root `package.json` is configured to be copied to output/publish |
| [ELECTRON002](#2-electron-manifestjson-not-allowed) | electron-manifest.json not allowed | Detects deprecated manifest files |
| [ELECTRON003](#3-electron-builderjson-location) | electron-builder.json location | Verifies electron-builder.json exists in Properties folder |
| [ELECTRON004](#3-electron-builderjson-location) | electron-builder.json wrong location | Warns if electron-builder.json is found in incorrect locations |
| [ELECTRON005](#4-parent-paths-not-allowed-in-electron-builderjson) | Parent paths not allowed | Checks for `..` references in config |
| [ELECTRON006](#5-publish-profile-validation) | ASP.NET publish profile mismatch | Warns when ASP.NET projects have console-style profiles |
| [ELECTRON007](#5-publish-profile-validation) | Console publish profile mismatch | Warns when console projects have ASP.NET-style profiles |

---

## 1. package.json rules

**Warning Codes:** `ELECTRON001`, `ELECTRON008`, `ELECTRON009`

### What is checked

The build system scans for `package.json` and `package-lock.json` files in your project directory.

Rules:

- **ELECTRON001**: `package.json` / `package-lock.json` must not exist in the project directory or subdirectories
  - Exception: `ElectronHostHook` folder is allowed
  - Note: a **root** `package.json` is **excluded** from `ELECTRON001` and validated by `ELECTRON008` / `ELECTRON009`

- **ELECTRON008**: If a root `package.json` exists, it must **not** contain electron-related dependencies or configuration.

- **ELECTRON009**: If a root `package.json` exists, it must **not** be configured to be copied to output/publish (for example via `CopyToOutputDirectory` / `CopyToPublishDirectory` metadata)

### Why this matters

Electron.NET generates its Electron-related `package.json` during publishing based on MSBuild properties. A user-maintained Electron-related `package.json` can conflict with that process.

Also, ensuring the root `package.json` is not copied prevents accidentally shipping it with the published app.

### Exception

A `package.json` / `package-lock.json` file **is allowed** in the `ElectronHostHook` folder if you're using custom host hooks.

### How to fix

If you have an Electron-related `package.json` from older Electron.NET versions:

1. **Open your project's `.csproj` file**
2. **Add the required properties** to a PropertyGroup with the label `ElectronNetCommon`:

```xml
<PropertyGroup Label="ElectronNetCommon">
  <ElectronPackageId>my-electron-app</ElectronPackageId>
  <Title>My Electron App</Title>
  <Version>1.0.0</Version>
  <Description>My awesome Electron.NET application</Description>
  <Company>My Company</Company>
  <Copyright>Copyright © 2025</Copyright>
  <ElectronVersion>30.0.9</ElectronVersion>
</PropertyGroup>
```

3. **Delete** Electron-related `package.json` / `package-lock.json` files (except those under `ElectronHostHook` if applicable)

If you keep a root `package.json` for non-Electron reasons:

- Ensure it does **not** contain electron dependencies or configuration (fixes `ELECTRON008`)
- Ensure it is **not** copied to output/publish (fixes `ELECTRON009`)

> **See also:** [Migration Guide](Migration-Guide.md) for complete migration instructions.

---

## 2. electron-manifest.json not allowed

**Warning Code:** `ELECTRON002`

### What is checked

The build system checks for the presence of `electron.manifest.json` or `electron-manifest.json` files in your project.

### Why this matters

The `electron.manifest.json` file format is deprecated. All configuration should now be specified using:
- MSBuild properties in your `.csproj` file (for application metadata)
- The `electron-builder.json` file in the `Properties` folder (for build configuration)

### How to fix

1. **Migrate application properties** to your `.csproj` file (see [Migration Guide](Migration-Guide.md))
2. **Move the `build` section** from `electron.manifest.json` to `Properties/electron-builder.json`
3. **Delete the old `electron.manifest.json`** file

**Example electron-builder.json:**
```json
{
    "compression": "maximum",
    "win": {
        "icon": "Assets/app.ico",
        "target": ["nsis", "portable"]
    },
    "linux": {
        "icon": "Assets/app.png",
        "target": ["AppImage", "deb"]
    },
    "mac": {
        "icon": "Assets/app.icns",
        "target": ["dmg", "zip"]
    }
}
```

---

## 3. electron-builder.json Location

**Warning Codes:** `ELECTRON003`, `ELECTRON004`

### What is checked

- `ELECTRON003`: Verifies that an `electron-builder.json` file exists in the `Properties` folder
- `ELECTRON004`: Warns if `electron-builder.json` is found in incorrect locations

### Why this matters

The `electron-builder.json` file must be located in the `Properties` folder so it can be properly copied to the output directory during publishing.

### How to fix

1. **Create the Properties folder** if it doesn't exist
2. **Move or create** `electron-builder.json` in `Properties/electron-builder.json`
3. **Remove** any `electron-builder.json` files from other locations

**Expected structure:**
```
MyProject/
├── Properties/
│   ├── electron-builder.json    ✅ Correct location
│   ├── launchSettings.json
│   └── PublishProfiles/
├── MyProject.csproj
└── Program.cs
```

---

## 4. Parent paths not allowed in electron-builder.json

**Warning Code:** `ELECTRON005`

### What is checked

The build system scans the `electron-builder.json` file for parent-path references (`..`).

### Why this matters

During the publish process, the `electron-builder.json` file is copied to the build output directory. Any relative paths in this file are resolved from that location, not from your project directory. Parent-path references (`../`) will not work correctly because they would point outside the published application.

### How to fix

1. **Move resource files** (icons, installers, etc.) inside your project folder structure
2. **Configure the files** to be copied to the output directory in your `.csproj`:

```xml
<ItemGroup>
  <Content Include="Assets\**\*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>
```

3. **Update paths** in `electron-builder.json` to use relative paths without `..`:

**Before (incorrect):**
```json
{
    "win": {
        "icon": "../SharedAssets/app.ico"
    }
}
```

**After (correct):**
```json
{
    "win": {
        "icon": "Assets/app.ico"
    }
}
```

---

## 5. Publish Profile Validation

**Warning Codes:** `ELECTRON006`, `ELECTRON007`

### What is checked

The build system examines `.pubxml` files in the `Properties/PublishProfiles` folder and validates that they match the project type:

- **ELECTRON006**: For **ASP.NET projects** (using `Microsoft.NET.Sdk.Web`), checks that publish profiles include `WebPublishMethod`. This property is required for proper ASP.NET publishing.

- **ELECTRON007**: For **console/other projects** (not using the Web SDK), checks that publish profiles do NOT include the `WebPublishMethod`  property. These ASP.NET-specific properties are incorrect for non-web applications.

### Why this matters

Electron.NET supports both ASP.NET and console application project types, each requiring different publish profile configurations:

| Project Type | SDK | Expected Properties |
|--------------|-----|---------------------|
| ASP.NET (Razor Pages, MVC, Blazor) | `Microsoft.NET.Sdk.Web` | `WebPublishMethod`, no `PublishProtocol` |
| Console Application | `Microsoft.NET.Sdk` | `PublishProtocol`, no `WebPublishMethod` |

Using the wrong publish profile type can lead to incomplete or broken builds.

### How to fix

1. **Delete existing publish profiles** from `Properties/PublishProfiles/`
2. **Create new publish profiles** using the Visual Studio Publishing Wizard:
   - Right-click on the project in Solution Explorer
   - Select **Publish...**
   - Follow the wizard to create a **Folder** publish profile

For correct publish profile examples for both ASP.NET and Console app
Download .txt
gitextract_uhomav4p/

├── .gitattributes
├── .github/
│   ├── CONTRIBUTING.md
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── feature_request.md
│   │   └── question.md
│   └── workflows/
│       ├── Build and Publish.yml
│       ├── PR Validation.yml
│       ├── integration-tests.yml
│       ├── pr-comment.yml
│       ├── publish-wiki.yml
│       ├── retry-test-jobs.yml
│       └── trailing-whitespace-check.yml
├── .gitignore
├── .nuke/
│   ├── build.schema.json
│   └── parameters.json
├── .vscode/
│   ├── launch.json
│   └── tasks.json
├── Changelog.md
├── LICENSE
├── NuGet.config
├── README.md
├── artifacts/
│   └── .gitkeep
├── assets/
│   └── images/
│       └── electron.net-logo.psd
├── build.cmd
├── build.ps1
├── build.sh
├── docs/
│   ├── .docproj/
│   │   ├── DocProj.props
│   │   └── DocProj.targets
│   ├── API/
│   │   ├── App.md
│   │   ├── AutoUpdater.md
│   │   ├── Clipboard.md
│   │   ├── Dialog.md
│   │   ├── Dock.md
│   │   ├── GlobalShortcut.md
│   │   ├── HostHook.md
│   │   ├── IpcMain.md
│   │   ├── Menu.md
│   │   ├── NativeTheme.md
│   │   ├── Notification.md
│   │   ├── Overview.md
│   │   ├── PowerMonitor.md
│   │   ├── Screen.md
│   │   ├── Shell.md
│   │   ├── Tray.md
│   │   ├── WebContents.md
│   │   └── WindowManager.md
│   ├── About.md
│   ├── Core/
│   │   ├── Advanced-Migration-Topics.md
│   │   ├── Migration-Checks.md
│   │   ├── Migration-Guide.md
│   │   └── What's-New.md
│   ├── Docs.shproj
│   ├── GettingStarted/
│   │   ├── ASP.Net.md
│   │   ├── Console-App.md
│   │   └── System-Requirements.md
│   ├── Home.md
│   ├── RelInfo/
│   │   └── Package-Description.md
│   ├── Using/
│   │   ├── Configuration.md
│   │   ├── Custom_main.md
│   │   ├── Debugging.md
│   │   ├── Package-Building.md
│   │   └── Startup-Methods.md
│   ├── _Footer.md
│   ├── _Sidebar.md
│   └── md-styles.css
├── global.json
├── nuke/
│   ├── .editorconfig
│   ├── Build.cs
│   ├── CommonPropsParser.cs
│   ├── Configuration.cs
│   ├── Directory.Build.props
│   ├── Directory.Build.targets
│   ├── Extensions/
│   │   └── StringExtensions.cs
│   ├── ReleaseNotes.cs
│   ├── ReleaseNotesParser.cs
│   ├── SemVersion.cs
│   └── _build.csproj
└── src/
    ├── .editorconfig
    ├── ElectronNET/
    │   ├── .electron/
    │   │   └── .gitkeep
    │   ├── ElectronNET.csproj
    │   └── build/
    │       ├── ElectronNET.Core.props
    │       ├── ElectronNET.Core.targets
    │       ├── ElectronNET.DesignTime.targets
    │       ├── ElectronNET.LateImport.targets
    │       ├── ElectronNET.MigrationChecks.targets
    │       ├── ElectronNETRules.Project.xaml
    │       ├── ElectronNETRules.Project2.xaml
    │       ├── electron-builder.json
    │       ├── package.template.json
    │       └── update_electron_versions.py
    ├── ElectronNET.API/
    │   ├── API/
    │   │   ├── ApiBase.cs
    │   │   ├── App.cs
    │   │   ├── AutoUpdater.cs
    │   │   ├── BrowserView.cs
    │   │   ├── BrowserWindow.cs
    │   │   ├── Clipboard.cs
    │   │   ├── CommandLine.cs
    │   │   ├── Cookies.cs
    │   │   ├── Dialog.cs
    │   │   ├── Dock.cs
    │   │   ├── Electron.cs
    │   │   ├── Entities/
    │   │   │   ├── AboutPanelOptions.cs
    │   │   │   ├── AddRepresentationOptions.cs
    │   │   │   ├── AppDetailsOptions.cs
    │   │   │   ├── AutoResizeOptions.cs
    │   │   │   ├── BitmapOptions.cs
    │   │   │   ├── Blob.cs
    │   │   │   ├── BlockMapDataHolder.cs
    │   │   │   ├── BrowserViewConstructorOptions.cs
    │   │   │   ├── BrowserWindowOptions.cs
    │   │   │   ├── CPUUsage.cs
    │   │   │   ├── Certificate.cs
    │   │   │   ├── CertificatePrincipal.cs
    │   │   │   ├── CertificateTrustDialogOptions.cs
    │   │   │   ├── ChromeExtensionInfo.cs
    │   │   │   ├── ClearStorageDataOptions.cs
    │   │   │   ├── Cookie.cs
    │   │   │   ├── CookieChangedCause.cs
    │   │   │   ├── CookieDetails.cs
    │   │   │   ├── CookieFilter.cs
    │   │   │   ├── CreateFromBitmapOptions.cs
    │   │   │   ├── CreateFromBufferOptions.cs
    │   │   │   ├── CreateInterruptedDownloadOptions.cs
    │   │   │   ├── Data.cs
    │   │   │   ├── DefaultFontFamily.cs
    │   │   │   ├── DevToolsMode.cs
    │   │   │   ├── Display.cs
    │   │   │   ├── DisplayBalloonOptions.cs
    │   │   │   ├── DockBounceType.cs
    │   │   │   ├── EnableNetworkEmulationOptions.cs
    │   │   │   ├── Extension.cs
    │   │   │   ├── FileFilter.cs
    │   │   │   ├── FileIconOptions.cs
    │   │   │   ├── FileIconSize.cs
    │   │   │   ├── FocusOptions.cs
    │   │   │   ├── GPUFeatureStatus.cs
    │   │   │   ├── IPostData.cs
    │   │   │   ├── ImportCertificateOptions.cs
    │   │   │   ├── InputEvent.cs
    │   │   │   ├── InputEventType.cs
    │   │   │   ├── JumpListCategory.cs
    │   │   │   ├── JumpListCategoryType.cs
    │   │   │   ├── JumpListItem.cs
    │   │   │   ├── JumpListItemType.cs
    │   │   │   ├── JumpListSettings.cs
    │   │   │   ├── LoadURLOptions.cs
    │   │   │   ├── LoginItemLaunchItem.cs
    │   │   │   ├── LoginItemSettings.cs
    │   │   │   ├── LoginItemSettingsOptions.cs
    │   │   │   ├── LoginSettings.cs
    │   │   │   ├── Margins.cs
    │   │   │   ├── MemoryInfo.cs
    │   │   │   ├── MenuItem.cs
    │   │   │   ├── MenuRole.cs
    │   │   │   ├── MenuType.cs
    │   │   │   ├── MessageBoxOptions.cs
    │   │   │   ├── MessageBoxResult.cs
    │   │   │   ├── MessageBoxType.cs
    │   │   │   ├── ModifierType.cs
    │   │   │   ├── NativeImage.cs
    │   │   │   ├── NativeImageJsonConverter.cs
    │   │   │   ├── NotificationAction.cs
    │   │   │   ├── NotificationOptions.cs
    │   │   │   ├── OnDidFailLoadInfo.cs
    │   │   │   ├── OnDidNavigateInfo.cs
    │   │   │   ├── OnTopLevel.cs
    │   │   │   ├── OpenDevToolsOptions.cs
    │   │   │   ├── OpenDialogOptions.cs
    │   │   │   ├── OpenDialogProperty.cs
    │   │   │   ├── OpenExternalOptions.cs
    │   │   │   ├── PageSize.cs
    │   │   │   ├── PathName.cs
    │   │   │   ├── Point.cs
    │   │   │   ├── PrintOptions.cs
    │   │   │   ├── PrintToPDFOptions.cs
    │   │   │   ├── PrinterInfo.cs
    │   │   │   ├── ProcessMetric.cs
    │   │   │   ├── ProcessVersions.cs
    │   │   │   ├── ProgressBarMode.cs
    │   │   │   ├── ProgressBarOptions.cs
    │   │   │   ├── ProgressInfo.cs
    │   │   │   ├── ProxyConfig.cs
    │   │   │   ├── ReadBookmark.cs
    │   │   │   ├── Rectangle.cs
    │   │   │   ├── RelaunchOptions.cs
    │   │   │   ├── ReleaseNoteInfo.cs
    │   │   │   ├── RemovePassword.cs
    │   │   │   ├── ResizeOptions.cs
    │   │   │   ├── SaveDialogOptions.cs
    │   │   │   ├── SaveDialogProperty.cs
    │   │   │   ├── Scheme.cs
    │   │   │   ├── SemVer.cs
    │   │   │   ├── SharingItem.cs
    │   │   │   ├── ShortcutDetails.cs
    │   │   │   ├── ShortcutLinkOperation.cs
    │   │   │   ├── Size.cs
    │   │   │   ├── ThemeSourceMode.cs
    │   │   │   ├── ThumbarButton.cs
    │   │   │   ├── ThumbarButtonFlag.cs
    │   │   │   ├── TitleBarOverlay.cs
    │   │   │   ├── TitleBarStyle.cs
    │   │   │   ├── ToBitmapOptions.cs
    │   │   │   ├── ToDataUrlOptions.cs
    │   │   │   ├── ToPNGOptions.cs
    │   │   │   ├── TrayClickEventArgs.cs
    │   │   │   ├── UpdateCancellationToken.cs
    │   │   │   ├── UpdateCheckResult.cs
    │   │   │   ├── UpdateFileInfo.cs
    │   │   │   ├── UpdateInfo.cs
    │   │   │   ├── UploadFile.cs
    │   │   │   ├── UploadRawData.cs
    │   │   │   ├── UserTask.cs
    │   │   │   ├── Vibrancy.cs
    │   │   │   └── WebPreferences.cs
    │   │   ├── Extensions/
    │   │   │   ├── MenuItemExtensions.cs
    │   │   │   └── ThumbarButtonExtensions.cs
    │   │   ├── GlobalShortcut.cs
    │   │   ├── HostHook.cs
    │   │   ├── HybridSupport.cs
    │   │   ├── IpcMain.cs
    │   │   ├── Menu.cs
    │   │   ├── NativeTheme.cs
    │   │   ├── Notification.cs
    │   │   ├── PowerMonitor.cs
    │   │   ├── Process.cs
    │   │   ├── QuitEventArgs.cs
    │   │   ├── Screen.cs
    │   │   ├── Session.cs
    │   │   ├── Shell.cs
    │   │   ├── Tray.cs
    │   │   ├── WebContents.cs
    │   │   ├── WebRequest.cs
    │   │   ├── WindowManager.cs
    │   │   └── web-request.md
    │   ├── Bridge/
    │   │   ├── BridgeConnector.cs
    │   │   ├── Events.cs
    │   │   └── SocketIOFacade.cs
    │   ├── Common/
    │   │   ├── Extensions.cs
    │   │   ├── ProcessRunner.cs
    │   │   ├── RunnerParams.cs
    │   │   └── TimeSpanExtensions.cs
    │   ├── Converter/
    │   │   ├── ModifierTypeListConverter.cs
    │   │   ├── PageSizeConverter.cs
    │   │   └── TitleBarOverlayConverter.cs
    │   ├── ElectronNET.API.csproj
    │   ├── ElectronNET.API.csproj.DotSettings
    │   ├── ElectronNetRuntime.cs
    │   ├── Runtime/
    │   │   ├── Controllers/
    │   │   │   ├── RuntimeControllerBase.cs
    │   │   │   ├── RuntimeControllerDotNetFirst.cs
    │   │   │   └── RuntimeControllerElectronFirst.cs
    │   │   ├── Data/
    │   │   │   ├── BuildInfo.cs
    │   │   │   ├── DotnetAppType.cs
    │   │   │   ├── LifetimeState.cs
    │   │   │   └── StartupMethod.cs
    │   │   ├── Helpers/
    │   │   │   ├── LaunchOrderDetector.cs
    │   │   │   ├── PortHelper.cs
    │   │   │   └── UnpackagedDetector.cs
    │   │   ├── IElectronNetRuntimeController.cs
    │   │   ├── Services/
    │   │   │   ├── ElectronProcess/
    │   │   │   │   ├── ElectronProcessActive.cs
    │   │   │   │   ├── ElectronProcessBase.cs
    │   │   │   │   └── ElectronProcessPassive.cs
    │   │   │   ├── LifetimeServiceBase.cs
    │   │   │   └── SocketBridge/
    │   │   │       └── SocketBridgeService.cs
    │   │   └── StartupManager.cs
    │   └── Serialization/
    │       ├── ElectronJson.cs
    │       └── JsonToBoxedPrimitivesConverter.cs
    ├── ElectronNET.AspNet/
    │   ├── API/
    │   │   ├── ServiceCollectionExtensions.cs
    │   │   ├── WebApplicationBuilderExtensions.cs
    │   │   └── WebHostBuilderExtensions.cs
    │   ├── ElectronNET.AspNet.csproj
    │   └── Runtime/
    │       ├── Controllers/
    │       │   ├── RuntimeControllerAspNetBase.cs
    │       │   ├── RuntimeControllerAspNetDotnetFirst.cs
    │       │   └── RuntimeControllerAspNetElectronFirst.cs
    │       ├── Helpers/
    │       │   └── ServerReadyStartupFilter.cs
    │       └── Services/
    │           └── AspNetLifetimeAdapter.cs
    ├── ElectronNET.Build/
    │   ├── ElectronNET.Build.csproj
    │   ├── ElectronNET.Build.csproj.DotSettings
    │   ├── PrintItemMetadata.cs
    │   ├── RemoveEnvironmentVariables.cs
    │   └── ReplaceMsBuildPropertiesTask.cs
    ├── ElectronNET.ConsoleApp/
    │   ├── ElectronNET.ConsoleApp.csproj
    │   ├── Program.cs
    │   └── Properties/
    │       ├── PublishProfiles/
    │       │   ├── linux-x64.pubxml
    │       │   ├── publish-win-x64.pubxml
    │       │   └── win-x64.pubxml
    │       ├── electron-builder.json
    │       └── launchSettings.json
    ├── ElectronNET.Host/
    │   ├── .gitignore
    │   ├── .vscode/
    │   │   ├── launch.json
    │   │   └── tasks.json
    │   ├── ElectronHostHook/
    │   │   ├── .gitignore
    │   │   ├── connector.js
    │   │   ├── connector.ts
    │   │   ├── index.js
    │   │   ├── index.ts
    │   │   ├── package.json
    │   │   └── tsconfig.json
    │   ├── ElectronNET.Host.esproj
    │   ├── api/
    │   │   ├── app.js
    │   │   ├── app.ts
    │   │   ├── autoUpdater.js
    │   │   ├── autoUpdater.ts
    │   │   ├── browserView.js
    │   │   ├── browserView.ts
    │   │   ├── browserWindows.js
    │   │   ├── browserWindows.ts
    │   │   ├── clipboard.js
    │   │   ├── clipboard.ts
    │   │   ├── commandLine.js
    │   │   ├── commandLine.ts
    │   │   ├── dialog.js
    │   │   ├── dialog.ts
    │   │   ├── dock.js
    │   │   ├── dock.ts
    │   │   ├── globalShortcut.js
    │   │   ├── globalShortcut.ts
    │   │   ├── ipc.js
    │   │   ├── ipc.ts
    │   │   ├── menu.js
    │   │   ├── menu.ts
    │   │   ├── nativeTheme.js
    │   │   ├── nativeTheme.ts
    │   │   ├── notification.js
    │   │   ├── notification.ts
    │   │   ├── powerMonitor.js
    │   │   ├── powerMonitor.ts
    │   │   ├── process.js
    │   │   ├── process.ts
    │   │   ├── screen.js
    │   │   ├── screen.ts
    │   │   ├── shell.js
    │   │   ├── shell.ts
    │   │   ├── tray.js
    │   │   ├── tray.ts
    │   │   ├── webContents.js
    │   │   └── webContents.ts
    │   ├── eslint.config.js
    │   ├── globals.d.ts
    │   ├── main.js
    │   ├── package.json
    │   ├── scripts/
    │   │   └── blazor-preload.js
    │   ├── splashscreen/
    │   │   └── index.html
    │   ├── tsconfig.json
    │   ├── tsconfig.tsbuildinfo
    │   └── types-shims.d.ts
    ├── ElectronNET.IntegrationTests/
    │   ├── Common/
    │   │   ├── IntegrationFactAttribute.cs
    │   │   └── IntegrationTestBase.cs
    │   ├── ElectronFixture.cs
    │   ├── ElectronNET.IntegrationTests.csproj
    │   ├── GlobalUsings.cs
    │   ├── Properties/
    │   │   └── electron-builder.json
    │   ├── Tests/
    │   │   ├── AppTests.cs
    │   │   ├── AutoUpdaterTests.cs
    │   │   ├── BrowserViewTests.cs
    │   │   ├── BrowserWindowTests.cs
    │   │   ├── ClipboardTests.cs
    │   │   ├── CookiesTests.cs
    │   │   ├── GlobalShortcutTests.cs
    │   │   ├── HostHookTests.cs
    │   │   ├── IpcMainTests.cs
    │   │   ├── MenuTests.cs
    │   │   ├── MultiEventRegistrationTests.cs
    │   │   ├── NativeImageTests.cs
    │   │   ├── NativeThemeTests.cs
    │   │   ├── NotificationTests.cs
    │   │   ├── ProcessTests.cs
    │   │   ├── ScreenTests.cs
    │   │   ├── SessionTests.cs
    │   │   ├── ShellTests.cs
    │   │   ├── ThumbarButtonTests.cs
    │   │   ├── TrayTests.cs
    │   │   └── WebContentsTests.cs
    │   └── xunit.runner.json
    ├── ElectronNET.Lean.sln
    ├── ElectronNET.Samples.ElectronHostHook/
    │   ├── Controllers/
    │   │   └── HomeController.cs
    │   ├── ElectronHostHook/
    │   │   ├── .gitignore
    │   │   ├── connector.ts
    │   │   ├── index.ts
    │   │   ├── package.json
    │   │   └── tsconfig.json
    │   ├── ElectronNET.Samples.ElectronHostHook.csproj
    │   ├── Program.cs
    │   ├── Properties/
    │   │   ├── electron-builder.json
    │   │   └── launchSettings.json
    │   └── Views/
    │       └── Home/
    │           └── Index.cshtml
    ├── ElectronNET.WebApp/
    │   ├── Controllers/
    │   │   ├── AboutController.cs
    │   │   ├── AppSysInformationController.cs
    │   │   ├── ClipboardController.cs
    │   │   ├── CrashHangController.cs
    │   │   ├── DesktopCapturerController.cs
    │   │   ├── DialogsController.cs
    │   │   ├── HomeController.cs
    │   │   ├── HostHookController.cs
    │   │   ├── IpcController.cs
    │   │   ├── ManageWindowsController.cs
    │   │   ├── MenusController.cs
    │   │   ├── NotificationsController.cs
    │   │   ├── PdfController.cs
    │   │   ├── ShellController.cs
    │   │   ├── ShortcutsController.cs
    │   │   ├── TrayController.cs
    │   │   ├── UpdateController.cs
    │   │   └── WindowsController.cs
    │   ├── ElectronHostHook/
    │   │   ├── .gitignore
    │   │   ├── connector.js
    │   │   ├── connector.ts
    │   │   ├── excelCreator.js
    │   │   ├── excelCreator.ts
    │   │   ├── index.js
    │   │   ├── index.ts
    │   │   ├── package.json
    │   │   └── tsconfig.json
    │   ├── ElectronNET.WebApp.csproj
    │   ├── Program.cs
    │   ├── Properties/
    │   │   ├── PublishProfiles/
    │   │   │   ├── linux-x64.pubxml
    │   │   │   └── win-x64.pubxml
    │   │   ├── electron-builder.json
    │   │   └── launchSettings.json
    │   ├── Startup.cs
    │   ├── Views/
    │   │   ├── About/
    │   │   │   └── Index.cshtml
    │   │   ├── AppSysInformation/
    │   │   │   └── Index.cshtml
    │   │   ├── Clipboard/
    │   │   │   └── Index.cshtml
    │   │   ├── CrashHang/
    │   │   │   ├── Index.cshtml
    │   │   │   ├── ProcessCrash.cshtml
    │   │   │   └── ProcessHang.cshtml
    │   │   ├── DesktopCapturer/
    │   │   │   └── Index.cshtml
    │   │   ├── Dialogs/
    │   │   │   └── Index.cshtml
    │   │   ├── Home/
    │   │   │   └── Index.cshtml
    │   │   ├── HostHook/
    │   │   │   └── Index.cshtml
    │   │   ├── Ipc/
    │   │   │   └── Index.cshtml
    │   │   ├── Menus/
    │   │   │   └── Index.cshtml
    │   │   ├── Notifications/
    │   │   │   └── Index.cshtml
    │   │   ├── Pdf/
    │   │   │   └── Index.cshtml
    │   │   ├── Shell/
    │   │   │   └── Index.cshtml
    │   │   ├── Shortcuts/
    │   │   │   └── Index.cshtml
    │   │   ├── Tray/
    │   │   │   └── Index.cshtml
    │   │   ├── Update/
    │   │   │   └── Index.cshtml
    │   │   └── Windows/
    │   │       ├── DemoWindow.cshtml
    │   │       ├── HandleErrorCrashes.cshtml
    │   │       └── Index.cshtml
    │   ├── appsettings.Development.json
    │   ├── appsettings.json
    │   └── wwwroot/
    │       └── assets/
    │           ├── app-icon/
    │           │   └── mac/
    │           │       └── app.icns
    │           ├── code-blocks.js
    │           ├── css/
    │           │   ├── about.css
    │           │   ├── demo.css
    │           │   ├── fonts/
    │           │   │   ├── SourceSansPro-Black.otf
    │           │   │   ├── SourceSansPro-BlackIt.otf
    │           │   │   ├── SourceSansPro-Bold.otf
    │           │   │   ├── SourceSansPro-BoldIt.otf
    │           │   │   ├── SourceSansPro-ExtraLight.otf
    │           │   │   ├── SourceSansPro-ExtraLightIt.otf
    │           │   │   ├── SourceSansPro-It.otf
    │           │   │   ├── SourceSansPro-Light.otf
    │           │   │   ├── SourceSansPro-LightIt.otf
    │           │   │   ├── SourceSansPro-Regular.otf
    │           │   │   ├── SourceSansPro-Semibold.otf
    │           │   │   └── SourceSansPro-SemiboldIt.otf
    │           │   ├── github.css
    │           │   ├── global.css
    │           │   ├── nativize.css
    │           │   ├── nav.css
    │           │   ├── print.css
    │           │   ├── section.css
    │           │   └── variables.css
    │           ├── demo-btns.js
    │           ├── ex-links.js
    │           ├── imports.js
    │           ├── mac/
    │           │   ├── child.plist
    │           │   ├── info.plist
    │           │   └── parent.plist
    │           └── nav.js
    ├── ElectronNET.sln
    ├── ElectronNET.sln.DotSettings
    ├── common.props
    └── testEnvironments.json
Download .txt
SYMBOL INDEX (1110 symbols across 265 files)

FILE: nuke/Build.cs
  class Build (line 23) | class Build : NukeBuild
    method Main (line 31) | public static int Main() => Execute<Build>(x => x.RunUnitTests);
    method OnBuildInitialized (line 61) | protected override void OnBuildInitialized()

FILE: nuke/CommonPropsParser.cs
  class CommonPropsParser (line 8) | public sealed class CommonPropsParser
    method CommonPropsParser (line 13) | public CommonPropsParser()
    method Parse (line 17) | public Version Parse(string propsPath)

FILE: nuke/Configuration.cs
  class Configuration (line 6) | [TypeConverter(typeof(TypeConverter<Configuration>))]

FILE: nuke/Extensions/StringExtensions.cs
  class StringExtensions (line 15) | public static class StringExtensions
    method Quote (line 22) | public static string Quote(this string value)
    method UnQuote (line 37) | public static string UnQuote(this string value)
    method SplitLines (line 52) | public static string[] SplitLines(this string content)
    method NormalizeLineEndings (line 63) | public static string NormalizeLineEndings(this string value)
    method IsQuoted (line 75) | private static bool IsQuoted(this string value)

FILE: nuke/ReleaseNotes.cs
  class ReleaseNotes (line 16) | public sealed class ReleaseNotes
    method ReleaseNotes (line 50) | public ReleaseNotes(SemVersion semVersion, IEnumerable<string> notes, ...
    method ReleaseNotes (line 65) | public ReleaseNotes(Version version, IEnumerable<string> notes, string...
    method ReleaseNotes (line 74) | private ReleaseNotes(Version version, SemVersion semVersion, IEnumerab...

FILE: nuke/ReleaseNotesParser.cs
  class ReleaseNotesParser (line 18) | public sealed class ReleaseNotesParser
    method ReleaseNotesParser (line 25) | public ReleaseNotesParser()
    method Parse (line 35) | public IReadOnlyList<ReleaseNotes> Parse(string content)
    method ParseComplexFormat (line 61) | private IReadOnlyList<ReleaseNotes> ParseComplexFormat(string[] lines)
    method ParseSimpleFormat (line 119) | private IReadOnlyList<ReleaseNotes> ParseSimpleFormat(string[] lines)

FILE: nuke/SemVersion.cs
  class SemVersion (line 17) | public class SemVersion : IComparable, IComparable<SemVersion>, IEquatab...
    method SemVersion (line 85) | public SemVersion(int major, int minor, int patch, string preRelease =...
    method SemVersion (line 99) | public SemVersion(int major, int minor, int patch, string preRelease, ...
    method TryParse (line 139) | public static bool TryParse(string version,
    method Equals (line 190) | public bool Equals(SemVersion other)
    method CompareTo (line 205) | public int CompareTo(SemVersion other)
    method CompareTo (line 274) | public int CompareTo(object obj)
    method Equals (line 286) | public override bool Equals(object obj)
    method GetHashCode (line 296) | public override int GetHashCode()
    method ToString (line 314) | public override string ToString()

FILE: src/ElectronNET.API/API/ApiBase.cs
  class ApiBase (line 14) | public abstract class ApiBase
    type SocketTaskEventNameTypes (line 16) | protected enum SocketTaskEventNameTypes
    type SocketTaskMessageNameTypes (line 22) | protected enum SocketTaskMessageNameTypes
    type SocketEventNameTypes (line 28) | protected enum SocketEventNameTypes
    method ApiBase (line 60) | protected ApiBase()
    method CallMethod0 (line 66) | protected void CallMethod0([CallerMemberName] string callerName = null)
    method CallMethod1 (line 79) | protected void CallMethod1(object val1, [CallerMemberName] string call...
    method CallMethod2 (line 92) | protected void CallMethod2(object val1, object val2, [CallerMemberName...
    method CallMethod3 (line 105) | protected void CallMethod3(object val1, object val2, object val3, [Cal...
    method InvokeAsync (line 118) | protected Task<T> InvokeAsync<T>(object arg = null, [CallerMemberName]...
    method InvokeAsyncWithTimeout (line 123) | protected Task<T> InvokeAsyncWithTimeout<T>(TimeSpan invocationTimeout...
    method AddEvent (line 146) | protected void AddEvent(Action value, int? id = null, [CallerMemberNam...
    method RemoveEvent (line 167) | protected void RemoveEvent(Action value, int? id = null, [CallerMember...
    method AddEvent (line 183) | protected void AddEvent<T>(Action<T> value, int? id = null, [CallerMem...
    method RemoveEvent (line 204) | protected void RemoveEvent<T>(Action<T> value, int? id = null, [Caller...
    method EventName (line 220) | private string EventName(string callerName)
    method EventKey (line 233) | private string EventKey(string eventName, int? id)
    class Invocator (line 238) | internal abstract class Invocator
      method Task (line 240) | public abstract Task<T> Task<T>();
      method Invocator (line 248) | public Invocator(ApiBase apiBase, string callerName, TimeSpan timeou...
      method Task (line 328) | public override Task<T1> Task<T1>()
    class Invocator (line 243) | internal class Invocator<T> : Invocator
      method Task (line 240) | public abstract Task<T> Task<T>();
      method Invocator (line 248) | public Invocator(ApiBase apiBase, string callerName, TimeSpan timeou...
      method Task (line 328) | public override Task<T1> Task<T1>()
    class EventContainer (line 334) | [SuppressMessage("ReSharper", "InconsistentlySynchronizedField")]
      method GetEventActionT (line 340) | private Action<T> GetEventActionT<T>()
      method SetEventActionT (line 345) | private void SetEventActionT<T>(Action<T> actionT)
      method OnEventAction (line 350) | public void OnEventAction() => this.eventAction?.Invoke();
      method OnEventActionT (line 352) | public void OnEventActionT<T>(T p) => this.GetEventActionT<T>()?.Inv...
      method Register (line 354) | public void Register(Action receiver)
      method Register (line 359) | public void Register<T>(Action<T> receiver)
      method Unregister (line 366) | public bool Unregister(Action receiver)
      method Unregister (line 372) | public bool Unregister<T>(Action<T> receiver)

FILE: src/ElectronNET.API/API/App.cs
  class App (line 17) | public sealed class App : ApiBase
    method App (line 379) | internal App()
    method Quit (line 413) | public void Quit()
    method Exit (line 423) | public void Exit(int exitCode = 0)
    method DisposeSocket (line 428) | public void DisposeSocket()
    method Relaunch (line 443) | public void Relaunch()
    method Relaunch (line 461) | public void Relaunch(RelaunchOptions relaunchOptions)
    method Focus (line 470) | public void Focus()
    method Focus (line 481) | public void Focus(FocusOptions focusOptions)
    method Hide (line 489) | [SupportedOSPlatform("macOS")]
    method Show (line 498) | [SupportedOSPlatform("macOS")]
    method GetAppPathAsync (line 507) | public async Task<string> GetAppPathAsync(CancellationToken cancellati...
    method SetAppLogsPath (line 521) | public void SetAppLogsPath(string path)
    method GetPathAsync (line 534) | public async Task<string> GetPathAsync(PathName pathName, Cancellation...
    method SetPath (line 561) | public void SetPath(PathName name, string path)
    method GetVersionAsync (line 571) | public async Task<string> GetVersionAsync(CancellationToken cancellati...
    method GetLocaleAsync (line 585) | public async Task<string> GetLocaleAsync(CancellationToken cancellatio...
    method AddRecentDocument (line 596) | [SupportedOSPlatform("macOS")]
    method ClearRecentDocuments (line 606) | [SupportedOSPlatform("macOS")]
    method SetAsDefaultProtocolClientAsync (line 638) | public async Task<bool> SetAsDefaultProtocolClientAsync(string protoco...
    method SetAsDefaultProtocolClientAsync (line 669) | public async Task<bool> SetAsDefaultProtocolClientAsync(string protoco...
    method SetAsDefaultProtocolClientAsync (line 701) | public async Task<bool> SetAsDefaultProtocolClientAsync(string protoco...
    method RemoveAsDefaultProtocolClientAsync (line 723) | [SupportedOSPlatform("macOS")]
    method RemoveAsDefaultProtocolClientAsync (line 738) | [SupportedOSPlatform("macOS")]
    method RemoveAsDefaultProtocolClientAsync (line 754) | [SupportedOSPlatform("macOS")]
    method IsDefaultProtocolClientAsync (line 784) | public async Task<bool> IsDefaultProtocolClientAsync(string protocol, ...
    method IsDefaultProtocolClientAsync (line 803) | public async Task<bool> IsDefaultProtocolClientAsync(string protocol, ...
    method IsDefaultProtocolClientAsync (line 823) | public async Task<bool> IsDefaultProtocolClientAsync(string protocol, ...
    method SetUserTasksAsync (line 846) | [SupportedOSPlatform("Windows")]
    method GetJumpListSettingsAsync (line 867) | [SupportedOSPlatform("Windows")]
    method SetJumpList (line 890) | [SupportedOSPlatform("Windows")]
    method RequestSingleInstanceLockAsync (line 917) | public async Task<bool> RequestSingleInstanceLockAsync(Action<string[]...
    method ReleaseSingleInstanceLock (line 949) | public void ReleaseSingleInstanceLock()
    method HasSingleInstanceLockAsync (line 960) | public async Task<bool> HasSingleInstanceLockAsync(CancellationToken c...
    method SetUserActivity (line 973) | [SupportedOSPlatform("macOS")]
    method SetUserActivity (line 991) | [SupportedOSPlatform("macOS")]
    method GetCurrentActivityTypeAsync (line 1001) | [SupportedOSPlatform("macOS")]
    method InvalidateCurrentActivity (line 1011) | [SupportedOSPlatform("macOS")]
    method ResignCurrentActivity (line 1020) | [SupportedOSPlatform("macOS")]
    method SetAppUserModelId (line 1030) | [SupportedOSPlatform("Windows")]
    method ImportCertificateAsync (line 1045) | [SupportedOSPlatform("Linux")]
    method GetAppMetricsAsync (line 1069) | public async Task<ProcessMetric[]> GetAppMetricsAsync(CancellationToke...
    method GetGpuFeatureStatusAsync (line 1081) | public async Task<GPUFeatureStatus> GetGpuFeatureStatusAsync(Cancellat...
    method SetBadgeCountAsync (line 1097) | [SupportedOSPlatform("Linux")]
    method GetBadgeCountAsync (line 1118) | [SupportedOSPlatform("Linux")]
    method IsUnityRunningAsync (line 1135) | [SupportedOSPlatform("Linux")]
    method GetLoginItemSettingsAsync (line 1146) | [SupportedOSPlatform("macOS")]
    method GetLoginItemSettingsAsync (line 1159) | [SupportedOSPlatform("macOS")]
    method SetLoginItemSettings (line 1190) | [SupportedOSPlatform("macOS")]
    method IsAccessibilitySupportEnabledAsync (line 1203) | [SupportedOSPlatform("macOS")]
    method SetAccessibilitySupportEnabled (line 1221) | [SupportedOSPlatform("macOS")]
    method ShowAboutPanel (line 1232) | public void ShowAboutPanel()
    method SetAboutPanelOptions (line 1248) | public void SetAboutPanelOptions(AboutPanelOptions options)
    method PreventQuit (line 1298) | internal void PreventQuit()
    method On (line 1312) | public void On(string eventName, Action action)
    method On (line 1320) | public async Task On(string eventName, Action<object> action)
    method Once (line 1328) | public void Once(string eventName, Action action)
    method Once (line 1336) | public async Task Once(string eventName, Action<object> action)

FILE: src/ElectronNET.API/API/AutoUpdater.cs
  class AutoUpdater (line 13) | public sealed class AutoUpdater : ApiBase
    method AutoUpdater (line 241) | internal AutoUpdater()
    method CheckForUpdatesAsync (line 268) | public Task<UpdateCheckResult> CheckForUpdatesAsync()
    method CheckForUpdatesAndNotifyAsync (line 304) | public Task<UpdateCheckResult> CheckForUpdatesAndNotifyAsync()
    method QuitAndInstall (line 343) | public void QuitAndInstall(bool isSilent = false, bool isForceRunAfter...
    method DownloadUpdateAsync (line 352) | public Task<string> DownloadUpdateAsync()
    method GetFeedURLAsync (line 367) | public Task<string> GetFeedURLAsync()

FILE: src/ElectronNET.API/API/BrowserView.cs
  class BrowserView (line 11) | public class BrowserView : ApiBase
    method BrowserView (line 45) | internal BrowserView(int id)
    method SetAutoResize (line 58) | public void SetAutoResize(AutoResizeOptions options)
    method SetBackgroundColor (line 68) | public void SetBackgroundColor(string color)

FILE: src/ElectronNET.API/API/BrowserWindow.cs
  class BrowserWindow (line 17) | public class BrowserWindow : ApiBase
    method BrowserWindow (line 306) | internal BrowserWindow(int id)
    method Destroy (line 317) | public void Destroy() => this.CallMethod0();
    method Close (line 323) | public void Close() => this.CallMethod0();
    method Focus (line 328) | public void Focus() => this.CallMethod0();
    method Blur (line 333) | public void Blur() => this.CallMethod0();
    method IsFocusedAsync (line 339) | public Task<bool> IsFocusedAsync() => this.InvokeAsync<bool>();
    method IsDestroyedAsync (line 345) | public Task<bool> IsDestroyedAsync() => this.InvokeAsync<bool>();
    method Show (line 350) | public void Show() => this.CallMethod0();
    method ShowInactive (line 355) | public void ShowInactive() => this.CallMethod0();
    method Hide (line 360) | public void Hide() => this.CallMethod0();
    method IsVisibleAsync (line 366) | public Task<bool> IsVisibleAsync() => this.InvokeAsync<bool>();
    method IsModalAsync (line 372) | public Task<bool> IsModalAsync() => this.InvokeAsync<bool>();
    method Maximize (line 377) | public void Maximize() => this.CallMethod0();
    method Unmaximize (line 382) | public void Unmaximize() => this.CallMethod0();
    method IsMaximizedAsync (line 388) | public Task<bool> IsMaximizedAsync() => this.InvokeAsync<bool>();
    method Minimize (line 393) | public void Minimize() => this.CallMethod0();
    method Restore (line 398) | public void Restore() => this.CallMethod0();
    method IsMinimizedAsync (line 404) | public Task<bool> IsMinimizedAsync() => this.InvokeAsync<bool>();
    method SetFullScreen (line 410) | public void SetFullScreen(bool flag) => this.CallMethod1(flag);
    method IsFullScreenAsync (line 416) | public Task<bool> IsFullScreenAsync() => this.InvokeAsync<bool>();
    method SetAspectRatio (line 432) | public void SetAspectRatio(double aspectRatio, Size extraSize) =>
    method SetAspectRatio (line 449) | public void SetAspectRatio(int aspectRatio, Size extraSize) =>
    method PreviewFile (line 458) | [SupportedOSPlatform("macOS")]
    method PreviewFile (line 469) | [SupportedOSPlatform("macOS")]
    method CloseFilePreview (line 475) | [SupportedOSPlatform("macOS")]
    method SetBounds (line 482) | public void SetBounds(Rectangle bounds) => this.CallMethod1(bounds);
    method SetBounds (line 489) | public void SetBounds(Rectangle bounds, bool animate) => this.CallMeth...
    method GetBoundsAsync (line 495) | public Task<Rectangle> GetBoundsAsync() => this.InvokeAsync<Rectangle>();
    method SetContentBounds (line 501) | public void SetContentBounds(Rectangle bounds) => this.CallMethod1(bou...
    method SetContentBounds (line 508) | public void SetContentBounds(Rectangle bounds, bool animate) => this.C...
    method GetContentBoundsAsync (line 514) | public Task<Rectangle> GetContentBoundsAsync() => this.InvokeAsync<Rec...
    method SetSize (line 521) | public void SetSize(int width, int height) => this.CallMethod2(width, ...
    method SetSize (line 529) | public void SetSize(int width, int height, bool animate) => this.CallM...
    method GetSizeAsync (line 535) | public Task<int[]> GetSizeAsync() => this.InvokeAsync<int[]>();
    method SetContentSize (line 542) | public void SetContentSize(int width, int height) => this.CallMethod2(...
    method SetContentSize (line 550) | public void SetContentSize(int width, int height, bool animate) => thi...
    method GetContentSizeAsync (line 556) | public Task<int[]> GetContentSizeAsync() => this.InvokeAsync<int[]>();
    method SetMinimumSize (line 563) | public void SetMinimumSize(int width, int height) => this.CallMethod2(...
    method GetMinimumSizeAsync (line 569) | public Task<int[]> GetMinimumSizeAsync() => this.InvokeAsync<int[]>();
    method SetMaximumSize (line 576) | public void SetMaximumSize(int width, int height) => this.CallMethod2(...
    method GetMaximumSizeAsync (line 582) | public Task<int[]> GetMaximumSizeAsync() => this.InvokeAsync<int[]>();
    method SetResizable (line 588) | public void SetResizable(bool resizable) => this.CallMethod1(resizable);
    method IsResizableAsync (line 594) | public Task<bool> IsResizableAsync() => this.InvokeAsync<bool>();
    method SetMovable (line 600) | [SupportedOSPlatform("macOS")]
    method IsMovableAsync (line 610) | [SupportedOSPlatform("macOS")]
    method SetMinimizable (line 618) | [SupportedOSPlatform("macOS")]
    method IsMinimizableAsync (line 628) | [SupportedOSPlatform("macOS")]
    method SetMaximizable (line 636) | [SupportedOSPlatform("macOS")]
    method IsMaximizableAsync (line 646) | [SupportedOSPlatform("macOS")]
    method SetFullScreenable (line 654) | public void SetFullScreenable(bool fullscreenable) => this.CallMethod1...
    method IsFullScreenableAsync (line 660) | public Task<bool> IsFullScreenableAsync() => this.InvokeAsync<bool>();
    method SetClosable (line 666) | [SupportedOSPlatform("macOS")]
    method IsClosableAsync (line 676) | [SupportedOSPlatform("macOS")]
    method SetAlwaysOnTop (line 686) | public void SetAlwaysOnTop(bool flag) => this.CallMethod1(flag);
    method SetAlwaysOnTop (line 697) | public void SetAlwaysOnTop(bool flag, OnTopLevel level) => this.CallMe...
    method SetAlwaysOnTop (line 710) | public void SetAlwaysOnTop(bool flag, OnTopLevel level, int relativeLe...
    method IsAlwaysOnTopAsync (line 716) | public Task<bool> IsAlwaysOnTopAsync() => this.InvokeAsync<bool>();
    method Center (line 721) | public void Center() => this.CallMethod0();
    method SetPosition (line 728) | public void SetPosition(int x, int y)
    method SetPosition (line 745) | public void SetPosition(int x, int y, bool animate)
    method isWindows10 (line 757) | private bool isWindows10()
    method GetPositionAsync (line 766) | public Task<int[]> GetPositionAsync() => this.InvokeAsync<int[]>();
    method SetTitle (line 772) | public void SetTitle(string title) => this.CallMethod1(title);
    method GetTitleAsync (line 780) | public Task<string> GetTitleAsync() => this.InvokeAsync<string>();
    method SetSheetOffset (line 788) | [SupportedOSPlatform("macOS")]
    method SetSheetOffset (line 798) | [SupportedOSPlatform("macOS")]
    method FlashFrame (line 805) | public void FlashFrame(bool flag) => this.CallMethod1(flag);
    method SetSkipTaskbar (line 811) | [SupportedOSPlatform("macOS")]
    method SetKiosk (line 819) | public void SetKiosk(bool flag) => this.CallMethod1(flag);
    method IsKioskAsync (line 825) | public Task<bool> IsKioskAsync() => this.InvokeAsync<bool>();
    method GetNativeWindowHandle (line 831) | public Task<string> GetNativeWindowHandle() => this.InvokeAsync<string...
    method SetRepresentedFilename (line 838) | [SupportedOSPlatform("macOS")]
    method GetRepresentedFilenameAsync (line 845) | [SupportedOSPlatform("macOS")]
    method SetDocumentEdited (line 853) | [SupportedOSPlatform("macOS")]
    method IsDocumentEditedAsync (line 860) | [SupportedOSPlatform("macOS")]
    method FocusOnWebView (line 866) | public void FocusOnWebView() => this.CallMethod0();
    method BlurWebView (line 871) | public void BlurWebView() => this.CallMethod0();
    method LoadURL (line 878) | public void LoadURL(string url) => this.CallMethod1(url);
    method LoadURL (line 886) | public void LoadURL(string url, LoadURLOptions options) => this.CallMe...
    method Reload (line 891) | public void Reload() => this.CallMethod0();
    method SetMenu (line 914) | [SupportedOSPlatform("Linux")]
    method RemoveMenu (line 933) | [SupportedOSPlatform("Linux")]
    method SetProgressBar (line 948) | public void SetProgressBar(double progress) => this.CallMethod1(progre...
    method SetProgressBar (line 962) | public void SetProgressBar(double progress, ProgressBarOptions progres...
    method SetHasShadow (line 969) | public void SetHasShadow(bool hasShadow) => this.CallMethod1(hasShadow);
    method HasShadowAsync (line 977) | public Task<bool> HasShadowAsync() => this.InvokeAsync<bool>();
    method SetThumbarButtonsAsync (line 1007) | [SupportedOSPlatform("Windows")]
    method SetThumbnailClip (line 1035) | [SupportedOSPlatform("Windows")]
    method SetThumbnailToolTip (line 1042) | [SupportedOSPlatform("Windows")]
    method SetAppDetails (line 1052) | [SupportedOSPlatform("Windows")]
    method ShowDefinitionForSelection (line 1058) | [SupportedOSPlatform("macOS")]
    method SetAutoHideMenuBar (line 1068) | [SupportedOSPlatform("Linux")]
    method IsMenuBarAutoHideAsync (line 1076) | [SupportedOSPlatform("Linux")]
    method SetMenuBarVisibility (line 1085) | [SupportedOSPlatform("Linux")]
    method IsMenuBarVisibleAsync (line 1093) | [SupportedOSPlatform("Linux")]
    method SetVisibleOnAllWorkspaces (line 1103) | [SupportedOSPlatform("Linux")]
    method IsVisibleOnAllWorkspacesAsync (line 1113) | [SupportedOSPlatform("Linux")]
    method SetIgnoreMouseEvents (line 1124) | public void SetIgnoreMouseEvents(bool ignore) => this.CallMethod1(igno...
    method SetContentProtection (line 1133) | [SupportedOSPlatform("macOS")]
    method SetFocusable (line 1141) | [SupportedOSPlatform("macOS")]
    method SetParentWindow (line 1150) | public void SetParentWindow(BrowserWindow parent)
    method GetParentWindowAsync (line 1166) | public async Task<BrowserWindow> GetParentWindowAsync()
    method GetChildWindowsAsync (line 1177) | public async Task<List<BrowserWindow>> GetChildWindowsAsync()
    method SetAutoHideCursor (line 1195) | [SupportedOSPlatform("macOS")]
    method SetVibrancy (line 1205) | [SupportedOSPlatform("macOS")]
    method SetBrowserView (line 1219) | public void SetBrowserView(BrowserView browserView)

FILE: src/ElectronNET.API/API/Clipboard.cs
  class Clipboard (line 14) | public sealed class Clipboard : ApiBase
    method Clipboard (line 22) | internal Clipboard()
    method ReadTextAsync (line 50) | public Task<string> ReadTextAsync(string type = "") => this.InvokeAsyn...
    method WriteText (line 57) | public void WriteText(string text, string type = "")
    method ReadHTMLAsync (line 67) | public Task<string> ReadHTMLAsync(string type = "") => this.InvokeAsyn...
    method WriteHTML (line 74) | public void WriteHTML(string markup, string type = "")
    method ReadRTFAsync (line 84) | public Task<string> ReadRTFAsync(string type = "") => this.InvokeAsync...
    method WriteRTF (line 91) | public void WriteRTF(string text, string type = "")
    method ReadBookmarkAsync (line 102) | [SupportedOSPlatform("macOS")]
    method WriteBookmark (line 116) | [SupportedOSPlatform("macOS")]
    method ReadFindTextAsync (line 129) | [SupportedOSPlatform("macOS")]
    method WriteFindText (line 137) | [SupportedOSPlatform("macOS")]
    method Clear (line 147) | public void Clear(string type = "")
    method AvailableFormatsAsync (line 157) | public Task<string[]> AvailableFormatsAsync(string type = "") => this....
    method Write (line 164) | public void Write(Data data, string type = "")
    method ReadImageAsync (line 174) | public Task<NativeImage> ReadImageAsync(string type = "") => this.Invo...
    method WriteImage (line 181) | public void WriteImage(NativeImage image, string type = "")

FILE: src/ElectronNET.API/API/CommandLine.cs
  class CommandLine (line 9) | public sealed class CommandLine
    method CommandLine (line 11) | internal CommandLine()
    method AppendSwitch (line 46) | public void AppendSwitch(string the_switch, string value = "")
    method AppendArgument (line 60) | public void AppendArgument(string value)
    method HasSwitchAsync (line 71) | public async Task<bool> HasSwitchAsync(string switchName, Cancellation...
    method GetSwitchValueAsync (line 94) | public async Task<string> GetSwitchValueAsync(string switchName, Cance...

FILE: src/ElectronNET.API/API/Cookies.cs
  class Cookies (line 12) | public class Cookies
    method Cookies (line 22) | internal Cookies(int id)
    method GetAsync (line 74) | public Task<Cookie[]> GetAsync(CookieFilter filter)
    method SetAsync (line 90) | public Task SetAsync(CookieDetails details)
    method RemoveAsync (line 107) | public Task RemoveAsync(string url, string name)
    method FlushStoreAsync (line 122) | public Task FlushStoreAsync()

FILE: src/ElectronNET.API/API/Dialog.cs
  class Dialog (line 12) | public sealed class Dialog
    method Dialog (line 17) | internal Dialog()
    method ShowOpenDialogAsync (line 48) | public Task<string[]> ShowOpenDialogAsync(BrowserWindow browserWindow,...
    method ShowSaveDialogAsync (line 68) | public Task<string> ShowSaveDialogAsync(BrowserWindow browserWindow, S...
    method ShowMessageBoxAsync (line 91) | public async Task<MessageBoxResult> ShowMessageBoxAsync(string message)
    method ShowMessageBoxAsync (line 105) | public async Task<MessageBoxResult> ShowMessageBoxAsync(MessageBoxOpti...
    method ShowMessageBoxAsync (line 118) | public async Task<MessageBoxResult> ShowMessageBoxAsync(BrowserWindow ...
    method ShowMessageBoxAsync (line 131) | public Task<MessageBoxResult> ShowMessageBoxAsync(BrowserWindow browse...
    method ShowErrorBox (line 178) | public void ShowErrorBox(string title, string content)
    method ShowCertificateTrustDialogAsync (line 190) | [SupportedOSPlatform("macOS")]
    method ShowCertificateTrustDialogAsync (line 205) | [SupportedOSPlatform("macOS")]

FILE: src/ElectronNET.API/API/Dock.cs
  class Dock (line 13) | [SupportedOSPlatform("macOS")]
    method Dock (line 19) | internal Dock()
    method BounceAsync (line 52) | public async Task<int> BounceAsync(DockBounceType type, CancellationTo...
    method CancelBounce (line 71) | public void CancelBounce(int id)
    method DownloadFinished (line 80) | public void DownloadFinished(string filePath)
    method SetBadge (line 89) | public void SetBadge(string text)
    method GetBadgeAsync (line 99) | public async Task<string> GetBadgeAsync(CancellationToken cancellation...
    method Hide (line 117) | public void Hide()
    method Show (line 125) | public void Show()
    method IsVisibleAsync (line 136) | public async Task<bool> IsVisibleAsync(CancellationToken cancellationT...
    method SetMenu (line 170) | public void SetMenu(MenuItem[] menuItems)
    method GetMenu (line 188) | public async Task<Menu> GetMenu(CancellationToken cancellationToken = ...
    method SetIcon (line 207) | public void SetIcon(string image)

FILE: src/ElectronNET.API/API/Electron.cs
  class Electron (line 6) | public static class Electron

FILE: src/ElectronNET.API/API/Entities/AboutPanelOptions.cs
  class AboutPanelOptions (line 9) | public class AboutPanelOptions

FILE: src/ElectronNET.API/API/Entities/AddRepresentationOptions.cs
  class AddRepresentationOptions (line 9) | public class AddRepresentationOptions

FILE: src/ElectronNET.API/API/Entities/AppDetailsOptions.cs
  class AppDetailsOptions (line 9) | [SupportedOSPlatform("windows")]

FILE: src/ElectronNET.API/API/Entities/AutoResizeOptions.cs
  class AutoResizeOptions (line 9) | public class AutoResizeOptions

FILE: src/ElectronNET.API/API/Entities/BitmapOptions.cs
  class BitmapOptions (line 7) | public class BitmapOptions

FILE: src/ElectronNET.API/API/Entities/Blob.cs
  class Blob (line 7) | public class Blob : IPostData

FILE: src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs
  class BlockMapDataHolder (line 6) | public class BlockMapDataHolder

FILE: src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs
  class BrowserViewConstructorOptions (line 7) | public class BrowserViewConstructorOptions

FILE: src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs
  class BrowserWindowOptions (line 11) | public class BrowserWindowOptions

FILE: src/ElectronNET.API/API/Entities/CPUUsage.cs
  class CPUUsage (line 7) | public class CPUUsage

FILE: src/ElectronNET.API/API/Entities/Certificate.cs
  class Certificate (line 7) | public class Certificate

FILE: src/ElectronNET.API/API/Entities/CertificatePrincipal.cs
  class CertificatePrincipal (line 7) | public class CertificatePrincipal

FILE: src/ElectronNET.API/API/Entities/CertificateTrustDialogOptions.cs
  class CertificateTrustDialogOptions (line 7) | public class CertificateTrustDialogOptions

FILE: src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs
  class ChromeExtensionInfo (line 7) | public class ChromeExtensionInfo
    method ChromeExtensionInfo (line 14) | public ChromeExtensionInfo(string name, string version)

FILE: src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs
  class ClearStorageDataOptions (line 7) | public class ClearStorageDataOptions

FILE: src/ElectronNET.API/API/Entities/Cookie.cs
  class Cookie (line 7) | public class Cookie

FILE: src/ElectronNET.API/API/Entities/CookieChangedCause.cs
  type CookieChangedCause (line 8) | public enum CookieChangedCause

FILE: src/ElectronNET.API/API/Entities/CookieDetails.cs
  class CookieDetails (line 9) | public class CookieDetails

FILE: src/ElectronNET.API/API/Entities/CookieFilter.cs
  class CookieFilter (line 7) | public class CookieFilter

FILE: src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs
  class CreateFromBitmapOptions (line 7) | public class CreateFromBitmapOptions

FILE: src/ElectronNET.API/API/Entities/CreateFromBufferOptions.cs
  class CreateFromBufferOptions (line 7) | public class CreateFromBufferOptions

FILE: src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs
  class CreateInterruptedDownloadOptions (line 7) | public class CreateInterruptedDownloadOptions
    method CreateInterruptedDownloadOptions (line 59) | public CreateInterruptedDownloadOptions(string path, string[] urlChain...

FILE: src/ElectronNET.API/API/Entities/Data.cs
  class Data (line 6) | public class Data

FILE: src/ElectronNET.API/API/Entities/DefaultFontFamily.cs
  class DefaultFontFamily (line 6) | public class DefaultFontFamily

FILE: src/ElectronNET.API/API/Entities/DevToolsMode.cs
  type DevToolsMode (line 8) | public enum DevToolsMode

FILE: src/ElectronNET.API/API/Entities/Display.cs
  class Display (line 7) | public class Display

FILE: src/ElectronNET.API/API/Entities/DisplayBalloonOptions.cs
  type DisplayBalloonIconType (line 8) | public enum DisplayBalloonIconType
  class DisplayBalloonOptions (line 18) | [SupportedOSPlatform("Windows")]

FILE: src/ElectronNET.API/API/Entities/DockBounceType.cs
  type DockBounceType (line 10) | [SupportedOSPlatform("macOS")]

FILE: src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs
  class EnableNetworkEmulationOptions (line 7) | public class EnableNetworkEmulationOptions

FILE: src/ElectronNET.API/API/Entities/Extension.cs
  class Extension (line 7) | public class Extension

FILE: src/ElectronNET.API/API/Entities/FileFilter.cs
  class FileFilter (line 7) | public class FileFilter

FILE: src/ElectronNET.API/API/Entities/FileIconOptions.cs
  class FileIconOptions (line 7) | public class FileIconOptions
    method FileIconOptions (line 19) | public FileIconOptions(FileIconSize fileIconSize)

FILE: src/ElectronNET.API/API/Entities/FileIconSize.cs
  type FileIconSize (line 9) | public enum FileIconSize

FILE: src/ElectronNET.API/API/Entities/FocusOptions.cs
  class FocusOptions (line 9) | public class FocusOptions

FILE: src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs
  class GPUFeatureStatus (line 23) | public class GPUFeatureStatus

FILE: src/ElectronNET.API/API/Entities/IPostData.cs
  type IPostData (line 8) | public interface IPostData

FILE: src/ElectronNET.API/API/Entities/ImportCertificateOptions.cs
  class ImportCertificateOptions (line 9) | [SupportedOSPlatform("linux")]

FILE: src/ElectronNET.API/API/Entities/InputEvent.cs
  class InputEvent (line 13) | public class InputEvent

FILE: src/ElectronNET.API/API/Entities/InputEventType.cs
  type InputEventType (line 6) | public enum InputEventType

FILE: src/ElectronNET.API/API/Entities/JumpListCategory.cs
  class JumpListCategory (line 11) | [SupportedOSPlatform("windows")]

FILE: src/ElectronNET.API/API/Entities/JumpListCategoryType.cs
  type JumpListCategoryType (line 9) | [SupportedOSPlatform("Windows")]

FILE: src/ElectronNET.API/API/Entities/JumpListItem.cs
  class JumpListItem (line 11) | [SupportedOSPlatform("windows")]

FILE: src/ElectronNET.API/API/Entities/JumpListItemType.cs
  type JumpListItemType (line 9) | [SupportedOSPlatform("Windows")]

FILE: src/ElectronNET.API/API/Entities/JumpListSettings.cs
  class JumpListSettings (line 10) | [SupportedOSPlatform("windows")]

FILE: src/ElectronNET.API/API/Entities/LoadURLOptions.cs
  class LoadURLOptions (line 8) | public class LoadURLOptions

FILE: src/ElectronNET.API/API/Entities/LoginItemLaunchItem.cs
  class LoginItemLaunchItem (line 9) | [SupportedOSPlatform("windows")]

FILE: src/ElectronNET.API/API/Entities/LoginItemSettings.cs
  class LoginItemSettings (line 9) | public class LoginItemSettings

FILE: src/ElectronNET.API/API/Entities/LoginItemSettingsOptions.cs
  class LoginItemSettingsOptions (line 8) | public class LoginItemSettingsOptions

FILE: src/ElectronNET.API/API/Entities/LoginSettings.cs
  class LoginSettings (line 9) | public class LoginSettings

FILE: src/ElectronNET.API/API/Entities/Margins.cs
  class Margins (line 7) | public class Margins

FILE: src/ElectronNET.API/API/Entities/MemoryInfo.cs
  class MemoryInfo (line 10) | public class MemoryInfo

FILE: src/ElectronNET.API/API/Entities/MenuItem.cs
  class MenuItem (line 11) | public class MenuItem

FILE: src/ElectronNET.API/API/Entities/MenuRole.cs
  type MenuRole (line 6) | public enum MenuRole

FILE: src/ElectronNET.API/API/Entities/MenuType.cs
  type MenuType (line 9) | public enum MenuType

FILE: src/ElectronNET.API/API/Entities/MessageBoxOptions.cs
  class MessageBoxOptions (line 10) | public class MessageBoxOptions
    method MessageBoxOptions (line 88) | public MessageBoxOptions(string message)

FILE: src/ElectronNET.API/API/Entities/MessageBoxResult.cs
  class MessageBoxResult (line 7) | public class MessageBoxResult

FILE: src/ElectronNET.API/API/Entities/MessageBoxType.cs
  type MessageBoxType (line 7) | public enum MessageBoxType

FILE: src/ElectronNET.API/API/Entities/ModifierType.cs
  type ModifierType (line 7) | public enum ModifierType

FILE: src/ElectronNET.API/API/Entities/NativeImage.cs
  class NativeImage (line 17) | [JsonConverter(typeof(NativeImageJsonConverter))]
    method ExtractDpiFromFilePath (line 30) | private static float? ExtractDpiFromFilePath(string filePath)
    method BytesToImage (line 39) | private static Image BytesToImage(byte[] bytes)
    method CreateEmpty (line 48) | public static NativeImage CreateEmpty()
    method CreateFromBitmap (line 56) | public static NativeImage CreateFromBitmap(Bitmap bitmap, CreateFromBi...
    method CreateFromBuffer (line 69) | public static NativeImage CreateFromBuffer(byte[] buffer, CreateFromBu...
    method CreateFromDataURL (line 86) | public static NativeImage CreateFromDataURL(string dataUrl)
    method CreateFromPath (line 104) | public static NativeImage CreateFromPath(string path)
    method NativeImage (line 144) | public NativeImage()
    method NativeImage (line 151) | public NativeImage(Image bitmap, float scaleFactor = 1.0f)
    method NativeImage (line 159) | public NativeImage(Dictionary<float, Image> imageDictionary)
    method Crop (line 167) | public NativeImage Crop(Rectangle rect)
    method Resize (line 181) | public NativeImage Resize(ResizeOptions options)
    method AddRepresentation (line 196) | public void AddRepresentation(AddRepresentationOptions options)
    method GetAspectRatio (line 214) | public float GetAspectRatio(float scaleFactor = 1.0f)
    method GetBitmap (line 228) | public byte[] GetBitmap(BitmapOptions options)
    method GetNativeHandle (line 236) | public byte[] GetNativeHandle()
    method GetSize (line 244) | public Size GetSize(float scaleFactor = 1.0f)
    method IsEmpty (line 262) | public bool IsEmpty()
    method SetTemplateImage (line 281) | public void SetTemplateImage(bool option)
    method ToBitmap (line 289) | public byte[] ToBitmap(ToBitmapOptions options)
    method ToDataURL (line 297) | public string ToDataURL(ToDataUrlOptions options)
    method ToJPEG (line 320) | public byte[] ToJPEG(int quality)
    method ToPNG (line 328) | public byte[] ToPNG(ToPNGOptions options)
    method ImageToBytes (line 333) | private byte[] ImageToBytes(ImageFormat imageFormat = null, float scal...
    method Resize (line 359) | private Image Resize(int? width, int? height, float scaleFactor = 1.0f)
    method Crop (line 389) | private Image Crop(int? x, int? y, int? width, int? height, float scal...
    method GetEncoder (line 420) | private ImageCodecInfo GetEncoder(ImageFormat format)
    method GetAllScaledImages (line 434) | internal Dictionary<float, string> GetAllScaledImages()
    method GetScale (line 452) | internal Image GetScale(float scaleFactor)

FILE: src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs
  class NativeImageJsonConverter (line 12) | internal class NativeImageJsonConverter : JsonConverter<NativeImage>
    method Write (line 14) | public override void Write(Utf8JsonWriter writer, NativeImage value, J...
    method Read (line 26) | public override NativeImage Read(ref Utf8JsonReader reader, Type typeT...

FILE: src/ElectronNET.API/API/Entities/NotificationAction.cs
  class NotificationAction (line 9) | [SupportedOSPlatform("macos")]

FILE: src/ElectronNET.API/API/Entities/NotificationOptions.cs
  class NotificationOptions (line 11) | public class NotificationOptions
    method NotificationOptions (line 185) | public NotificationOptions(string title, string body)

FILE: src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs
  class OnDidFailLoadInfo (line 6) | public class OnDidFailLoadInfo

FILE: src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs
  class OnDidNavigateInfo (line 7) | public class OnDidNavigateInfo

FILE: src/ElectronNET.API/API/Entities/OnTopLevel.cs
  type OnTopLevel (line 10) | [SupportedOSPlatform("macOS")]

FILE: src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs
  class OpenDevToolsOptions (line 8) | public class OpenDevToolsOptions

FILE: src/ElectronNET.API/API/Entities/OpenDialogOptions.cs
  class OpenDialogOptions (line 11) | public class OpenDialogOptions

FILE: src/ElectronNET.API/API/Entities/OpenDialogProperty.cs
  type OpenDialogProperty (line 8) | public enum OpenDialogProperty

FILE: src/ElectronNET.API/API/Entities/OpenExternalOptions.cs
  class OpenExternalOptions (line 10) | public class OpenExternalOptions

FILE: src/ElectronNET.API/API/Entities/PageSize.cs
  class PageSize (line 3) | public class PageSize
    method PageSize (line 13) | public PageSize()
    method PageSize (line 17) | private PageSize(string value) : this() => _value = value;

FILE: src/ElectronNET.API/API/Entities/PathName.cs
  type PathName (line 10) | public enum PathName

FILE: src/ElectronNET.API/API/Entities/Point.cs
  class Point (line 7) | public class Point

FILE: src/ElectronNET.API/API/Entities/PrintOptions.cs
  class PrintDpi (line 7) | public class PrintDpi
  class PrintPageRange (line 24) | public class PrintPageRange
  class PrintOptions (line 41) | public class PrintOptions

FILE: src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs
  class PrintToPDFOptions (line 10) | public class PrintToPDFOptions

FILE: src/ElectronNET.API/API/Entities/PrinterInfo.cs
  class PrinterInfo (line 9) | public class PrinterInfo

FILE: src/ElectronNET.API/API/Entities/ProcessMetric.cs
  class ProcessMetric (line 9) | public class ProcessMetric

FILE: src/ElectronNET.API/API/Entities/ProcessVersions.cs
  type ProcessVersions (line 10) | public record ProcessVersions(string Chrome, string Electron);

FILE: src/ElectronNET.API/API/Entities/ProgressBarMode.cs
  type ProgressBarMode (line 9) | [SupportedOSPlatform("Windows")]

FILE: src/ElectronNET.API/API/Entities/ProgressBarOptions.cs
  class ProgressBarOptions (line 10) | public class ProgressBarOptions

FILE: src/ElectronNET.API/API/Entities/ProgressInfo.cs
  class ProgressInfo (line 7) | public class ProgressInfo

FILE: src/ElectronNET.API/API/Entities/ProxyConfig.cs
  class ProxyConfig (line 6) | public class ProxyConfig
    method ProxyConfig (line 35) | public ProxyConfig(string pacScript, string proxyRules, string proxyBy...

FILE: src/ElectronNET.API/API/Entities/ReadBookmark.cs
  class ReadBookmark (line 9) | [SupportedOSPlatform("macOS")]

FILE: src/ElectronNET.API/API/Entities/Rectangle.cs
  class Rectangle (line 7) | public class Rectangle

FILE: src/ElectronNET.API/API/Entities/RelaunchOptions.cs
  class RelaunchOptions (line 7) | public class RelaunchOptions

FILE: src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs
  class ReleaseNoteInfo (line 7) | public class ReleaseNoteInfo

FILE: src/ElectronNET.API/API/Entities/RemovePassword.cs
  class RemovePassword (line 9) | public class RemovePassword
    method RemovePassword (line 47) | public RemovePassword(string type)

FILE: src/ElectronNET.API/API/Entities/ResizeOptions.cs
  class ResizeOptions (line 7) | public class ResizeOptions

FILE: src/ElectronNET.API/API/Entities/SaveDialogOptions.cs
  class SaveDialogOptions (line 10) | public class SaveDialogOptions

FILE: src/ElectronNET.API/API/Entities/SaveDialogProperty.cs
  type SaveDialogProperty (line 9) | public enum SaveDialogProperty

FILE: src/ElectronNET.API/API/Entities/Scheme.cs
  type Scheme (line 7) | public enum Scheme

FILE: src/ElectronNET.API/API/Entities/SemVer.cs
  class SemVer (line 7) | public class SemVer
  class SemVerOptions (line 59) | public class SemVerOptions

FILE: src/ElectronNET.API/API/Entities/SharingItem.cs
  class SharingItem (line 9) | [SupportedOSPlatform("macos")]

FILE: src/ElectronNET.API/API/Entities/ShortcutDetails.cs
  class ShortcutDetails (line 9) | [SupportedOSPlatform("windows")]

FILE: src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs
  type ShortcutLinkOperation (line 10) | [SupportedOSPlatform("Windows")]

FILE: src/ElectronNET.API/API/Entities/Size.cs
  class Size (line 7) | public class Size

FILE: src/ElectronNET.API/API/Entities/ThemeSourceMode.cs
  type ThemeSourceMode (line 9) | public enum ThemeSourceMode

FILE: src/ElectronNET.API/API/Entities/ThumbarButton.cs
  class ThumbarButton (line 11) | [SupportedOSPlatform("windows")]
    method ThumbarButton (line 57) | public ThumbarButton(string icon)

FILE: src/ElectronNET.API/API/Entities/ThumbarButtonFlag.cs
  type ThumbarButtonFlag (line 9) | [SupportedOSPlatform("windows")]

FILE: src/ElectronNET.API/API/Entities/TitleBarOverlay.cs
  class TitleBarOverlay (line 9) | public class TitleBarOverlay
    method TitleBarOverlay (line 13) | public TitleBarOverlay()
    method TitleBarOverlay (line 17) | private TitleBarOverlay(bool value) : this() => _value = value;

FILE: src/ElectronNET.API/API/Entities/TitleBarStyle.cs
  type TitleBarStyle (line 9) | public enum TitleBarStyle

FILE: src/ElectronNET.API/API/Entities/ToBitmapOptions.cs
  class ToBitmapOptions (line 7) | public class ToBitmapOptions

FILE: src/ElectronNET.API/API/Entities/ToDataUrlOptions.cs
  class ToDataUrlOptions (line 7) | public class ToDataUrlOptions

FILE: src/ElectronNET.API/API/Entities/ToPNGOptions.cs
  class ToPNGOptions (line 7) | public class ToPNGOptions

FILE: src/ElectronNET.API/API/Entities/TrayClickEventArgs.cs
  class TrayClickEventArgs (line 8) | public class TrayClickEventArgs

FILE: src/ElectronNET.API/API/Entities/UpdateCancellationToken.cs
  class UpdateCancellationToken (line 7) | public class UpdateCancellationToken
    method Cancel (line 17) | public void Cancel()
    method Dispose (line 24) | public void Dispose()

FILE: src/ElectronNET.API/API/Entities/UpdateCheckResult.cs
  class UpdateCheckResult (line 7) | public class UpdateCheckResult

FILE: src/ElectronNET.API/API/Entities/UpdateFileInfo.cs
  class UpdateFileInfo (line 7) | public class UpdateFileInfo : BlockMapDataHolder

FILE: src/ElectronNET.API/API/Entities/UpdateInfo.cs
  class UpdateInfo (line 7) | public class UpdateInfo

FILE: src/ElectronNET.API/API/Entities/UploadFile.cs
  class UploadFile (line 7) | public class UploadFile : IPostData

FILE: src/ElectronNET.API/API/Entities/UploadRawData.cs
  class UploadRawData (line 7) | public class UploadRawData : IPostData

FILE: src/ElectronNET.API/API/Entities/UserTask.cs
  class UserTask (line 9) | [SupportedOSPlatform("Windows")]

FILE: src/ElectronNET.API/API/Entities/Vibrancy.cs
  type Vibrancy (line 10) | [SupportedOSPlatform("macos")]

FILE: src/ElectronNET.API/API/Entities/WebPreferences.cs
  class WebPreferences (line 10) | public class WebPreferences

FILE: src/ElectronNET.API/API/Extensions/MenuItemExtensions.cs
  class MenuItemExtensions (line 8) | internal static class MenuItemExtensions
    method AddMenuItemsId (line 10) | public static MenuItem[] AddMenuItemsId(this MenuItem[] menuItems)
    method GetMenuItem (line 29) | public static MenuItem GetMenuItem(this List<MenuItem> menuItems, stri...
    method AddSubmenuTypes (line 52) | public static MenuItem[] AddSubmenuTypes(this MenuItem[] menuItems)

FILE: src/ElectronNET.API/API/Extensions/ThumbarButtonExtensions.cs
  class ThumbarButtonExtensions (line 7) | internal static class ThumbarButtonExtensions
    method AddThumbarButtonsId (line 9) | public static ThumbarButton[] AddThumbarButtonsId(this ThumbarButton[]...
    method GetThumbarButton (line 24) | public static ThumbarButton GetThumbarButton(this List<ThumbarButton> ...

FILE: src/ElectronNET.API/API/GlobalShortcut.cs
  class GlobalShortcut (line 11) | public sealed class GlobalShortcut
    method GlobalShortcut (line 16) | internal GlobalShortcut()
    method Register (line 49) | public void Register(string accelerator, Action function)
    method IsRegisteredAsync (line 74) | public Task<bool> IsRegisteredAsync(string accelerator)
    method Unregister (line 87) | public void Unregister(string accelerator)
    method UnregisterAll (line 96) | public void UnregisterAll()

FILE: src/ElectronNET.API/API/HostHook.cs
  class HostHook (line 15) | public sealed class HostHook
    method HostHook (line 21) | internal HostHook()
    method Call (line 49) | public void Call(string socketEventName, params dynamic[] arguments)
    method CallAsync (line 63) | public Task<T> CallAsync<T>(string socketEventName, params dynamic[] a...

FILE: src/ElectronNET.API/API/HybridSupport.cs
  class HybridSupport (line 6) | public static class HybridSupport

FILE: src/ElectronNET.API/API/IpcMain.cs
  class IpcMain (line 14) | public sealed class IpcMain
    method IpcMain (line 31) | internal IpcMain()
    method On (line 60) | public async Task On(string channel, Action<object> listener)
    method FormatArguments (line 71) | private static object FormatArguments(JsonElement args)
    method OnSync (line 94) | public void OnSync(string channel, Func<object, object> listener)
    method OnSync (line 114) | public void OnSync(string channel, Func<object, Task<object>> listener)
    method Once (line 134) | public void Once(string channel, Action<object> listener)
    method RemoveAllListeners (line 148) | public void RemoveAllListeners(string channel)
    method Send (line 162) | public void Send(BrowserWindow browserWindow, string channel, params o...
    method Send (line 176) | public void Send(BrowserView browserView, string channel, params objec...
    method Handle (line 187) | public void Handle(string channel, Func<object, object> listener)
    method Handle (line 204) | public void Handle(string channel, Func<object, Task<object>> listener)
    method HandleOnce (line 224) | public void HandleOnce(string channel, Func<object, object> listener)
    method HandleOnce (line 241) | public void HandleOnce(string channel, Func<object, Task<object>> list...
    method RemoveHandler (line 259) | public void RemoveHandler(string channel)

FILE: src/ElectronNET.API/API/Menu.cs
  class Menu (line 14) | public sealed class Menu
    method Menu (line 19) | internal Menu()
    method SetApplicationMenu (line 62) | public void SetApplicationMenu(MenuItem[] menuItems)
    method SetContextMenu (line 95) | public void SetContextMenu(BrowserWindow browserWindow, MenuItem[] men...
    method ContextMenuPopup (line 128) | public void ContextMenuPopup(BrowserWindow browserWindow)

FILE: src/ElectronNET.API/API/NativeTheme.cs
  class NativeTheme (line 12) | public sealed class NativeTheme : ApiBase
    method NativeTheme (line 21) | internal NativeTheme()
    method SetThemeSource (line 100) | public void SetThemeSource(ThemeSourceMode themeSourceMode)
    method GetThemeSourceAsync (line 111) | public Task<ThemeSourceMode> GetThemeSourceAsync() => this.InvokeAsync...
    method ShouldUseDarkColorsAsync (line 118) | public Task<bool> ShouldUseDarkColorsAsync() => this.InvokeAsync<bool>();
    method ShouldUseHighContrastColorsAsync (line 124) | [SupportedOSPlatform("macOS")]
    method ShouldUseInvertedColorSchemeAsync (line 132) | [SupportedOSPlatform("macOS")]

FILE: src/ElectronNET.API/API/Notification.cs
  class Notification (line 12) | public sealed class Notification : ApiBase
    method Notification (line 18) | internal Notification()
    method Show (line 47) | public void Show(NotificationOptions notificationOptions)
    method GenerateIDsForDefinedActions (line 54) | private static void GenerateIDsForDefinedActions(NotificationOptions n...
    method IsSupportedAsync (line 120) | public Task<bool> IsSupportedAsync() => this.InvokeAsync<bool>();

FILE: src/ElectronNET.API/API/PowerMonitor.cs
  class PowerMonitor (line 11) | public sealed class PowerMonitor : ApiBase
    method PowerMonitor (line 95) | internal PowerMonitor()

FILE: src/ElectronNET.API/API/Process.cs
  class Process (line 12) | public sealed class Process : ApiBase
    method Process (line 17) | internal Process()

FILE: src/ElectronNET.API/API/QuitEventArgs.cs
  class QuitEventArgs (line 6) | public sealed class QuitEventArgs
    method PreventDefault (line 11) | public void PreventDefault()

FILE: src/ElectronNET.API/API/Screen.cs
  class Screen (line 14) | public sealed class Screen : ApiBase
    method Screen (line 79) | internal Screen()
    method GetCursorScreenPointAsync (line 106) | public Task<Point> GetCursorScreenPointAsync() => this.InvokeAsync<Poi...
    method GetMenuBarWorkAreaAsync (line 112) | [SupportedOSPlatform("macOS")]
    method GetPrimaryDisplayAsync (line 119) | public Task<Display> GetPrimaryDisplayAsync() => this.InvokeAsync<Disp...
    method GetAllDisplaysAsync (line 125) | public Task<Display[]> GetAllDisplaysAsync() => this.InvokeAsync<Displ...
    method GetAllDisplaysAsync (line 134) | public Task<Display[]> GetAllDisplaysAsync(TimeSpan invocationTimeout)...
    method GetDisplayNearestPointAsync (line 140) | public Task<Display> GetDisplayNearestPointAsync(Point point) => this....
    method GetDisplayMatchingAsync (line 147) | public Task<Display> GetDisplayMatchingAsync(Rectangle rectangle) => t...

FILE: src/ElectronNET.API/API/Session.cs
  class Session (line 10) | public class Session
    method Session (line 27) | internal Session(int id)
    method AllowNTLMCredentialsForDomains (line 38) | public void AllowNTLMCredentialsForDomains(string domains)
    method ClearAuthCacheAsync (line 48) | public Task ClearAuthCacheAsync(RemovePassword options)
    method ClearAuthCacheAsync (line 62) | public Task ClearAuthCacheAsync()
    method ClearCacheAsync (line 77) | public Task ClearCacheAsync()
    method ClearHostResolverCacheAsync (line 92) | public Task ClearHostResolverCacheAsync()
    method ClearStorageDataAsync (line 107) | public Task ClearStorageDataAsync()
    method ClearStorageDataAsync (line 123) | public Task ClearStorageDataAsync(ClearStorageDataOptions options)
    method CreateInterruptedDownload (line 142) | public void CreateInterruptedDownload(CreateInterruptedDownloadOptions...
    method DisableNetworkEmulation (line 151) | public void DisableNetworkEmulation()
    method EnableNetworkEmulation (line 160) | public void EnableNetworkEmulation(EnableNetworkEmulationOptions options)
    method FlushStorageData (line 168) | public void FlushStorageData()
    method GetBlobDataAsync (line 178) | public Task<int[]> GetBlobDataAsync(string identifier)
    method GetCacheSizeAsync (line 193) | public Task<int> GetCacheSizeAsync()
    method GetPreloadsAsync (line 208) | public Task<string[]> GetPreloadsAsync()
    method GetUserAgent (line 223) | public Task<string> GetUserAgent()
    method ResolveProxyAsync (line 240) | public Task<string> ResolveProxyAsync(string url)
    method SetDownloadPath (line 256) | public void SetDownloadPath(string path)
    method SetPreloads (line 266) | public void SetPreloads(string[] preloads)
    method SetProxyAsync (line 277) | public Task SetProxyAsync(ProxyConfig config)
    method SetUserAgent (line 294) | public void SetUserAgent(string userAgent)
    method SetUserAgent (line 310) | public void SetUserAgent(string userAgent, string acceptLanguages)
    method GetAllExtensionsAsync (line 320) | public Task<ChromeExtensionInfo[]> GetAllExtensionsAsync()
    method RemoveExtension (line 335) | public void RemoveExtension(string name)
    method LoadExtensionAsync (line 367) | public Task<Extension> LoadExtensionAsync(string path, bool allowFileA...

FILE: src/ElectronNET.API/API/Shell.cs
  class Shell (line 11) | public sealed class Shell
    method Shell (line 16) | internal Shell()
    method ShowItemInFolderAsync (line 43) | public Task ShowItemInFolderAsync(string fullPath)
    method OpenPathAsync (line 55) | public Task<string> OpenPathAsync(string path)
    method OpenExternalAsync (line 71) | public Task<string> OpenExternalAsync(string url)
    method OpenExternalAsync (line 83) | public Task<string> OpenExternalAsync(string url, OpenExternalOptions ...
    method TrashItemAsync (line 106) | public Task<bool> TrashItemAsync(string fullPath)
    method Beep (line 119) | public void Beep()
    method WriteShortcutLinkAsync (line 131) | [SupportedOSPlatform("Windows")]
    method ReadShortcutLinkAsync (line 148) | [SupportedOSPlatform("Windows")]

FILE: src/ElectronNET.API/API/Tray.cs
  class Tray (line 18) | public sealed class Tray : ApiBase
    method Tray (line 168) | internal Tray()
    method Show (line 206) | public async Task Show(string image, MenuItem menuItem)
    method Show (line 216) | public async Task Show(string image, MenuItem[] menuItems)
    method SetMenuItems (line 233) | public async Task SetMenuItems(MenuItem[] menuItems)
    method RegisterMenuItemClickedHandler (line 243) | private void RegisterMenuItemClickedHandler()
    method Show (line 257) | public async Task Show(string image)
    method Destroy (line 265) | public async Task Destroy()
    method SetImage (line 275) | public async Task SetImage(string image)
    method SetPressedImage (line 284) | [SupportedOSPlatform("macOS")]
    method SetToolTip (line 294) | public async Task SetToolTip(string toolTip)
    method SetTitle (line 303) | [SupportedOSPlatform("macOS")]
    method DisplayBalloon (line 313) | [SupportedOSPlatform("Windows")]
    method IsDestroyedAsync (line 323) | public async Task<bool> IsDestroyedAsync()
    method On (line 341) | public void On(string eventName, Action action)
    method On (line 349) | public async Task On<T>(string eventName, Action<T> action)
    method Once (line 357) | public void Once(string eventName, Action action)
    method Once (line 365) | public async Task Once<T>(string eventName, Action<T> action)

FILE: src/ElectronNET.API/API/WebContents.cs
  class WebContents (line 13) | public class WebContents : ApiBase
    method WebContents (line 116) | internal WebContents(int id)
    method OpenDevTools (line 125) | public void OpenDevTools()
    method OpenDevTools (line 134) | public void OpenDevTools(OpenDevToolsOptions openDevToolsOptions)
    method ToggleDevTools (line 142) | public void ToggleDevTools()
    method CloseDevTools (line 150) | public void CloseDevTools()
    method IsDevToolsOpened (line 159) | public bool IsDevToolsOpened()
    method IsDevToolsFocused (line 168) | public bool IsDevToolsFocused()
    method GetPrintersAsync (line 177) | public Task<PrinterInfo[]> GetPrintersAsync() => this.InvokeAsyncWithT...
    method PrintAsync (line 184) | public Task<bool> PrintAsync(PrintOptions options) => this.InvokeAsync...
    method PrintAsync (line 190) | public Task<bool> PrintAsync() => this.InvokeAsync<bool>(string.Empty);
    method PrintToPDFAsync (line 201) | public Task<bool> PrintToPDFAsync(string path, PrintToPDFOptions optio...
    method ExecuteJavaScriptAsync (line 235) | public Task<T> ExecuteJavaScriptAsync<T>(string code, bool userGesture...
    method GetUrl (line 250) | public Task<string> GetUrl()
    method LoadURLAsync (line 272) | public Task LoadURLAsync(string url)
    method LoadURLAsync (line 290) | public Task LoadURLAsync(string url, LoadURLOptions options)
    method InsertCSS (line 314) | public void InsertCSS(bool isBrowserWindow, string path)
    method GetZoomFactorAsync (line 323) | public Task<double> GetZoomFactorAsync() => InvokeAsync<double>();
    method SetZoomFactor (line 331) | public void SetZoomFactor(double factor)
    method GetZoomLevelAsync (line 340) | public Task<int> GetZoomLevelAsync() => InvokeAsync<int>();
    method SetZoomLevel (line 347) | public void SetZoomLevel(int level)
    method SetVisualZoomLevelLimitsAsync (line 357) | public Task SetVisualZoomLevelLimitsAsync(int minimumLevel, int maximu...
    method IsAudioMutedAsync (line 371) | public Task<bool> IsAudioMutedAsync() => InvokeAsync<bool>();
    method IsCurrentlyAudibleAsync (line 377) | public Task<bool> IsCurrentlyAudibleAsync() => InvokeAsync<bool>();
    method SetAudioMuted (line 383) | public void SetAudioMuted(bool muted)
    method GetUserAgentAsync (line 392) | public Task<string> GetUserAgentAsync() => InvokeAsyncWithTimeout<stri...
    method SetUserAgent (line 398) | public void SetUserAgent(string userAgent)

FILE: src/ElectronNET.API/API/WebRequest.cs
  class OnBeforeRequestDetails (line 7) | public class OnBeforeRequestDetails
  class WebRequestFilter (line 17) | public class WebRequestFilter
  class WebRequest (line 22) | public class WebRequest
    method WebRequest (line 26) | internal WebRequest(int id)
    method OnBeforeRequest (line 33) | public void OnBeforeRequest(WebRequestFilter filter, Action<OnBeforeRe...
    method RemoveListener (line 53) | public void RemoveListener(Action<OnBeforeRequestDetails, Action<objec...

FILE: src/ElectronNET.API/API/WindowManager.cs
  class WindowManager (line 15) | public sealed class WindowManager
    method WindowManager (line 20) | internal WindowManager()
    method CreateWindowAsync (line 86) | public async Task<BrowserWindow> CreateWindowAsync(string loadUrl = "h...
    method CreateWindowAsync (line 97) | public async Task<BrowserWindow> CreateWindowAsync(BrowserWindowOption...
    method IsWindows10 (line 152) | private bool IsWindows10()
    method CreateBrowserViewAsync (line 163) | public Task<BrowserView> CreateBrowserViewAsync()
    method CreateBrowserViewAsync (line 175) | public async Task<BrowserView> CreateBrowserViewAsync(BrowserViewConst...

FILE: src/ElectronNET.API/Bridge/BridgeConnector.cs
  class BridgeConnector (line 5) | internal static class BridgeConnector

FILE: src/ElectronNET.API/Bridge/Events.cs
  class Events (line 12) | internal class Events
    method Events (line 18) | private Events()
    method On (line 47) | public async Task On(string moduleName, string eventName, Action action)
    method On (line 63) | public async Task On<T>(string moduleName, string eventName, Action<T>...
    method Once (line 76) | public async Task Once(string moduleName, string eventName, Action act...
    method Once (line 91) | public async Task Once<T>(string moduleName, string eventName, Action<...

FILE: src/ElectronNET.API/Bridge/SocketIOFacade.cs
  class SocketIoFacade (line 11) | internal class SocketIoFacade : IDisposable
    method SocketIoFacade (line 17) | public SocketIoFacade(string uri)
    method Connect (line 29) | public void Connect()
    method On (line 50) | public void On(string eventName, Action action)
    method On (line 60) | public void On<T>(string eventName, Action<T> action)
    method Once (line 74) | public void Once(string eventName, Action action)
    method Once (line 88) | public void Once<T>(string eventName, Action<T> action)
    method Off (line 102) | public void Off(string eventName)
    method Emit (line 115) | public async Task Emit(string eventName, params object[] args)
    method Dispose (line 124) | public void Dispose()
    method Dispose (line 130) | protected virtual void Dispose(bool disposing)
    method CheckDisposed (line 139) | private void CheckDisposed()

FILE: src/ElectronNET.API/Common/Extensions.cs
  class Extensions (line 9) | internal static class Extensions
    method IsUnpackaged (line 11) | public static bool IsUnpackaged(this StartupMethod method)
    method LowerFirst (line 23) | public static string LowerFirst(this string str)
    method StripAsync (line 38) | public static string StripAsync(this string str)
    method StripOn (line 55) | public static string StripOn(this string str)
    method ToDashedEventName (line 65) | public static string ToDashedEventName(this string str)
    method ToCamelCaseEventName (line 70) | public static string ToCamelCaseEventName(this string str)
    method IsReady (line 75) | public static bool IsReady(this LifetimeServiceBase service)
    method IsNotStopped (line 80) | public static bool IsNotStopped(this LifetimeServiceBase service)
    method IsNullOrStopped (line 85) | public static bool IsNullOrStopped(this LifetimeServiceBase service)

FILE: src/ElectronNET.API/Common/ProcessRunner.cs
  class ProcessRunner (line 22) | [SuppressMessage("ReSharper", "SuspiciousLockOverSynchronizationPrimitiv...
    method ProcessRunner (line 35) | public ProcessRunner(string name)
    method Run (line 111) | public bool Run(string exeFileName, string commandLineArgs, string wor...
    method Run (line 132) | protected bool Run(RunnerParams runnerParams)
    method WriteAsync (line 205) | public async Task<bool> WriteAsync(string data)
    method WaitForExit (line 224) | public bool WaitForExit()
    method WaitAndKill (line 251) | public bool WaitAndKill(int timeoutMs)
    method WaitAndKillAsync (line 294) | public Task<bool> WaitAndKillAsync(int timeoutMs)
    method WaitForExitAsync (line 309) | public Task<bool> WaitForExitAsync(int timeoutMs, CancellationToken ca...
    method WaitForExitAsync (line 325) | public async Task<bool> WaitForExitAsync(CancellationToken cancellatio...
    method Cancel (line 363) | public void Cancel()
    method Close (line 417) | private void Close()
    method OnDispose (line 440) | protected virtual void OnDispose()
    method Dispose (line 444) | void IDisposable.Dispose()
    method ToString (line 451) | public override string ToString()
    method OnBeforeStartProcessCore (line 456) | protected virtual bool OnBeforeStartProcessCore(RunnerParams processRu...
    method OnProcessStartedCore (line 461) | protected virtual void OnProcessStartedCore()
    method OnProcessErrorCore (line 465) | protected virtual void OnProcessErrorCore(Exception processException)
    method OnProcessExitCore (line 469) | protected virtual void OnProcessExitCore(int exitCode)
    method RegisterProcessEvents (line 473) | private void RegisterProcessEvents(Process proc)
    method UnRegisterProcessEvents (line 480) | private void UnRegisterProcessEvents(Process proc)
    method Process_Exited (line 487) | private void Process_Exited(object sender, EventArgs e)
    method WaitForExitAfterExited (line 495) | private void WaitForExitAfterExited()
    method SetExitCode (line 508) | private void SetExitCode()
    method Process_ErrorDataReceived (line 527) | private void Process_ErrorDataReceived(object sender, DataReceivedEven...
    method Process_OutputDataReceived (line 561) | private void Process_OutputDataReceived(object sender, DataReceivedEve...

FILE: src/ElectronNET.API/Common/RunnerParams.cs
  class RunnerParams (line 9) | public sealed class RunnerParams
    method RunnerParams (line 22) | public RunnerParams()
    method RunnerParams (line 29) | public RunnerParams(string fileName)
    method RunnerParams (line 38) | public RunnerParams(string fileName, string arguments)

FILE: src/ElectronNET.API/Common/TimeSpanExtensions.cs
  class TimeSpanExtensions (line 13) | [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should b...
    method ms (line 19) | public static TimeSpan ms(this int value)
    method ms (line 24) | public static TimeSpan ms(this long value)
    method seconds (line 29) | public static TimeSpan seconds(this int value)
    method minutes (line 34) | public static TimeSpan minutes(this int value)
    method hours (line 39) | public static TimeSpan hours(this int value)
    method days (line 44) | public static TimeSpan days(this int value)
    method ms (line 49) | public static TimeSpan ms(this double value)
    method seconds (line 54) | public static TimeSpan seconds(this double value)
    method minutes (line 59) | public static TimeSpan minutes(this double value)
    method hours (line 64) | public static TimeSpan hours(this double value)
    method days (line 69) | public static TimeSpan days(this double value)

FILE: src/ElectronNET.API/Converter/ModifierTypeListConverter.cs
  class ModifierTypeListConverter (line 12) | public class ModifierTypeListConverter : JsonConverter<List<ModifierType>>
    method Read (line 14) | public override List<ModifierType> Read(ref Utf8JsonReader reader, Typ...
    method Write (line 38) | public override void Write(Utf8JsonWriter writer, List<ModifierType> v...

FILE: src/ElectronNET.API/Converter/PageSizeConverter.cs
  class PageSizeConverter (line 9) | public class PageSizeConverter : JsonConverter<PageSize>
    method Read (line 11) | public override PageSize Read(ref Utf8JsonReader reader, Type typeToCo...
    method Write (line 27) | public override void Write(Utf8JsonWriter writer, PageSize value, Json...

FILE: src/ElectronNET.API/Converter/TitleBarOverlayConverter.cs
  class TitleBarOverlayConverter (line 9) | public class TitleBarOverlayConverter : JsonConverter<TitleBarOverlay>
    method Read (line 11) | public override TitleBarOverlay Read(ref Utf8JsonReader reader, Type t...
    method Write (line 28) | public override void Write(Utf8JsonWriter writer, TitleBarOverlay valu...

FILE: src/ElectronNET.API/ElectronNetRuntime.cs
  class ElectronNetRuntime (line 11) | public static class ElectronNetRuntime
    method ElectronNetRuntime (line 21) | static ElectronNetRuntime()
    method GetSocket (line 52) | internal static SocketIoFacade GetSocket()

FILE: src/ElectronNET.API/Runtime/Controllers/RuntimeControllerBase.cs
  class RuntimeControllerBase (line 9) | internal abstract class RuntimeControllerBase : LifetimeServiceBase, IEl...
    method RuntimeControllerBase (line 11) | protected RuntimeControllerBase()
    method StartCore (line 21) | protected override Task StartCore()
    method StopCore (line 26) | protected override Task StopCore()

FILE: src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs
  class RuntimeControllerDotNetFirst (line 12) | internal class RuntimeControllerDotNetFirst : RuntimeControllerBase
    method RuntimeControllerDotNetFirst (line 18) | public RuntimeControllerDotNetFirst()
    method StartCore (line 39) | protected override Task StartCore()
    method ElectronProcess_Ready (line 64) | private void ElectronProcess_Ready(object sender, EventArgs e)
    method SocketBridge_Ready (line 73) | private void SocketBridge_Ready(object sender, EventArgs e)
    method SocketBridge_Stopped (line 78) | private void SocketBridge_Stopped(object sender, EventArgs e)
    method ElectronProcess_Stopped (line 83) | private void ElectronProcess_Stopped(object sender, EventArgs e)
    method HandleStopped (line 88) | private void HandleStopped()
    method StopCore (line 104) | protected override Task StopCore()

FILE: src/ElectronNET.API/Runtime/Controllers/RuntimeControllerElectronFirst.cs
  class RuntimeControllerElectronFirst (line 10) | internal class RuntimeControllerElectronFirst : RuntimeControllerBase
    method RuntimeControllerElectronFirst (line 16) | public RuntimeControllerElectronFirst()
    method StartCore (line 37) | protected override Task StartCore()
    method ElectronProcess_Ready (line 66) | private void ElectronProcess_Ready(object sender, EventArgs e)
    method SocketBridge_Ready (line 70) | private void SocketBridge_Ready(object sender, EventArgs e)
    method SocketBridge_Stopped (line 75) | private void SocketBridge_Stopped(object sender, EventArgs e)
    method ElectronProcess_Stopped (line 80) | private void ElectronProcess_Stopped(object sender, EventArgs e)
    method HandleStopped (line 85) | private void HandleStopped()
    method StopCore (line 101) | protected override Task StopCore()

FILE: src/ElectronNET.API/Runtime/Data/BuildInfo.cs
  class BuildInfo (line 3) | public class BuildInfo

FILE: src/ElectronNET.API/Runtime/Data/DotnetAppType.cs
  type DotnetAppType (line 3) | public enum DotnetAppType

FILE: src/ElectronNET.API/Runtime/Data/LifetimeState.cs
  type LifetimeState (line 3) | public enum LifetimeState

FILE: src/ElectronNET.API/Runtime/Data/StartupMethod.cs
  type StartupMethod (line 3) | public enum StartupMethod

FILE: src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs
  class LaunchOrderDetector (line 8) | internal class LaunchOrderDetector
    method CheckIsLaunchedByDotNet (line 10) | public static bool CheckIsLaunchedByDotNet()
    method CheckIsDotNetStartup1 (line 39) | private static bool? CheckIsDotNetStartup1()
    method CheckIsDotNetStartup2 (line 51) | private static bool? CheckIsDotNetStartup2()
    method CheckIsDotNetStartup3 (line 62) | private static bool? CheckIsDotNetStartup3()

FILE: src/ElectronNET.API/Runtime/Helpers/PortHelper.cs
  class PortHelper (line 6) | internal static class PortHelper
    method GetFreePort (line 8) | public static int GetFreePort(int? defaultPost)

FILE: src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs
  class UnpackagedDetector (line 9) | internal class UnpackagedDetector
    method CheckIsUnpackaged (line 11) | public static bool CheckIsUnpackaged()
    method CheckUnpackaged1 (line 45) | private static bool? CheckUnpackaged1()
    method CheckUnpackaged2 (line 64) | private static bool? CheckUnpackaged2()
    method CheckUnpackaged3 (line 80) | private static bool? CheckUnpackaged3()
    method CheckUnpackaged4 (line 91) | private static bool? CheckUnpackaged4()

FILE: src/ElectronNET.API/Runtime/IElectronNetRuntimeController.cs
  type IElectronNetRuntimeController (line 7) | public interface IElectronNetRuntimeController
    method Start (line 29) | Task Start();
    method Stop (line 31) | Task Stop();

FILE: src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs
  class ElectronProcessActive (line 15) | [Localizable(false)]
    method ElectronProcessActive (line 29) | public ElectronProcessActive(bool isUnpackaged, string electronBinaryN...
    method StartCore (line 37) | protected override async Task StartCore()
    method CheckRuntimeIdentifier (line 95) | private void CheckRuntimeIdentifier()
    method StopCore (line 152) | protected override Task StopCore()
    method StartInternal (line 158) | private async Task StartInternal(string startCmd, string args, string ...
    method Process_Exited (line 196) | private void Process_Exited(object sender, EventArgs e)

FILE: src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessBase.cs
  class ElectronProcessBase (line 8) | [Localizable(false)]
    method ElectronProcessBase (line 11) | protected ElectronProcessBase()

FILE: src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessPassive.cs
  class ElectronProcessPassive (line 12) | [Localizable(false)]
    method ElectronProcessPassive (line 20) | public ElectronProcessPassive(int pid)
    method StartCore (line 25) | protected override Task StartCore()
    method Process_Exited1 (line 41) | private void Process_Exited1(object sender, EventArgs e)
    method StopCore (line 46) | protected override Task StopCore()

FILE: src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs
  class LifetimeServiceBase (line 8) | public abstract class LifetimeServiceBase
    method LifetimeServiceBase (line 17) | protected LifetimeServiceBase()
    method Start (line 43) | public virtual async Task Start()
    method Stop (line 52) | public virtual async Task Stop()
    method StopCore (line 61) | protected virtual Task StopCore()
    method StartCore (line 66) | protected virtual Task StartCore()
    method ValidateMaxState (line 71) | private void ValidateMaxState(LifetimeState evalState, [CallerMemberNa...
    method TransitionState (line 79) | protected void TransitionState(LifetimeState newState)

FILE: src/ElectronNET.API/Runtime/Services/SocketBridge/SocketBridgeService.cs
  class SocketBridgeService (line 8) | internal class SocketBridgeService : LifetimeServiceBase
    method SocketBridgeService (line 14) | public SocketBridgeService(int socketPort)
    method StartCore (line 24) | protected override Task StartCore()
    method StopCore (line 34) | protected override Task StopCore()
    method Connect (line 40) | private void Connect()
    method Socket_BridgeDisconnected (line 49) | private void Socket_BridgeDisconnected(object sender, EventArgs e)
    method Socket_BridgeConnected (line 54) | private void Socket_BridgeConnected(object sender, EventArgs e)

FILE: src/ElectronNET.API/Runtime/StartupManager.cs
  class StartupManager (line 12) | internal class StartupManager
    method Initialize (line 14) | public void Initialize()
    method CreateRuntimeController (line 38) | private RuntimeControllerBase CreateRuntimeController()
    method DetectAppTypeAndStartup (line 53) | private StartupMethod DetectAppTypeAndStartup()
    method CollectProcessData (line 78) | private void CollectProcessData()
    method SetElectronExecutable (line 111) | private void SetElectronExecutable()
    method GatherBuildInfo (line 127) | private BuildInfo GatherBuildInfo()

FILE: src/ElectronNET.API/Serialization/ElectronJson.cs
  class ElectronJson (line 7) | internal static class ElectronJson
  class ElectronJsonContext (line 22) | [JsonSourceGenerationOptions(WriteIndented = false, PropertyNamingPolicy...

FILE: src/ElectronNET.API/Serialization/JsonToBoxedPrimitivesConverter.cs
  class JsonToBoxedPrimitivesConverter (line 8) | public sealed class JsonToBoxedPrimitivesConverter : JsonConverter<object>
    method Read (line 10) | public override object Read(ref Utf8JsonReader reader, Type typeToConv...
    method ReadValue (line 15) | private static object ReadValue(ref Utf8JsonReader r)
    method Write (line 114) | public override void Write(Utf8JsonWriter writer, object value, JsonSe...

FILE: src/ElectronNET.AspNet/API/ServiceCollectionExtensions.cs
  class ServiceCollectionExtensions (line 8) | public static class ServiceCollectionExtensions
    method AddElectron (line 13) | public static IServiceCollection AddElectron(this IServiceCollection s...

FILE: src/ElectronNET.AspNet/API/WebApplicationBuilderExtensions.cs
  class WebApplicationBuilderExtensions (line 15) | public static class WebApplicationBuilderExtensions
    method UseElectron (line 41) | public static WebApplicationBuilder UseElectron(this WebApplicationBui...

FILE: src/ElectronNET.AspNet/API/WebHostBuilderExtensions.cs
  class WebHostBuilderExtensions (line 22) | public static class WebHostBuilderExtensions
    method UseElectron (line 60) | public static IWebHostBuilder UseElectron(this IWebHostBuilder builder...

FILE: src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetBase.cs
  class RuntimeControllerAspNetBase (line 11) | internal abstract class RuntimeControllerAspNetBase : RuntimeControllerBase
    method RuntimeControllerAspNetBase (line 16) | protected RuntimeControllerAspNetBase(AspNetLifetimeAdapter aspNetLife...
    method CreateSocketBridge (line 41) | protected void CreateSocketBridge(int port)
    method HandleReady (line 49) | protected void HandleReady()
    method HandleStopped (line 60) | protected void HandleStopped()
    method StopCore (line 87) | protected abstract override Task StopCore();
    method SocketBridge_Ready (line 89) | private void SocketBridge_Ready(object sender, EventArgs e)
    method AspNetLifetimeAdapter_Ready (line 94) | private void AspNetLifetimeAdapter_Ready(object sender, EventArgs e)
    method SocketBridge_Stopped (line 99) | private void SocketBridge_Stopped(object sender, EventArgs e)
    method AspNetLifetimeAdapter_Stopped (line 104) | private void AspNetLifetimeAdapter_Stopped(object sender, EventArgs e)
    method AspNetLifetimeAdapter_Stopping (line 109) | private void AspNetLifetimeAdapter_Stopping(object sender, EventArgs e)
    method RunReadyCallback (line 113) | private async Task RunReadyCallback()

FILE: src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetDotnetFirst.cs
  class RuntimeControllerAspNetDotnetFirst (line 10) | internal class RuntimeControllerAspNetDotnetFirst : RuntimeControllerAsp...
    method RuntimeControllerAspNetDotnetFirst (line 15) | public RuntimeControllerAspNetDotnetFirst(AspNetLifetimeAdapter aspNet...
    method StartCore (line 21) | protected override Task StartCore()
    method StopCore (line 41) | protected override Task StopCore()
    method ElectronProcess_Ready (line 47) | private void ElectronProcess_Ready(object sender, EventArgs e)
    method ElectronProcess_Stopped (line 53) | private void ElectronProcess_Stopped(object sender, EventArgs e)

FILE: src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetElectronFirst.cs
  class RuntimeControllerAspNetElectronFirst (line 8) | internal class RuntimeControllerAspNetElectronFirst : RuntimeControllerA...
    method RuntimeControllerAspNetElectronFirst (line 13) | public RuntimeControllerAspNetElectronFirst(AspNetLifetimeAdapter aspN...
    method StartCore (line 19) | protected override Task StartCore()
    method StopCore (line 45) | protected override Task StopCore()
    method ElectronProcess_Stopped (line 51) | private void ElectronProcess_Stopped(object sender, EventArgs e)

FILE: src/ElectronNET.AspNet/Runtime/Helpers/ServerReadyStartupFilter.cs
  class ServerReadyStartupFilter (line 10) | internal sealed class ServerReadyStartupFilter : IStartupFilter
    method Configure (line 17) | public Action<IApplicationBuilder> Configure(Action<IApplicationBuilde...

FILE: src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs
  class AspNetLifetimeAdapter (line 8) | internal class AspNetLifetimeAdapter : LifetimeServiceBase
    method AspNetLifetimeAdapter (line 12) | public AspNetLifetimeAdapter(IHostApplicationLifetime lifetimeService)
    method StopCore (line 21) | protected override Task StopCore()

FILE: src/ElectronNET.Build/PrintItemMetadata.cs
  class DumpItemMetadataTask (line 7) | public class DumpItemMetadataTask : Task
    method Execute (line 13) | public override bool Execute()

FILE: src/ElectronNET.Build/RemoveEnvironmentVariables.cs
  class RemoveEnvironmentVariables (line 11) | public class RemoveEnvironmentVariables : Task
    method Execute (line 16) | public override bool Execute()

FILE: src/ElectronNET.Build/ReplaceMsBuildPropertiesTask.cs
  class ReplaceTemplateTask (line 10) | public class ReplaceTemplateTask : Task
    method Execute (line 21) | public override bool Execute()

FILE: src/ElectronNET.ConsoleApp/Program.cs
  class Program (line 9) | public class Program
    method Main (line 11) | public static async Task Main(string[] args)
    method ElectronBootstrap (line 34) | public static async Task ElectronBootstrap()

FILE: src/ElectronNET.Host/ElectronHostHook/connector.js
  class Connector (line 5) | class Connector {
    method constructor (line 8) | constructor(socket,
    method on (line 14) | on(key, javaScriptCode) {

FILE: src/ElectronNET.Host/ElectronHostHook/connector.ts
  class Connector (line 3) | class Connector {
    method constructor (line 4) | constructor(private socket: Socket,
    method on (line 8) | on(key: string, javaScriptCode: Function): void {

FILE: src/ElectronNET.Host/ElectronHostHook/index.js
  class HookService (line 41) | class HookService extends connector_1.Connector {
    method constructor (line 43) | constructor(socket, app) {
    method onHostReady (line 47) | onHostReady() {

FILE: src/ElectronNET.Host/ElectronHostHook/index.ts
  class HookService (line 6) | class HookService extends Connector {
    method constructor (line 7) | constructor(socket: Socket, public app: Electron.App) {
    method onHostReady (line 11) | onHostReady(): void {

FILE: src/ElectronNET.Host/api/browserView.js
  function hasOwnChildreen (line 43) | function hasOwnChildreen(obj, ...childNames) {
  function getBrowserViewById (line 58) | function getBrowserViewById(id) {

FILE: src/ElectronNET.Host/api/browserView.ts
  function hasOwnChildreen (line 58) | function hasOwnChildreen(obj, ...childNames) {
  function getBrowserViewById (line 74) | function getBrowserViewById(id: number) {

FILE: src/ElectronNET.Host/api/browserWindows.js
  function addMenuItemClickConnector (line 563) | function addMenuItemClickConnector(menuItems, callback) {
  function getWindowById (line 685) | function getWindowById(id) {

FILE: src/ElectronNET.Host/api/browserWindows.ts
  function addMenuItemClickConnector (line 709) | function addMenuItemClickConnector(menuItems, callback) {
  function getWindowById (line 885) | function getWindowById(id: number): Electron.BrowserWindow {

FILE: src/ElectronNET.Host/api/dock.js
  function addMenuItemClickConnector (line 51) | function addMenuItemClickConnector(menuItems, callback) {

FILE: src/ElectronNET.Host/api/dock.ts
  function addMenuItemClickConnector (line 68) | function addMenuItemClickConnector(menuItems, callback) {

FILE: src/ElectronNET.Host/api/menu.js
  function addContextMenuItemClickConnector (line 25) | function addContextMenuItemClickConnector(menuItems, browserWindowId, ca...
  function addMenuItemClickConnector (line 52) | function addMenuItemClickConnector(menuItems, callback) {

FILE: src/ElectronNET.Host/api/menu.ts
  function addContextMenuItemClickConnector (line 38) | function addContextMenuItemClickConnector(
  function addMenuItemClickConnector (line 79) | function addMenuItemClickConnector(menuItems, callback) {

FILE: src/ElectronNET.Host/api/tray.js
  function applyContextMenu (line 133) | function applyContextMenu(menuItems) {
  function addMenuItemClickConnector (line 140) | function addMenuItemClickConnector(menuItems, callback) {

FILE: src/ElectronNET.Host/api/tray.ts
  function applyContextMenu (line 153) | function applyContextMenu(menuItems) {
  function addMenuItemClickConnector (line 161) | function addMenuItemClickConnector(menuItems, callback) {

FILE: src/ElectronNET.Host/api/webContents.js
  function getWindowById (line 406) | function getWindowById(id) {

FILE: src/ElectronNET.Host/api/webContents.ts
  function getWindowById (line 560) | function getWindowById(

FILE: src/ElectronNET.Host/main.js
  function getForwardedArgs (line 124) | function getForwardedArgs() {
  function isSplashScreenEnabled (line 197) | function isSplashScreenEnabled() {
  function startSplashScreen (line 207) | function startSplashScreen() {
  function startSocketApiBridge (line 259) | function startSocketApiBridge(port) {
  function startAspCoreBackend (line 376) | function startAspCoreBackend(electronPort) {
  function startAspCoreBackendUnpackaged (line 407) | function startAspCoreBackendUnpackaged(electronPort) {
  function getEnvironmentParameter (line 437) | function getEnvironmentParameter() {

FILE: src/ElectronNET.IntegrationTests/Common/IntegrationFactAttribute.cs
  class IntegrationFactAttribute (line 10) | [AttributeUsage(AttributeTargets.Method)]
    method IntegrationFactAttribute (line 18) | static IntegrationFactAttribute()
    method IntegrationFactAttribute (line 27) | public IntegrationFactAttribute()
    method DetectWsl (line 60) | private static bool DetectWsl()
    method DetectCI (line 83) | private static bool DetectCI()

FILE: src/ElectronNET.IntegrationTests/Common/IntegrationTestBase.cs
  class IntegrationTestBase (line 7) | public abstract class IntegrationTestBase
    method IntegrationTestBase (line 9) | protected IntegrationTestBase(ElectronFixture fixture)

FILE: src/ElectronNET.IntegrationTests/ElectronFixture.cs
  class ElectronFixture (line 10) | [SuppressMessage("ReSharper", "MethodHasAsyncOverload")]
    method InitializeAsync (line 15) | public async Task InitializeAsync()
    method DisposeAsync (line 57) | public async Task DisposeAsync()
  class ElectronCollection (line 67) | [CollectionDefinition("ElectronCollection")]

FILE: src/ElectronNET.IntegrationTests/Tests/AppTests.cs
  class AppTests (line 11) | [Collection("ElectronCollection")]
    method AppTests (line 14) | public AppTests(ElectronFixture fx) : base(fx)
    method Can_get_app_path (line 18) | [IntegrationFact]
    method Can_get_version_and_locale (line 26) | [IntegrationFact]
    method Can_get_special_paths (line 35) | [IntegrationFact]
    method Can_get_app_metrics (line 47) | [IntegrationFact]
    method Can_get_gpu_feature_status (line 55) | [IntegrationFact]
    method Can_get_login_item_settings (line 62) | [IntegrationFact]
    method CommandLine_append_and_query_switch (line 71) | [IntegrationFact]
    method Accessibility_support_toggle (line 80) | [IntegrationFact]
    method UserAgentFallback_roundtrip (line 91) | [IntegrationFact]
    method BadgeCount_set_and_reset_where_supported (line 101) | [IntegrationFact]
    method App_metrics_have_cpu_info (line 113) | [IntegrationFact]
    method App_gpu_feature_status_has_some_fields (line 120) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/AutoUpdaterTests.cs
  class AutoUpdaterTests (line 8) | [Collection("ElectronCollection")]
    method AutoUpdaterTests (line 11) | public AutoUpdaterTests(ElectronFixture fx) : base(fx)
    method AutoDownload_check (line 15) | [IntegrationFact]
    method AutoInstallOnAppQuit_check (line 26) | [IntegrationFact]
    method AllowPrerelease_check (line 37) | [IntegrationFact]
    method FullChangelog_check (line 48) | [IntegrationFact]
    method AllowDowngrade_check (line 59) | [IntegrationFact]
    method UpdateConfigPath_check (line 70) | [IntegrationFact]
    method CurrentVersionAsync_check (line 77) | [IntegrationFact]
    method ChannelAsync_check (line 85) | [IntegrationFact]
    method RequestHeadersAsync_check (line 96) | [IntegrationFact]
    method CheckForUpdatesAsync_check (line 113) | [IntegrationFact]
    method CheckForUpdatesAndNotifyAsync_check (line 120) | [IntegrationFact]
    method GetFeedURLAsync_check (line 127) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/BrowserViewTests.cs
  class BrowserViewTests (line 7) | [Collection("ElectronCollection")]
    method BrowserViewTests (line 10) | public BrowserViewTests(ElectronFixture fx) : base(fx)
    method Create_browser_view_and_adjust_bounds (line 14) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs
  class BrowserWindowTests (line 9) | [Collection("ElectronCollection")]
    method BrowserWindowTests (line 12) | public BrowserWindowTests(ElectronFixture fx) : base(fx)
    method Can_set_and_get_title (line 16) | [IntegrationFact]
    method Can_resize_and_get_size (line 26) | [IntegrationFact]
    method Can_set_progress_bar_and_clear (line 37) | [IntegrationFact]
    method Can_set_and_get_position (line 46) | [IntegrationFact(SkipOnWsl = true)]
    method Can_set_and_get_bounds (line 55) | [IntegrationFact]
    method Can_set_and_get_content_bounds (line 68) | [IntegrationFact]
    method Show_hide_visibility_roundtrip (line 79) | [IntegrationFact]
    method AlwaysOnTop_toggle_and_query (line 106) | [IntegrationFact]
    method MenuBar_auto_hide_and_visibility (line 117) | [IntegrationFact]
    method ReadyToShow_event_fires_after_content_ready (line 133) | [IntegrationFact]
    method PageTitleUpdated_event_fires_on_title_change (line 160) | [IntegrationFact]
    method Resize_event_fires_on_size_change (line 181) | [IntegrationFact]
    method Progress_bar_and_always_on_top_toggle (line 193) | [IntegrationFact]
    method Menu_bar_visibility_and_auto_hide (line 209) | [IntegrationFact]
    method Parent_child_relationship_roundtrip (line 223) | [IntegrationFact]
    method Represented_filename_and_edited_flags (line 237) | [IntegrationFact]
    method BoundsChanged_event_fires_with_updated_bounds (line 261) | [IntegrationFact]
    method BoundsChanged_event_can_fire_on_resize_of_existing_window (line 296) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs
  class ClipboardTests (line 7) | [Collection("ElectronCollection")]
    method ClipboardTests (line 10) | public ClipboardTests(ElectronFixture fx) : base(fx)
    method Clipboard_text_roundtrip (line 14) | [IntegrationFact]
    method Available_formats_contains_text_after_write (line 23) | [IntegrationFact]
    method Bookmark_write_and_read (line 32) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/CookiesTests.cs
  class CookiesTests (line 6) | [Collection("ElectronCollection")]
    method CookiesTests (line 9) | public CookiesTests(ElectronFixture fx) : base(fx)
    method Cookie_set_get_remove_sequence (line 13) | [IntegrationFact(Skip = "Cookie set/get requires navigation to domain;...

FILE: src/ElectronNET.IntegrationTests/Tests/GlobalShortcutTests.cs
  class GlobalShortcutTests (line 7) | [Collection("ElectronCollection")]
    method GlobalShortcutTests (line 10) | public GlobalShortcutTests(ElectronFixture fx) : base(fx)
    method Can_register_and_unregister (line 14) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/HostHookTests.cs
  class HostHookTests (line 6) | [Collection("ElectronCollection")]
    method HostHookTests (line 9) | public HostHookTests(ElectronFixture fx) : base(fx)
    method HostHook_call_returns_value (line 13) | [IntegrationFact(Skip = "Requires HostHook setup; skipping")]

FILE: src/ElectronNET.IntegrationTests/Tests/IpcMainTests.cs
  class IpcMainTests (line 7) | [Collection("ElectronCollection")]
    method IpcMainTests (line 10) | public IpcMainTests(ElectronFixture fx) : base(fx)
    method Ipc_On_receives_message_from_renderer (line 14) | [IntegrationFact]
    method Ipc_Once_only_fires_once (line 35) | [IntegrationFact]
    method Ipc_RemoveAllListeners_stops_receiving (line 45) | [IntegrationFact]
    method Ipc_OnSync_returns_value (line 56) | [IntegrationFact]
    method Ipc_Send_from_main_reaches_renderer (line 74) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/MenuTests.cs
  class MenuTests (line 8) | [Collection("ElectronCollection")]
    method MenuTests (line 11) | public MenuTests(ElectronFixture fx) : base(fx)
    method ApplicationMenu_click_invokes_handler (line 15) | [IntegrationFact]
    method ContextMenu_popup_registers_items (line 41) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/MultiEventRegistrationTests.cs
  class MultiEventRegistrationTests (line 5) | [Collection("ElectronCollection")]
    method MultiEventRegistrationTests (line 8) | public MultiEventRegistrationTests(ElectronFixture fx) : base(fx)
    method WaitAllOrTimeout (line 12) | private static async Task<bool> WaitAllOrTimeout(TimeSpan timeout, par...
    method BrowserWindow_OnResize_multiple_handlers_called (line 19) | [IntegrationFact]
    method WebContents_OnDomReady_multiple_handlers_called (line 43) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/NativeImageTests.cs
  class NativeImageTests (line 9) | [Collection("ElectronCollection")]
    method NativeImageTests (line 13) | public NativeImageTests(ElectronFixture fx) : base(fx)
    method Create_from_bitmap_and_to_png (line 17) | [IntegrationFact]
    method Create_from_buffer_and_to_data_url (line 35) | [IntegrationFact]
    method Resize_and_crop_produce_expected_sizes (line 54) | [IntegrationFact]
    method Add_representation_for_scale_factor (line 74) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs
  class NativeThemeTests (line 9) | [Collection("ElectronCollection")]
    method NativeThemeTests (line 12) | public NativeThemeTests(ElectronFixture fx) : base(fx)
    method ThemeSource_roundtrip (line 16) | [IntegrationFact]
    method Updated_event_fires_on_change (line 44) | [IntegrationFact]
    method Should_use_high_contrast_colors_check (line 60) | [IntegrationFact]
    method Should_use_inverted_colors_check (line 69) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/NotificationTests.cs
  class NotificationTests (line 9) | [Collection("ElectronCollection")]
    method NotificationTests (line 12) | public NotificationTests(ElectronFixture fx) : base(fx)
    method Notification_create_check (line 16) | [IntegrationFact]
    method Notification_is_supported_check (line 35) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs
  class ProcessTests (line 6) | [Collection("ElectronCollection")]
    method ProcessTests (line 9) | public ProcessTests(ElectronFixture fx) : base(fx)
    method Process_info_is_accessible (line 13) | [IntegrationFact]
    method Process_properties_are_populated (line 22) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs
  class ScreenTests (line 8) | [Collection("ElectronCollection")]
    method ScreenTests (line 11) | public ScreenTests(ElectronFixture fx) : base(fx)
    method Primary_display_has_positive_dimensions (line 15) | [IntegrationFact(SkipOnWsl = true)]
    method GetAllDisplays_returns_at_least_one (line 23) | [IntegrationFact(SkipOnWsl = true)]
    method GetCursorScreenPoint_check (line 31) | [IntegrationFact]
    method GetMenuBarWorkArea_check (line 38) | [IntegrationFact]
    method GetDisplayNearestPoint_check (line 50) | [IntegrationFact(SkipOnWsl = true)]
    method GetDisplayMatching_check (line 64) | [IntegrationFact(SkipOnWsl = true)]

FILE: src/ElectronNET.IntegrationTests/Tests/SessionTests.cs
  class SessionTests (line 6) | [Collection("ElectronCollection")]
    method SessionTests (line 9) | public SessionTests(ElectronFixture fx) : base(fx)
    method Session_preloads_roundtrip (line 13) | [IntegrationFact]
    method Session_proxy_set_and_resolve (line 24) | [IntegrationFact]
    method Session_clear_cache_and_storage_completes (line 35) | [IntegrationFact]
    method Session_preloads_set_multiple_and_clear (line 47) | [IntegrationFact]
    method Clear_auth_cache_overloads (line 60) | [IntegrationFact]
    method Clear_storage_with_options (line 68) | [IntegrationFact]
    method Enable_disable_network_emulation (line 75) | [IntegrationFact]
    method Flush_storage_data_does_not_throw (line 83) | [IntegrationFact]
    method Set_user_agent_affects_new_navigation (line 90) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/ShellTests.cs
  class ShellTests (line 6) | [Collection("ElectronCollection")]
    method ShellTests (line 9) | public ShellTests(ElectronFixture fx) : base(fx)
    method OpenExternal_invalid_scheme_returns_error_or_empty (line 13) | [IntegrationFact(Skip = "This can keep the test process hanging until ...

FILE: src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs
  class ThumbarButtonTests (line 7) | [Collection("ElectronCollection")]
    method ThumbarButtonTests (line 10) | public ThumbarButtonTests(ElectronFixture fx) : base(fx)
    method SetThumbarButtons_returns_success (line 14) | [IntegrationFact]
    method Thumbar_button_click_invokes_callback (line 23) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/TrayTests.cs
  class TrayTests (line 6) | [Collection("ElectronCollection")]
    method TrayTests (line 9) | public TrayTests(ElectronFixture fx) : base(fx)
    method Can_create_tray_and_destroy (line 13) | [IntegrationFact]

FILE: src/ElectronNET.IntegrationTests/Tests/WebContentsTests.cs
  class WebContentsTests (line 10) | [Collection("ElectronCollection")]
    method WebContentsTests (line 13) | public WebContentsTests(ElectronFixture fx) : base(fx)
    method Can_get_url_after_navigation (line 17) | [IntegrationFact]
    method ExecuteJavaScript_returns_title (line 26) | [IntegrationFact]
    method DomReady_event_fires (line 35) | [IntegrationFact]
    method Can_print_to_pdf (line 46) | [IntegrationFact]
    method Can_basic_print (line 68) | [IntegrationFact]
    method GetPrintersAsync_check (line 77) | [IntegrationFact]
    method GetSetZoomFactor_check (line 84) | [IntegrationFact]
    method GetSetZoomLevel_check (line 96) | [IntegrationFact]
    method DevTools_check (line 125) | [IntegrationFact]
    method GetSetAudioMuted_check (line 152) | [IntegrationFact]
    method GetSetUserAgent_check (line 170) | [IntegrationFact]

FILE: src/ElectronNET.Samples.ElectronHostHook/Controllers/HomeController.cs
  class HomeController (line 7) | public class HomeController : Controller
    method Index (line 9) | public async Task<IActionResult> Index()

FILE: src/ElectronNET.Samples.ElectronHostHook/ElectronHostHook/connector.ts
  class Connector (line 3) | class Connector {
    method constructor (line 4) | constructor(private socket: Socket, public app: any) {
    method on (line 7) | on(key: string, javaScriptCode: Function): void {

FILE: src/ElectronNET.Samples.ElectronHostHook/ElectronHostHook/index.ts
  class HookService (line 4) | class HookService extends Connector {
    method constructor (line 5) | constructor(socket: Socket, public app: any) {
    method onHostReady (line 9) | onHostReady(): void {

FILE: src/ElectronNET.Samples.ElectronHostHook/Program.cs
  class Program (line 7) | public class Program
    method Main (line 9) | public static void Main(string[] args)

FILE: src/ElectronNET.WebApp/Controllers/AboutController.cs
  class AboutController (line 5) | public class AboutController : Controller
    method Index (line 7) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/AppSysInformationController.cs
  class AppSysInformationController (line 8) | public class AppSysInformationController : Controller
    method Index (line 10) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/ClipboardController.cs
  class ClipboardController (line 12) | public class ClipboardController : Controller
    method Index (line 14) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/CrashHangController.cs
  class CrashHangController (line 7) | public class CrashHangController : Controller
    method Index (line 9) | public IActionResult Index()
    method ProcessCrash (line 69) | public IActionResult ProcessCrash()
    method ProcessHang (line 74) | public IActionResult ProcessHang()

FILE: src/ElectronNET.WebApp/Controllers/DesktopCapturerController.cs
  class DesktopCapturerController (line 5) | public class DesktopCapturerController : Controller
    method Index (line 7) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/DialogsController.cs
  class DialogsController (line 8) | public class DialogsController : Controller
    method Index (line 10) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/HomeController.cs
  class HomeController (line 7) | public class HomeController : Controller
    method Index (line 9) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/HostHookController.cs
  class HostHookController (line 8) | public class HostHookController : Controller
    method Index (line 10) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/IpcController.cs
  class IpcController (line 7) | public class IpcController : Controller
    method Index (line 9) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/ManageWindowsController.cs
  class WindowsController (line 11) | public class WindowsController : Controller
    method Index (line 13) | public IActionResult Index()
    method UpdateReply (line 51) | private async void UpdateReply()
    method DemoWindow (line 62) | public IActionResult DemoWindow()

FILE: src/ElectronNET.WebApp/Controllers/MenusController.cs
  class MenusController (line 8) | public class MenusController : Controller
    method Index (line 10) | public IActionResult Index()
    method CreateContextMenu (line 103) | private void CreateContextMenu()

FILE: src/ElectronNET.WebApp/Controllers/NotificationsController.cs
  class NotificationsController (line 7) | public class NotificationsController : Controller
    method Index (line 9) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/PdfController.cs
  class PdfController (line 8) | public class PdfController : Controller
    method Index (line 10) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/ShellController.cs
  class ShellController (line 7) | public class ShellController : Controller
    method Index (line 9) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/ShortcutsController.cs
  class ShortcutsController (line 8) | public class ShortcutsController : Controller
    method Index (line 10) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/TrayController.cs
  class TrayController (line 9) | public class TrayController : Controller
    method TrayController (line 13) | public TrayController(IWebHostEnvironment env)
    method Index (line 19) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/UpdateController.cs
  class UpdateController (line 7) | public class UpdateController : Controller
    method Index (line 9) | public IActionResult Index()

FILE: src/ElectronNET.WebApp/Controllers/WindowsController.cs
  class WindowsController (line 8) | public class WindowsController : Controller
    method Index (line 10) | public IActionResult Index()
    method UpdateReply (line 53) | private async void UpdateReply()
    method DemoWindow (line 64) | public IActionResult DemoWindow()

FILE: src/ElectronNET.WebApp/ElectronHostHook/connector.js
  class Connector (line 4) | class Connector {
    method constructor (line 5) | constructor(socket, app) {
    method on (line 9) | on(key, javaScriptCode) {

FILE: src/ElectronNET.WebApp/ElectronHostHook/connector.ts
  class Connector (line 3) | class Connector {
    method constructor (line 4) | constructor(private socket: Socket,
    method on (line 7) | on(key: string, javaScriptCode: Function): void {

FILE: src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js
  class ExcelCreator (line 5) | class ExcelCreator {
    method create (line 6) | async create(path) {

FILE: src/ElectronNET.WebApp/ElectronHostHook/excelCreator.ts
  class ExcelCreator (line 3) | class ExcelCreator {
    method create (line 4) | async create(path: string): Promise<string> {

FILE: src/ElectronNET.WebApp/ElectronHostHook/index.js
  class HookService (line 6) | class HookService extends connector_1.Connector {
    method constructor (line 7) | constructor(socket, app) {
    method onHostReady (line 11) | onHostReady() {

FILE: src/ElectronNET.WebApp/ElectronHostHook/index.ts
  class HookService (line 5) | class HookService extends Connector {
    method constructor (line 6) | constructor(socket: Socket, public app: any) {
    method onHostReady (line 10) | onHostReady(): void {

FILE: src/ElectronNET.WebApp/Program.cs
  class Program (line 11) | public class Program
    method Main (line 13) | public static void Main(string[] args)
    method CreateWebHostBuilder (line 18) | public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    method ElectronBootstrap (line 26) | public static async Task ElectronBootstrap()
    method AddDevelopmentTests (line 42) | private static void AddDevelopmentTests()

FILE: src/ElectronNET.WebApp/Startup.cs
  class Startup (line 9) | public class Startup
    method Startup (line 13) | public Startup(IConfiguration configuration)
    method ConfigureServices (line 20) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 26) | public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

FILE: src/ElectronNET.WebApp/wwwroot/assets/nav.js
  function handleSectionTrigger (line 11) | function handleSectionTrigger(event) {
  function activateDefaultSection (line 22) | function activateDefaultSection() {
  function showMainContent (line 26) | function showMainContent() {
  function handleModalTrigger (line 31) | function handleModalTrigger(event) {
  function hideAllModals (line 42) | function hideAllModals() {
  function hideAllSectionsAndDeselectButtons (line 50) | function hideAllSectionsAndDeselectButtons() {
  function displayAbout (line 62) | function displayAbout() {
  function hideNav (line 67) | function hideNav() {
  function showNav (line 72) | function showNav() {

FILE: src/ElectronNET/build/update_electron_versions.py
  function download_releases (line 18) | def download_releases():
  function filter_versions (line 30) | def filter_versions(releases, min_version="23.0.0"):
  function generate_enum_xml (line 56) | def generate_enum_xml(versions):
  function update_xaml_file (line 74) | def update_xaml_file(xaml_path, enum_xml):
  function main (line 104) | def main():
Condensed preview — 477 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,752K chars).
[
  {
    "path": ".gitattributes",
    "chars": 2518,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 8011,
    "preview": "# Contributing\n\n## Project Scope\n\nThe Electron.NET project ultimately tries to provide a framework for developing cross-"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 627,
    "preview": "# These are supported funding model platforms\n\ngithub: [GregorBiswanger, FlorianRappl]\npatreon: # Replace with a single "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 643,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n<!-- Please sea"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 343,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: Feature\nassignees: ''\n\n---\n\n<!-- Ple"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "chars": 471,
    "preview": "---\nname: Question\nabout: The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/ques"
  },
  {
    "path": ".github/workflows/Build and Publish.yml",
    "chars": 895,
    "preview": "name: Build and Publish\n\non: [push]\n\nenv:\n  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n  NUGET_API_KEY: ${{ secrets.NUGET"
  },
  {
    "path": ".github/workflows/PR Validation.yml",
    "chars": 729,
    "preview": "name: PR Validation\n\non: [pull_request]\n\nconcurrency:\n  group: pr-validation-${{ github.ref }}\n  cancel-in-progress: tru"
  },
  {
    "path": ".github/workflows/integration-tests.yml",
    "chars": 7859,
    "preview": "name: Tests\n\non:\n  workflow_call:\n\nconcurrency:\n  group: integration-tests-${{ github.ref }}\n  cancel-in-progress: true\n"
  },
  {
    "path": ".github/workflows/pr-comment.yml",
    "chars": 2233,
    "preview": "name: Create PR Comments\n\non:\n  workflow_run:\n    workflows: [ \"PR Validation\" ]\n    types: [completed]\n\npermissions:\n  "
  },
  {
    "path": ".github/workflows/publish-wiki.yml",
    "chars": 1821,
    "preview": "name: Publish wiki\non:\n  push:\n    branches: [electronnet_core, main]\n  workflow_dispatch:\nconcurrency:\n  group: publish"
  },
  {
    "path": ".github/workflows/retry-test-jobs.yml",
    "chars": 1529,
    "preview": "name: Tests auto-rerun\n\non:\n  workflow_run:\n    workflows: [ \"PR Validation\", \"Build and Publish\" ]\n    types: [ complet"
  },
  {
    "path": ".github/workflows/trailing-whitespace-check.yml",
    "chars": 2618,
    "preview": "name: Whitespace Check\n\non:\n  workflow_call:\n\njobs:\n  check-whitespace:\n    runs-on: ubuntu-latest\n    permissions:\n    "
  },
  {
    "path": ".gitignore",
    "chars": 4406,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": ".nuke/build.schema.json",
    "chars": 3527,
    "preview": "{\n  \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n  \"definitions\": {\n    \"Host\": {\n      \"type\": \"string\",\n     "
  },
  {
    "path": ".nuke/parameters.json",
    "chars": 80,
    "preview": "{\n  \"$schema\": \"./build.schema.json\",\n  \"Solution\": \"src/ElectronNET.Lean.sln\"\n}"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 1242,
    "preview": "{\n   // Use IntelliSense to find out which attributes exist for C# debugging\n   // Use hover for the description of the "
  },
  {
    "path": ".vscode/tasks.json",
    "chars": 368,
    "preview": "{\n  \"version\": \"2.0.0\",\n  \"command\": \"dotnet\",\n  \"args\": [],\n  \"tasks\": [\n    {\n      \"label\": \"build\",\n      \"type\": \"s"
  },
  {
    "path": "Changelog.md",
    "chars": 7478,
    "preview": "# 0.4.1\n\n## ElectronNET.Core\n\n- Updated documentation for preload scripts (#1031) @AeonSake\n- Updated timeout for electr"
  },
  {
    "path": "LICENSE",
    "chars": 1108,
    "preview": "MIT License\n\nCopyright (c) 2017-2025 Gregor Biswanger, Robert Mühsig, Florian Rappl\n\nPermission is hereby granted, free "
  },
  {
    "path": "NuGet.config",
    "chars": 335,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <config>\n    <add key=\"repositoryPath\" value=\"artifacts\" />\n  <"
  },
  {
    "path": "README.md",
    "chars": 8817,
    "preview": "[![Electron.NET Logo](https://github.com/ElectronNET/Electron.NET/raw/main/assets/images/electron.net-logo.png)](https:/"
  },
  {
    "path": "artifacts/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "build.cmd",
    "chars": 207,
    "preview": ":; set -eo pipefail\n:; SCRIPT_DIR=$(cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd)\n:; ${SCRIPT_DIR}/build.sh \"$@\"\n:; exit"
  },
  {
    "path": "build.ps1",
    "chars": 2952,
    "preview": "[CmdletBinding()]\nParam(\n    [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]\n    [string[]]$B"
  },
  {
    "path": "build.sh",
    "chars": 2274,
    "preview": "#!/usr/bin/env bash\n\nbash --version 2>&1 | head -n 1\n\nset -eo pipefail\nSCRIPT_DIR=$(cd \"$( dirname \"${BASH_SOURCE[0]}\" )"
  },
  {
    "path": "docs/.docproj/DocProj.props",
    "chars": 841,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "docs/.docproj/DocProj.targets",
    "chars": 747,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "docs/API/App.md",
    "chars": 22716,
    "preview": "# Electron.App\n\nControl your application's event lifecycle.\n\n## Overview\n\nThe `Electron.App` API provides comprehensive "
  },
  {
    "path": "docs/API/AutoUpdater.md",
    "chars": 7426,
    "preview": "# Electron.AutoUpdater\n\nHandle application updates and installation processes.\n\n## Overview\n\nThe `Electron.AutoUpdater` "
  },
  {
    "path": "docs/API/Clipboard.md",
    "chars": 6067,
    "preview": "# Electron.Clipboard\n\nPerform copy and paste operations on the system clipboard.\n\n## Overview\n\nThe `Electron.Clipboard` "
  },
  {
    "path": "docs/API/Dialog.md",
    "chars": 6391,
    "preview": "# Electron.Dialog\n\nDisplay native system dialogs for opening and saving files, alerting, etc.\n\n## Overview\n\nThe `Electro"
  },
  {
    "path": "docs/API/Dock.md",
    "chars": 5292,
    "preview": "# Electron.Dock\n\nControl your app in the macOS dock.\n\n## Overview\n\nThe `Electron.Dock` API provides control over your ap"
  },
  {
    "path": "docs/API/GlobalShortcut.md",
    "chars": 4506,
    "preview": "# Electron.GlobalShortcut\n\nRegister global keyboard shortcuts that work even when the application is not focused.\n\n## Ov"
  },
  {
    "path": "docs/API/HostHook.md",
    "chars": 4310,
    "preview": "# Electron.HostHook\n\nExecute native JavaScript/TypeScript code from the host process.\n\n## Overview\n\nThe `Electron.HostHo"
  },
  {
    "path": "docs/API/IpcMain.md",
    "chars": 4803,
    "preview": "# Electron.IpcMain\n\nCommunicate asynchronously from the main process to renderer processes.\n\n## Overview\n\nThe `Electron."
  },
  {
    "path": "docs/API/Menu.md",
    "chars": 6038,
    "preview": "# Electron.Menu\n\nCreate application menus, context menus, and menu items with full keyboard shortcut support.\n\n## Overvi"
  },
  {
    "path": "docs/API/NativeTheme.md",
    "chars": 5421,
    "preview": "# Electron.NativeTheme\n\nDetect and respond to changes in Chromium's native color theme.\n\n## Overview\n\nThe `Electron.Nati"
  },
  {
    "path": "docs/API/Notification.md",
    "chars": 4637,
    "preview": "# Electron.Notification\n\nShow native desktop notifications with custom content and actions.\n\n## Overview\n\nThe `Electron."
  },
  {
    "path": "docs/API/Overview.md",
    "chars": 3523,
    "preview": "# API Reference Overview\n\nThe ElectronNET.Core API provides comprehensive access to Electron's native desktop functional"
  },
  {
    "path": "docs/API/PowerMonitor.md",
    "chars": 3933,
    "preview": "# Electron.PowerMonitor\n\nMonitor system power events like sleep, wake, and battery status.\n\n## Overview\n\nThe `Electron.P"
  },
  {
    "path": "docs/API/Screen.md",
    "chars": 5096,
    "preview": "# Electron.Screen\n\nAccess display and screen information for responsive layouts.\n\n## Overview\n\nThe `Electron.Screen` API"
  },
  {
    "path": "docs/API/Shell.md",
    "chars": 4793,
    "preview": "# Electron.Shell\n\nDesktop integration for opening files, URLs, and accessing system paths.\n\n## Overview\n\nThe `Electron.S"
  },
  {
    "path": "docs/API/Tray.md",
    "chars": 5840,
    "preview": "# Electron.Tray\n\nAdd icons and context menus to the system's notification area.\n\n## Overview\n\nThe `Electron.Tray` API pr"
  },
  {
    "path": "docs/API/WebContents.md",
    "chars": 7921,
    "preview": "# Electron.WebContents\n\nRender and control web pages.\n\n## Overview\n\nThe `Electron.WebContents` API provides control over"
  },
  {
    "path": "docs/API/WindowManager.md",
    "chars": 5356,
    "preview": "# Electron.WindowManager\n\nCreate and manage browser windows, control window behavior and appearance.\n\n## Overview\n\nThe `"
  },
  {
    "path": "docs/About.md",
    "chars": 3212,
    "preview": "\n\n# About this Project\n\nElectron.NET has been developed by a small number of people in the hope that it may be useful fo"
  },
  {
    "path": "docs/Core/Advanced-Migration-Topics.md",
    "chars": 2791,
    "preview": "# Advanced Migration Topics\n\nThis guide covers advanced scenarios and edge cases that may require additional configurati"
  },
  {
    "path": "docs/Core/Migration-Checks.md",
    "chars": 9825,
    "preview": "# Migration Checks\n\nElectron.NET includes automatic build-time validation checks that help users migrating from previous"
  },
  {
    "path": "docs/Core/Migration-Guide.md",
    "chars": 5567,
    "preview": "# Migration Guide\n\nMigrating from previous versions of Electron.NET to ElectronNET.Core is straightforward but requires "
  },
  {
    "path": "docs/Core/What's-New.md",
    "chars": 8217,
    "preview": "# What's New in ElectronNET.Core\n\n## A Complete Transformation\n\nElectronNET.Core represents a fundamental modernization "
  },
  {
    "path": "docs/Docs.shproj",
    "chars": 1174,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>06caadc7-de5b-47b4-ab2a-e9501459a2d"
  },
  {
    "path": "docs/GettingStarted/ASP.Net.md",
    "chars": 3475,
    "preview": "\n# ASP.NET Core Setup\n\nASP.NET Core remains the recommended approach for complex web applications with ElectronNET.Core,"
  },
  {
    "path": "docs/GettingStarted/Console-App.md",
    "chars": 4865,
    "preview": "\n\n# Console Application Setup\n\nA major benefit in ElectronNET.Core is the ability to build Electron applications using s"
  },
  {
    "path": "docs/GettingStarted/System-Requirements.md",
    "chars": 1447,
    "preview": "\n## 🛠 System Requirements\n\n### Required Software\n\n- **.NET 8.0** or later\n- **Node.js 22.x** or later (see below)\n- **Vi"
  },
  {
    "path": "docs/Home.md",
    "chars": 3149,
    "preview": "\n\n# Electron.NET Wiki Home\n\nWelcome to the **Electron.NET Core** documentation! This wiki covers everything you need to "
  },
  {
    "path": "docs/RelInfo/Package-Description.md",
    "chars": 3685,
    "preview": "# Package Description\n\nElectronNET.Core consists of three specialized NuGet packages designed for different development "
  },
  {
    "path": "docs/Using/Configuration.md",
    "chars": 3626,
    "preview": "\n# Project Configuration\n\n\n## 🔧 Visual Studio App Designer\n\nElectron.NET provides close integration via the Visual Studi"
  },
  {
    "path": "docs/Using/Custom_main.md",
    "chars": 2273,
    "preview": "# Using custom_main.js\n\nThis guide explains how to include and use a `custom_main.js` file in your Electron.NET applicat"
  },
  {
    "path": "docs/Using/Debugging.md",
    "chars": 6395,
    "preview": "# Debugging\n\nElectronNET.Core transforms the debugging experience by providing native Visual Studio integration with mul"
  },
  {
    "path": "docs/Using/Package-Building.md",
    "chars": 7763,
    "preview": "# Package Building\n\nElectronNET.Core integrates with Visual Studio's publishing system to create distributable Electron "
  },
  {
    "path": "docs/Using/Startup-Methods.md",
    "chars": 6499,
    "preview": "# Startup Methods\n\nElectronNET.Core supports multiple startup methods to handle different development and deployment sce"
  },
  {
    "path": "docs/_Footer.md",
    "chars": 140,
    "preview": " \nWant to contribute to this documentation? Please fork and create a PR! The Wiki is autogenerated from the /docs conten"
  },
  {
    "path": "docs/_Sidebar.md",
    "chars": 1522,
    "preview": "<!-- First line gets deleted -->\n\n# Wiki\n\n- [Home](Home.md)\n- [About this Project](About.md)\n\n# Electron.NET Core\n\n- [Wh"
  },
  {
    "path": "docs/md-styles.css",
    "chars": 171090,
    "preview": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://"
  },
  {
    "path": "global.json",
    "chars": 121,
    "preview": "{\n    \"sdk\": {\n        \"version\": \"10.0.100\",\n        \"rollForward\": \"feature\",\n        \"allowPrerelease\": false\n    }\n}"
  },
  {
    "path": "nuke/.editorconfig",
    "chars": 506,
    "preview": "[*.cs]\ndotnet_style_qualification_for_field = false:warning\ndotnet_style_qualification_for_property = false:warning\ndotn"
  },
  {
    "path": "nuke/Build.cs",
    "chars": 8340,
    "preview": "using Microsoft.Build.Exceptions;\nusing Nuke.Common;\nusing Nuke.Common.CI.GitHubActions;\nusing Nuke.Common.IO;\nusing Nuk"
  },
  {
    "path": "nuke/CommonPropsParser.cs",
    "chars": 800,
    "preview": "using System;\nusing System.Linq;\nusing System.Xml.Linq;\n\n/// <summary>\n/// Parses a version from an MSBuild .props file "
  },
  {
    "path": "nuke/Configuration.cs",
    "chars": 484,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing Nuke.Common.Tooling;\n\n[TypeConverter(typeof(TypeConv"
  },
  {
    "path": "nuke/Directory.Build.props",
    "chars": 428,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsof"
  },
  {
    "path": "nuke/Directory.Build.targets",
    "chars": 432,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsof"
  },
  {
    "path": "nuke/Extensions/StringExtensions.cs",
    "chars": 2544,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under "
  },
  {
    "path": "nuke/ReleaseNotes.cs",
    "chars": 2864,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under "
  },
  {
    "path": "nuke/ReleaseNotesParser.cs",
    "chars": 4558,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under "
  },
  {
    "path": "nuke/SemVersion.cs",
    "chars": 12886,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under "
  },
  {
    "path": "nuke/_build.csproj",
    "chars": 724,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net10.0</Targ"
  },
  {
    "path": "src/.editorconfig",
    "chars": 93,
    "preview": "[*.cs]\n\n# CA1416: Validate platform compatibility\ndotnet_diagnostic.CA1416.severity = error\n"
  },
  {
    "path": "src/ElectronNET/.electron/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/ElectronNET/ElectronNET.csproj",
    "chars": 1746,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\common.props\" />\n\n  <PropertyGroup>\n    <TargetFrameworks>net6"
  },
  {
    "path": "src/ElectronNET/build/ElectronNET.Core.props",
    "chars": 1521,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <Propert"
  },
  {
    "path": "src/ElectronNET/build/ElectronNET.Core.targets",
    "chars": 1572,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <Propert"
  },
  {
    "path": "src/ElectronNET/build/ElectronNET.DesignTime.targets",
    "chars": 6663,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <Propert"
  },
  {
    "path": "src/ElectronNET/build/ElectronNET.LateImport.targets",
    "chars": 26790,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n <!--<Impo"
  },
  {
    "path": "src/ElectronNET/build/ElectronNET.MigrationChecks.targets",
    "chars": 16820,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <Propert"
  },
  {
    "path": "src/ElectronNET/build/ElectronNETRules.Project.xaml",
    "chars": 27469,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Rule Name=\"ElectronNet\" \n      DisplayName=\"Electron.NET\" \n      Order=\"1\" \n    "
  },
  {
    "path": "src/ElectronNET/build/ElectronNETRules.Project2.xaml",
    "chars": 2523,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Rule Name=\"Build\" \n      DisplayName=\"Build\" \n      OverrideMode=\"Extend\"\n      "
  },
  {
    "path": "src/ElectronNET/build/electron-builder.json",
    "chars": 430,
    "preview": "{\n  \"$schema\": \"https://raw.githubusercontent.com/electron-userland/electron-builder/refs/heads/master/packages/app-buil"
  },
  {
    "path": "src/ElectronNET/build/package.template.json",
    "chars": 1097,
    "preview": "{\n  \"name\": \"$(ElectronPackageId)\",\n  \"productName\": \"$(ElectronTitle)\",\n  \"build\": {\n    \"appId\": \"$(ElectronPackageId)"
  },
  {
    "path": "src/ElectronNET/build/update_electron_versions.py",
    "chars": 3970,
    "preview": "#!/usr/bin/env python3\n\"\"\"\nUpdate Electron version list in ElectronNETRules.Project.xaml\n\nThis script:\n1. Downloads the "
  },
  {
    "path": "src/ElectronNET.API/API/ApiBase.cs",
    "chars": 14135,
    "preview": "// ReSharper disable InconsistentNaming\n\nnamespace ElectronNET.API\n{\n    using Common;\n    using System.Diagnostics.Cod"
  },
  {
    "path": "src/ElectronNET.API/API/App.cs",
    "chars": 65698,
    "preview": "using ElectronNET.API.Entities;\nusing ElectronNET.API.Extensions;\nusing System;\nusing System.Runtime.InteropServices;\nus"
  },
  {
    "path": "src/ElectronNET.API/API/AutoUpdater.cs",
    "chars": 13105,
    "preview": "using ElectronNET.API.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n// ReShar"
  },
  {
    "path": "src/ElectronNET.API/API/BrowserView.cs",
    "chars": 2465,
    "preview": "using ElectronNET.API.Entities;\nusing System.Threading.Tasks;\n\nnamespace ElectronNET.API\n{\n    /// <summary>\n    /// A B"
  },
  {
    "path": "src/ElectronNET.API/API/BrowserWindow.cs",
    "chars": 43674,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Ru"
  },
  {
    "path": "src/ElectronNET.API/API/Clipboard.cs",
    "chars": 6656,
    "preview": "using ElectronNET.API.Entities;\nusing ElectronNET.API.Serialization;\nusing System.Runtime.Versioning;\nusing System.Text."
  },
  {
    "path": "src/ElectronNET.API/API/CommandLine.cs",
    "chars": 4224,
    "preview": "using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace ElectronNET.API\n{\n    /// <summary>\n    /// Manipulate"
  },
  {
    "path": "src/ElectronNET.API/API/Cookies.cs",
    "chars": 4670,
    "preview": "using ElectronNET.API.Entities;\nusing ElectronNET.API.Serialization;\nusing System;\nusing System.Text.Json;\nusing System."
  },
  {
    "path": "src/ElectronNET.API/API/Dialog.cs",
    "chars": 9815,
    "preview": "using ElectronNET.API.Entities;\nusing System;\nusing System.Runtime.Versioning;\nusing System.Text.Json;\nusing System.Thre"
  },
  {
    "path": "src/ElectronNET.API/API/Dock.cs",
    "chars": 7311,
    "preview": "using System.Collections.Generic;\nusing System.Runtime.Versioning;\nusing System.Threading;\nusing System.Threading.Tasks;"
  },
  {
    "path": "src/ElectronNET.API/API/Electron.cs",
    "chars": 4761,
    "preview": "namespace ElectronNET.API\n{\n    /// <summary>\n    /// The Electron.NET API\n    /// </summary>\n    public static class E"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/AboutPanelOptions.cs",
    "chars": 1741,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// About panel options.\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/AddRepresentationOptions.cs",
    "chars": 1164,
    "preview": "using System.Text.Json.Serialization;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/AppDetailsOptions.cs",
    "chars": 1102,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n  "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/AutoResizeOptions.cs",
    "chars": 1251,
    "preview": "using System.ComponentModel;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    //"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/BitmapOptions.cs",
    "chars": 342,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Blob.cs",
    "chars": 463,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs",
    "chars": 1092,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public class BlockMapDataHolder\n"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs",
    "chars": 1085,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs",
    "chars": 14025,
    "preview": "using ElectronNET.Converter;\nusing System.ComponentModel;\nusing System.Text.Json.Serialization;\nusing System.Runtime.Ver"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CPUUsage.cs",
    "chars": 824,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Certificate.cs",
    "chars": 1554,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CertificatePrincipal.cs",
    "chars": 929,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CertificateTrustDialogOptions.cs",
    "chars": 486,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs",
    "chars": 988,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Provide metadata about the current loaded Chrome extensi"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs",
    "chars": 1010,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Cookie.cs",
    "chars": 2124,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Cookie structure as used by Electron session.cookies API"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CookieChangedCause.cs",
    "chars": 1001,
    "preview": "namespace ElectronNET.API.Entities\n{\n    using System.Text.Json.Serialization;\n\n    /// <summary>\n    /// The cause of t"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CookieDetails.cs",
    "chars": 2372,
    "preview": "using System.ComponentModel;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    //"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CookieFilter.cs",
    "chars": 1323,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs",
    "chars": 761,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CreateFromBufferOptions.cs",
    "chars": 743,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Elec"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs",
    "chars": 2201,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Data.cs",
    "chars": 994,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public class Data\n    {\n        "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/DefaultFontFamily.cs",
    "chars": 1018,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public class DefaultFontFamily\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/DevToolsMode.cs",
    "chars": 759,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Opens the devtools with specified dock state, can be lef"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Display.cs",
    "chars": 3908,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/DisplayBalloonOptions.cs",
    "chars": 1900,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/DockBounceType.cs",
    "chars": 690,
    "preview": "using System.ComponentModel;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs",
    "chars": 1079,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Extension.cs",
    "chars": 953,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Docs: https://electronjs.org/docs/api/structures/extensi"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/FileFilter.cs",
    "chars": 575,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/FileIconOptions.cs",
    "chars": 792,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/FileIconSize.cs",
    "chars": 719,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n  "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/FocusOptions.cs",
    "chars": 573,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Controls the behavior "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs",
    "chars": 3501,
    "preview": "using System.Text.Json.Serialization;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Graphics Feature S"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/IPostData.cs",
    "chars": 580,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Represents a postData item for loadURL/webContents.loadU"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ImportCertificateOptions.cs",
    "chars": 587,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Options for app.import"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/InputEvent.cs",
    "chars": 5944,
    "preview": "using System.Collections.Generic;\n\nnamespace ElectronNET.API.Entities\n{\n    using ElectronNET.Converter;\n    using Syste"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/InputEventType.cs",
    "chars": 2809,
    "preview": "namespace ElectronNET.API.Entities;\n\n/// <summary>\n/// \n/// </summary>\npublic enum InputEventType\n{\n    /// <summary>\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/JumpListCategory.cs",
    "chars": 1088,
    "preview": "using System.Text.Json.Serialization;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <su"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/JumpListCategoryType.cs",
    "chars": 661,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Jump list category kin"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/JumpListItem.cs",
    "chars": 2708,
    "preview": "using System.Text.Json.Serialization;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <su"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/JumpListItemType.cs",
    "chars": 564,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Jump list item kinds f"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/JumpListSettings.cs",
    "chars": 1021,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Settings returned by a"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/LoadURLOptions.cs",
    "chars": 1260,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Options for BrowserWindow.loadURL(url, options) / webCon"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/LoginItemLaunchItem.cs",
    "chars": 1230,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Windows launch entry as"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/LoginItemSettings.cs",
    "chars": 3053,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Return object for app."
  },
  {
    "path": "src/ElectronNET.API/API/Entities/LoginItemSettingsOptions.cs",
    "chars": 1083,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n  "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/LoginSettings.cs",
    "chars": 2608,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Settings object for ap"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Margins.cs",
    "chars": 1446,
    "preview": "namespace ElectronNET.API.Entities;\n\n/// <summary>\n/// Margins object used by webContents.print options and webContents"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/MemoryInfo.cs",
    "chars": 967,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Process memory info as"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/MenuItem.cs",
    "chars": 5483,
    "preview": "using System;\nusing System.Text.Json.Serialization;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/MenuRole.cs",
    "chars": 6159,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public enum MenuRole\n    {\n     "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/MenuType.cs",
    "chars": 1014,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Menu item types matchi"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/MessageBoxOptions.cs",
    "chars": 4125,
    "preview": "using System.Text.Json.Serialization;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <su"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/MessageBoxResult.cs",
    "chars": 578,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Result returned by dialog.showMessageBox / dialog.showMe"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/MessageBoxType.cs",
    "chars": 677,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Message box type for dialog.showMessageBox/showMessageBo"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ModifierType.cs",
    "chars": 1678,
    "preview": "namespace ElectronNET.API.Entities;\n\n/// <summary>\n/// Specifies the possible modifier keys for a keyboard input (maps "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/NativeImage.cs",
    "chars": 14838,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawi"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs",
    "chars": 1401,
    "preview": "using ElectronNET.API.Serialization;\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System."
  },
  {
    "path": "src/ElectronNET.API/API/Entities/NotificationAction.cs",
    "chars": 549,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n  "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/NotificationOptions.cs",
    "chars": 6762,
    "preview": "using System;\nusing System.Runtime.Versioning;\nusing System.Text.Json.Serialization;\n\nnamespace ElectronNET.API.Entities"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs",
    "chars": 977,
    "preview": "namespace ElectronNET.API.Entities;\n\n/// <summary>\n/// 'OnDidFailLoad' event details.\n/// </summary>\npublic class OnDid"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs",
    "chars": 607,
    "preview": "namespace ElectronNET.API.Entities;\n\n/// <summary>\n/// 'did-navigate' event details for main frame navigation.\n/// </su"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/OnTopLevel.cs",
    "chars": 1305,
    "preview": "using System.ComponentModel;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs",
    "chars": 855,
    "preview": "using System.Text.Json.Serialization;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/OpenDialogOptions.cs",
    "chars": 2449,
    "preview": "using System.Text.Json.Serialization;\n\nnamespace ElectronNET.API.Entities\n{\n    using System.Runtime.Versioning;\n\n    //"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/OpenDialogProperty.cs",
    "chars": 1358,
    "preview": "namespace ElectronNET.API.Entities\n{\n    using System.Runtime.Versioning;\n\n    /// <summary>\n    /// \n    /// </summary"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/OpenExternalOptions.cs",
    "chars": 1119,
    "preview": "using System.ComponentModel;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/PageSize.cs",
    "chars": 1304,
    "preview": "namespace ElectronNET.API.Entities;\n\npublic class PageSize\n{\n    private readonly string _value;\n\n    /// <summary>\n   "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/PathName.cs",
    "chars": 2657,
    "preview": "using System.ComponentModel;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Point.cs",
    "chars": 864,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/PrintOptions.cs",
    "chars": 4046,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Print dpi\n    /// </summary>\n    /// <remarks>Up-to-date "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs",
    "chars": 3089,
    "preview": "using ElectronNET.Converter;\nusing System.Text.Json.Serialization;\n\nnamespace ElectronNET.API.Entities;\n\n/// <summary>\n/"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/PrinterInfo.cs",
    "chars": 1599,
    "preview": "using System.Collections.Generic;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// PrinterInfo structure "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ProcessMetric.cs",
    "chars": 2165,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Process metrics inform"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ProcessVersions.cs",
    "chars": 511,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// An object listing the version strings specific to Electro"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ProgressBarMode.cs",
    "chars": 752,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Mode for BrowserWindow"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ProgressBarOptions.cs",
    "chars": 602,
    "preview": "using System.Text.Json.Serialization;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <su"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ProgressInfo.cs",
    "chars": 900,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ProxyConfig.cs",
    "chars": 1548,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Proxy configuration for app.setProxy / session.setProxy."
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ReadBookmark.cs",
    "chars": 713,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Result of clipboard.re"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Rectangle.cs",
    "chars": 1316,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/RelaunchOptions.cs",
    "chars": 561,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Options for app.relaunch: optional args array and execPa"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs",
    "chars": 450,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/RemovePassword.cs",
    "chars": 1566,
    "preview": "using System.Text.Json.Serialization;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ResizeOptions.cs",
    "chars": 658,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Options for NativeImage.resize: optional width/height an"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/SaveDialogOptions.cs",
    "chars": 3038,
    "preview": "using ElectronNET.API.Entities;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API\n{\n    /// <summary>\n    ///"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/SaveDialogProperty.cs",
    "chars": 1236,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Properties supported by"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Scheme.cs",
    "chars": 633,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Authentication scheme names used by webContents 'login' "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/SemVer.cs",
    "chars": 1557,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <yremarks>Project-specific: "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/SharingItem.cs",
    "chars": 695,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// SharingItem for MenuIte"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ShortcutDetails.cs",
    "chars": 1881,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Structure of a shortcu"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs",
    "chars": 742,
    "preview": "using System.ComponentModel;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n "
  },
  {
    "path": "src/ElectronNET.API/API/Entities/Size.cs",
    "chars": 889,
    "preview": "namespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// \n    /// </summary>\n    /// <remarks>Up-to-date with Ele"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ThemeSourceMode.cs",
    "chars": 528,
    "preview": "using System.ComponentModel;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Defines the ThemeSourceMod"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ThumbarButton.cs",
    "chars": 2126,
    "preview": "using System;\nusing System.Text.Json.Serialization;\nusing System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/ThumbarButtonFlag.cs",
    "chars": 1250,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities\n{\n    /// <summary>\n    /// Flags for Windows task"
  },
  {
    "path": "src/ElectronNET.API/API/Entities/TitleBarOverlay.cs",
    "chars": 1621,
    "preview": "using System.Runtime.Versioning;\n\nnamespace ElectronNET.API.Entities;\n\n/// <summary>\n/// Configures the window's title "
  }
]

// ... and 277 more files (download for full content)

About this extraction

This page contains the full source code of the ElectronNET/Electron.NET GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 477 files (1.6 MB), approximately 395.7k tokens, and a symbol index with 1110 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!