mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-15 03:08:56 +02:00
UI : reskin complet vers un theme neo-brutaliste clair (bordures noires 3px, ombres dures, accent orange, polices Press Start 2P + DM Mono). - tailwind.config / index.css / index.html : palette, polices, ombres, scrollbars - TopBar, ActivityBar, LeftPanel, ChatPanel, PreviewPanel, SettingsView, ToolCard, ModelSelector, Icon : restyle complet Chat : panneau « Raisonnement » repliable et redimensionnable affichant le thinking de l'agent en direct (diffuse depuis le backend, persiste dans meta). Robustesse Ollama : les echecs de generation de parseur d'outils (« Unable to generate parser for this template ») declenchent desormais le repli automatique en conversation simple sans outils, au lieu d'un 400. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import {
|
|
ChatIcon,
|
|
ClockIcon,
|
|
FilesIcon,
|
|
NodesIcon,
|
|
SettingsIcon,
|
|
} from "./Icon";
|
|
|
|
export type View = "chat" | "history" | "files" | "tools" | "settings";
|
|
|
|
const items: { id: View; icon: React.ReactNode }[] = [
|
|
{ id: "chat", icon: <ChatIcon /> },
|
|
{ id: "history", icon: <ClockIcon /> },
|
|
{ id: "files", icon: <FilesIcon /> },
|
|
{ id: "tools", icon: <NodesIcon /> },
|
|
];
|
|
|
|
const btn = (on: boolean) =>
|
|
`flex h-10 w-10 items-center justify-center border-[3px] ${
|
|
on
|
|
? "border-white bg-accent text-white shadow-accent-soft"
|
|
: "border-chrome-3 text-on-dark-2 hover:text-white"
|
|
}`;
|
|
|
|
/** Barre d'activité verticale (60px) sombre à gauche. */
|
|
export function ActivityBar({
|
|
active,
|
|
onChange,
|
|
}: {
|
|
active: View;
|
|
onChange: (v: View) => void;
|
|
}) {
|
|
return (
|
|
<div className="flex w-[60px] flex-none flex-col items-center gap-2 border-r-[3px] border-line bg-bar py-3">
|
|
{items.map((it) => (
|
|
<button
|
|
key={it.id}
|
|
onClick={() => onChange(it.id)}
|
|
className={btn(active === it.id)}
|
|
>
|
|
{it.icon}
|
|
</button>
|
|
))}
|
|
|
|
<div className="flex-1" />
|
|
|
|
<button
|
|
onClick={() => onChange("settings")}
|
|
className={btn(active === "settings")}
|
|
>
|
|
<SettingsIcon />
|
|
</button>
|
|
|
|
<div className="font-pixel flex h-[34px] w-[34px] items-center justify-center border-[3px] border-white bg-white text-[11px] text-line">
|
|
M
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|