ui(adminui): group driver/acl shared button pairs, adopt notice-alert + tree-twist

Sweep task 5 (Shared/Drivers + Acls):
- btn-group the Save/Cancel pair in DriverFormShell (all 13 driver forms),
  CollectionEditor foot + per-row Edit/Delete, DriverConfigModal /
  DeviceModal / DriverTagPicker / AclScopePickerModal feet,
  DriverStatusPanel Reconnect+Restart and its inline restart confirm,
  and the Refresh+Close browse toolbars on the FOCAS/AbCip/TwinCAT pickers.
- Replace the no-op inline border-color:var(--alert) tint with .notice-alert
  in DriverFormShell, DriverConfigModal, DeviceModal, MqttDriverForm,
  MTConnectDriverForm, MqttDeviceForm.
- Replace inline style="width:18px" expander sizing with .tree-twist in
  DriverBrowseTree and AclScopeTree.

Markup only — every @onclick, binding, disabled and arm->confirm flow is
unchanged.
This commit is contained in:
Joseph Doherty
2026-08-10 16:32:47 -04:00
parent 4d549571cc
commit ec652f6bde
15 changed files with 125 additions and 103 deletions
@@ -46,14 +46,16 @@
else
{
<span class="chip chip-ok">Browser open</span>
<button type="button" class="btn btn-outline-secondary btn-sm"
disabled="@_opening" @onclick="RefreshBrowseAsync">
@if (_opening) { <span class="spinner-border spinner-border-sm me-1"></span> }
Refresh
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" @onclick="CloseBrowseAsync">
Close
</button>
<div class="btn-group btn-group-sm" role="group">
<button type="button" class="btn btn-outline-secondary"
disabled="@_opening" @onclick="RefreshBrowseAsync">
@if (_opening) { <span class="spinner-border spinner-border-sm me-1"></span> }
Refresh
</button>
<button type="button" class="btn btn-outline-secondary" @onclick="CloseBrowseAsync">
Close
</button>
</div>
}
@if (_openError is not null) { <span class="chip chip-bad" title="@_openError">@TruncatedError()</span> }
</div>
@@ -74,14 +74,16 @@
else
{
<span class="chip chip-ok">Browser open</span>
<button type="button" class="btn btn-outline-secondary btn-sm"
disabled="@_opening" @onclick="RefreshBrowseAsync">
@if (_opening) { <span class="spinner-border spinner-border-sm me-1"></span> }
Refresh
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" @onclick="CloseBrowseAsync">
Close
</button>
<div class="btn-group btn-group-sm" role="group">
<button type="button" class="btn btn-outline-secondary"
disabled="@_opening" @onclick="RefreshBrowseAsync">
@if (_opening) { <span class="spinner-border spinner-border-sm me-1"></span> }
Refresh
</button>
<button type="button" class="btn btn-outline-secondary" @onclick="CloseBrowseAsync">
Close
</button>
</div>
}
@if (_openError is not null) { <span class="chip chip-bad" title="@_openError">@TruncatedError()</span> }
</div>
@@ -35,14 +35,16 @@
else
{
<span class="chip chip-ok">Browser open</span>
<button type="button" class="btn btn-outline-secondary btn-sm"
disabled="@_opening" @onclick="RefreshBrowseAsync">
@if (_opening) { <span class="spinner-border spinner-border-sm me-1"></span> }
Refresh
</button>
<button type="button" class="btn btn-outline-secondary btn-sm" @onclick="CloseBrowseAsync">
Close
</button>
<div class="btn-group btn-group-sm" role="group">
<button type="button" class="btn btn-outline-secondary"
disabled="@_opening" @onclick="RefreshBrowseAsync">
@if (_opening) { <span class="spinner-border spinner-border-sm me-1"></span> }
Refresh
</button>
<button type="button" class="btn btn-outline-secondary" @onclick="CloseBrowseAsync">
Close
</button>
</div>
}
@if (_openError is not null) { <span class="chip chip-bad" title="@_openError">@TruncatedError()</span> }
</div>