diff --git a/src/components/AuthFileSettingsDialog.css b/src/components/AuthFileSettingsDialog.css index 83859db..9ad2d50 100644 --- a/src/components/AuthFileSettingsDialog.css +++ b/src/components/AuthFileSettingsDialog.css @@ -46,8 +46,6 @@ .credential-settings-actions { display: flex; gap: 10px; justify-content: flex-end; } .credential-settings-error { color: var(--failure-badge-text); margin: 0 0 12px; font-size: var(--font-size-caption); overflow-wrap: anywhere; max-height: 90px; overflow-y: auto; } .credential-settings-warning { color: var(--amber-text); } -.credential-settings-discard { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; font-size: var(--font-size-caption); } -.credential-settings-discard span { flex: 1 1 100%; } .credential-settings-loading { display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 150px; } @media (max-width: 560px) { .credential-settings-grid { grid-template-columns: minmax(0, 1fr); } @@ -58,41 +56,13 @@ .credential-settings-span { grid-column: 1 / -1; } .credential-settings-inline-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; } .credential-alias-list, .credential-header-list { display: grid; gap: 12px; } -.credential-alias-card { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--border-color); border-radius: 10px; background: var(--bg-primary); } -.credential-alias-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 12px; } -.credential-alias-fields .credential-settings-field { margin: 0; } -.credential-alias-fields .credential-settings-field:last-child { grid-column: 1 / -1; } -.credential-settings-dialog .agent-model-trigger { box-sizing: border-box; min-height: 41px; padding: 0 4px 0 11px; border-color: var(--border-color); border-radius: 7px; background: var(--bg-primary); color: var(--text-primary); } -.credential-settings-dialog .agent-model-trigger strong { color: var(--text-primary); } -.credential-settings-dialog .agent-model-editable-trigger input { box-sizing: border-box; width: 100%; height: 39px; margin: 0; padding: 0; border: 0; border-radius: 0; outline: 0; background: transparent; box-shadow: none; color: inherit; font: inherit; font-size: inherit; line-height: 1.5; } -.credential-settings-dialog .credential-model-menu { - position: fixed; - z-index: 2; - margin: 0; - max-height: none; - overflow: hidden; - border: 1px solid var(--border-color); - background: var(--bg-card); - color: var(--text-primary); - box-shadow: 0 16px 40px #0003; -} -.credential-settings-dialog .credential-model-menu .agent-model-option { - background: var(--bg-card); - color: var(--text-primary); -} -.credential-settings-dialog .credential-model-menu .agent-model-option:hover, -.credential-settings-dialog .credential-model-menu .agent-model-option.active { - background: var(--bg-secondary); -} -.credential-settings-dialog .credential-model-menu .agent-model-option.selected { - background: color-mix(in srgb, var(--primary-color) 12%, var(--bg-card)); -} -.credential-settings-dialog .credential-model-menu .agent-model-option small, -.credential-settings-dialog .credential-model-menu .agent-model-dropdown-footer { - color: var(--text-tertiary); -} -.credential-alias-card-heading, .credential-header-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; } -.credential-alias-card-heading strong { font-size: var(--font-size-meta); } +.credential-alias-card { display: grid; gap: 8px; } +.credential-alias-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; gap: 8px; align-items: center; } +.credential-alias-row input { min-width: 0; } +.credential-alias-row-actions { display: flex; align-items: center; gap: 4px; } +.credential-alias-row-actions .is-expanded { transform: rotate(180deg); } +.credential-alias-details { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--border-color); border-radius: 10px; background: var(--bg-secondary); } +.credential-alias-details .credential-settings-field { margin: 0; } .credential-alias-checks { display: flex; flex-wrap: wrap; gap: 8px 16px; } .credential-alias-checks label { display: flex; align-items: center; gap: 8px; font-size: var(--font-size-meta); } .credential-header-row { display: grid; grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr) auto; } @@ -102,6 +72,7 @@ } @media (max-width: 560px) { - .credential-alias-fields { grid-template-columns: minmax(0, 1fr); } + .credential-alias-row { grid-template-columns: minmax(0, 1fr) auto; } + .credential-alias-row input:first-child { grid-column: 1 / -1; } } diff --git a/src/components/AuthFileSettingsDialog.tsx b/src/components/AuthFileSettingsDialog.tsx index a77b62a..77c1461 100644 --- a/src/components/AuthFileSettingsDialog.tsx +++ b/src/components/AuthFileSettingsDialog.tsx @@ -7,7 +7,7 @@ import { loadAuthFileSettings, saveAuthFileSettings, type AuthFileSettingsDraft, import { modelMatchesRule, normalizeOAuthExcludedRules, oauthModelCandidates, oauthModelsFromPayload, setOAuthModelsExcluded, type OAuthModelDefinition } from '../services/oauthModels'; import './AuthFileSettingsDialog.css'; import { CredentialAdvancedFields, CredentialHeadersEditor, credentialProviderKey } from './CredentialAdvancedFields'; -import { modelSearchText, type ModelOption } from '../services/modelService'; +import { modelSearchText } from '../services/modelService'; export function AuthFileSettingsDialog({ name, provider = '', onClose, onSaved }: { name: string; @@ -22,14 +22,12 @@ export function AuthFileSettingsDialog({ name, provider = '', onClose, onSaved } const [original, setOriginal] = useState(null); const [draft, setDraft] = useState(null); const [models, setModels] = useState([]); - const [pickerModels, setPickerModels] = useState([]); const [catalogError, setCatalogError] = useState(''); const [catalogLoading, setCatalogLoading] = useState(true); const [search, setSearch] = useState(''); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(''); - const [discard, setDiscard] = useState(false); const [attempt, setAttempt] = useState(0); const dirty = draft !== null && (Boolean(draft.normalizeCloakMetadata?.length) || JSON.stringify(draft) !== JSON.stringify(original)); @@ -61,7 +59,6 @@ export function AuthFileSettingsDialog({ name, provider = '', onClose, onSaved } const catalog = oauthModelsFromPayload(payload); if (!active) return; setModels(catalog); - setPickerModels(catalog.map((model) => ({ name: model.id, displayName: model.displayName }))); }).catch((reason: unknown) => { if (active) setCatalogError(reason instanceof Error ? reason.message : String(reason)); }).finally(() => { if (active) setCatalogLoading(false); }); @@ -70,20 +67,17 @@ export function AuthFileSettingsDialog({ name, provider = '', onClose, onSaved } const close = () => { if (savingRef.current) return; - if (dirty) setDiscard(true); - else onClose(); + onClose(); }; const update = (key: K, value: AuthFileSettingsDraft[K]) => { setDraft((current) => current ? { ...current, [key]: value } : current); setError(''); - setDiscard(false); }; const save = async () => { if (!draft || !original || savingRef.current) return; savingRef.current = true; setSaving(true); setError(''); - setDiscard(false); try { const changed = await saveAuthFileSettings(name, original, draft); if (changed) onSaved(); @@ -175,7 +169,7 @@ export function AuthFileSettingsDialog({ name, provider = '', onClose, onSaved } - update('advanced', advanced)} /> + update('advanced', advanced)} />

{t('authFiles.settings.additional')}

update('headers', headers)} /> @@ -189,7 +183,6 @@ export function AuthFileSettingsDialog({ name, provider = '', onClose, onSaved }