diff --git a/api/client/EchoHub.Client.AppOrchestrator.html b/api/client/EchoHub.Client.AppOrchestrator.html index 1f3d000..12326b3 100644 --- a/api/client/EchoHub.Client.AppOrchestrator.html +++ b/api/client/EchoHub.Client.AppOrchestrator.html @@ -173,7 +173,7 @@ Wires UI events to service calls and connection events to UI updates.

Parameters

-
app IApplication
+
app IApplication
config ClientConfig
diff --git a/api/client/EchoHub.Client.Services.AsyncRunner.html b/api/client/EchoHub.Client.Services.AsyncRunner.html index b854035..f4583b4 100644 --- a/api/client/EchoHub.Client.Services.AsyncRunner.html +++ b/api/client/EchoHub.Client.Services.AsyncRunner.html @@ -170,7 +170,7 @@ Runs async work on a background thread and routes exceptions to the UI.

Parameters

-
app IApplication
+
app IApplication
work Func<Task>
diff --git a/api/client/EchoHub.Client.Services.UpdateChecker.html b/api/client/EchoHub.Client.Services.UpdateChecker.html index 451b9f0..5169f4a 100644 --- a/api/client/EchoHub.Client.Services.UpdateChecker.html +++ b/api/client/EchoHub.Client.Services.UpdateChecker.html @@ -171,7 +171,7 @@ Class UpdateChecker Parameters
-
app IApplication
+
app IApplication
diff --git a/api/client/EchoHub.Client.UI.Chat.ChatColors.html b/api/client/EchoHub.Client.UI.Chat.ChatColors.html index d294d60..7a72c6f 100644 --- a/api/client/EchoHub.Client.UI.Chat.ChatColors.html +++ b/api/client/EchoHub.Client.UI.Chat.ChatColors.html @@ -171,7 +171,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -201,7 +201,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -231,7 +231,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -261,7 +261,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -291,7 +291,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -321,7 +321,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -351,7 +351,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -381,7 +381,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -411,7 +411,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -441,7 +441,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -477,7 +477,7 @@ Non-mention text uses the provided default color.

text string
-
defaultColor Attribute?
+
defaultColor Attribute?
diff --git a/api/client/EchoHub.Client.UI.Chat.ChatLine.html b/api/client/EchoHub.Client.UI.Chat.ChatLine.html index 4b4edc0..36475a0 100644 --- a/api/client/EchoHub.Client.UI.Chat.ChatLine.html +++ b/api/client/EchoHub.Client.UI.Chat.ChatLine.html @@ -457,7 +457,7 @@ Format: {F:RRGGBB} (foreground), {B:RRGGBB} (background), {X} (reset).

text string
-
defaultAttr Attribute?
+
defaultAttr Attribute?
diff --git a/api/client/EchoHub.Client.UI.Chat.ChatListSource.html b/api/client/EchoHub.Client.UI.Chat.ChatListSource.html index fd65ca1..02aec20 100644 --- a/api/client/EchoHub.Client.UI.Chat.ChatListSource.html +++ b/api/client/EchoHub.Client.UI.Chat.ChatListSource.html @@ -119,7 +119,7 @@ Class ChatListSource
Implements
-
IListDataSource
+
IListDataSource
IDisposable
@@ -197,8 +197,7 @@ Class ChatListSource -

Gets the number of items in the data source.

-
+
@@ -229,8 +228,7 @@ Class ChatListSource -

Gets the width in columns of the widest item in the data source.

-
+
@@ -250,9 +248,6 @@ Class ChatListSource Remarks -

ListView uses this value to set its horizontal content size for scrolling.

-
@@ -264,8 +259,7 @@ Class ChatListSource -

Gets or sets whether the CollectionChanged event should be suppressed.

-
+
@@ -285,10 +279,6 @@ Class ChatListSource Remarks -

Set to true to prevent CollectionChanged from being raised during bulk -operations. Set back to false to resume event notifications.

-
@@ -487,8 +477,7 @@ operations. Set back to -

Determines whether the specified item is marked.

-
+
@@ -498,15 +487,13 @@ operations. Set back to Parameters
item int
-

The zero-based index of the item.

-
+

Returns

bool
-

true if the item is marked; otherwise false.

-
+
@@ -515,10 +502,6 @@ operations. Set back to Remarks -

ListView calls this method to determine whether to render the item with a mark indicator when -ShowMarks is true.

-
@@ -530,8 +513,7 @@ operations. Set back to -

Renders the specified item to the ListView.

-
+
@@ -540,27 +522,20 @@ operations. Set back to Parameters
-
listView ListView
-

The ListView to render to.

-
+
listView ListView
+
selected bool
-

true if the item is currently selected; otherwise false.

-
+
item int
-

The zero-based index of the item to render.

-
+
col int
-

The column in listView Viewport where rendering starts.

-
+
row int
-

The row in listView Viewport where rendering starts.

-
+
width int
-

The width available for rendering.

-
+
viewportX int
-

The horizontal scroll offset.

-
+
@@ -570,15 +545,6 @@ operations. Set back to Remarks -

- ListView calls this method for each visible item during rendering. The color scheme will be - set based on selection state before this method is called. -

-

- Implementations must fill the entire width to avoid rendering artifacts. -

-
@@ -590,8 +556,7 @@ operations. Set back to -

Sets the marked state of the specified item.

-
+
@@ -601,11 +566,9 @@ operations. Set back to Parameters
item int
-

The zero-based index of the item.

-
+
value bool
-

true to mark the item; false to unmark it.

-
+
@@ -615,10 +578,6 @@ operations. Set back to Remarks -

ListView calls this method when the user toggles marking (e.g., via the SPACE key) if -ShowMarks is true.

-
@@ -630,8 +589,7 @@ operations. Set back to -

Returns the underlying data source as an System.Collections.IList.

-
+
@@ -642,8 +600,7 @@ operations. Set back to Returns
IList
-

The data source as an System.Collections.IList.

-
+
@@ -652,11 +609,6 @@ operations. Set back to
Remarks -

ListView uses this method to access individual items for events like -ValueChanged and to enable keyboard search via -KeystrokeNavigator.

-
@@ -671,8 +623,7 @@ operations. Set back to -

Raised when items are added, removed, moved, or the entire collection is refreshed.

-
+
@@ -692,11 +643,6 @@ operations. Set back to Remarks -

ListView subscribes to this event to update its display and content size when the data -changes. Implementations should raise this event whenever the underlying collection changes, unless -SuspendCollectionChangedEvent is true.

-
diff --git a/api/client/EchoHub.Client.UI.Chat.ChatSegment.html b/api/client/EchoHub.Client.UI.Chat.ChatSegment.html index 36d6033..aaec48f 100644 --- a/api/client/EchoHub.Client.UI.Chat.ChatSegment.html +++ b/api/client/EchoHub.Client.UI.Chat.ChatSegment.html @@ -200,7 +200,7 @@ Class ChatSegment
Text string
-
Color Attribute?
+
Color Attribute?
@@ -239,7 +239,7 @@ Class ChatSegment Property Value
-
Attribute?
+
Attribute?
@@ -334,7 +334,7 @@ Class ChatSegment
Text string
-
Color Attribute?
+
Color Attribute?
diff --git a/api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html b/api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html index 2459a3a..18806f8 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html @@ -195,7 +195,7 @@ Class AudioPlayerDialog Parameters
-
app IApplication
+
app IApplication
audioService AudioPlaybackService
diff --git a/api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html b/api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html index 309dca3..d81c44f 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html @@ -199,7 +199,7 @@ Returns the result, or null if cancelled.

Parameters

-
app IApplication
+
app IApplication
savedServers List<SavedServer>
diff --git a/api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html b/api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html index 7efdf72..8523866 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html @@ -195,7 +195,7 @@ Class CreateChannelDialog Parameters
-
app IApplication
+
app IApplication
diff --git a/api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html b/api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html index 3d43ad8..4ce1e7d 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html @@ -197,7 +197,7 @@ Class ProfileEditDialog Parameters
-
app IApplication
+
app IApplication
currentDisplayName string
diff --git a/api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html b/api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html index 95a998a..5172905 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html @@ -198,7 +198,7 @@ Shows Edit Profile / Set Status buttons when viewing own profile.

Parameters

-
app IApplication
+
app IApplication
profile UserProfileDto
@@ -233,7 +233,7 @@ Returns the action the user selected.

Parameters

