{"id":26800606,"url":"https://github.com/ktsu-dev/imguiapp","last_synced_at":"2026-06-09T01:03:53.475Z","repository":{"id":166467741,"uuid":"641936594","full_name":"ktsu-dev/ImGuiApp","owner":"ktsu-dev","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-26T03:31:45.000Z","size":4840,"stargazers_count":4,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-26T05:08:25.579Z","etag":null,"topics":["c","cross-platform","dear-imgui","desktop","frame-limiter","gui","hexa-net","imgui","immediate-mode","modal","net","node-editor","node-graph","opengl","popups","silk-net","theming","ui","widgets","windowing"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ktsu-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT.md","agents":null,"dco":null,"cla":null}},"created_at":"2023-05-17T13:26:14.000Z","updated_at":"2026-05-26T03:31:41.000Z","dependencies_parsed_at":"2026-01-31T15:01:20.036Z","dependency_job_id":null,"html_url":"https://github.com/ktsu-dev/ImGuiApp","commit_stats":null,"previous_names":["ktsu-io/ImGuiApp","ktsu-dev/imguiapp","ktsu-io/imguiapp"],"tags_count":196,"template":false,"template_full_name":null,"purl":"pkg:github/ktsu-dev/ImGuiApp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktsu-dev%2FImGuiApp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktsu-dev%2FImGuiApp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktsu-dev%2FImGuiApp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktsu-dev%2FImGuiApp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ktsu-dev","download_url":"https://codeload.github.com/ktsu-dev/ImGuiApp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktsu-dev%2FImGuiApp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33800676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cross-platform","dear-imgui","desktop","frame-limiter","gui","hexa-net","imgui","immediate-mode","modal","net","node-editor","node-graph","opengl","popups","silk-net","theming","ui","widgets","windowing"],"created_at":"2025-03-29T20:18:04.230Z","updated_at":"2026-06-02T01:01:23.379Z","avatar_url":"https://github.com/ktsu-dev.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ktsu.ImGuiApp\n\n\u003e A comprehensive collection of .NET libraries for building modern, feature-rich desktop applications with Dear ImGui.\n\n[![License](https://img.shields.io/github/license/ktsu-dev/ImGuiApp.svg?label=License\u0026logo=nuget)](LICENSE.md)\n[![NuGet Version](https://img.shields.io/nuget/v/ktsu.ImGui.App?label=Stable\u0026logo=nuget)](https://nuget.org/packages/ktsu.ImGui.App)\n[![NuGet Version](https://img.shields.io/nuget/vpre/ktsu.ImGui.App?label=Latest\u0026logo=nuget)](https://nuget.org/packages/ktsu.ImGui.App)\n[![NuGet Downloads](https://img.shields.io/nuget/dt/ktsu.ImGui.App?label=Downloads\u0026logo=nuget)](https://nuget.org/packages/ktsu.ImGui.App)\n[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/ktsu-dev/ImGuiApp?label=Commits\u0026logo=github)](https://github.com/ktsu-dev/ImGuiApp/commits/main)\n[![GitHub contributors](https://img.shields.io/github/contributors/ktsu-dev/ImGuiApp?label=Contributors\u0026logo=github)](https://github.com/ktsu-dev/ImGuiApp/graphs/contributors)\n[![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/ktsu-dev/ImGuiApp/dotnet.yml?label=Build\u0026logo=github)](https://github.com/ktsu-dev/ImGuiApp/actions)\n\n## Introduction\n\n`ktsu.ImGui.App` is a suite of .NET libraries that provides everything you need to build desktop applications with [Dear ImGui](https://github.com/ocornut/imgui). The suite includes application scaffolding, custom widgets, modal dialogs, a theming system, and a node graph editor framework. Built on Hexa.NET.ImGui bindings and Silk.NET for cross-platform windowing, it supports .NET 10, 9, and 8.\n\n## Features\n\n- **Application Foundation**: Complete application scaffolding with windowing, OpenGL rendering, font management, texture caching, and DPI awareness via `ktsu.ImGui.App`\n- **PID Frame Limiting**: High-precision PID-controlled frame rate limiting with auto-tuning and adaptive throttling for focused, unfocused, idle, and minimized states\n- **Custom Widgets**: Rich collection of UI components including TabPanel, Knob, SearchBox with fuzzy matching, RadialProgressBar with countdown/count-up timers, Grid layouts, DividerContainer with resizable sections, Combo, Tree, and Icons via `ktsu.ImGui.Widgets`\n- **Modal Dialogs**: Professional popup system with MessageOK, Prompt, InputString/Int/Float, FilesystemBrowser, and SearchableList via `ktsu.ImGui.Popups`\n- **Theming System**: 50+ built-in themes (Catppuccin, Tokyo Night, Gruvbox, Dracula, and more) with scoped styling, semantic text colors, button alignment, color palettes, and an interactive theme browser via `ktsu.ImGui.Styler`\n- **Node Graph Framework**: Attribute-based node declaration system with UI-agnostic `ktsu.NodeGraph` metadata library and ImNodes-based visual editor `ktsu.ImGuiNodeEditor` with physics-based layout\n- **Font Management**: Unicode, emoji, and Nerd Font support with GPU memory management via `FontMemoryGuard` and dynamic font scaling\n- **Scoped Styling**: RAII-pattern disposable wrappers for colors, styles, fonts, themes, disable states, and UI scaling\n- **Color Utilities**: HSL/HSLA color creation, accessibility-focused contrast calculations, color manipulation extensions, and semantic color palettes\n\n## Libraries\n\n### ImGui.App - Application Foundation\n\n[![NuGet](https://img.shields.io/nuget/v/ktsu.ImGui.App?label=ktsu.ImGui.App\u0026logo=nuget)](https://nuget.org/packages/ktsu.ImGui.App)\n\nComplete application scaffolding for Dear ImGui applications with windowing, rendering, font/texture management, and performance tuning.\n\n### ImGui.Widgets - Custom UI Components\n\n[![NuGet](https://img.shields.io/nuget/v/ktsu.ImGui.Widgets?label=ktsu.ImGui.Widgets\u0026logo=nuget)](https://nuget.org/packages/ktsu.ImGui.Widgets)\n\nRich collection of custom widgets: TabPanel, Knob, SearchBox, RadialProgressBar, Grid, DividerContainer, Combo, Tree, Icons, ColorIndicator, Text, Image, ScopedDisable, and ScopedId.\n\n### ImGui.Popups - Modal Dialogs\n\n[![NuGet](https://img.shields.io/nuget/v/ktsu.ImGui.Popups?label=ktsu.ImGui.Popups\u0026logo=nuget)](https://nuget.org/packages/ktsu.ImGui.Popups)\n\nProfessional modal dialogs: MessageOK, Prompt, InputString/Int/Float with validation, FilesystemBrowser with glob filtering, and SearchableList with type-safe generics.\n\n### ImGui.Styler - Themes and Styling\n\n[![NuGet](https://img.shields.io/nuget/v/ktsu.ImGui.Styler?label=ktsu.ImGui.Styler\u0026logo=nuget)](https://nuget.org/packages/ktsu.ImGui.Styler)\n\nAdvanced theming system with 50+ built-in themes, scoped styling, semantic text colors, button alignment, color palettes, and an interactive theme browser.\n\n### NodeGraph - Node Metadata (UI-Agnostic)\n\n[![NuGet](https://img.shields.io/nuget/v/ktsu.NodeGraph?label=ktsu.NodeGraph\u0026logo=nuget)](https://nuget.org/packages/ktsu.NodeGraph)\n\nGeneric attribute-based system for declaring node graphs. Decorate classes, structs, and methods with node metadata (pins, execution modes, visibility, deprecation) without coupling to a specific editor implementation.\n\n### ImGuiNodeEditor - Visual Node Editor\n\nAttribute-driven visual node editor built on ImNodes. Includes `NodeEditorEngine` for business logic, `AttributeBasedNodeFactory` for node creation from decorated types, physics-based layout simulation, and `NodeEditorRenderer`/`NodeEditorInputHandler` for rendering and interaction.\n\n## Installation\n\n### Package Manager Console\n\n```powershell\nInstall-Package ktsu.ImGui.App\nInstall-Package ktsu.ImGui.Widgets\nInstall-Package ktsu.ImGui.Popups\nInstall-Package ktsu.ImGui.Styler\nInstall-Package ktsu.NodeGraph\n```\n\n### .NET CLI\n\n```bash\ndotnet add package ktsu.ImGui.App\ndotnet add package ktsu.ImGui.Widgets\ndotnet add package ktsu.ImGui.Popups\ndotnet add package ktsu.ImGui.Styler\ndotnet add package ktsu.NodeGraph\n```\n\n### Package Reference\n\n```xml\n\u003cPackageReference Include=\"ktsu.ImGui.App\" Version=\"x.y.z\" /\u003e\n\u003cPackageReference Include=\"ktsu.ImGui.Widgets\" Version=\"x.y.z\" /\u003e\n\u003cPackageReference Include=\"ktsu.ImGui.Popups\" Version=\"x.y.z\" /\u003e\n\u003cPackageReference Include=\"ktsu.ImGui.Styler\" Version=\"x.y.z\" /\u003e\n\u003cPackageReference Include=\"ktsu.NodeGraph\" Version=\"x.y.z\" /\u003e\n```\n\n## Usage Examples\n\n### Basic Application\n\n```csharp\nusing ktsu.ImGui.App;\nusing Hexa.NET.ImGui;\n\nImGuiApp.Start(new ImGuiAppConfig\n{\n    Title = \"My Application\",\n    OnRender = delta =\u003e\n    {\n        ImGui.Text(\"Hello, ImGui!\");\n    }\n});\n```\n\n### Application with Menu and Performance Settings\n\n```csharp\nusing ktsu.ImGui.App;\nusing ktsu.ImGui.Styler;\nusing Hexa.NET.ImGui;\n\nImGuiApp.Start(new ImGuiAppConfig\n{\n    Title = \"Full Application\",\n    OnStart = () =\u003e\n    {\n        Theme.Apply(\"Tokyo Night\");\n    },\n    OnRender = delta =\u003e\n    {\n        ImGui.Text(\"Content goes here\");\n    },\n    OnAppMenu = () =\u003e\n    {\n        if (ImGui.BeginMenu(\"File\"))\n        {\n            if (ImGui.MenuItem(\"Exit\"))\n            {\n                ImGuiApp.Stop();\n            }\n            ImGui.EndMenu();\n        }\n    },\n    PerformanceSettings = new ImGuiAppPerformanceSettings\n    {\n        FocusedFps = 60.0,\n        UnfocusedFps = 10.0,\n        IdleTimeoutSeconds = 30.0\n    }\n});\n```\n\n### Overlay Mode (Always-On-Top HUD)\n\nOverlay mode turns the application window into a borderless, always-on-top, translucent HUD\nwith optional click-through — ideal for live status displays that sit over other apps. Drive\nit from your render callback; the calls are cheap to make every frame (the native window is\nonly restyled when something actually changes). A dedicated `OverlayFps` keeps the overlay\nanimating smoothly even while unfocused, bypassing the normal focus/idle/visibility throttling.\n\n```csharp\nbool overlayEnabled = true;\n\nImGuiApp.Start(new ImGuiAppConfig\n{\n    Title = \"Status HUD\",\n    PerformanceSettings = new ImGuiAppPerformanceSettings { OverlayFps = 60.0 },\n    OnRender = delta =\u003e\n    {\n        if (overlayEnabled)\n        {\n            // opacity 0.2–1.0, plus optional click-through (mouse passes through to apps behind it).\n            ImGuiApp.EnableOverlay(opacity: 0.9f, clickThrough: false);\n            // Optional: lock it to a corner of the monitor work area (Windows).\n            ImGuiApp.SetOverlayGeometry(OverlayCorner.TopRight, offsetX: 24, offsetY: 24, width: 360, height: 280);\n        }\n        else\n        {\n            ImGuiApp.DisableOverlay(); // restores the decorated window\n        }\n\n        ImGui.Text(\"Live status…\");\n    }\n});\n```\n\nOverlay window styling (borderless / topmost / translucency / click-through) is implemented on\nWindows. On other platforms `IsOverlayActive` and `OverlayFps` still apply, but the window is\nnot restyled.\n\n### Widgets\n\n```csharp\nusing ktsu.ImGui.Widgets;\nusing Hexa.NET.ImGui;\n\n// Tabbed interface\nImGuiWidgets.TabPanel tabPanel = new(\"MyTabs\", closable: true, reorderable: true);\ntabPanel.AddTab(\"tab1\", \"First Tab\", () =\u003e ImGui.Text(\"Content 1\"));\ntabPanel.Draw();\n\n// Search box with filtering\nstring searchTerm = \"\";\nTextFilterType filterType = TextFilterType.Glob;\nTextFilterMatchOptions matchOptions = TextFilterMatchOptions.ByWholeString;\nImGuiWidgets.SearchBox(\"##Search\", ref searchTerm, ref filterType, ref matchOptions);\n\n// Radial countdown timer\nfloat timeRemaining = 300.0f;\nImGuiWidgets.RadialCountdown(timeRemaining, 300.0f);\n\n// Resizable divider layout\nImGuiWidgets.DividerContainer divider = new(\"MySplit\", ImGuiWidgets.DividerLayout.Columns);\ndivider.Add(\"left\", 200f, true, dt =\u003e ImGui.Text(\"Left pane\"));\ndivider.Add(\"right\", 400f, true, dt =\u003e ImGui.Text(\"Right pane\"));\ndivider.Tick(deltaTime);\n```\n\n### Popups and Dialogs\n\n```csharp\nusing ktsu.ImGui.Popups;\n\n// Message dialog\nImGuiPopups.MessageOK messageOK = new();\nmessageOK.Open(\"Hello!\", \"This is a message.\");\nmessageOK.ShowIfOpen();\n\n// String input dialog\nImGuiPopups.InputString inputString = new();\ninputString.Open(\"Enter Name\", \"Name:\", \"Default\", result =\u003e ProcessName(result));\ninputString.ShowIfOpen();\n\n// File browser\nImGuiPopups.FilesystemBrowser browser = new();\nbrowser.FileOpen(\"Open File\", path =\u003e LoadFile(path), \"*.txt\");\nbrowser.ShowIfOpen();\n\n// Searchable list\nImGuiPopups.SearchableList\u003cstring\u003e list = new();\nlist.Open(\"Select Item\", \"Choose:\", items, item =\u003e OnSelected(item));\nlist.ShowIfOpen();\n```\n\n### Theming and Styling\n\n```csharp\nusing ktsu.ImGui.Styler;\nusing Hexa.NET.ImGui;\n\n// Apply a built-in theme\nTheme.Apply(\"Catppuccin Mocha\");\n\n// Show interactive theme browser\nTheme.ShowThemeSelector(\"Select Theme\");\n\n// Scoped color styling (auto-restored after block)\nusing (new ScopedColor(ImGuiCol.Text, Color.FromHex(\"#ff6b6b\")))\n{\n    ImGui.Text(\"This text is red!\");\n}\n\n// Semantic text colors\nusing (Text.Color.Error())\n{\n    ImGui.Text(\"Error message\");\n}\n\nusing (Text.Color.Success())\n{\n    ImGui.Text(\"Success message\");\n}\n\n// Center content\nusing (new Alignment.Center(ImGui.CalcTextSize(\"Centered!\")))\n{\n    ImGui.Text(\"Centered!\");\n}\n\n// Button text alignment\nusing (Button.Alignment.Center())\n{\n    ImGui.Button(\"Centered text\", new Vector2(200, 30));\n}\n\n// Scoped theme for a section\nusing (new ScopedTheme(myTheme))\n{\n    ImGui.Text(\"This section uses a different theme\");\n}\n```\n\n### Node Graph (Attribute-Based Declaration)\n\n```csharp\nusing ktsu.NodeGraph;\n\n[Node(\"Math Add\")]\n[NodeBehavior(NodeExecutionMode.OnInputChange, IsDeterministic = true)]\npublic class AddNode\n{\n    [InputPin(\"A\")]\n    public float A { get; set; }\n\n    [InputPin(\"B\")]\n    public float B { get; set; }\n\n    [OutputPin(\"Result\")]\n    public float Result { get; set; }\n\n    [NodeExecute]\n    public void Execute()\n    {\n        Result = A + B;\n    }\n}\n```\n\n### Visual Node Editor\n\n```csharp\nusing ktsu.ImGuiNodeEditor;\n\n// Create engine and factory\nNodeEditorEngine engine = new();\nAttributeBasedNodeFactory factory = new(engine);\n\n// Register node types\nfactory.RegisterNodeType\u003cAddNode\u003e();\nfactory.RegisterNodeTypesFromAssembly(typeof(AddNode).Assembly);\n\n// Create nodes\nNode nodeA = factory.CreateNode\u003cAddNode\u003e(new Vector2(100, 100));\n\n// Render in ImGui loop\nNodeEditorRenderer renderer = new();\nNodeEditorInputHandler inputHandler = new();\nrenderer.Render(engine, editorSize);\n```\n\n## API Reference\n\n### `ImGuiApp` (Static)\n\nApplication lifecycle and utilities.\n\n#### Methods\n\n| Name | Return Type | Description |\n| ---- | ----------- | ----------- |\n| `Start(ImGuiAppConfig)` | `void` | Initialize and run the application |\n| `Stop()` | `void` | Close the application window |\n| `Show()` / `Hide()` | `void` | Show or hide the window without stopping the render loop |\n| `EnableOverlay(float, bool)` | `void` | Enter overlay mode: borderless, always-on-top, translucent, optional click-through |\n| `SetOverlayGeometry(OverlayCorner, int, int, int, int)` | `void` | Lock the overlay to a work-area corner at an offset and size |\n| `DisableOverlay()` | `void` | Restore the decorated, non-topmost, opaque window |\n| `SetGlobalScale(float)` | `void` | Set accessibility UI scale (0.5-3.0) |\n| `SetWindowIcon(string)` | `void` | Set window icon from image file |\n| `GetOrLoadTexture(AbsoluteFilePath)` | `ImGuiAppTextureInfo` | Load or retrieve cached GPU texture |\n| `DeleteTexture(uint)` | `void` | Remove texture from GPU |\n| `EmsToPx(float)` | `int` | Convert EMs to pixels |\n| `PtsToPx(int)` | `int` | Convert points to pixels |\n\n#### Properties\n\n| Name | Type | Description |\n| ---- | ---- | ----------- |\n| `IsFocused` | `bool` | Whether the window has focus |\n| `IsVisible` | `bool` | Whether the window is visible |\n| `IsIdle` | `bool` | Whether the app is idle |\n| `IsOverlayActive` | `bool` | Whether the window is in overlay mode |\n| `ScaleFactor` | `float` | DPI-based scale factor |\n| `GlobalScale` | `float` | User-adjustable UI scale |\n| `Invoker` | `Invoker` | Delegate invocation for window thread |\n\n### `ImGuiAppConfig`\n\nConfiguration for `ImGuiApp.Start()`.\n\n#### Configuration Properties\n\n| Name | Type | Description |\n| ---- | ---- | ----------- |\n| `Title` | `string` | Window title (default: \"ImGuiApp\") |\n| `IconPath` | `string` | Path to window icon |\n| `OnStart` | `Action` | Initialization callback |\n| `OnUpdate` | `Action\u003cfloat\u003e` | Per-frame update callback |\n| `OnRender` | `Action\u003cfloat\u003e` | Per-frame render callback |\n| `OnAppMenu` | `Action` | Menu bar rendering callback |\n| `OnMoveOrResize` | `Action` | Window moved/resized callback |\n| `OnGlobalScaleChanged` | `Action\u003cfloat\u003e` | Scale changed callback |\n| `Fonts` | `Dictionary\u003cstring, byte[]\u003e` | Custom fonts to load |\n| `EnableUnicodeSupport` | `bool` | Include extended Unicode ranges (default: true) |\n| `PerformanceSettings` | `ImGuiAppPerformanceSettings` | Throttling configuration |\n| `FontMemoryConfig` | `FontMemoryGuard.FontMemoryConfig` | Font memory limits |\n| `InitialWindowState` | `ImGuiAppWindowState` | Initial window size/position |\n\n### `ImGuiAppPerformanceSettings`\n\nFrame rate throttling configuration.\n\n| Name | Type | Description |\n| ---- | ---- | ----------- |\n| `EnableThrottledRendering` | `bool` | Enable adaptive frame limiting (default: true) |\n| `FocusedFps` | `double` | Target FPS when focused (default: 30) |\n| `UnfocusedFps` | `double` | Target FPS when unfocused (default: 5) |\n| `IdleFps` | `double` | Target FPS when idle (default: 10) |\n| `NotVisibleFps` | `double` | Target FPS when minimized (default: 2) |\n| `OverlayFps` | `double` | Target FPS in overlay mode, bypassing focus/idle/visibility throttling (default: 30) |\n| `IdleTimeoutSeconds` | `double` | Seconds before idle state (default: 30) |\n\n### `ImGuiWidgets` (Static)\n\nCustom UI components.\n\n| Name | Return Type | Description |\n| ---- | ----------- | ----------- |\n| `SearchBox(...)` | `bool` | Search box with Glob/Regex/Fuzzy filtering |\n| `SearchBox\u003cT\u003e(...)` | `IEnumerable\u003cT\u003e` | Filtered item selection |\n| `SearchBoxRanked\u003cT\u003e(...)` | `IEnumerable\u003cT\u003e` | Fuzzy-ranked item selection |\n| `Knob(...)` | `bool` | Rotary knob control (float or int) |\n| `RadialProgressBar(...)` | `void` | Radial progress indicator |\n| `RadialCountdown(...)` | `void` | Countdown timer display |\n| `RadialCountUp(...)` | `void` | Count-up timer display |\n| `Combo\u003cTEnum\u003e(...)` | `bool` | Enum selection combo |\n| `Combo\u003cTString\u003e(...)` | `bool` | String selection combo |\n| `Icon(...)` | `bool` | Icon with label and events |\n| `Image(...)` | `bool` | Clickable image display |\n| `ColorIndicator(...)` | `void` | Colored square indicator |\n| `RowMajorGrid\u003cT\u003e(...)` | `void` | Row-major grid layout |\n| `ColumnMajorGrid\u003cT\u003e(...)` | `void` | Column-major grid layout |\n\n### Widget Instance Classes\n\n| Class | Description |\n| ----- | ----------- |\n| `TabPanel` | Tabbed interface with closable, reorderable tabs |\n| `DividerContainer` | Resizable split pane layout (columns or rows) |\n| `ScopedDisable` | RAII wrapper to disable UI elements |\n| `ScopedId` | RAII wrapper to push ImGui IDs |\n| `Tree` | Tree view with nested children |\n\n### `ImGuiPopups` Classes\n\n| Class | Description |\n| ----- | ----------- |\n| `Modal` | Generic modal dialog |\n| `MessageOK` | Simple message with OK button |\n| `Prompt` | Multi-button prompt dialog |\n| `InputString` | String input with confirmation |\n| `InputInt` | Integer input with confirmation |\n| `InputFloat` | Float input with confirmation |\n| `FilesystemBrowser` | File/directory browser with glob filtering |\n| `SearchableList\u003cT\u003e` | Searchable item selection list |\n\n### `Theme` (Static)\n\nTheme management from ImGui.Styler.\n\n| Name | Return Type | Description |\n| ---- | ----------- | ----------- |\n| `Apply(string)` | `bool` | Apply a named theme |\n| `Apply(ISemanticTheme)` | `void` | Apply a theme instance |\n| `ResetToDefault()` | `void` | Reset to default ImGui theme |\n| `ShowThemeSelector(...)` | `void` | Show interactive theme browser |\n| `RenderMenu(...)` | `bool` | Render theme selection menu |\n| `FindTheme(string)` | `ThemeInfo?` | Look up theme by name |\n| `AllThemes` | `IReadOnlyList\u003cThemeInfo\u003e` | All available themes |\n| `DarkThemes` | `IReadOnlyList\u003cThemeInfo\u003e` | Dark themes only |\n| `LightThemes` | `IReadOnlyList\u003cThemeInfo\u003e` | Light themes only |\n| `Families` | `IReadOnlyList\u003cstring\u003e` | Theme family names |\n\n### Styling Utilities\n\n| Class | Description |\n| ----- | ----------- |\n| `ScopedColor` | RAII scoped ImGui color override |\n| `ScopedTextColor` | RAII scoped text color |\n| `ScopedStyleVar` | RAII scoped style variable |\n| `ScopedThemeColor` | RAII scoped theme-aware color |\n| `ScopedTheme` | RAII scoped full theme |\n| `FontAppearance` | RAII scoped font styling |\n| `UIScaler` | RAII scoped UI scaling |\n| `Alignment.Center` | RAII scoped content centering |\n| `Button.Alignment` | RAII scoped button text alignment |\n| `Text.Color` | Semantic text colors (Error, Warning, Info, Success) |\n| `Indent` | Scoped indentation utilities |\n| `Color` | Color creation (Hex, RGB, HSL) with palettes |\n\n### Color Extensions (on `ImColor`)\n\n| Name | Description |\n| ---- | ----------- |\n| `DesaturateBy(float)` | Reduce saturation |\n| `SaturateBy(float)` | Increase saturation |\n| `LightenBy(float)` | Increase luminance |\n| `DarkenBy(float)` | Decrease luminance |\n| `WithAlpha(float)` | Set alpha channel |\n| `ToGrayscale()` | Convert to grayscale |\n| `CalculateOptimalContrastingColor()` | Get best contrast text color |\n| `GetContrastRatioOver(ImColor)` | WCAG contrast ratio |\n\n### `NodeEditorEngine`\n\nCore node graph business logic.\n\n| Name | Return Type | Description |\n| ---- | ----------- | ----------- |\n| `CreateNode(...)` | `Node` | Create a node with pins |\n| `RemoveNode(int)` | `bool` | Remove a node |\n| `TryCreateLink(int, int)` | `LinkCreationResult` | Create a link between pins |\n| `RemoveLink(int)` | `bool` | Remove a link |\n| `UpdatePhysics(float)` | `void` | Run physics simulation step |\n| `Clear()` | `void` | Remove all nodes and links |\n| `Nodes` | `IReadOnlyList\u003cNode\u003e` | All nodes |\n| `Links` | `IReadOnlyList\u003cLink\u003e` | All links |\n| `IsStable` | `bool` | Whether physics is stable |\n\n### Node Graph Attributes\n\n| Attribute | Target | Description |\n| --------- | ------ | ----------- |\n| `[Node]` | Class/Struct/Method | Marks type as a node |\n| `[NodeBehavior]` | Class/Struct | Specifies execution mode |\n| `[NodeExecute]` | Method | Marks execution method |\n| `[InputPin]` | Property/Field/Parameter | Declares an input pin |\n| `[OutputPin]` | Property/Field/Method | Declares an output pin |\n| `[ExecutionInput]` | Property/Field | Declares execution input flow |\n| `[ExecutionOutput]` | Property/Field | Declares execution output flow |\n| `[NodeDeprecated]` | Class/Struct | Marks node as deprecated |\n| `[NodeVisibility]` | Class/Struct | Controls menu visibility |\n| `[WildcardPin]` | Property/Field | Accepts wildcard connections |\n\n## Demo Applications\n\nThe repository includes demo applications showcasing all features:\n\n```bash\n# Run the main demo\ndotnet run --project examples/ImGuiAppDemo\n\n# Run individual library demos\ndotnet run --project examples/ImGuiWidgetsDemo\ndotnet run --project examples/ImGuiPopupsDemo\ndotnet run --project examples/ImGuiStylerDemo\n```\n\n## Contributing\n\nContributions are welcome! Feel free to open issues or submit pull requests.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE.md](LICENSE.md) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fktsu-dev%2Fimguiapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fktsu-dev%2Fimguiapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fktsu-dev%2Fimguiapp/lists"}