diff --git a/app/MindWork AI Studio/Pages/Writer.razor b/app/MindWork AI Studio/Pages/Writer.razor index 1dba9895..2941a9c3 100644 --- a/app/MindWork AI Studio/Pages/Writer.razor +++ b/app/MindWork AI Studio/Pages/Writer.razor @@ -13,7 +13,12 @@ - + @foreach (var chunk in this.chunks) + { + + @chunk.Content + + } @if (this.isStreaming) diff --git a/app/MindWork AI Studio/Pages/Writer.razor.cs b/app/MindWork AI Studio/Pages/Writer.razor.cs index 543286fc..8864bec8 100644 --- a/app/MindWork AI Studio/Pages/Writer.razor.cs +++ b/app/MindWork AI Studio/Pages/Writer.razor.cs @@ -28,6 +28,7 @@ public partial class Writer : MSGComponentBase, IAsyncDisposable private ChatThread? chatThread; private bool isStreaming; private string userInput = string.Empty; + private List chunks = new(); private string userDirection = string.Empty; private string suggestion = string.Empty; @@ -74,6 +75,26 @@ public partial class Writer : MSGComponentBase, IAsyncDisposable var text = await File.ReadAllTextAsync(result.SelectedFilePath, Encoding.UTF8); this.userInput = text; + this.ChunkText(); + } + + private void ChunkText() + { + this.chunks.Clear(); + var startIndex = 0; + var contentSpan = this.userInput.AsSpan(); + for (var index = 0; index < contentSpan.Length; index++) + { + if (contentSpan[index] is '\n') + { + var endIndex = index; + var lineMemory = this.userInput.AsMemory(startIndex..endIndex); + this.chunks.Add(new WriterChunk(lineMemory, false, false)); + startIndex = endIndex + 1; + } + } + + this.StateHasChanged(); } private async Task InputKeyEvent(KeyboardEventArgs keyEvent) diff --git a/app/MindWork AI Studio/Tools/WriterChunk.cs b/app/MindWork AI Studio/Tools/WriterChunk.cs new file mode 100644 index 00000000..d8031e3c --- /dev/null +++ b/app/MindWork AI Studio/Tools/WriterChunk.cs @@ -0,0 +1,10 @@ +namespace AIStudio.Tools; + +public sealed class WriterChunk(ReadOnlyMemory content, bool isSelected, bool isProcessing) +{ + public ReadOnlyMemory Content = content; + + public bool IsSelected = isSelected; + + public bool IsProcessing = isProcessing; +} \ 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 af0e139a..9d9195ce 100644 --- a/app/MindWork AI Studio/wwwroot/app.css +++ b/app/MindWork AI Studio/wwwroot/app.css @@ -35,6 +35,28 @@ margin-top: 4px; } +.write-mode-chunk { + font-size: large; + padding-left: 1.5em; + position: relative; +} + +.write-mode-chunk::before { + content: ""; + position: absolute; + left: 0; + top: 10%; + height: 80%; + width: 0.8em; + background-color: transparent; + border-radius: 0.4em; + transition: background-color 0.5s ease; +} + +.write-mode-chunk:hover::before { + background-color: #5894f3; /* Balkenfarbe im hover-Zustand */ +} + .plugin-icon-container { width: var(--mud-icon-size-large); height: var(--mud-icon-size-large);