-
app IApplication
+
app IApplication
profile UserProfileDto
diff --git a/api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html b/api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html index b312cfd..45bb9f5 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html @@ -197,7 +197,7 @@ Class StatusDialog Parameters
-
app IApplication
+
app IApplication
currentStatus UserStatus
diff --git a/api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html b/api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html index e20d60d..349f25d 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html @@ -195,7 +195,7 @@ Class UpdateConfirmDialog Parameters
-
app IApplication
+
app IApplication
currentVersion string
diff --git a/api/client/EchoHub.Client.UI.Dialogs.UpdateProgressDialog.html b/api/client/EchoHub.Client.UI.Dialogs.UpdateProgressDialog.html index 2c17ae9..a492bfc 100644 --- a/api/client/EchoHub.Client.UI.Dialogs.UpdateProgressDialog.html +++ b/api/client/EchoHub.Client.UI.Dialogs.UpdateProgressDialog.html @@ -165,7 +165,7 @@ Class UpdateProgressDialog Parameters
-
app IApplication
+
app IApplication
newVersion string
diff --git a/api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html b/api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html index 62f05f5..00fd781 100644 --- a/api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html +++ b/api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html @@ -175,7 +175,7 @@ Class HexColorHelper Returns
-
Attribute?
+
Attribute?
@@ -209,13 +209,13 @@ Returns fallback if parsing fails.

hex string
-
fallback Color
+
fallback Color

Returns

-
Color
+
Color
diff --git a/api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html b/api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html index 734639a..2d1a075 100644 --- a/api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html +++ b/api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html @@ -120,7 +120,7 @@ Active channel gets a > indicator, unread channels are bright with a count ba
Implements
- +
IListDataSource
@@ -198,8 +198,7 @@ Active channel gets a > indicator, unread channels are bright with a count ba -

Gets the number of items in the data source.

-
+
@@ -230,8 +229,7 @@ Active channel gets a > indicator, unread channels are bright with a count ba -

Gets the width in columns of the widest item in the data source.

-
+
@@ -251,9 +249,6 @@ Active channel gets a > indicator, unread channels are bright with a count ba -

Remarks

-

ListView uses this value to set its horizontal content size for scrolling.

-
@@ -265,8 +260,7 @@ Active channel gets a > indicator, unread channels are bright with a count ba -

Gets or sets whether the CollectionChanged event should be suppressed.

-
+
@@ -286,10 +280,6 @@ Active channel gets a > indicator, unread channels are bright with a count ba -

Remarks

-

Set to true to prevent CollectionChanged from being raised during bulk -operations. Set back to false to resume event notifications.

-
@@ -331,8 +321,7 @@ operations. Set back to -

Determines whether the specified item is marked.

-
+
@@ -342,15 +331,13 @@ operations. Set back to Parameters
item int
-

The zero-based index of the item.

-
+

Returns

bool
-

true if the item is marked; otherwise false.

-
+
@@ -359,10 +346,6 @@ operations. Set back to Remarks -

ListView calls this method to determine whether to render the item with a mark indicator when -ShowMarks is true.

-
@@ -374,8 +357,7 @@ operations. Set back to -

Renders the specified item to the ListView.

-
+
@@ -384,27 +366,20 @@ operations. Set back to Parameters
-
listView ListView
-

The ListView to render to.

-
+
listView ListView
+
selected bool
-

true if the item is currently selected; otherwise false.

-
+
item int
-

The zero-based index of the item to render.

-
+
col int
-

The column in listView Viewport where rendering starts.

-
+
row int
-

The row in listView Viewport where rendering starts.

-
+
width int
-

The width available for rendering.

-
+
viewportX int
-

The horizontal scroll offset.

-
+
@@ -414,15 +389,6 @@ operations. Set back to Remarks -

- ListView calls this method for each visible item during rendering. The color scheme will be - set based on selection state before this method is called. -

-

- Implementations must fill the entire width to avoid rendering artifacts. -

-
@@ -434,8 +400,7 @@ operations. Set back to -

Sets the marked state of the specified item.

-
+
@@ -445,11 +410,9 @@ operations. Set back to Parameters
item int
-

The zero-based index of the item.

-
+
value bool
-

true to mark the item; false to unmark it.

-
+
@@ -459,10 +422,6 @@ operations. Set back to Remarks -

ListView calls this method when the user toggles marking (e.g., via the SPACE key) if -ShowMarks is true.

-
@@ -474,8 +433,7 @@ operations. Set back to -

Returns the underlying data source as an System.Collections.IList.

-
+
@@ -486,8 +444,7 @@ operations. Set back to Returns
IList
-

The data source as an System.Collections.IList.

-
+
@@ -496,11 +453,6 @@ operations. Set back to
Remarks -

ListView uses this method to access individual items for events like -ValueChanged and to enable keyboard search via -KeystrokeNavigator.

-
@@ -550,8 +502,7 @@ operations. Set back to -

Raised when items are added, removed, moved, or the entire collection is refreshed.

-
+
@@ -571,11 +522,6 @@ operations. Set back to Remarks -

ListView subscribes to this event to update its display and content size when the data -changes. Implementations should raise this event whenever the underlying collection changes, unless -SuspendCollectionChangedEvent is true.

-
diff --git a/api/client/EchoHub.Client.UI.ListSources.UserListSource.html b/api/client/EchoHub.Client.UI.ListSources.UserListSource.html index 3573d78..e486b7e 100644 --- a/api/client/EchoHub.Client.UI.ListSources.UserListSource.html +++ b/api/client/EchoHub.Client.UI.ListSources.UserListSource.html @@ -119,7 +119,7 @@ Class UserListSource
Implements
- +
IListDataSource
@@ -197,8 +197,7 @@ Class UserListSource -

Gets the number of items in the data source.

-
+
@@ -229,8 +228,7 @@ Class UserListSource -

Gets the width in columns of the widest item in the data source.

-
+
@@ -250,9 +248,6 @@ Class UserListSource Remarks -

ListView uses this value to set its horizontal content size for scrolling.

-
@@ -264,8 +259,7 @@ Class UserListSource -

Gets or sets whether the CollectionChanged event should be suppressed.

-
+
@@ -285,10 +279,6 @@ Class UserListSource Remarks -

Set to true to prevent CollectionChanged from being raised during bulk -operations. Set back to false to resume event notifications.

-
@@ -330,8 +320,7 @@ operations. Set back to -

Determines whether the specified item is marked.

-
+
@@ -341,15 +330,13 @@ operations. Set back to Parameters
item int
-

The zero-based index of the item.

-
+

Returns

bool
-

true if the item is marked; otherwise false.

-
+
@@ -358,10 +345,6 @@ operations. Set back to Remarks -

ListView calls this method to determine whether to render the item with a mark indicator when -ShowMarks is true.

-
@@ -373,8 +356,7 @@ operations. Set back to -

Renders the specified item to the ListView.

-
+
@@ -383,27 +365,20 @@ operations. Set back to Parameters
-
listView ListView
-

The ListView to render to.

-
+
listView ListView
+
selected bool
-

true if the item is currently selected; otherwise false.

-
+
item int
-

The zero-based index of the item to render.

-
+
col int
-

The column in listView Viewport where rendering starts.

-
+
row int
-

The row in listView Viewport where rendering starts.

-
+
width int
-

The width available for rendering.

-
+
viewportX int
-

The horizontal scroll offset.

-
+
@@ -413,15 +388,6 @@ operations. Set back to Remarks -

- ListView calls this method for each visible item during rendering. The color scheme will be - set based on selection state before this method is called. -

-

- Implementations must fill the entire width to avoid rendering artifacts. -

-
@@ -433,8 +399,7 @@ operations. Set back to -

Sets the marked state of the specified item.

-
+
@@ -444,11 +409,9 @@ operations. Set back to Parameters
item int
-

The zero-based index of the item.

-
+
value bool
-

true to mark the item; false to unmark it.

-
+
@@ -458,10 +421,6 @@ operations. Set back to Remarks -

ListView calls this method when the user toggles marking (e.g., via the SPACE key) if -ShowMarks is true.

-
@@ -473,8 +432,7 @@ operations. Set back to -

Returns the underlying data source as an System.Collections.IList.

-
+
@@ -485,8 +443,7 @@ operations. Set back to Returns
IList
-

The data source as an System.Collections.IList.

-
+
@@ -495,11 +452,6 @@ operations. Set back to
Remarks -

ListView uses this method to access individual items for events like -ValueChanged and to enable keyboard search via -KeystrokeNavigator.

-
@@ -520,7 +472,7 @@ operations. Set back to Parameters
-
users List<(string Text, Attribute? NameColor)>
+
users List<(string Text, Attribute? NameColor)>
@@ -545,8 +497,7 @@ operations. Set back to -

Raised when items are added, removed, moved, or the entire collection is refreshed.

-
+
@@ -566,11 +517,6 @@ operations. Set back to Remarks -

ListView subscribes to this event to update its display and content size when the data -changes. Implementations should raise this event whenever the underlying collection changes, unless -SuspendCollectionChangedEvent is true.

