Hosts UX, effective names, JS interop, domain UI

- Hosts: delete confirmation modal, shift range select, keyboard shortcuts,
  effective-name suffix tooltips, conditional modern header actions
- Align EffectiveNames on rows with scoped domain= + pending preview;
  unified hosts API uses full DomainValues from config snapshot
- Harden Blazor JS interop (safe helpers, IAsyncDisposable, disposal order)
- Effective config: domain multi-value display/editor, parsers, tests
- Misc: docs/testdata/docker script updates
This commit is contained in:
2026-04-05 14:46:17 +10:00
parent 9627926a6a
commit 2e713f0e3c
41 changed files with 1848 additions and 273 deletions
@@ -1,4 +1,5 @@
@namespace DnsmasqWebUI.Components.EffectiveConfig
@using DnsmasqWebUI.Extensions.Interop
@inject IJSRuntime JSRuntime
<div class="d-flex align-items-center gap-1 @CssClass">
@@ -15,13 +16,7 @@
private async Task CopyAsync()
{
if (string.IsNullOrEmpty(Text)) return;
try
{
await JSRuntime.InvokeVoidAsync("copyToClipboard", Text);
}
catch
{
// Clipboard not available or failed
}
// window.copyToClipboard from wwwroot/js/copy-to-clipboard.js; swallow disconnect / clipboard failures.
await JSRuntime.InvokeVoidAsyncSafe("copyToClipboard", args: new object?[] { Text });
}
}