From 3f94c98c5b2053df05a80bc8b5b22d157b069c5e Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Thu, 9 Apr 2026 15:22:14 +0200 Subject: [PATCH] refactor: replace native HTML with design system components (Phase 5) - EnvironmentSelector: bare + + )} diff --git a/ui/src/pages/Admin/AppConfigDetailPage.module.css b/ui/src/pages/Admin/AppConfigDetailPage.module.css index 76a07f66..6536bedf 100644 --- a/ui/src/pages/Admin/AppConfigDetailPage.module.css +++ b/ui/src/pages/Admin/AppConfigDetailPage.module.css @@ -17,71 +17,12 @@ margin-bottom: 20px; } -.backBtn { - background: none; - border: none; - color: var(--amber); - cursor: pointer; - font-size: 13px; - font-weight: 500; - padding: 4px 0; -} - -.backBtn:hover { - color: var(--amber-deep); - text-decoration: underline; -} - .toolbarActions { display: flex; gap: 8px; align-items: center; } -.editBtn { - background: none; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-sm); - color: var(--text-secondary); - cursor: pointer; - font-size: 12px; - padding: 5px 12px; -} - -.editBtn:hover { - border-color: var(--amber); - color: var(--amber); -} - -.cancelBtn { - background: none; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-sm); - color: var(--text-muted); - cursor: pointer; - font-size: 12px; - padding: 5px 12px; -} - -.cancelBtn:hover { - border-color: var(--text-faint); - color: var(--text-primary); -} - -.removeBtn { - background: none; - border: none; - color: var(--text-faint); - cursor: pointer; - font-size: 16px; - padding: 0 4px; - line-height: 1; -} - -.removeBtn:hover { - color: var(--error); -} - .header { margin-bottom: 16px; background: var(--bg-surface); @@ -122,13 +63,7 @@ min-width: 140px; } -.label { - font-size: 12px; - font-weight: 600; - color: var(--text-secondary); -} - -.select { +.numberInput { padding: 6px 10px; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); @@ -140,24 +75,10 @@ max-width: 360px; } -.select:focus { +.numberInput:focus { border-color: var(--amber); } -.toggleRow { - display: flex; - align-items: center; - gap: 8px; - font-size: 13px; - color: var(--text-secondary); - cursor: pointer; -} - -.toggleRow input { - accent-color: var(--amber); - cursor: pointer; -} - .tapBadges { display: flex; flex-wrap: wrap; diff --git a/ui/src/pages/Admin/AppConfigDetailPage.tsx b/ui/src/pages/Admin/AppConfigDetailPage.tsx index 7b0f2529..7d41152f 100644 --- a/ui/src/pages/Admin/AppConfigDetailPage.tsx +++ b/ui/src/pages/Admin/AppConfigDetailPage.tsx @@ -2,7 +2,7 @@ import { useEffect, useState, useMemo } from 'react'; import { useParams, useNavigate } from 'react-router'; import { ArrowLeft, Pencil, X } from 'lucide-react'; import { - Button, SectionHeader, MonoText, Badge, DataTable, Spinner, Toggle, useToast, + Button, SectionHeader, MonoText, Badge, DataTable, Spinner, Toggle, Select, Label, useToast, } from '@cameleer/design-system'; import type { Column } from '@cameleer/design-system'; import { useApplicationConfig, useUpdateApplicationConfig } from '../../api/queries/commands'; @@ -205,16 +205,16 @@ export default function AppConfigDetailPage() { } if (editing) { return ( - + options={[ + { value: 'NONE', label: 'None' }, + { value: 'INPUT', label: 'Input' }, + { value: 'OUTPUT', label: 'Output' }, + { value: 'BOTH', label: 'Both' }, + ]} + /> ); } return ; @@ -248,9 +248,9 @@ export default function AppConfigDetailPage() { render: (_v: unknown, row: TracedTapRow) => { if (row.captureMode === null) return null; return ( - + ); }, }] : []), @@ -304,16 +304,16 @@ export default function AppConfigDetailPage() { return (
- + {editing ? (
- +
) : ( - + )}
@@ -330,79 +330,87 @@ export default function AppConfigDetailPage() { Settings
- + {editing ? ( - + updateField('agentLogLevel', e.target.value)}> - - - - - - + updateField('engineLevel', e.target.value)}> - - - - - + updateField('payloadCaptureMode', e.target.value)}> - - - - - + updateField('metricsEnabled', e.target.checked)} /> - {form.metricsEnabled ? 'Enabled' : 'Disabled'} - + updateField('metricsEnabled', (e.target as HTMLInputElement).checked)} + label={form.metricsEnabled ? 'Enabled' : 'Disabled'} + /> ) : ( )}
- + {editing ? ( - updateField('samplingRate', parseFloat(e.target.value) || 0)} /> ) : ( @@ -410,13 +418,13 @@ export default function AppConfigDetailPage() { )}
- + {editing ? ( - + updateField('compressSuccess', (e.target as HTMLInputElement).checked)} + label={form.compressSuccess ? 'On' : 'Off'} + /> ) : ( )} diff --git a/ui/src/pages/AgentHealth/AgentHealth.module.css b/ui/src/pages/AgentHealth/AgentHealth.module.css index 10479b58..470f32a4 100644 --- a/ui/src/pages/AgentHealth/AgentHealth.module.css +++ b/ui/src/pages/AgentHealth/AgentHealth.module.css @@ -58,102 +58,12 @@ color: var(--text-muted); } -.configSelect { - padding: 5px 10px; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-sm); - background: var(--bg-body); - color: var(--text-primary); - font-size: 12px; - font-family: var(--font-mono); - outline: none; - cursor: pointer; -} - -.configSelect:focus { - border-color: var(--amber); -} - -.configSelect:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.configToggle { - display: flex; - align-items: center; - gap: 6px; - font-size: 12px; - font-family: var(--font-mono); - color: var(--text-secondary); - cursor: pointer; -} - -.configToggle input { - accent-color: var(--amber); - cursor: pointer; -} - -.configEditBtn { - background: transparent; - border: none; - color: var(--text-faint); - opacity: 0.75; - cursor: pointer; - font-size: 14px; - padding: 4px 6px; - border-radius: var(--radius-sm); - line-height: 1; - display: inline-flex; - align-self: flex-end; -} - -.configEditBtn:hover { - color: var(--text-primary); - opacity: 1; -} - .configActions { display: flex; gap: 8px; align-self: flex-end; } -.configSaveBtn { - padding: 4px 12px; - border: none; - border-radius: var(--radius-sm); - background: var(--amber); - color: var(--bg-surface); - font-size: 12px; - font-weight: 600; - cursor: pointer; -} - -.configSaveBtn:hover { - background: var(--amber-deep); -} - -.configSaveBtn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.configCancelBtn { - padding: 4px 12px; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-sm); - background: transparent; - color: var(--text-muted); - font-size: 12px; - cursor: pointer; -} - -.configCancelBtn:hover { - color: var(--text-primary); - border-color: var(--text-faint); -} - /* Section header */ .sectionTitle { font-size: 13px; diff --git a/ui/src/pages/AgentHealth/AgentHealth.tsx b/ui/src/pages/AgentHealth/AgentHealth.tsx index 3e2d2885..14a40e74 100644 --- a/ui/src/pages/AgentHealth/AgentHealth.tsx +++ b/ui/src/pages/AgentHealth/AgentHealth.tsx @@ -4,7 +4,7 @@ import { ExternalLink, RefreshCw, Pencil } from 'lucide-react'; import { StatCard, StatusDot, Badge, MonoText, GroupCard, DataTable, EventFeed, - LogViewer, ButtonGroup, SectionHeader, Toggle, useToast, + LogViewer, ButtonGroup, SectionHeader, Toggle, Select, Button, useToast, } from '@cameleer/design-system'; import type { Column, FeedEvent, LogEntry, ButtonGroupItem } from '@cameleer/design-system'; import styles from './AgentHealth.module.css'; @@ -356,45 +356,53 @@ export default function AgentHealth() { <>
App Log Level - + setConfigDraft(d => ({ ...d, agentLogLevel: e.target.value }))}> - - - - - - + setConfigDraft(d => ({ ...d, engineLevel: e.target.value }))}> - - - - - + setConfigDraft(d => ({ ...d, payloadCaptureMode: e.target.value }))}> - - - - - +