import type { LucideIcon } from "lucide-solid";
import ArrowDown from "lucide-solid/icons/arrow-down";
import ArrowLeft from "lucide-solid/icons/arrow-left";
import ArrowRight from "lucide-solid/icons/arrow-right";
import ArrowUp from "lucide-solid/icons/arrow-up";
import BookOpen from "lucide-solid/icons/book-open";
import Check from "lucide-solid/icons/check";
import ChevronLeft from "lucide-solid/icons/chevron-left";
import ChevronRight from "lucide-solid/icons/chevron-right";
import Columns2 from "lucide-solid/icons/columns-2";
import Copy from "lucide-solid/icons/copy";
import Download from "lucide-solid/icons/download";
import EllipsisVertical from "lucide-solid/icons/ellipsis-vertical";
import ExternalLink from "lucide-solid/icons/external-link";
import File from "lucide-solid/icons/file";
import Grid2X2 from "lucide-solid/icons/grid-2x2";
import Heart from "lucide-solid/icons/heart";
import History from "lucide-solid/icons/history";
import House from "lucide-solid/icons/house";
import Hand from "lucide-solid/icons/hand";
import Info from "lucide-solid/icons/info";
import LocateFixed from "lucide-solid/icons/locate-fixed";
import Maximize from "lucide-solid/icons/maximize";
import Minimize from "lucide-solid/icons/minimize";
import MoveHorizontal from "lucide-solid/icons/move-horizontal";
import MoveVertical from "lucide-solid/icons/move-vertical";
import Palette from "lucide-solid/icons/palette";
import Pencil from "lucide-solid/icons/pencil";
import Play from "lucide-solid/icons/play";
import RefreshCw from "lucide-solid/icons/refresh-cw";
import Rows3 from "lucide-solid/icons/rows-3";
import ScanLine from "lucide-solid/icons/scan-line";
import Search from "lucide-solid/icons/search";
import Settings from "lucide-solid/icons/settings";
import Sparkles from "lucide-solid/icons/sparkles";
import Star from "lucide-solid/icons/star";
import X from "lucide-solid/icons/x";
import ZoomIn from "lucide-solid/icons/zoom-in";
import ZoomOut from "lucide-solid/icons/zoom-out";
import { createMemo, For, Show } from "solid-js";
import { Dynamic } from "solid-js/web";
export type IconName =
| "arrow-left"
| "arrow-right"
| "arrow-down"
| "arrow-up"
| "arrows-horizontal"
| "arrows-vertical"
| "book-open"
| "check"
| "chevron-left"
| "chevron-right"
| "close"
| "copy"
| "download"
| "edit"
| "external-link"
| "fullscreen"
| "fullscreen-exit"
| "grid"
| "hand"
| "heart"
| "history"
| "home"
| "info"
| "locate"
| "menu"
| "page"
| "palette"
| "panda-peek"
| "pages"
| "play"
| "refresh"
| "search"
| "settings"
| "sparkles"
| "scroll-continuous"
| "star"
| "viewport"
| "zoom-in"
| "zoom-out";
export function Icon(props: {
filled?: boolean;
name: IconName;
size?: number | string;
strokeWidth?: number;
}) {
const component = createMemo(() =>
props.name === "panda-peek" ? undefined : LUCIDE_ICONS[props.name],
);
const filled = createMemo(() => props.filled && FILLABLE_ICONS.has(props.name));
const size = createMemo(() =>
typeof props.size === "number"
? `${props.size}px`
: props.size ?? "var(--ui-icon-size-md)",
);
return (
<>
>
);
}
type LucideIconName = Exclude;
const LUCIDE_ICONS: Record = {
"arrow-left": ArrowLeft,
"arrow-right": ArrowRight,
"arrow-down": ArrowDown,
"arrow-up": ArrowUp,
"arrows-horizontal": MoveHorizontal,
"arrows-vertical": MoveVertical,
"book-open": BookOpen,
check: Check,
"chevron-left": ChevronLeft,
"chevron-right": ChevronRight,
close: X,
copy: Copy,
download: Download,
edit: Pencil,
"external-link": ExternalLink,
fullscreen: Maximize,
"fullscreen-exit": Minimize,
grid: Grid2X2,
hand: Hand,
heart: Heart,
history: History,
home: House,
info: Info,
locate: LocateFixed,
menu: EllipsisVertical,
page: File,
palette: Palette,
pages: Columns2,
play: Play,
refresh: RefreshCw,
search: Search,
settings: Settings,
sparkles: Sparkles,
"scroll-continuous": Rows3,
star: Star,
viewport: ScanLine,
"zoom-in": ZoomIn,
"zoom-out": ZoomOut,
};
const FILLABLE_ICONS = new Set(["heart", "star"]);
const PANDA_FILLED_PATHS = [
"M7.2 3.2a2.4 2.4 0 1 0 0 4.8 2.4 2.4 0 0 0 0-4.8Z",
"M16.8 3.2a2.4 2.4 0 1 0 0 4.8 2.4 2.4 0 0 0 0-4.8Z",
"M7.6 9.8c.5-1.2 1.6-1.8 2.6-1.3s1.3 1.8.8 3-1.6 1.8-2.6 1.3-1.3-1.8-.8-3Z",
"M13.8 8.5c1-.5 2.1.1 2.6 1.3s.2 2.5-.8 3-2.1-.1-2.6-1.3-.2-2.5.8-3Z",
"M10.9 13.6c0-.6.5-.9 1.1-.9s1.1.3 1.1.9-.5 1-1.1 1-1.1-.4-1.1-1Z",
"M5.2 13.7a2.8 1.9 0 1 0 0 3.8 2.8 1.9 0 0 0 0-3.8Z",
"M18.8 14.1a2.8 1.9 0 1 0 0 3.8 2.8 1.9 0 0 0 0-3.8Z",
] as const;
const PANDA_PATHS = [
"M5 17c-.8-6.4 2.1-10.8 7-10.8s7.8 4.4 7 10.8",
"M12 14.6v.7c0 .7-.6 1.2-1.3 1.2m1.3-1.2c0 .7.6 1.2 1.3 1.2",
"M2 17h20",
] as const;
function PandaPeekIcon(props: { size: string; strokeWidth: number }) {
return (
);
}