Localize the remaining dashboard UI clusters and refresh the generated i18n resources. - Replace hardcoded labels across agent, plugin, mission, workflow node, research, document, activity, and miscellaneous dashboard components with app namespace translations. - Add and synchronize locale catalog entries for English, Spanish, French, Korean, Simplified Chinese, and Traditional Chinese. - Update i18n lint configuration and generated resource types, with a patch changeset for the published CLI package. Files changed: .changeset/fn-6769-i18n-cluster.md | 5 + i18next.config.ts | 47 +-- .../dashboard/app/components/ActiveAgentsPanel.tsx | 2 +- packages/dashboard/app/components/ActivityFeed.tsx | 12 +- .../dashboard/app/components/ActivityLogModal.tsx | 4 +- packages/dashboard/app/components/AddNodeModal.tsx | 4 +- .../dashboard/app/components/AgentDetailView.tsx | 6 +- .../app/components/AgentGenerationModal.tsx | 2 +- .../dashboard/app/components/AgentImportModal.tsx | 4 +- .../app/components/AgentOnboardingModal.tsx | 4 +- .../app/components/AgentPromptsManager.tsx | 2 +- .../dashboard/app/components/AgentRunHistory.tsx | 2 +- .../dashboard/app/components/AgentsOverviewBar.tsx | 2 +- .../dashboard/app/components/BranchGroupCard.tsx | 4 +- .../dashboard/app/components/CliBinaryPanel.tsx | 8 +- .../app/components/CursorCliProviderCard.tsx | 4 +- .../dashboard/app/components/DashboardLoader.tsx | 4 +- .../dashboard/app/components/DevServerView.tsx | 8 +- .../dashboard/app/components/DocumentsView.tsx | 6 +- .../dashboard/app/components/ErrorBoundary.tsx | 9 +- .../dashboard/app/components/ExecutorStatusBar.tsx | 5 +- .../dashboard/app/components/GitHubStarPrompt.tsx | 14 +- .../dashboard/app/components/GitManagerModal.tsx | 4 +- .../dashboard/app/components/GroupTaskModal.tsx | 2 +- packages/dashboard/app/components/Header.tsx | 4 +- .../dashboard/app/components/HermesRuntimeCard.tsx | 2 +- packages/dashboard/app/components/InsightsView.tsx | 2 +- .../dashboard/app/components/IssueMentionPopup.tsx | 5 +- packages/dashboard/app/components/MailboxView.tsx | 6 +- .../components/MilestoneSliceInterviewModal.tsx | 2 +- .../app/components/MissionInterviewModal.tsx | 2 +- .../dashboard/app/components/MissionManager.tsx | 8 +- .../app/components/ModelOnboardingModal.tsx | 2 +- .../dashboard/app/components/NodeDetailModal.tsx | 2 +- .../app/components/PiExtensionsManager.tsx | 10 +- .../dashboard/app/components/ProjectSelector.tsx | 6 +- packages/dashboard/app/components/QuickChatFAB.tsx | 44 +-- packages/dashboard/app/components/ResearchView.tsx | 2 +- packages/dashboard/app/components/RoutineCard.tsx | 6 +- .../dashboard/app/components/RoutineEditor.tsx | 2 +- packages/dashboard/app/components/RoutingTab.tsx | 2 +- packages/dashboard/app/components/ScheduleCard.tsx | 6 +- packages/dashboard/app/components/ScheduleForm.tsx | 2 +- packages/dashboard/app/components/ScriptsModal.tsx | 2 +- .../app/components/StashConflictModal.tsx | 4 +- .../dashboard/app/components/TerminalModal.tsx | 2 +- .../app/components/nodes/WorkflowNodeTypes.tsx | 47 +-- packages/i18n/locales/en/app.json | 274 +++++++-------- packages/i18n/locales/es/app.json | 144 ++++++-- packages/i18n/locales/fr/app.json | 144 ++++++-- packages/i18n/locales/ko/app.json | 144 ++++++-- packages/i18n/locales/zh-CN/app.json | 144 ++++++-- packages/i18n/locales/zh-TW/app.json | 144 ++++++-- packages/i18n/src/resources.d.ts | 375 +++++++++++++++++++-- 54 files changed, 1261 insertions(+), 442 deletions(-) Fusion-Task-Id: FN-6769 Fusion-Task-Lineage: a8733dc9-3b48-47e6-88c4-020f83ab41de
62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import { ChevronDown, ChevronRight } from "lucide-react";
|
|
import { useTranslation } from "react-i18next";
|
|
import { AgentMetricsBar } from "./AgentMetricsBar";
|
|
import { ActiveAgentsPanel } from "./ActiveAgentsPanel";
|
|
import type { Agent, AgentStats } from "../api";
|
|
import "./AgentsOverviewBar.css";
|
|
|
|
interface AgentsOverviewBarProps {
|
|
stats: AgentStats | null;
|
|
activeAgents: Agent[];
|
|
projectId?: string;
|
|
isOpen: boolean;
|
|
onToggle: () => void;
|
|
onSelectAgent?: (agentId: string) => void;
|
|
onOpenTaskLogs?: (taskId: string) => void;
|
|
}
|
|
|
|
export function AgentsOverviewBar({
|
|
stats,
|
|
activeAgents,
|
|
projectId,
|
|
isOpen,
|
|
onToggle,
|
|
onSelectAgent,
|
|
onOpenTaskLogs,
|
|
}: AgentsOverviewBarProps) {
|
|
const { t } = useTranslation("app");
|
|
const activeCount = activeAgents.filter((a) => a.state === "active").length;
|
|
const runningCount = activeAgents.filter((a) => a.state === "running").length;
|
|
|
|
return (
|
|
<section className="agents-overview-bar" aria-label={t("agents.overviewLabel", "Agents overview")}>
|
|
<button
|
|
type="button"
|
|
className="agents-overview-bar__toggle"
|
|
aria-expanded={isOpen}
|
|
onClick={onToggle}
|
|
>
|
|
<span className="agents-overview-bar__title-wrap">
|
|
{isOpen ? <ChevronDown size={16} aria-hidden="true" /> : <ChevronRight size={16} aria-hidden="true" />}
|
|
<span className="agents-overview-bar__title">{t("agents.overview", "Overview")}</span>
|
|
</span>
|
|
<span className="agents-overview-bar__meta text-secondary">
|
|
{t("agents.statusCount", "{{activeCount}} active · {{runningCount}} running", { activeCount, runningCount })}
|
|
</span>
|
|
</button>
|
|
{isOpen ? (
|
|
<div className="agents-overview-bar__content">
|
|
<AgentMetricsBar stats={stats} className="agents-overview-bar__metrics" />
|
|
<ActiveAgentsPanel
|
|
agents={activeAgents}
|
|
projectId={projectId}
|
|
onAgentSelect={onSelectAgent}
|
|
onOpenTaskLogs={onOpenTaskLogs}
|
|
className="agents-overview-bar__active-panel"
|
|
/>
|
|
</div>
|
|
) : null}
|
|
</section>
|
|
);
|
|
}
|