diff --git a/dashboard/css/fleet-page.css b/dashboard/css/fleet-page.css index 9347171..63bd2e8 100644 --- a/dashboard/css/fleet-page.css +++ b/dashboard/css/fleet-page.css @@ -1051,6 +1051,64 @@ body.fleet-page { font-size: var(--text-sm); } +/* Import Modal */ +.file-input { + width: 100%; + padding: var(--space-2) var(--space-3); + background: var(--bg-card); + border: 1px solid var(--border-default); + border-radius: var(--radius-control); + color: var(--text-primary); + font-size: var(--text-sm); + margin-bottom: var(--space-4); +} + +.file-input:focus { + outline: none; + border-color: var(--blue-9); +} + +.import-info { + margin-top: var(--space-4); + padding: var(--space-3); + background: var(--overlay); + border-radius: var(--radius-control); + font-size: var(--text-sm); +} + +.import-info p { + margin: var(--space-2) 0; +} + +.import-warning-text { + color: var(--alert); + font-size: var(--text-sm); +} + +/* Position Column */ +.col-position { + min-width: 100px; + font-family: var(--font-mono); + font-size: var(--text-xs); +} + +.position-link { + color: var(--blue-9); + cursor: pointer; + text-decoration: none; + transition: color 0.2s; +} + +.position-link:hover { + color: var(--blue-10); + text-decoration: underline; +} + +.position-empty { + color: var(--text-muted); + font-style: italic; +} + /* ============================================ Toast Notifications ============================================ */ diff --git a/dashboard/fleet.html b/dashboard/fleet.html index f243289..2c49c42 100644 --- a/dashboard/fleet.html +++ b/dashboard/fleet.html @@ -60,13 +60,25 @@ Refresh + + + @@ -140,6 +152,9 @@ Uptime + + Position + Role @@ -264,6 +279,28 @@ + +
diff --git a/dashboard/js/fleet-page.js b/dashboard/js/fleet-page.js index 2a294ee..cf02fed 100644 --- a/dashboard/js/fleet-page.js +++ b/dashboard/js/fleet-page.js @@ -91,6 +91,9 @@ // Header actions refreshBtn: document.getElementById('fleet-refresh-btn'), updateAllBtn: document.getElementById('fleet-update-all-btn'), + rebaselineBtn: document.getElementById('fleet-rebaseline-btn'), + exportBtn: document.getElementById('fleet-export-btn'), + importBtn: document.getElementById('fleet-import-btn'), downloadBtn: document.getElementById('fleet-download-btn'), // Empty state @@ -115,6 +118,16 @@ removeNodeCount: document.getElementById('remove-node-count'), removeNodeList: document.getElementById('remove-node-list'), + // Import modal elements + importModal: document.getElementById('import-modal'), + importFileInput: document.getElementById('import-file-input'), + importConfirmBtn: document.getElementById('import-confirm-btn'), + importInfo: document.getElementById('import-info'), + importFilename: document.getElementById('import-filename'), + importNodesCount: document.getElementById('import-nodes-count'), + // Hidden file input for export + exportFileInput: document.getElementById('export-file-input'), + // Unpaired elements unpairedSummary: document.getElementById('fleet-unpaired-summary'), unpairedCount: document.getElementById('fleet-unpaired'),