This commit is contained in:
@@ -78,7 +78,7 @@ export function AgentsMdPanel({ onDirtyChange }: AgentsMdPanelProps) {
|
||||
{data?.exists && (
|
||||
<button
|
||||
type="button"
|
||||
className="text-2xs text-red-600 hover:text-red-800 underline"
|
||||
className="text-2xs text-red-600 hover:text-red-800 dark:hover:text-red-300 underline"
|
||||
onClick={() => {
|
||||
if (window.confirm('AGENTS.md を削除しますか?')) del.mutate();
|
||||
}}
|
||||
|
||||
@@ -9,10 +9,10 @@ import { AddBrowserSessionDialog } from './AddBrowserSessionDialog';
|
||||
function StatusPill({ status }: { status: BrowserSessionProfile['status'] }) {
|
||||
const map: Record<BrowserSessionProfile['status'], string> = {
|
||||
pending: 'bg-slate-200 text-slate-700',
|
||||
active: 'bg-emerald-100 text-emerald-700',
|
||||
expired: 'bg-amber-100 text-amber-800',
|
||||
active: 'bg-emerald-100 dark:bg-emerald-500/15 text-emerald-700 dark:text-emerald-300',
|
||||
expired: 'bg-amber-100 dark:bg-amber-500/15 text-amber-800 dark:text-amber-300',
|
||||
revoked: 'bg-slate-200 text-slate-500',
|
||||
error: 'bg-rose-100 text-rose-700',
|
||||
error: 'bg-rose-100 dark:bg-rose-500/15 text-rose-700 dark:text-rose-300',
|
||||
};
|
||||
const labels: Record<BrowserSessionProfile['status'], string> = {
|
||||
pending: '保留中',
|
||||
@@ -87,7 +87,7 @@ export function BrowserSessionsPanel() {
|
||||
<button onClick={() => { setReLoginProfileId(p.id); setAdding(true); }}
|
||||
className="text-xs text-slate-700 hover:text-slate-900 px-2 py-1 rounded hover:bg-surface">再ログイン</button>
|
||||
<button onClick={() => { if (confirm(`${p.label} を削除しますか?`)) del.mutate(p.id); }}
|
||||
className="text-xs text-rose-600 hover:text-rose-800 px-2 py-1 rounded hover:bg-rose-50">削除</button>
|
||||
className="text-xs text-rose-600 hover:text-rose-800 dark:hover:text-rose-300 px-2 py-1 rounded hover:bg-rose-50 dark:hover:bg-rose-500/15">削除</button>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
|
||||
@@ -132,7 +132,7 @@ export function FileTree({
|
||||
e.stopPropagation();
|
||||
onDeleteFile(subdir, file.name);
|
||||
}}
|
||||
className={`flex-shrink-0 w-4 h-4 flex items-center justify-center rounded hover:bg-red-100 hover:text-red-600 transition-colors ${
|
||||
className={`flex-shrink-0 w-4 h-4 flex items-center justify-center rounded hover:bg-red-100 dark:hover:bg-red-500/15 hover:text-red-600 transition-colors ${
|
||||
isSelected ? 'text-accent-fg/70' : 'text-slate-400'
|
||||
}`}
|
||||
>
|
||||
|
||||
@@ -36,7 +36,7 @@ function OwnerBadge({ ownerId }: { ownerId: string | null }) {
|
||||
);
|
||||
}
|
||||
return (
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-blue-50 text-blue-600 leading-none">
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-300 leading-none">
|
||||
personal
|
||||
</span>
|
||||
);
|
||||
|
||||
@@ -233,7 +233,7 @@ function ScopeBadge({ ownerId }: { ownerId: string | null }) {
|
||||
return ownerId === null ? (
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-slate-100 text-slate-500 leading-none">global</span>
|
||||
) : (
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-blue-50 text-blue-600 leading-none">personal</span>
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-300 leading-none">personal</span>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -341,10 +341,10 @@ export function McpPanel({ showToast }: { showToast?: ShowToast }) {
|
||||
<span className="text-[13px] font-medium text-slate-900">{s.name}</span>
|
||||
<ScopeBadge ownerId={s.ownerId} />
|
||||
<span className={`inline-block px-1.5 py-0.5 rounded text-[10px] font-medium leading-none ${
|
||||
s.authKind === 'oauth' ? 'bg-purple-50 text-purple-600' : 'bg-amber-50 text-amber-600'
|
||||
s.authKind === 'oauth' ? 'bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-300' : 'bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-300'
|
||||
}`}>{s.authKind === 'oauth' ? 'OAuth' : 'API key'}</span>
|
||||
{s.toolCount != null && s.toolCount > 0 && (
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-green-50 text-green-700 leading-none">
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-green-50 dark:bg-green-500/15 text-green-700 dark:text-green-300 leading-none">
|
||||
{s.toolCount} ツール
|
||||
</span>
|
||||
)}
|
||||
@@ -372,7 +372,7 @@ export function McpPanel({ showToast }: { showToast?: ShowToast }) {
|
||||
onClick={() => setEditingId(s.id)}>
|
||||
編集
|
||||
</button>
|
||||
<button type="button" className="text-2xs text-red-600 hover:text-red-800 underline"
|
||||
<button type="button" className="text-2xs text-red-600 hover:text-red-800 dark:hover:text-red-300 underline"
|
||||
onClick={() => handleDelete(s.id, s.name, isGlobal)}
|
||||
disabled={delMut.isPending}>
|
||||
削除
|
||||
|
||||
@@ -311,8 +311,8 @@ function ServerTable({
|
||||
<td className="py-2 pr-2">
|
||||
<span className={`inline-block px-1.5 py-0.5 rounded text-[10px] font-medium leading-none ${
|
||||
s.authKind === 'oauth'
|
||||
? 'bg-purple-50 text-purple-600'
|
||||
: 'bg-amber-50 text-amber-600'
|
||||
? 'bg-purple-50 dark:bg-purple-500/15 text-purple-600 dark:text-purple-300'
|
||||
: 'bg-amber-50 dark:bg-amber-500/15 text-amber-600 dark:text-amber-300'
|
||||
}`}>
|
||||
{s.authKind === 'oauth' ? 'OAuth' : 'API key'}
|
||||
</span>
|
||||
@@ -322,7 +322,7 @@ function ServerTable({
|
||||
{s.toolCount == null || s.toolCount === 0 ? (
|
||||
<span className="text-[10px] text-slate-400 italic">未取得 — ツール更新を押してください</span>
|
||||
) : (
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-green-50 text-green-700 leading-none">
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-green-50 dark:bg-green-500/15 text-green-700 dark:text-green-300 leading-none">
|
||||
{s.toolCount} ツール
|
||||
</span>
|
||||
)}
|
||||
@@ -337,7 +337,7 @@ function ServerTable({
|
||||
{canDelete && (
|
||||
<button
|
||||
type="button"
|
||||
className="text-2xs text-red-600 hover:text-red-800 underline"
|
||||
className="text-2xs text-red-600 hover:text-red-800 dark:hover:text-red-300 underline"
|
||||
onClick={() => onDelete(s.id, s.name, isGlobal)}
|
||||
disabled={deletePending}
|
||||
>削除</button>
|
||||
@@ -484,7 +484,7 @@ export function McpServersPanel({ showToast }: McpServersPanelProps = {}) {
|
||||
<section className="space-y-4">
|
||||
<div className="flex items-center gap-2">
|
||||
<h3 className="text-[13px] font-semibold text-slate-900">個人サーバー</h3>
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-blue-50 text-blue-600 leading-none">
|
||||
<span className="inline-block px-1.5 py-0.5 rounded text-[10px] font-medium bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-300 leading-none">
|
||||
personal
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -104,7 +104,7 @@ export function MonacoFileEditor({ subdir, filename, content, mtime, size, onSav
|
||||
{filename}
|
||||
</span>
|
||||
{dirty && (
|
||||
<span className="text-[10px] font-medium text-amber-600 bg-amber-50 border border-amber-200 rounded px-1.5 py-0.5">
|
||||
<span className="text-[10px] font-medium text-amber-600 dark:text-amber-300 bg-amber-50 dark:bg-amber-500/15 border border-amber-200 dark:border-amber-500/30 rounded px-1.5 py-0.5">
|
||||
unsaved
|
||||
</span>
|
||||
)}
|
||||
|
||||
@@ -393,7 +393,7 @@ export function PetsPanel({ showToast }: { showToast?: ShowToast }) {
|
||||
<span className="inline-block w-3 text-slate-400">{collapsed ? '▶' : '▼'}</span>
|
||||
{' '}
|
||||
{worker.id}
|
||||
<span className="ml-2 px-1.5 py-0.5 rounded text-[10px] font-medium bg-violet-50 text-violet-700">
|
||||
<span className="ml-2 px-1.5 py-0.5 rounded text-[10px] font-medium bg-violet-50 dark:bg-violet-500/15 text-violet-700 dark:text-violet-300">
|
||||
proxy
|
||||
</span>
|
||||
</div>
|
||||
@@ -461,7 +461,7 @@ export function PetsPanel({ showToast }: { showToast?: ShowToast }) {
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="text-[13px] font-semibold text-slate-900 truncate">{pet.name}</span>
|
||||
{active && (
|
||||
<span className="px-1.5 py-0.5 rounded text-[10px] font-medium bg-emerald-50 text-emerald-700">
|
||||
<span className="px-1.5 py-0.5 rounded text-[10px] font-medium bg-emerald-50 dark:bg-emerald-500/15 text-emerald-700 dark:text-emerald-300">
|
||||
default
|
||||
</span>
|
||||
)}
|
||||
|
||||
@@ -274,7 +274,7 @@ export function SaveAsScriptDialog({ recordingName, onClose, onSuccess }: SaveAs
|
||||
type="button"
|
||||
onClick={() => removeHint(idx)}
|
||||
aria-label="Remove hint"
|
||||
className="mt-1 w-5 h-5 flex-shrink-0 flex items-center justify-center rounded hover:bg-red-100 hover:text-red-600 text-slate-400 transition-colors"
|
||||
className="mt-1 w-5 h-5 flex-shrink-0 flex items-center justify-center rounded hover:bg-red-100 dark:hover:bg-red-500/15 hover:text-red-600 text-slate-400 transition-colors"
|
||||
>
|
||||
<svg viewBox="0 0 16 16" className="w-3 h-3" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round">
|
||||
<path d="M4 4l8 8M12 4l-8 8" />
|
||||
@@ -297,7 +297,7 @@ export function SaveAsScriptDialog({ recordingName, onClose, onSuccess }: SaveAs
|
||||
|
||||
{/* Errors */}
|
||||
{(validationError || conflictError || submitError) && (
|
||||
<div className="px-3 py-2 rounded-md bg-red-50 border border-red-200 text-xs text-red-700">
|
||||
<div className="px-3 py-2 rounded-md bg-red-50 dark:bg-red-500/15 border border-red-200 dark:border-red-500/30 text-xs text-red-700 dark:text-red-300">
|
||||
{validationError ?? conflictError ?? submitError}
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -324,8 +324,8 @@ export function SshConnectionForm({ existing, adminContext, onSubmit, onCancel }
|
||||
</div>
|
||||
|
||||
{adminContext && (
|
||||
<fieldset className="rounded border border-amber-200 bg-amber-50/50 p-3">
|
||||
<legend className="px-1 text-2xs font-semibold text-amber-800 uppercase tracking-wide">
|
||||
<fieldset className="rounded border border-amber-200 dark:border-amber-500/30 bg-amber-50/50 dark:bg-amber-500/15 p-3">
|
||||
<legend className="px-1 text-2xs font-semibold text-amber-800 dark:text-amber-300 uppercase tracking-wide">
|
||||
Admin-only flags
|
||||
</legend>
|
||||
<label className="flex items-start gap-2 text-xs cursor-pointer">
|
||||
|
||||
@@ -408,7 +408,7 @@ function ConnectionRow(props: ConnectionRowProps) {
|
||||
)}
|
||||
</div>
|
||||
{c.disabledByAdminReason && (
|
||||
<div className="text-2xs text-red-700 mt-0.5">理由: {c.disabledByAdminReason}</div>
|
||||
<div className="text-2xs text-red-700 dark:text-red-300 mt-0.5">理由: {c.disabledByAdminReason}</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex items-center gap-1 flex-shrink-0 flex-wrap justify-end">
|
||||
@@ -442,7 +442,7 @@ function ConnectionRow(props: ConnectionRowProps) {
|
||||
<button
|
||||
type="button"
|
||||
onClick={onDelete}
|
||||
className="px-2 h-7 text-2xs text-red-600 border border-hairline rounded hover:bg-red-50"
|
||||
className="px-2 h-7 text-2xs text-red-600 border border-hairline rounded hover:bg-red-50 dark:hover:bg-red-500/15"
|
||||
>
|
||||
削除
|
||||
</button>
|
||||
@@ -508,10 +508,10 @@ function HostKeyBadge({ verified, pending }: { verified: boolean; pending: boole
|
||||
function Badge({ color, children }: { color: 'slate' | 'blue' | 'emerald' | 'amber' | 'red'; children: React.ReactNode }) {
|
||||
const cls: Record<typeof color, string> = {
|
||||
slate: 'bg-slate-100 text-slate-600',
|
||||
blue: 'bg-blue-50 text-blue-600',
|
||||
emerald: 'bg-emerald-50 text-emerald-700',
|
||||
amber: 'bg-amber-50 text-amber-700',
|
||||
red: 'bg-red-50 text-red-700',
|
||||
blue: 'bg-blue-50 dark:bg-blue-500/15 text-blue-600 dark:text-blue-300',
|
||||
emerald: 'bg-emerald-50 dark:bg-emerald-500/15 text-emerald-700 dark:text-emerald-300',
|
||||
amber: 'bg-amber-50 dark:bg-amber-500/15 text-amber-700 dark:text-amber-300',
|
||||
red: 'bg-red-50 dark:bg-red-500/15 text-red-700 dark:text-red-300',
|
||||
};
|
||||
return (
|
||||
<span className={`inline-block px-1.5 py-0.5 rounded text-[10px] font-medium leading-none ${cls[color]}`}>
|
||||
|
||||
@@ -39,7 +39,7 @@ export function SshPublicKeyDialog({ publicKey, label, freshlyGenerated, onClose
|
||||
公開鍵 {label && <span className="font-normal text-slate-500">— {label}</span>}
|
||||
</h3>
|
||||
{freshlyGenerated && (
|
||||
<p className="text-2xs text-emerald-700 mt-1">
|
||||
<p className="text-2xs text-emerald-700 dark:text-emerald-300 mt-1">
|
||||
新しい鍵を Orchestrator で生成しました。下の公開鍵を接続先の
|
||||
<code className="font-mono"> ~/.ssh/authorized_keys</code> に追加してください。
|
||||
</p>
|
||||
|
||||
@@ -381,7 +381,7 @@ export function SubscriptionsPanel({ currentUserId }: { currentUserId: string })
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
className="text-2xs text-red-600 hover:text-red-800 font-medium px-2 py-0.5 rounded hover:bg-red-50 transition-colors"
|
||||
className="text-2xs text-red-600 hover:text-red-800 dark:hover:text-red-300 font-medium px-2 py-0.5 rounded hover:bg-red-50 dark:hover:bg-red-500/15 transition-colors"
|
||||
onClick={() =>
|
||||
unsubscribe.mutate({ publisher: s.publisher_user_id, folder: s.folder })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user