// A small set of clean, single-weight line icons (SF-Symbols-ish): 24px grid, 1.7 stroke,
// currentColor, rounded caps/joins. Replaces emoji in the chrome for a crisp, consistent look.
export type IconName =
| "sparkle"
| "logo"
| "sidebar"
| "sidebarRight"
| "signOut"
| "chat"
| "diamond"
| "search"
| "folder"
| "folderPlus"
| "plus"
| "clock"
| "sliders"
| "gear"
| "inbox"
| "code"
| "wrench"
| "pencil"
| "branch"
| "arrowLeft"
| "copy"
| "refresh"
| "panelClose"
| "panelOpen"
| "plug"
| "audit"
| "chevronRight"
| "chevronDown"
| "moreHorizontal"
| "pin"
| "archive"
| "trash"
| "shield"
| "file"
| "fileCode"
| "image"
| "table"
| "mic"
| "stop"
| "x";
export function Icon({
name,
size = 16,
className,
}: {
name: IconName;
size?: number;
className?: string;
}) {
const s = {
width: size,
height: size,
viewBox: "0 0 24 24",
fill: "none",
stroke: "currentColor",
strokeWidth: 1.7,
strokeLinecap: "round" as const,
strokeLinejoin: "round" as const,
className,
"aria-hidden": true,
};
switch (name) {
case "sparkle":
// Filled 4-point twinkle — crisp at small sizes.
return (
);
case "logo":
// The OpenWorker mark — a 6-point star, matching the app + macOS tray icon.
return (
);
case "sidebar":
// Clean "sidebar panel" toggle — rounded rect + divider, no chevron (one glyph both states).
return (
);
case "sidebarRight":
// Right-panel counterpart of "sidebar" — same rounded rect + divider, mirrored.
return (
);
case "signOut":
return (
);
case "folder":
// Clean single-tab folder (Lucide-style) — no internal divider line.
return (
);
case "shield":
return (
);
case "file":
// Document with a folded corner + text lines.
return (
);
case "fileCode":
// Document with > marks (html/code).
return (
);
case "image":
// Picture frame: sun + mountains.
return (
);
case "table":
// Spreadsheet grid (csv/xlsx).
return (
);
case "mic":
return (
);
case "stop":
return (
);
case "x":
return (
);
case "folderPlus":
// Same clean folder body + a centered plus (Lucide-style).
return (
);
case "plus":
return (
);
case "clock":
return (
);
case "sliders":
// Two rails, knob on each, rails broken around the knobs (owner pick 2026-07-11:
// the three-rail version read as heavier than the mocks' two-rail glyph).
return (
);
case "gear":
return (
);
case "inbox":
return (
);
case "code":
return (
);
case "chat":
return (
);
case "wrench":
return (
);
case "search":
return (
);
case "diamond":
return (
);
case "pencil":
return (
);
case "branch":
return (
);
case "arrowLeft":
return (
);
case "copy":
return (
);
case "refresh":
return (
);
case "panelClose":
return (
);
case "panelOpen":
return (
);
case "plug":
return (
);
case "audit":
return (
);
case "chevronRight":
return (
);
case "chevronDown":
return (
);
case "moreHorizontal":
return (
);
case "pin":
return (
);
case "archive":
return (
);
case "trash":
return (
);
}
}