diff --git a/app/MindWork AI Studio/Assistants/AssistantBase.razor b/app/MindWork AI Studio/Assistants/AssistantBase.razor index 5387d8e..2390a23 100644 --- a/app/MindWork AI Studio/Assistants/AssistantBase.razor +++ b/app/MindWork AI Studio/Assistants/AssistantBase.razor @@ -1,131 +1,134 @@ @using AIStudio.Chat - - @(this.Title) - +
- - - - - @this.Description - + + @(this.Title) + - @if (this.Body is not null) - { - - @this.Body - - - - @this.SubmitText - - } - - + + + + + @this.Description + - @if (this.ShowDedicatedProgress && this.isProcessing) - { - - } - -
-
- -
-
- - @if (this.ShowResult && !this.ShowEntireChatThread && this.resultingContentBlock is not null) - { - - } - - @if(this.ShowResult && this.ShowEntireChatThread && this.chatThread is not null) - { - foreach (var block in this.chatThread.Blocks.OrderBy(n => n.Time)) - { - @if (!block.HideFromUser) + @if (this.Body is not null) { - + + @this.Body + + + + @this.SubmitText + } +
+ + + @if (this.ShowDedicatedProgress && this.isProcessing) + { + } - } - -
-
-
- - - @if (!this.FooterButtons.Any(x => x.Type is ButtonTypes.SEND_TO)) +
+
+ +
+
+ + @if (this.ShowResult && !this.ShowEntireChatThread && this.resultingContentBlock is not null) { - @if (this.ShowSendTo) + + } + + @if(this.ShowResult && this.ShowEntireChatThread && this.chatThread is not null) + { + foreach (var block in this.chatThread.Blocks.OrderBy(n => n.Time)) { - - @foreach (var assistant in Enum.GetValues().Where(n => n.AllowSendTo()).OrderBy(n => n.Name().Length)) - { - - @assistant.Name() - - } - + @if (!block.HideFromUser) + { + + } } } - - @foreach (var button in this.FooterButtons) - { - switch (button) + +
+
+
+ + + + @if (!this.FooterButtons.Any(x => x.Type is ButtonTypes.SEND_TO)) { - case ButtonData buttonData when !string.IsNullOrWhiteSpace(buttonData.Tooltip): - - - @buttonData.Text - - - break; - - case ButtonData buttonData: - - @buttonData.Text - - break; - - case SendToButton sendToButton: + @if (this.ShowSendTo) + { @foreach (var assistant in Enum.GetValues().Where(n => n.AllowSendTo()).OrderBy(n => n.Name().Length)) { - + @assistant.Name() } - break; + } } - } - - @if (this.ShowCopyResult) - { - - Copy result - - } - @if (this.ShowReset) - { - - Reset - - } + @foreach (var button in this.FooterButtons) + { + switch (button) + { + case ButtonData buttonData when !string.IsNullOrWhiteSpace(buttonData.Tooltip): + + + @buttonData.Text + + + break; - @if (this.SettingsManager.ConfigurationData.LLMProviders.ShowProviderConfidence) - { - - } + case ButtonData buttonData: + + @buttonData.Text + + break; - @if (this.AllowProfiles && this.ShowProfileSelection) - { - - } - - -
\ No newline at end of file + case SendToButton sendToButton: + + @foreach (var assistant in Enum.GetValues().Where(n => n.AllowSendTo()).OrderBy(n => n.Name().Length)) + { + + @assistant.Name() + + } + + break; + } + } + + @if (this.ShowCopyResult) + { + + Copy result + + } + + @if (this.ShowReset) + { + + Reset + + } + + @if (this.SettingsManager.ConfigurationData.LLMProviders.ShowProviderConfidence) + { + + } + + @if (this.AllowProfiles && this.ShowProfileSelection) + { + + } + + + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Components/ChatComponent.razor b/app/MindWork AI Studio/Components/ChatComponent.razor index 2b8ff2d..ffd5c8f 100644 --- a/app/MindWork AI Studio/Components/ChatComponent.razor +++ b/app/MindWork AI Studio/Components/ChatComponent.razor @@ -3,7 +3,7 @@ @inherits MSGComponentBase - + @if (this.ChatThread is not null) { diff --git a/app/MindWork AI Studio/Components/InnerScrolling.razor b/app/MindWork AI Studio/Components/InnerScrolling.razor index 5a2da66..6905bf2 100644 --- a/app/MindWork AI Studio/Components/InnerScrolling.razor +++ b/app/MindWork AI Studio/Components/InnerScrolling.razor @@ -7,17 +7,17 @@ @this.HeaderContent } -
+
@this.ChildContent -
+
 
@if (this.FooterContent is not null) { - + @this.FooterContent } diff --git a/app/MindWork AI Studio/Components/InnerScrolling.razor.cs b/app/MindWork AI Studio/Components/InnerScrolling.razor.cs index 126317c..3b483c4 100644 --- a/app/MindWork AI Studio/Components/InnerScrolling.razor.cs +++ b/app/MindWork AI Studio/Components/InnerScrolling.razor.cs @@ -9,14 +9,6 @@ public partial class InnerScrolling : MSGComponentBase [Parameter] public bool FillEntireHorizontalSpace { get; set; } - /// - /// Set the height of anything above the scrolling content; usually a header. - /// What we do is calc(100vh - HeaderHeight). Means, you can use multiple measures like - /// 230px - 3em. Default is 3em. - /// - [Parameter] - public string HeaderHeight { get; set; } = "3em"; - [Parameter] public RenderFragment? HeaderContent { get; set; } @@ -34,6 +26,9 @@ public partial class InnerScrolling : MSGComponentBase [Parameter] public string? MinWidth { get; set; } + + [Parameter] + public string Style { get; set; } = string.Empty; [CascadingParameter] private MainLayout MainLayout { get; set; } = null!; @@ -74,12 +69,14 @@ public partial class InnerScrolling : MSGComponentBase #endregion - private string MinWidthStyle => string.IsNullOrWhiteSpace(this.MinWidth) ? string.Empty : $"min-width: {this.MinWidth};"; + private string MinWidthStyle => string.IsNullOrWhiteSpace(this.MinWidth) ? string.Empty : $"min-width: {this.MinWidth}; "; + + private string TerminatedStyles => string.IsNullOrWhiteSpace(this.Style) ? string.Empty : $"{this.Style}; "; - private string Styles => this.FillEntireHorizontalSpace ? $"height: calc(100vh - {this.HeaderHeight} - {this.MainLayout.AdditionalHeight}); overflow-x: auto; min-width: 0; {this.MinWidthStyle}" : $"height: calc(100vh - {this.HeaderHeight} - {this.MainLayout.AdditionalHeight}); flex-shrink: 0; {this.MinWidthStyle}"; - private string Classes => this.FillEntireHorizontalSpace ? $"{this.Class} d-flex flex-column flex-grow-1" : $"{this.Class} d-flex flex-column"; + private string Styles => $"flex-grow: 1; overflow: hidden; {this.TerminatedStyles}{this.MinWidthStyle}"; + public async Task ScrollToBottom() { await this.AnchorAfterChildContent.ScrollIntoViewAsync(this.JsRuntime); diff --git a/app/MindWork AI Studio/Pages/About.razor b/app/MindWork AI Studio/Pages/About.razor index 07f8780..6074642 100644 --- a/app/MindWork AI Studio/Pages/About.razor +++ b/app/MindWork AI Studio/Pages/About.razor @@ -1,64 +1,66 @@ @attribute [Route(Routes.ABOUT)] -About MindWork AI Studio +
+ About MindWork AI Studio - - - - - The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: - - - - - - - - - - - - Check for updates - - - - - - + + + + + The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: + + + + + + + + + + + + Check for updates + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Assistants.razor b/app/MindWork AI Studio/Pages/Assistants.razor index 212f8b5..9cef736 100644 --- a/app/MindWork AI Studio/Pages/Assistants.razor +++ b/app/MindWork AI Studio/Pages/Assistants.razor @@ -1,51 +1,53 @@ @using AIStudio.Settings.DataModel @attribute [Route(Routes.ASSISTANTS)] - - Assistants - +
+ + Assistants + - - - - General - - - - - - - - + + + + General + + + + + + + + - - Business - - - - - - - - - + + Business + + + + + + + + + - - Learning - - - - - - - Software Engineering - - - - @if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager)) - { - - } - - - \ No newline at end of file + + Learning + + + + + + + Software Engineering + + + + @if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager)) + { + + } + + + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Chat.razor b/app/MindWork AI Studio/Pages/Chat.razor index 2f56c2b..8c345b4 100644 --- a/app/MindWork AI Studio/Pages/Chat.razor +++ b/app/MindWork AI Studio/Pages/Chat.razor @@ -2,109 +2,100 @@ @using AIStudio.Settings.DataModel @inherits MSGComponentBase - - @if (this.chatThread is not null && this.chatThread.WorkspaceId != Guid.Empty) - { - @($"Chat in Workspace \"{this.currentWorkspaceName}\"") - } - else - { - @("Temporary Chat") - } - +
+ + + @if (this.chatThread is not null && this.chatThread.WorkspaceId != Guid.Empty) + { + @($"Chat in Workspace \"{this.currentWorkspaceName}\"") + } + else + { + @("Temporary Chat") + } + - -@if (this.AreWorkspacesVisible) -{ - - - @if (this.AreWorkspacesHidden) - { - - - - - - } - @if (this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is not WorkspaceStorageBehavior.DISABLE_WORKSPACES) - { - @if ((this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR && this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible) || this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.SIDEBAR_ALWAYS_VISIBLE) + + @if (this.AreWorkspacesVisible) + { + + + @if (this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR && this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible) { - @if (this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR && this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible) - { - - - - - - - - - - - } - else - { - - - - - - } + // Case: Sidebar can be toggled and is currently visible + + + + + + + + + + } - } - - - + else + { + // Case: Sidebar is always visible + + + + + + } + + + + + + } + else if (this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is not WorkspaceStorageBehavior.DISABLE_WORKSPACES && this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR) + { + // Case: Sidebar can be toggled and is currently hidden + + + + + + + - - - -} -else if(this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is not WorkspaceStorageBehavior.DISABLE_WORKSPACES && this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR) -{ - - - - - - - + WorkspaceName="name => this.currentWorkspaceName = name"/> + + } + else + { + // Case: Workspaces are disabled or shown in an overlay - -} -else -{ - -} + } -@if ( - this.SettingsManager.ConfigurationData.Workspace.StorageBehavior != WorkspaceStorageBehavior.DISABLE_WORKSPACES - && this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_OVERLAY) -{ - - - - - Your workspaces - - - - - - - - -} \ No newline at end of file + @if ( + this.SettingsManager.ConfigurationData.Workspace.StorageBehavior != WorkspaceStorageBehavior.DISABLE_WORKSPACES + && this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_OVERLAY) + { + + + + + Your workspaces + + + + + + + + + } +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Home.razor b/app/MindWork AI Studio/Pages/Home.razor index a86b837..de74a62 100644 --- a/app/MindWork AI Studio/Pages/Home.razor +++ b/app/MindWork AI Studio/Pages/Home.razor @@ -1,40 +1,42 @@ @attribute [Route(Routes.HOME)] - -Let's get started +
+ + Let's get started - - + + - - - Welcome to MindWork AI Studio! - - - Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness - the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated - LLM. Instead, you will need to bring an API key from a suitable provider. - - - Here's what makes MindWork AI Studio stand out: - - - - We hope you enjoy using MindWork AI Studio to bring your AI projects to life! - - + + + Welcome to MindWork AI Studio! + + + Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness + the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated + LLM. Instead, you will need to bring an API key from a suitable provider. + + + Here's what makes MindWork AI Studio stand out: + + + + We hope you enjoy using MindWork AI Studio to bring your AI projects to life! + + - - - + + + - - - - - - - + + + + + + + - - \ No newline at end of file + + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Settings.razor b/app/MindWork AI Studio/Pages/Settings.razor index f09a180..41c4298 100644 --- a/app/MindWork AI Studio/Pages/Settings.razor +++ b/app/MindWork AI Studio/Pages/Settings.razor @@ -1,31 +1,33 @@ @attribute [Route(Routes.SETTINGS)] @using AIStudio.Components.Settings -Settings +
+ Settings - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Supporters.razor b/app/MindWork AI Studio/Pages/Supporters.razor index 6793d6d..784cbcb 100644 --- a/app/MindWork AI Studio/Pages/Supporters.razor +++ b/app/MindWork AI Studio/Pages/Supporters.razor @@ -1,63 +1,65 @@ @attribute [Route(Routes.SUPPORTERS)] -Supporters +
+ Supporters - - -
- Our Titans - - In this section, we highlight the titan supporters of MindWork AI Studio. Titans are prestigious companies that provide significant support to our mission. - - - For companies, sponsoring MindWork AI Studio is not only a way to support innovation but also a valuable opportunity for public relations and marketing. Your company's name and logo will be featured prominently, showcasing your commitment to using cutting-edge AI tools and enhancing your reputation as an innovative enterprise. - - - Become our first Titan - -
- - - - - - - Individual Contributors - + + +
+ Our Titans + + In this section, we highlight the titan supporters of MindWork AI Studio. Titans are prestigious companies that provide significant support to our mission. + + + For companies, sponsoring MindWork AI Studio is not only a way to support innovation but also a valuable opportunity for public relations and marketing. Your company's name and logo will be featured prominently, showcasing your commitment to using cutting-edge AI tools and enhancing your reputation as an innovative enterprise. + + + Become our first Titan + +
+ + + + + + + Individual Contributors + - - Become a contributor - - - - The first 10 supporters who make a monthly contribution: - - - - - + + Become a contributor + + + + The first 10 supporters who make a monthly contribution: + + + + + - - The first 10 supporters who make a one-time contribution: - - - - - - + + The first 10 supporters who make a one-time contribution: + + + + +
+
- - - - - Business Contributors - + + + + + Business Contributors + - - Become a contributor - - - -
+ + Become a contributor + + + + -
\ No newline at end of file + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Writer.razor b/app/MindWork AI Studio/Pages/Writer.razor index bf65c3e..6108647 100644 --- a/app/MindWork AI Studio/Pages/Writer.razor +++ b/app/MindWork AI Studio/Pages/Writer.razor @@ -1,57 +1,59 @@ @attribute [Route(Routes.WRITER)] @inherits MSGComponentBase - - Writer - +
+ + Writer + - + - - - - + + + + - - - - @if (this.isStreaming) - { - - } - - - \ No newline at end of file + + + + @if (this.isStreaming) + { + + } + + + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/packages.lock.json b/app/MindWork AI Studio/packages.lock.json index a413321..d1c6dae 100644 --- a/app/MindWork AI Studio/packages.lock.json +++ b/app/MindWork AI Studio/packages.lock.json @@ -210,6 +210,6 @@ "type": "Project" } }, - "net8.0/osx-x64": {} + "net8.0/osx-arm64": {} } } \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/app.css b/app/MindWork AI Studio/wwwroot/app.css index 6257c7c..e62b4f8 100644 --- a/app/MindWork AI Studio/wwwroot/app.css +++ b/app/MindWork AI Studio/wwwroot/app.css @@ -71,7 +71,25 @@ text-decoration-thickness: 2px; } -/* Fixed for MudBlazor, tooltips inside of navmenu */ +/* Fix for MudBlazor, tooltips inside of navmenu */ .mud-navmenu .mud-tooltip-root { display: initial !important; } + +/* Context div for inner scrolling component */ +.inner-scrolling-context { + display: flex; + flex-direction: column; + height: 100vh; +} + +/* Fixed MudSplitter inside context div for inner scrolling component */ +.inner-scrolling-context > .mud-splitter { + flex-grow: 1; + overflow: hidden; +} + +/* Fixed the slider part of MudSplitter inside context div for inner scrolling component */ +.inner-scrolling-context > .mud-splitter > .mud-slider > .mud-slider-container { + padding-bottom: 12px; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.9.27.md b/app/MindWork AI Studio/wwwroot/changelog/v0.9.27.md new file mode 100644 index 0000000..141ed9d --- /dev/null +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.9.27.md @@ -0,0 +1,2 @@ +# v0.9.27, build 202 (2025-01-xx xx:xx UTC) +- Improved the inner content scrolling to use the entire space available. \ No newline at end of file