-
diff --git a/api/client/EchoHub.Client.UI.MainWindow.html b/api/client/EchoHub.Client.UI.MainWindow.html index dc38854..4f2f6ec 100644 --- a/api/client/EchoHub.Client.UI.MainWindow.html +++ b/api/client/EchoHub.Client.UI.MainWindow.html @@ -112,8 +112,8 @@ Class MainWindow Inheritance
- - +
View
+
Runnable
MainWindow
@@ -122,7 +122,7 @@ Class MainWindow Implements
- +
IRunnable
@@ -131,661 +131,646 @@ Class MainWindow Inherited Members
- Runnable.SetApp(IApplication) + Runnable.SetApp(IApplication)
- Runnable.RequestStop() + Runnable.RequestStop()
- Runnable.Result + Runnable.Result
- Runnable.IsRunning + Runnable.IsRunning
- Runnable.IsModal + Runnable.IsModal
- Runnable.StopRequested + Runnable.StopRequested
- Runnable.IsRunningChanging + Runnable.IsRunningChanging
- Runnable.IsRunningChanged + Runnable.IsRunningChanged
- Runnable.IsModalChanged + Runnable.IsModalChanged
- View.NewMouseEvent(Mouse) + View.NewMouseEvent(Mouse)
- View.RaiseMouseEvent(Mouse) + View.RaiseMouseEvent(Mouse)
- View.GetAdornmentsThickness() + View.GetAdornmentsThickness()
- View.GetSupportedCommands() + View.GetSupportedCommands()
- View.InvokeCommands(Command[], IInputBinding) + View.InvokeCommands(Command[], IInputBinding)
- View.InvokeCommand(Command, IInputBinding) + View.InvokeCommand(Command, IInputBinding)
- View.InvokeCommand(Command, ICommandContext) + View.InvokeCommand(Command, ICommandContext)
- View.InvokeCommand(Command) + View.InvokeCommand(Command)
- View.SetContentSize(Size?) + View.SetContentSize(Size?)
- View.GetContentSize() + View.GetContentSize()
- View.GetWidthRequiredForSubViews() + View.GetWidthRequiredForSubViews()
- View.GetHeightRequiredForSubViews() + View.GetHeightRequiredForSubViews()
- View.ContentToScreen(in Point) + View.ContentToScreen(in Point)
- View.ScreenToContent(in Point) + View.ScreenToContent(in Point)
- View.ViewportToScreen(in Rectangle) + View.ViewportToScreen(in Rectangle)
- View.ViewportToScreen(in Point) + View.ViewportToScreen(in Point)
- View.ViewportToScreen() + View.ViewportToScreen()
- View.ScreenToViewport(in Point) + View.ScreenToViewport(in Point)
- View.GetViewportOffsetFromFrame() + View.GetViewportOffsetFromFrame()
- View.Dispose() + View.Dispose()
- View.ToString() + View.ToString()
- View.ToDebugString() + View.ToDebugString()
- View.BeginInit() + View.BeginInit()
- View.EndInit() + View.EndInit()
- View.OnEnabledChanged() + View.OnEnabledChanged()
- View.VerifyViewsWereDisposed() + View.SetCursorNeedsUpdate()
- View.SetCursorNeedsUpdate() + View.GetCurrentAttribute()
- View.GetCurrentAttribute() + View.GetAttributeForRole(VisualRole)
- View.GetAttributeForRole(VisualRole) + View.SetAttribute(Attribute)
- View.SetAttribute(Attribute) + View.SetAttributeForRole(VisualRole)
- View.GetClip() + View.SetClip(Region)
- View.SetClip(Region) + View.SetClipToScreen()
- View.SetClipToScreen() + View.ExcludeFromClip(Rectangle)
- View.ExcludeFromClip(Rectangle) + View.ExcludeFromClip(Region)
- View.ExcludeFromClip(Region) + View.AddViewportToClip()
- View.AddViewportToClip() + View.Draw(DrawContext)
- View.Draw(DrawContext) + View.DrawAdornments()
- View.DrawAdornments() + View.ClearViewport(DrawContext)
- View.ClearViewport(DrawContext) + View.DrawText(DrawContext)
- View.DrawText(DrawContext) + View.DrawSubViews(DrawContext)
- View.DrawSubViews(DrawContext) + View.RenderLineCanvas(DrawContext)
- View.Move(int, int) + View.AddRune(Rune)
- View.DrawHotString(string, bool) + View.FillRect(Rectangle, Color?)
- View.FillRect(Rectangle, Color?) + View.FillRect(Rectangle, Rune)
- View.FillRect(Rectangle, Rune) + View.GetScheme()
- View.GetScheme() + View.SetScheme(Scheme)
- View.Add(View) + View.Add(params View[])
- View.Add(params View[]) + View.Remove(View)
- View.Remove(View) + View.RemoveAll()
- View.RemoveAll() + View.RemoveAll<TView>()
- View.IsInHierarchy(View, View, bool) + View.MoveSubViewTowardsEnd(View)
- View.MoveSubViewTowardsEnd(View) + View.MoveSubViewToEnd(View)
- View.MoveSubViewToEnd(View) + View.MoveSubViewTowardsStart(View)
- View.MoveSubViewTowardsStart(View) + View.MoveSubViewToStart(View)
- View.AddKeyBindingsForHotKey(Key, Key, object) + View.AssignHotKeysToSubViews()
- View.AssignHotKeysToSubViews() + View.NewKeyDownEvent(Key)
- View.NewKeyDownEvent(Key) + View.Contains(in Point)
- View.Contains(in Point) + View.FrameToScreen()
- View.FrameToScreen() + View.ScreenToFrame(in Point)
- View.ScreenToFrame(in Point) + View.Layout(Size)
- View.Layout(Size) + View.Layout()
- View.Layout() + View.SetRelativeLayout(Size)
- View.SetRelativeLayout(Size) + View.SetNeedsLayout()
- View.SetNeedsLayout() + View.GetContainerSize()
- View.GetContainerSize() + View.GetViewsUnderLocation(in Point, ViewportSettingsFlags)
- View.GetViewsUnderLocation(in Point, ViewportSettingsFlags) + View.AdvanceFocus(NavigationDirection, TabBehavior?)
- View.AdvanceFocus(NavigationDirection, TabBehavior?) + View.FocusDeepest(NavigationDirection, TabBehavior?)
- View.OnCanFocusChanged() + View.ClearFocus()
- View.ClearFocus() + View.SetFocus()
- View.SetFocus() + View.SetNeedsDraw()
- View.SetNeedsDraw() + View.SetNeedsDraw(Rectangle)
- View.SetNeedsDraw(Rectangle) + View.OnTextChanged()
- View.OnTextChanged() + View.MouseBindings
- View.MouseBindings + View.MouseHoldRepeat
- View.MouseHoldRepeat + View.MousePositionTracking
- View.MousePositionTracking + View.MouseState
- View.MouseState + View.MouseHighlightStates
- View.MouseHighlightStates + View.Margin
- View.Margin + View.ShadowStyle
- View.ShadowStyle + View.Border
- View.Border + View.BorderStyle
- View.BorderStyle + View.Padding
- View.Padding + View.Arrangement
- View.Arrangement + View.ContentSizeTracksViewport
- View.ContentSizeTracksViewport + View.ViewportSettings
- View.ViewportSettings + View.Viewport
- View.Viewport + View.Data
- View.Data + View.Id
- View.Id + View.App
- View.App + View.IsInitialized
- View.IsInitialized + View.Enabled
- View.Enabled + View.Visible
- View.Visible + View.Title
- View.Title + View.Cursor
- View.EnableDebugIDisposableAsserts + View.Diagnostics
- View.WasDisposed + View.LineCanvas
- View.DisposedCount + View.SuperViewRendersLineCanvas
- View.Instances + View.SchemeName
- View.Cursor + View.HasScheme
- View.Diagnostics + View.SubViews
- View.LineCanvas + View.SuperView
- View.SchemeName + View.HotKeySpecifier
- View.HasScheme + View.AssignHotKeys
- View.SubViews + View.UsedHotKeys
- View.SuperView + View.KeyBindings
- View.HotKey + View.HotKeyBindings
- View.HotKeySpecifier + View.Frame
- View.AssignHotKeys + View.X
- View.UsedHotKeys + View.Y
- View.KeyBindings + View.Height
- View.HotKeyBindings + View.Width
- View.Frame + View.NeedsLayout
- View.X + View.ValidatePosDim
- View.Y + View.CanFocus
- View.Height + View.Focused
- View.Width + View.IsCurrentTop
- View.NeedsLayout + View.MostFocused
- View.ValidatePosDim + View.HasFocus
- View.CanFocus + View.TabStop
- View.Focused + View.NeedsDraw
- View.IsCurrentTop + View.HorizontalScrollBar
- View.MostFocused + View.VerticalScrollBar
- View.HasFocus + View.PreserveTrailingSpaces
- View.TabStop + View.Text
- View.NeedsDraw + View.TextAlignment
- View.HorizontalScrollBar + View.TextDirection
- View.VerticalScrollBar + View.TextFormatter
- View.PreserveTrailingSpaces + View.VerticalTextAlignment
- View.Text + View.MouseEnter
- View.TextAlignment + View.MouseLeave
- View.TextDirection + View.MouseHoldRepeatChanging
- View.TextFormatter + View.MouseHoldRepeatChanged
- View.VerticalTextAlignment + View.MouseEvent
- View.MouseEnter + View.MouseStateChanged
- View.MouseLeave + View.BorderStyleChanged
- View.MouseHoldRepeatChanging + View.CommandNotBound
- View.MouseHoldRepeatChanged + View.Accepting
- View.MouseEvent + View.Accepted
- View.MouseStateChanged + View.Activating
- View.BorderStyleChanged + View.HandlingHotKey
- View.CommandNotBound + View.ContentSizeChanging
- View.Accepting + View.ContentSizeChanged
- View.Accepted + View.ViewportChanged
- View.Activating + View.Disposing
- View.HandlingHotKey + View.Initialized
- View.ContentSizeChanging + View.EnabledChanged
- View.ContentSizeChanged + View.VisibleChanging
- View.ViewportChanged + View.VisibleChanged
- View.Disposing + View.TitleChanging
- View.Initialized + View.TitleChanged
- View.EnabledChanged + View.GettingAttributeForRole
- View.VisibleChanging + View.ClearingViewport
- View.VisibleChanged + View.ClearedViewport
- View.TitleChanging + View.DrawingText
- View.TitleChanged + View.DrewText
- View.GettingAttributeForRole + View.DrawingContent
- View.ClearingViewport + View.DrawingSubViews
- View.ClearedViewport + View.DrawComplete
- View.DrawingText + View.SchemeNameChanging
- View.DrewText + View.SchemeNameChanged
- View.DrawingContent + View.GettingScheme
- View.DrawingSubViews + View.SchemeChanging
- View.DrawComplete + View.SchemeChanged
- View.SchemeNameChanging + View.SuperViewChanging
- View.SchemeNameChanged + View.SuperViewChanged
- View.GettingScheme + View.SubViewAdded
- View.SchemeChanging + View.SubViewRemoved
- View.SchemeChanged + View.Removed
- View.SuperViewChanging + View.HotKeyChanged
- View.SuperViewChanged + View.KeyDown
- View.SubViewAdded + View.KeyDownNotHandled
- View.SubViewRemoved + View.FrameChanged
- View.Removed + View.HeightChanging
- View.HotKeyChanged + View.HeightChanged
- View.KeyDown + View.WidthChanging
- View.KeyDownNotHandled + View.WidthChanged
- View.FrameChanged + View.SubViewLayout
- View.HeightChanging + View.SubViewsLaidOut
- View.HeightChanged + View.AdvancingFocus
- View.WidthChanging + View.CanFocusChanged
- View.WidthChanged + View.FocusedChanged
- View.SubViewLayout + View.HasFocusChanging
- View.SubViewsLaidOut + View.HasFocusChanged
- - - - -
- View.TextChanged + View.TextChanged
object.GetType() @@ -829,7 +814,7 @@ Class MainWindow Parameters
-
app IApplication
+
app IApplication
messageManager ChatMessageManager
diff --git a/changelog/toc.html b/changelog/toc.html index b2fea93..6c84ad0 100644 --- a/changelog/toc.html +++ b/changelog/toc.html @@ -15,6 +15,12 @@
  • Overview
  • +
  • + v0.2.7 +
  • +
  • + v0.2.6 +
  • v0.2.5
  • diff --git a/changelog/toc.json b/changelog/toc.json index 42eed29..ecad7e9 100644 --- a/changelog/toc.json +++ b/changelog/toc.json @@ -1,2 +1,2 @@ -{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"v0.2.5","href":"v0.2.5.html","topicHref":"v0.2.5.html"},{"name":"v0.2.4","href":"v0.2.4.html","topicHref":"v0.2.4.html"},{"name":"v0.2.3","href":"v0.2.3.html","topicHref":"v0.2.3.html"},{"name":"v0.2.2","href":"v0.2.2.html","topicHref":"v0.2.2.html"},{"name":"v0.2.1","href":"v0.2.1.html","topicHref":"v0.2.1.html"},{"name":"v0.2.0","href":"v0.2.0.html","topicHref":"v0.2.0.html"},{"name":"v0.1.1","href":"v0.1.1.html","topicHref":"v0.1.1.html"},{"name":"v0.1.0","href":"v0.1.0.html","topicHref":"v0.1.0.html"}]} +{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"v0.2.7","href":"v0.2.7.html","topicHref":"v0.2.7.html"},{"name":"v0.2.6","href":"v0.2.6.html","topicHref":"v0.2.6.html"},{"name":"v0.2.5","href":"v0.2.5.html","topicHref":"v0.2.5.html"},{"name":"v0.2.4","href":"v0.2.4.html","topicHref":"v0.2.4.html"},{"name":"v0.2.3","href":"v0.2.3.html","topicHref":"v0.2.3.html"},{"name":"v0.2.2","href":"v0.2.2.html","topicHref":"v0.2.2.html"},{"name":"v0.2.1","href":"v0.2.1.html","topicHref":"v0.2.1.html"},{"name":"v0.2.0","href":"v0.2.0.html","topicHref":"v0.2.0.html"},{"name":"v0.1.1","href":"v0.1.1.html","topicHref":"v0.1.1.html"},{"name":"v0.1.0","href":"v0.1.0.html","topicHref":"v0.1.0.html"}]} diff --git a/changelog/v0.2.6.html b/changelog/v0.2.6.html index b4c7765..f1028a4 100644 --- a/changelog/v0.2.6.html +++ b/changelog/v0.2.6.html @@ -101,6 +101,8 @@
  • Moved AsyncRunner from project root to Services/ with updated namespace
  • Renamed ColorHelperHexColorHelper to avoid namespace collision with Terminal.Gui's ColorHelper NuGet dependency
  • Moved hue_icon.ico to Client/Assets/, removed duplicate from Server (Server now references shared icon via relative path)
  • +
  • Add hex color parsing helper and implement custom list sources for channels and users
  • +
  • Add dialogs for connection, channel creation, profile editing, and status management
  • Infrastructure

      diff --git a/changelog/v0.2.7.html b/changelog/v0.2.7.html new file mode 100644 index 0000000..dfd5c51 --- /dev/null +++ b/changelog/v0.2.7.html @@ -0,0 +1,127 @@ + + + + + v0.2.7 | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + +
      +
      +
      +
      +
      Table of Contents
      + +
      +
      + +
      +
      +
      + +
      +
      + + + +
      + +
      +

      v0.2.7

      + +

      Bug Fixes

      +
        +
      • Fix user list empty on initial connect — FetchAndUpdateOnlineUsers was called before InvokeUI set the current channel, causing an early return
      • +
      +

      Infrastructure

      +
        +
      • Switch Terminal.Gui from local fork submodule back to NuGet package (2.0.0-develop.5039) — transparent color PR merged upstream
      • +
      • Remove Terminal.Gui submodule, .gitmodules, and root nuget.config workaround
      • +
      • Remove rm -f submodule nuget.config steps and submodules: recursive from all 3 CI workflows (ci, docs, release)
      • +
      • Remove --exclude src/Terminal.Gui/ from format check
      • +
      + +
      + + + + + +
      + +
      + +
      +
      + +
      + + + + diff --git a/index.json b/index.json index cf4e725..c60eb2b 100644 --- a/index.json +++ b/index.json @@ -127,7 +127,7 @@ "api/client/EchoHub.Client.UI.Chat.ChatListSource.html": { "href": "api/client/EchoHub.Client.UI.Chat.ChatListSource.html", "title": "Class ChatListSource | EchoHub Documentation", - "summary": "Class ChatListSource Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll Custom list data source for chat messages with per-segment coloring. public class ChatListSource : IListDataSource, IDisposable Inheritance object ChatListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatListSource() public ChatListSource() Properties Count Gets the number of items in the data source. public int Count { get; } Property Value int MaxItemLength Gets the width in columns of the widest item in the data source. public int MaxItemLength { get; } Property Value int Remarks ListView uses this value to set its horizontal content size for scrolling. SuspendCollectionChangedEvent Gets or sets whether the CollectionChanged event should be suppressed. public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Remarks Set to true to prevent CollectionChanged from being raised during bulk operations. Set back to false to resume event notifications. Methods Add(ChatLine) public void Add(ChatLine line) Parameters line ChatLine AddRange(IEnumerable) public void AddRange(IEnumerable lines) Parameters lines IEnumerable Clear() public void Clear() Dispose() public void Dispose() GetLine(int) public ChatLine? GetLine(int index) Parameters index int Returns ChatLine InsertRange(int, IEnumerable) public void InsertRange(int index, IEnumerable lines) Parameters index int lines IEnumerable IsMarked(int) Determines whether the specified item is marked. public bool IsMarked(int item) Parameters item int The zero-based index of the item. Returns bool true if the item is marked; otherwise false. Remarks ListView calls this method to determine whether to render the item with a mark indicator when ShowMarks is true. Render(ListView, bool, int, int, int, int, int) Renders the specified item to the ListView. public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView The ListView to render to. selected bool true if the item is currently selected; otherwise false. item int The zero-based index of the item to render. col int The column in listView Viewport where rendering starts. row int The row in listView Viewport where rendering starts. width int The width available for rendering. viewportX int The horizontal scroll offset. Remarks ListView calls this method for each visible item during rendering. The color scheme will be set based on selection state before this method is called. Implementations must fill the entire width to avoid rendering artifacts. SetMark(int, bool) Sets the marked state of the specified item. public void SetMark(int item, bool value) Parameters item int The zero-based index of the item. value bool true to mark the item; false to unmark it. Remarks ListView calls this method when the user toggles marking (e.g., via the SPACE key) if ShowMarks is true. ToList() Returns the underlying data source as an System.Collections.IList. public IList ToList() Returns IList The data source as an System.Collections.IList. Remarks ListView uses this method to access individual items for events like ValueChanged and to enable keyboard search via KeystrokeNavigator. Events CollectionChanged Raised when items are added, removed, moved, or the entire collection is refreshed. public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler Remarks ListView subscribes to this event to update its display and content size when the data changes. Implementations should raise this event whenever the underlying collection changes, unless SuspendCollectionChangedEvent is true." + "summary": "Class ChatListSource Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll Custom list data source for chat messages with per-segment coloring. public class ChatListSource : IListDataSource, IDisposable Inheritance object ChatListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatListSource() public ChatListSource() Properties Count public int Count { get; } Property Value int MaxItemLength public int MaxItemLength { get; } Property Value int SuspendCollectionChangedEvent public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Methods Add(ChatLine) public void Add(ChatLine line) Parameters line ChatLine AddRange(IEnumerable) public void AddRange(IEnumerable lines) Parameters lines IEnumerable Clear() public void Clear() Dispose() public void Dispose() GetLine(int) public ChatLine? GetLine(int index) Parameters index int Returns ChatLine InsertRange(int, IEnumerable) public void InsertRange(int index, IEnumerable lines) Parameters index int lines IEnumerable IsMarked(int) public bool IsMarked(int item) Parameters item int Returns bool Render(ListView, bool, int, int, int, int, int) public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView selected bool item int col int row int width int viewportX int SetMark(int, bool) public void SetMark(int item, bool value) Parameters item int value bool ToList() public IList ToList() Returns IList Events CollectionChanged public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler" }, "api/client/EchoHub.Client.UI.Chat.ChatMessageManager.html": { "href": "api/client/EchoHub.Client.UI.Chat.ChatMessageManager.html", @@ -232,12 +232,12 @@ "api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html": { "href": "api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html", "title": "Class ChannelListSource | EchoHub Documentation", - "summary": "Class ChannelListSource Namespace EchoHub.Client.UI.ListSources Assembly EchoHub.Client.dll Custom list data source for colored channel list rendering. Active channel gets a > indicator, unread channels are bright with a count badge. public class ChannelListSource : IListDataSource, IDisposable Inheritance object ChannelListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelListSource() public ChannelListSource() Properties Count Gets the number of items in the data source. public int Count { get; } Property Value int MaxItemLength Gets the width in columns of the widest item in the data source. public int MaxItemLength { get; } Property Value int Remarks ListView uses this value to set its horizontal content size for scrolling. SuspendCollectionChangedEvent Gets or sets whether the CollectionChanged event should be suppressed. public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Remarks Set to true to prevent CollectionChanged from being raised during bulk operations. Set back to false to resume event notifications. Methods Dispose() public void Dispose() IsMarked(int) Determines whether the specified item is marked. public bool IsMarked(int item) Parameters item int The zero-based index of the item. Returns bool true if the item is marked; otherwise false. Remarks ListView calls this method to determine whether to render the item with a mark indicator when ShowMarks is true. Render(ListView, bool, int, int, int, int, int) Renders the specified item to the ListView. public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView The ListView to render to. selected bool true if the item is currently selected; otherwise false. item int The zero-based index of the item to render. col int The column in listView Viewport where rendering starts. row int The row in listView Viewport where rendering starts. width int The width available for rendering. viewportX int The horizontal scroll offset. Remarks ListView calls this method for each visible item during rendering. The color scheme will be set based on selection state before this method is called. Implementations must fill the entire width to avoid rendering artifacts. SetMark(int, bool) Sets the marked state of the specified item. public void SetMark(int item, bool value) Parameters item int The zero-based index of the item. value bool true to mark the item; false to unmark it. Remarks ListView calls this method when the user toggles marking (e.g., via the SPACE key) if ShowMarks is true. ToList() Returns the underlying data source as an System.Collections.IList. public IList ToList() Returns IList The data source as an System.Collections.IList. Remarks ListView uses this method to access individual items for events like ValueChanged and to enable keyboard search via KeystrokeNavigator. Update(List, Dictionary, string) public void Update(List channels, Dictionary unread, string activeChannel) Parameters channels List unread Dictionary activeChannel string Events CollectionChanged Raised when items are added, removed, moved, or the entire collection is refreshed. public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler Remarks ListView subscribes to this event to update its display and content size when the data changes. Implementations should raise this event whenever the underlying collection changes, unless SuspendCollectionChangedEvent is true." + "summary": "Class ChannelListSource Namespace EchoHub.Client.UI.ListSources Assembly EchoHub.Client.dll Custom list data source for colored channel list rendering. Active channel gets a > indicator, unread channels are bright with a count badge. public class ChannelListSource : IListDataSource, IDisposable Inheritance object ChannelListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelListSource() public ChannelListSource() Properties Count public int Count { get; } Property Value int MaxItemLength public int MaxItemLength { get; } Property Value int SuspendCollectionChangedEvent public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Methods Dispose() public void Dispose() IsMarked(int) public bool IsMarked(int item) Parameters item int Returns bool Render(ListView, bool, int, int, int, int, int) public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView selected bool item int col int row int width int viewportX int SetMark(int, bool) public void SetMark(int item, bool value) Parameters item int value bool ToList() public IList ToList() Returns IList Update(List, Dictionary, string) public void Update(List channels, Dictionary unread, string activeChannel) Parameters channels List unread Dictionary activeChannel string Events CollectionChanged public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler" }, "api/client/EchoHub.Client.UI.ListSources.UserListSource.html": { "href": "api/client/EchoHub.Client.UI.ListSources.UserListSource.html", "title": "Class UserListSource | EchoHub Documentation", - "summary": "Class UserListSource Namespace EchoHub.Client.UI.ListSources Assembly EchoHub.Client.dll Custom list data source for the online users panel with per-user nickname colors. public class UserListSource : IListDataSource, IDisposable Inheritance object UserListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors UserListSource() public UserListSource() Properties Count Gets the number of items in the data source. public int Count { get; } Property Value int MaxItemLength Gets the width in columns of the widest item in the data source. public int MaxItemLength { get; } Property Value int Remarks ListView uses this value to set its horizontal content size for scrolling. SuspendCollectionChangedEvent Gets or sets whether the CollectionChanged event should be suppressed. public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Remarks Set to true to prevent CollectionChanged from being raised during bulk operations. Set back to false to resume event notifications. Methods Dispose() public void Dispose() IsMarked(int) Determines whether the specified item is marked. public bool IsMarked(int item) Parameters item int The zero-based index of the item. Returns bool true if the item is marked; otherwise false. Remarks ListView calls this method to determine whether to render the item with a mark indicator when ShowMarks is true. Render(ListView, bool, int, int, int, int, int) Renders the specified item to the ListView. public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView The ListView to render to. selected bool true if the item is currently selected; otherwise false. item int The zero-based index of the item to render. col int The column in listView Viewport where rendering starts. row int The row in listView Viewport where rendering starts. width int The width available for rendering. viewportX int The horizontal scroll offset. Remarks ListView calls this method for each visible item during rendering. The color scheme will be set based on selection state before this method is called. Implementations must fill the entire width to avoid rendering artifacts. SetMark(int, bool) Sets the marked state of the specified item. public void SetMark(int item, bool value) Parameters item int The zero-based index of the item. value bool true to mark the item; false to unmark it. Remarks ListView calls this method when the user toggles marking (e.g., via the SPACE key) if ShowMarks is true. ToList() Returns the underlying data source as an System.Collections.IList. public IList ToList() Returns IList The data source as an System.Collections.IList. Remarks ListView uses this method to access individual items for events like ValueChanged and to enable keyboard search via KeystrokeNavigator. Update(List<(string Text, Attribute? NameColor)>) public void Update(List<(string Text, Attribute? NameColor)> users) Parameters users List<(string Text, Attribute? NameColor)> Events CollectionChanged Raised when items are added, removed, moved, or the entire collection is refreshed. public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler Remarks ListView subscribes to this event to update its display and content size when the data changes. Implementations should raise this event whenever the underlying collection changes, unless SuspendCollectionChangedEvent is true." + "summary": "Class UserListSource Namespace EchoHub.Client.UI.ListSources Assembly EchoHub.Client.dll Custom list data source for the online users panel with per-user nickname colors. public class UserListSource : IListDataSource, IDisposable Inheritance object UserListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors UserListSource() public UserListSource() Properties Count public int Count { get; } Property Value int MaxItemLength public int MaxItemLength { get; } Property Value int SuspendCollectionChangedEvent public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Methods Dispose() public void Dispose() IsMarked(int) public bool IsMarked(int item) Parameters item int Returns bool Render(ListView, bool, int, int, int, int, int) public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView selected bool item int col int row int width int viewportX int SetMark(int, bool) public void SetMark(int item, bool value) Parameters item int value bool ToList() public IList ToList() Returns IList Update(List<(string Text, Attribute? NameColor)>) public void Update(List<(string Text, Attribute? NameColor)> users) Parameters users List<(string Text, Attribute? NameColor)> Events CollectionChanged public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler" }, "api/client/EchoHub.Client.UI.ListSources.html": { "href": "api/client/EchoHub.Client.UI.ListSources.html", @@ -247,7 +247,7 @@ "api/client/EchoHub.Client.UI.MainWindow.html": { "href": "api/client/EchoHub.Client.UI.MainWindow.html", "title": "Class MainWindow | EchoHub Documentation", - "summary": "Class MainWindow Namespace EchoHub.Client.UI Assembly EchoHub.Client.dll Main Terminal.Gui window for the EchoHub chat client. public sealed class MainWindow : Runnable, IDisposable, IRunnable Inheritance object View Runnable MainWindow Implements IDisposable IRunnable Inherited Members Runnable.SetApp(IApplication) Runnable.SetIsRunning(bool) Runnable.RequestStop() Runnable.RaiseIsRunningChanging(bool, bool) Runnable.RaiseIsRunningChangedEvent(bool) Runnable.SetIsModal(bool) Runnable.RaiseIsModalChangedEvent(bool) Runnable.Result Runnable.IsRunning Runnable.IsModal Runnable.StopRequested Runnable.IsRunningChanging Runnable.IsRunningChanged Runnable.IsModalChanged View.NewMouseEvent(Mouse) View.RaiseMouseEvent(Mouse) View.GetAdornmentsThickness() View.GetSupportedCommands() View.InvokeCommands(Command[], IInputBinding) View.InvokeCommand(Command, IInputBinding) View.InvokeCommand(Command, ICommandContext) View.InvokeCommand(Command) View.SetContentSize(Size?) View.GetContentSize() View.GetWidthRequiredForSubViews() View.GetHeightRequiredForSubViews() View.ContentToScreen(in Point) View.ScreenToContent(in Point) View.ViewportToScreen(in Rectangle) View.ViewportToScreen(in Point) View.ViewportToScreen() View.ScreenToViewport(in Point) View.GetViewportOffsetFromFrame() View.ScrollVertical(int) View.ScrollHorizontal(int) View.Dispose() View.ToString() View.ToDebugString() View.BeginInit() View.EndInit() View.OnEnabledChanged() View.VerifyViewsWereDisposed() View.SetCursorNeedsUpdate() View.GetCurrentAttribute() View.GetAttributeForRole(VisualRole) View.SetAttribute(Attribute) View.SetAttributeForRole(VisualRole) View.GetClip() View.SetClip(Region) View.SetClipToScreen() View.ExcludeFromClip(Rectangle) View.ExcludeFromClip(Region) View.AddViewportToClip() View.Draw(DrawContext) View.DrawAdornments() View.ClearViewport(DrawContext) View.DrawText(DrawContext) View.DrawSubViews(DrawContext) View.RenderLineCanvas(DrawContext) View.Move(int, int) View.AddRune(Rune) View.AddRune(char) View.AddRune(int, int, Rune) View.AddStr(string) View.AddStr(int, int, string) View.DrawHotString(string, Attribute, Attribute) View.DrawHotString(string, bool) View.FillRect(Rectangle, Color?) View.FillRect(Rectangle, Rune) View.GetScheme() View.SetScheme(Scheme) View.GetSubViews(bool, bool, bool) View.Add(View) View.Add(params View[]) View.Remove(View) View.RemoveAll() View.RemoveAll() View.IsInHierarchy(View, View, bool) View.MoveSubViewTowardsEnd(View) View.MoveSubViewToEnd(View) View.MoveSubViewTowardsStart(View) View.MoveSubViewToStart(View) View.AddKeyBindingsForHotKey(Key, Key, object) View.AssignHotKeysToSubViews() View.NewKeyDownEvent(Key) View.Contains(in Point) View.FrameToScreen() View.ScreenToFrame(in Point) View.Layout(Size) View.Layout() View.SetRelativeLayout(Size) View.SetNeedsLayout() View.GetContainerSize() View.GetViewsUnderLocation(in Point, ViewportSettingsFlags) View.AdvanceFocus(NavigationDirection, TabBehavior?) View.FocusDeepest(NavigationDirection, TabBehavior?) View.OnCanFocusChanged() View.ClearFocus() View.SetFocus() View.SetNeedsDraw() View.SetNeedsDraw(Rectangle) View.OnTextChanged() View.MouseBindings View.MouseHoldRepeat View.MousePositionTracking View.MouseState View.MouseHighlightStates View.Margin View.ShadowStyle View.Border View.BorderStyle View.Padding View.Arrangement View.ContentSizeTracksViewport View.ViewportSettings View.Viewport View.Data View.Id View.App View.IsInitialized View.Enabled View.Visible View.Title View.EnableDebugIDisposableAsserts View.WasDisposed View.DisposedCount View.Instances View.Cursor View.Diagnostics View.LineCanvas View.SuperViewRendersLineCanvas View.SchemeName View.HasScheme View.SubViews View.SuperView View.HotKey View.HotKeySpecifier View.AssignHotKeys View.UsedHotKeys View.KeyBindings View.HotKeyBindings View.Frame View.X View.Y View.Height View.Width View.NeedsLayout View.ValidatePosDim View.CanFocus View.Focused View.IsCurrentTop View.MostFocused View.HasFocus View.TabStop View.NeedsDraw View.HorizontalScrollBar View.VerticalScrollBar View.PreserveTrailingSpaces View.Text View.TextAlignment View.TextDirection View.TextFormatter View.VerticalTextAlignment View.MouseEnter View.MouseLeave View.MouseHoldRepeatChanging View.MouseHoldRepeatChanged View.MouseEvent View.MouseStateChanged View.BorderStyleChanged View.CommandNotBound View.Accepting View.Accepted View.Activating View.HandlingHotKey View.ContentSizeChanging View.ContentSizeChanged View.ViewportChanged View.Disposing View.Initialized View.EnabledChanged View.VisibleChanging View.VisibleChanged View.TitleChanging View.TitleChanged View.GettingAttributeForRole View.ClearingViewport View.ClearedViewport View.DrawingText View.DrewText View.DrawingContent View.DrawingSubViews View.DrawComplete View.SchemeNameChanging View.SchemeNameChanged View.GettingScheme View.SchemeChanging View.SchemeChanged View.SuperViewChanging View.SuperViewChanged View.SubViewAdded View.SubViewRemoved View.Removed View.HotKeyChanged View.KeyDown View.KeyDownNotHandled View.FrameChanged View.HeightChanging View.HeightChanged View.WidthChanging View.WidthChanged View.SubViewLayout View.SubViewsLaidOut View.AdvancingFocus View.CanFocusChanged View.FocusedChanged View.HasFocusChanging View.HasFocusChanged View.TextChanged object.GetType() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors MainWindow(IApplication, ChatMessageManager) public MainWindow(IApplication app, ChatMessageManager messageManager) Parameters app IApplication messageManager ChatMessageManager Properties CurrentChannel Get the current channel name. public string CurrentChannel { get; } Property Value string Methods ApplyColorSchemes() Applies the currently registered color schemes to all views. Call after theme changes to refresh colors. public void ApplyColorSchemes() ClearAll() Clear all messages and channels (used on disconnect). public void ClearAll() EnsureChannelInList(string, bool?) Ensure a channel exists in the left panel list (used for private channels joined via /join). public void EnsureChannelInList(string channelName, bool? isPublic = null) Parameters channelName string isPublic bool? FocusInput() Focus the input field for typing. public void FocusInput() GetChannelNames() Get all channel names that have message buffers (for broadcasting status changes). public IReadOnlyList GetChannelNames() Returns IReadOnlyList RefreshMenuBar() Rebuilds and replaces the menu bar (e.g., after theme list changes). public void RefreshMenuBar() RemoveChannel(string) Remove a channel from the left panel list. public void RemoveChannel(string channelName) Parameters channelName string SetChannelTopic(string, string?) Update the topic for a specific channel. public void SetChannelTopic(string channelName, string? topic) Parameters channelName string topic string SetChannels(List) Set the list of available channels, storing topics, and refresh the channel list view. public void SetChannels(List channels) Parameters channels List SetCurrentUser(string) Set the current user name (delegates to message manager for @mention detection). public void SetCurrentUser(string username) Parameters username string ShowError(string) Show an error message to the user. public void ShowError(string message) Parameters message string SwitchToChannel(string) Switch the chat view to the given channel, resetting its unread count and updating the topic bar. public void SwitchToChannel(string channelName) Parameters channelName string ToggleUsersPanel() Toggle the online users panel visibility (F2). public void ToggleUsersPanel() UpdateOnlineUsers(List) Update the online users list display. public void UpdateOnlineUsers(List users) Parameters users List UpdateStatusBar(string) Update the connection status displayed in the status bar. public void UpdateStatusBar(string status) Parameters status string Events OnAudioPlayRequested Fired when the user activates (Enter/click) an audio message. Parameters: attachmentUrl, fileName. public event Action? OnAudioPlayRequested Event Type Action OnChannelSelected Fired when the user selects a channel. Parameter is the channel name. public event Action? OnChannelSelected Event Type Action OnConnectRequested Fired when the user requests to connect via the menu. public event Action? OnConnectRequested Event Type Action OnCreateChannelRequested Fired when the user requests to create a new channel. public event Action? OnCreateChannelRequested Event Type Action OnDeleteChannelRequested Fired when the user requests to delete the current channel. public event Action? OnDeleteChannelRequested Event Type Action OnDisconnectRequested Fired when the user requests to disconnect via the menu. public event Action? OnDisconnectRequested Event Type Action OnFileDownloadRequested Fired when the user activates (Enter/click) a file message. Parameters: attachmentUrl, fileName. public event Action? OnFileDownloadRequested Event Type Action OnLogoutRequested Fired when the user requests to logout (disconnect + revoke session). public event Action? OnLogoutRequested Event Type Action OnMessageSubmitted Fired when the user presses Enter in the input field. Parameters: channel name, message content. public event Action? OnMessageSubmitted Event Type Action OnProfileRequested Fired when the user requests to open their profile panel. public event Action? OnProfileRequested Event Type Action OnSavedServersRequested Fired when the user requests to view saved servers. public event Action? OnSavedServersRequested Event Type Action OnStatusRequested Fired when the user requests to set their status. public event Action? OnStatusRequested Event Type Action OnThemeSelected Fired when the user selects a theme from the menu. Parameter is the theme name. public event Action? OnThemeSelected Event Type Action" + "summary": "Class MainWindow Namespace EchoHub.Client.UI Assembly EchoHub.Client.dll Main Terminal.Gui window for the EchoHub chat client. public sealed class MainWindow : Runnable, IDisposable, IRunnable Inheritance object View Runnable MainWindow Implements IDisposable IRunnable Inherited Members Runnable.SetApp(IApplication) Runnable.SetIsRunning(bool) Runnable.RequestStop() Runnable.RaiseIsRunningChanging(bool, bool) Runnable.RaiseIsRunningChangedEvent(bool) Runnable.SetIsModal(bool) Runnable.RaiseIsModalChangedEvent(bool) Runnable.Result Runnable.IsRunning Runnable.IsModal Runnable.StopRequested Runnable.IsRunningChanging Runnable.IsRunningChanged Runnable.IsModalChanged View.NewMouseEvent(Mouse) View.RaiseMouseEvent(Mouse) View.GetAdornmentsThickness() View.GetSupportedCommands() View.InvokeCommands(Command[], IInputBinding) View.InvokeCommand(Command, IInputBinding) View.InvokeCommand(Command, ICommandContext) View.InvokeCommand(Command) View.SetContentSize(Size?) View.GetContentSize() View.GetWidthRequiredForSubViews() View.GetHeightRequiredForSubViews() View.ContentToScreen(in Point) View.ScreenToContent(in Point) View.ViewportToScreen(in Rectangle) View.ViewportToScreen(in Point) View.ViewportToScreen() View.ScreenToViewport(in Point) View.GetViewportOffsetFromFrame() View.ScrollVertical(int) View.ScrollHorizontal(int) View.Dispose() View.ToString() View.ToDebugString() View.BeginInit() View.EndInit() View.OnEnabledChanged() View.SetCursorNeedsUpdate() View.GetCurrentAttribute() View.GetAttributeForRole(VisualRole) View.SetAttribute(Attribute) View.SetAttributeForRole(VisualRole) View.GetClip() View.SetClip(Region) View.SetClipToScreen() View.ExcludeFromClip(Rectangle) View.ExcludeFromClip(Region) View.AddViewportToClip() View.Draw(DrawContext) View.DrawAdornments() View.ClearViewport(DrawContext) View.DrawText(DrawContext) View.DrawSubViews(DrawContext) View.RenderLineCanvas(DrawContext) View.Move(int, int) View.AddRune(Rune) View.AddRune(char) View.AddRune(int, int, Rune) View.AddStr(string) View.AddStr(int, int, string) View.DrawHotString(string, Attribute, Attribute) View.DrawHotString(string, bool) View.FillRect(Rectangle, Color?) View.FillRect(Rectangle, Rune) View.GetScheme() View.SetScheme(Scheme) View.GetSubViews(bool, bool, bool) View.Add(View) View.Add(params View[]) View.Remove(View) View.RemoveAll() View.RemoveAll() View.IsInHierarchy(View, View, bool) View.MoveSubViewTowardsEnd(View) View.MoveSubViewToEnd(View) View.MoveSubViewTowardsStart(View) View.MoveSubViewToStart(View) View.AddKeyBindingsForHotKey(Key, Key, object) View.AssignHotKeysToSubViews() View.NewKeyDownEvent(Key) View.Contains(in Point) View.FrameToScreen() View.ScreenToFrame(in Point) View.Layout(Size) View.Layout() View.SetRelativeLayout(Size) View.SetNeedsLayout() View.GetContainerSize() View.GetViewsUnderLocation(in Point, ViewportSettingsFlags) View.AdvanceFocus(NavigationDirection, TabBehavior?) View.FocusDeepest(NavigationDirection, TabBehavior?) View.OnCanFocusChanged() View.ClearFocus() View.SetFocus() View.SetNeedsDraw() View.SetNeedsDraw(Rectangle) View.OnTextChanged() View.MouseBindings View.MouseHoldRepeat View.MousePositionTracking View.MouseState View.MouseHighlightStates View.Margin View.ShadowStyle View.Border View.BorderStyle View.Padding View.Arrangement View.ContentSizeTracksViewport View.ViewportSettings View.Viewport View.Data View.Id View.App View.IsInitialized View.Enabled View.Visible View.Title View.Cursor View.Diagnostics View.LineCanvas View.SuperViewRendersLineCanvas View.SchemeName View.HasScheme View.SubViews View.SuperView View.HotKey View.HotKeySpecifier View.AssignHotKeys View.UsedHotKeys View.KeyBindings View.HotKeyBindings View.Frame View.X View.Y View.Height View.Width View.NeedsLayout View.ValidatePosDim View.CanFocus View.Focused View.IsCurrentTop View.MostFocused View.HasFocus View.TabStop View.NeedsDraw View.HorizontalScrollBar View.VerticalScrollBar View.PreserveTrailingSpaces View.Text View.TextAlignment View.TextDirection View.TextFormatter View.VerticalTextAlignment View.MouseEnter View.MouseLeave View.MouseHoldRepeatChanging View.MouseHoldRepeatChanged View.MouseEvent View.MouseStateChanged View.BorderStyleChanged View.CommandNotBound View.Accepting View.Accepted View.Activating View.HandlingHotKey View.ContentSizeChanging View.ContentSizeChanged View.ViewportChanged View.Disposing View.Initialized View.EnabledChanged View.VisibleChanging View.VisibleChanged View.TitleChanging View.TitleChanged View.GettingAttributeForRole View.ClearingViewport View.ClearedViewport View.DrawingText View.DrewText View.DrawingContent View.DrawingSubViews View.DrawComplete View.SchemeNameChanging View.SchemeNameChanged View.GettingScheme View.SchemeChanging View.SchemeChanged View.SuperViewChanging View.SuperViewChanged View.SubViewAdded View.SubViewRemoved View.Removed View.HotKeyChanged View.KeyDown View.KeyDownNotHandled View.FrameChanged View.HeightChanging View.HeightChanged View.WidthChanging View.WidthChanged View.SubViewLayout View.SubViewsLaidOut View.AdvancingFocus View.CanFocusChanged View.FocusedChanged View.HasFocusChanging View.HasFocusChanged View.TextChanged object.GetType() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors MainWindow(IApplication, ChatMessageManager) public MainWindow(IApplication app, ChatMessageManager messageManager) Parameters app IApplication messageManager ChatMessageManager Properties CurrentChannel Get the current channel name. public string CurrentChannel { get; } Property Value string Methods ApplyColorSchemes() Applies the currently registered color schemes to all views. Call after theme changes to refresh colors. public void ApplyColorSchemes() ClearAll() Clear all messages and channels (used on disconnect). public void ClearAll() EnsureChannelInList(string, bool?) Ensure a channel exists in the left panel list (used for private channels joined via /join). public void EnsureChannelInList(string channelName, bool? isPublic = null) Parameters channelName string isPublic bool? FocusInput() Focus the input field for typing. public void FocusInput() GetChannelNames() Get all channel names that have message buffers (for broadcasting status changes). public IReadOnlyList GetChannelNames() Returns IReadOnlyList RefreshMenuBar() Rebuilds and replaces the menu bar (e.g., after theme list changes). public void RefreshMenuBar() RemoveChannel(string) Remove a channel from the left panel list. public void RemoveChannel(string channelName) Parameters channelName string SetChannelTopic(string, string?) Update the topic for a specific channel. public void SetChannelTopic(string channelName, string? topic) Parameters channelName string topic string SetChannels(List) Set the list of available channels, storing topics, and refresh the channel list view. public void SetChannels(List channels) Parameters channels List SetCurrentUser(string) Set the current user name (delegates to message manager for @mention detection). public void SetCurrentUser(string username) Parameters username string ShowError(string) Show an error message to the user. public void ShowError(string message) Parameters message string SwitchToChannel(string) Switch the chat view to the given channel, resetting its unread count and updating the topic bar. public void SwitchToChannel(string channelName) Parameters channelName string ToggleUsersPanel() Toggle the online users panel visibility (F2). public void ToggleUsersPanel() UpdateOnlineUsers(List) Update the online users list display. public void UpdateOnlineUsers(List users) Parameters users List UpdateStatusBar(string) Update the connection status displayed in the status bar. public void UpdateStatusBar(string status) Parameters status string Events OnAudioPlayRequested Fired when the user activates (Enter/click) an audio message. Parameters: attachmentUrl, fileName. public event Action? OnAudioPlayRequested Event Type Action OnChannelSelected Fired when the user selects a channel. Parameter is the channel name. public event Action? OnChannelSelected Event Type Action OnConnectRequested Fired when the user requests to connect via the menu. public event Action? OnConnectRequested Event Type Action OnCreateChannelRequested Fired when the user requests to create a new channel. public event Action? OnCreateChannelRequested Event Type Action OnDeleteChannelRequested Fired when the user requests to delete the current channel. public event Action? OnDeleteChannelRequested Event Type Action OnDisconnectRequested Fired when the user requests to disconnect via the menu. public event Action? OnDisconnectRequested Event Type Action OnFileDownloadRequested Fired when the user activates (Enter/click) a file message. Parameters: attachmentUrl, fileName. public event Action? OnFileDownloadRequested Event Type Action OnLogoutRequested Fired when the user requests to logout (disconnect + revoke session). public event Action? OnLogoutRequested Event Type Action OnMessageSubmitted Fired when the user presses Enter in the input field. Parameters: channel name, message content. public event Action? OnMessageSubmitted Event Type Action OnProfileRequested Fired when the user requests to open their profile panel. public event Action? OnProfileRequested Event Type Action OnSavedServersRequested Fired when the user requests to view saved servers. public event Action? OnSavedServersRequested Event Type Action OnStatusRequested Fired when the user requests to set their status. public event Action? OnStatusRequested Event Type Action OnThemeSelected Fired when the user selects a theme from the menu. Parameter is the theme name. public event Action? OnThemeSelected Event Type Action" }, "api/client/EchoHub.Client.UI.html": { "href": "api/client/EchoHub.Client.UI.html", @@ -822,7 +822,12 @@ "changelog/v0.2.6.html": { "href": "changelog/v0.2.6.html", "title": "v0.2.6 | EchoHub Documentation", - "summary": "v0.2.6 Refactoring Extracted ChatMessageManager from MainWindow — message storage, formatting, and mutation logic now in a dedicated class, reducing MainWindow complexity Split ChatRenderer.cs (8 classes, 548 lines) into 7 individual files: ChatSegment, ChatLine, ChatListSource, ChannelListSource, UserListSource, ChatColors, ColorHelper, RenderHelpers Extracted ConnectionManager from AppOrchestrator — connection lifecycle, authentication, SignalR event wiring, and channel tracking now in a dedicated service Extracted AvatarHelper — deduplicated avatar upload logic previously duplicated in /avatar command and profile edit dialog Consolidated ProfileEditDialog.ParseHexToTrueColor into shared ColorHelper.ParseHexToColor Extracted UserSession — session state (Username, Status, StatusMessage) now in a dedicated class instead of scattered fields Replaced 21 inline command handler lambdas with named HandleCmd* methods for improved readability Extracted shared CleanupConnectionAsync to deduplicate disconnect/logout cleanup logic Reorganized flat UI/ folder (19 files) into subfolders: Chat/, Dialogs/, ListSources/, Helpers/ with matching namespaces Moved AsyncRunner from project root to Services/ with updated namespace Renamed ColorHelper → HexColorHelper to avoid namespace collision with Terminal.Gui's ColorHelper NuGet dependency Moved hue_icon.ico to Client/Assets/, removed duplicate from Server (Server now references shared icon via relative path) Infrastructure Release workflow: use --notes-file instead of inline --notes interpolation to prevent shell expansion of special characters in commit messages" + "summary": "v0.2.6 Refactoring Extracted ChatMessageManager from MainWindow — message storage, formatting, and mutation logic now in a dedicated class, reducing MainWindow complexity Split ChatRenderer.cs (8 classes, 548 lines) into 7 individual files: ChatSegment, ChatLine, ChatListSource, ChannelListSource, UserListSource, ChatColors, ColorHelper, RenderHelpers Extracted ConnectionManager from AppOrchestrator — connection lifecycle, authentication, SignalR event wiring, and channel tracking now in a dedicated service Extracted AvatarHelper — deduplicated avatar upload logic previously duplicated in /avatar command and profile edit dialog Consolidated ProfileEditDialog.ParseHexToTrueColor into shared ColorHelper.ParseHexToColor Extracted UserSession — session state (Username, Status, StatusMessage) now in a dedicated class instead of scattered fields Replaced 21 inline command handler lambdas with named HandleCmd* methods for improved readability Extracted shared CleanupConnectionAsync to deduplicate disconnect/logout cleanup logic Reorganized flat UI/ folder (19 files) into subfolders: Chat/, Dialogs/, ListSources/, Helpers/ with matching namespaces Moved AsyncRunner from project root to Services/ with updated namespace Renamed ColorHelper → HexColorHelper to avoid namespace collision with Terminal.Gui's ColorHelper NuGet dependency Moved hue_icon.ico to Client/Assets/, removed duplicate from Server (Server now references shared icon via relative path) Add hex color parsing helper and implement custom list sources for channels and users Add dialogs for connection, channel creation, profile editing, and status management Infrastructure Release workflow: use --notes-file instead of inline --notes interpolation to prevent shell expansion of special characters in commit messages" + }, + "changelog/v0.2.7.html": { + "href": "changelog/v0.2.7.html", + "title": "v0.2.7 | EchoHub Documentation", + "summary": "v0.2.7 Bug Fixes Fix user list empty on initial connect — FetchAndUpdateOnlineUsers was called before InvokeUI set the current channel, causing an early return Infrastructure Switch Terminal.Gui from local fork submodule back to NuGet package (2.0.0-develop.5039) — transparent color PR merged upstream Remove Terminal.Gui submodule, .gitmodules, and root nuget.config workaround Remove rm -f submodule nuget.config steps and submodules: recursive from all 3 CI workflows (ci, docs, release) Remove --exclude src/Terminal.Gui/ from format check" }, "index.html": { "href": "index.html", diff --git a/manifest.json b/manifest.json index 46d5b5f..94e246c 100644 --- a/manifest.json +++ b/manifest.json @@ -2326,6 +2326,16 @@ }, "version": "" }, + { + "type": "Conceptual", + "source_relative_path": "changelog/v0.2.7.md", + "output": { + ".html": { + "relative_path": "changelog/v0.2.7.html" + } + }, + "version": "" + }, { "type": "Resource", "source_relative_path": "images/hue_icon.svg",