diff --git a/.gitignore b/.gitignore
index ce89292..32d2304 100644
--- a/.gitignore
+++ b/.gitignore
@@ -416,3 +416,6 @@ FodyWeavers.xsd
*.msix
*.msm
*.msp
+
+# Capturas do Playwright MCP durante a inspeção da UI — depuração, nunca fonte.
+.playwright-mcp/
diff --git a/Directory.Build.props b/Directory.Build.props
index 532b205..43a43e7 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -16,7 +16,7 @@
tempo de empacotamento pelo script e pelo workflow, ambos a partir deste valor.
-->
- 1.1.0
+ 1.2.0
diff --git a/README.md b/README.md
index 27309ad..2d40456 100644
--- a/README.md
+++ b/README.md
@@ -93,7 +93,7 @@ Utilize a barra lateral esquerda para:
- **Windows Forms** (Host nativo)
- **Blazor Hybrid** (Interface de usuário web dentro do desktop)
- **Microsoft.AspNetCore.Components.WebView.WindowsForms**
-- **Serilog** & **Serilog.Formatting.Compact.Reader** (Parsing de logs)
+- **Serilog** (renderização de message templates; o parsing CLEF é próprio, sobre `Utf8JsonReader`)
- **Omni.Blazor** (Biblioteca de componentes / design system - pacote NuGet `AndersonN.Omni.Blazor`)
## 📄 Licença
diff --git a/src/ClefExplorer.csproj b/src/ClefExplorer.csproj
index 3a7d63b..e463b05 100644
--- a/src/ClefExplorer.csproj
+++ b/src/ClefExplorer.csproj
@@ -30,12 +30,17 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/Components/LogFileTree.razor b/src/Components/LogFileTree.razor
index dc8742d..f6e32d2 100644
--- a/src/Components/LogFileTree.razor
+++ b/src/Components/LogFileTree.razor
@@ -1,44 +1,75 @@
@using System.IO
@using System.Text.RegularExpressions
+@using ClefExplorer.Helpers
-@if (RootNodes.Any())
+@inject ContextMenuService ContextMenu
+@inject ExploradorArquivos Explorador
+@inject NotificationService Notifications
+@inject IJSRuntime JS
+
+@if (!RootNodes.Any())
+{
+
+ Nenhum arquivo carregado
+
+}
+else if (_raizesVisiveis.Count == 0)
+{
+
+ Nenhum arquivo corresponde à busca
+
+}
+else
{
-
- @{ var bk = item.Value is FileTreeNode fn && fn.IsBackup; }
- @if (!string.IsNullOrEmpty(item.Icon))
- {
-
+ @{
+ var node = item.Value as FileTreeNode;
+ var bk = node?.IsBackup == true;
}
- @item.Text
+ @* display:contents — o wrapper existe só para capturar o botão direito
+ sobre o nó inteiro (ícone + texto) sem entrar no layout do OmniTree. *@
+ AbrirMenu(e, node))"
+ @oncontextmenu:preventDefault="true">
+ @if (!string.IsNullOrEmpty(item.Icon))
+ {
+
+ }
+ @item.Text
+
}
-else
-{
-
- Nenhum arquivo carregado
-
-}
@code {
[Parameter] public IEnumerable Files { get; set; } = Enumerable.Empty();
[Parameter] public IEnumerable CheckedFiles { get; set; } = Enumerable.Empty();
[Parameter] public EventCallback> OnSelectionChanged { get; set; }
+ /// Termo digitado no campo de busca da barra lateral; vazio mostra tudo.
+ [Parameter] public string? Filtro { get; set; }
+
private List RootNodes { get; set; } = new();
private List