Snapshot synced v3.6.1 working state as baseline

Machine-sync snapshot: the working tree carried the full 3.0.0-3.6.1 arc
(licensing/FileManager/DatabaseExplorer removal, all new replacement screens
and REST controllers) that had not been committed on this machine. Captured
here as a safety baseline before starting the Adminify-parity revamp.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
NixReaper
2026-07-12 08:41:18 -05:00
co-authored by Claude Opus 4.8
parent 07d77bda57
commit e2db2ad4b5
88 changed files with 8944 additions and 2730 deletions
+60 -6
View File
@@ -2,6 +2,7 @@
import { ref, reactive, computed, onMounted } from 'vue';
import AppListShell from '../_shared/AppListShell.vue';
import AppListItem from '../_shared/AppListItem.vue';
import { describeCapability } from './capabilityDescriptions.js';
const props = defineProps({
serverData: { type: Object, required: true },
@@ -145,10 +146,16 @@ const remove = async () => {
<div class="role-editor__section">
<h3>Capabilities</h3>
<div class="role-editor__caps">
<label v-for="cap in allCapabilities" :key="cap" class="role-editor__cap">
<input type="checkbox" :checked="draft.capabilities.includes(cap)" @change="toggleCap(cap)" />
{{ cap }}
</label>
<div v-for="cap in allCapabilities" :key="cap" class="role-editor__cap">
<label>
<input type="checkbox" :checked="draft.capabilities.includes(cap)" @change="toggleCap(cap)" />
{{ cap }}
</label>
<span class="role-editor__cap-info" tabindex="0">
<span class="dashicons dashicons-info-outline" />
<span class="role-editor__tooltip" role="tooltip">{{ describeCapability(cap) }}</span>
</span>
</div>
</div>
</div>
@@ -186,10 +193,57 @@ const remove = async () => {
color: var(--aurora-text-muted); margin: 0 0 8px;
}
.role-editor__caps {
display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 8px 16px; max-height: 380px; overflow-y: auto;
/* Tooltips (position: absolute, below) need room to render outside the
grid cell without getting clipped by the scroll container. */
padding-bottom: 8px;
}
.role-editor__cap {
display: flex; align-items: center; justify-content: space-between; gap: 6px;
font-size: 0.8125rem; color: var(--aurora-text);
}
.role-editor__cap label { display: flex; align-items: center; gap: 6px; min-width: 0; }
.role-editor__cap label span,
.role-editor__cap label {
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.role-editor__cap-info {
position: relative;
display: inline-flex; align-items: center; justify-content: center;
width: 18px; height: 18px; flex-shrink: 0;
color: var(--aurora-text-muted); cursor: help;
}
.role-editor__cap-info .dashicons { font-size: 15px; width: 15px; height: 15px; }
.role-editor__cap-info:hover { color: var(--aurora-accent); }
.role-editor__tooltip {
position: absolute;
bottom: calc(100% + 8px);
right: -8px;
z-index: 20;
width: 260px;
padding: 10px 12px;
border-radius: 8px;
border: 1px solid var(--aurora-frame-border);
background: var(--aurora-frame-bg);
color: var(--aurora-text);
font-size: 0.75rem;
font-weight: 400;
line-height: 1.5;
white-space: normal;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
visibility: hidden;
opacity: 0;
transition: opacity 0.1s ease;
pointer-events: none;
}
.role-editor__cap-info:hover .role-editor__tooltip,
.role-editor__cap-info:focus .role-editor__tooltip {
visibility: visible;
opacity: 1;
}
.role-editor__cap { display: flex; align-items: center; gap: 6px; font-size: 0.8125rem; color: var(--aurora-text); }
.role-editor__actions { display: flex; justify-content: flex-end; gap: 8px; }
.role-editor__actions button {
border: none; border-radius: 8px; padding: 9px 18px; font-size: 0.875rem; cursor: pointer;