Files
2026-08-21 10:18:18 +03:30

213 lines
5.4 KiB
TypeScript

// Minimal inline icon set (no external dependency). Each icon inherits color
// via `currentColor` and accepts standard svg props.
import type { SVGProps } from "react";
type IconProps = SVGProps<SVGSVGElement>;
function base(props: IconProps) {
return {
width: 20,
height: 20,
viewBox: "0 0 24 24",
fill: "none",
stroke: "currentColor",
strokeWidth: 1.8,
strokeLinecap: "round" as const,
strokeLinejoin: "round" as const,
...props,
};
}
export const PlusIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M12 5v14M5 12h14" />
</svg>
);
export const EditIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M12 20h9" />
<path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z" />
</svg>
);
export const TrashIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M3 6h18M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2m2 0v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V6" />
<path d="M10 11v6M14 11v6" />
</svg>
);
export const CloseIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M18 6 6 18M6 6l12 12" />
</svg>
);
export const PlayIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M7 4.5v15l12-7.5-12-7.5Z" />
</svg>
);
export const PauseIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M8 5v14M16 5v14" />
</svg>
);
export const EyeIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z" />
<circle cx="12" cy="12" r="3" />
</svg>
);
export const SearchIcon = (p: IconProps) => (
<svg {...base(p)}>
<circle cx="11" cy="11" r="7" />
<path d="m21 21-4.3-4.3" />
</svg>
);
export const SunIcon = (p: IconProps) => (
<svg {...base(p)}>
<circle cx="12" cy="12" r="4" />
<path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4" />
</svg>
);
export const MoonIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z" />
</svg>
);
export const LogoutIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" />
<path d="M16 17l5-5-5-5M21 12H9" />
</svg>
);
export const MenuIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M3 12h18M3 6h18M3 18h18" />
</svg>
);
export const SpinnerIcon = (p: IconProps) => (
<svg {...base(p)} className={`animate-spin ${p.className ?? ""}`}>
<path d="M21 12a9 9 0 1 1-6.2-8.6" />
</svg>
);
// Section icons (single-path, decorative).
export const HomeIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M3 10.5 12 3l9 7.5" />
<path d="M5 9.5V21h14V9.5" />
</svg>
);
export const MediaIcon = (p: IconProps) => (
<svg {...base(p)}>
<rect x="3" y="3" width="18" height="18" rx="2" />
<path d="m10 8 6 4-6 4V8Z" />
</svg>
);
export const MusicIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M9 18V5l12-2v13" />
<circle cx="6" cy="18" r="3" />
<circle cx="18" cy="16" r="3" />
</svg>
);
export const TimerIcon = (p: IconProps) => (
<svg {...base(p)}>
<circle cx="12" cy="13" r="8" />
<path d="M12 9v4l2 2M9 2h6" />
</svg>
);
export const ImageIcon = (p: IconProps) => (
<svg {...base(p)}>
<rect x="3" y="3" width="18" height="18" rx="2" />
<circle cx="9" cy="9" r="2" />
<path d="m21 15-5-5L5 21" />
</svg>
);
export const SliderIcon = (p: IconProps) => (
<svg {...base(p)}>
<rect x="2" y="6" width="20" height="12" rx="2" />
<path d="M6 2v2M18 2v2M6 20v2M18 20v2" />
</svg>
);
export const QuestionIcon = (p: IconProps) => (
<svg {...base(p)}>
<circle cx="12" cy="12" r="9" />
<path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.8.4-1 .9-1 1.7M12 17h.01" />
</svg>
);
export const SurveyIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M9 11l3 3 8-8" />
<path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11" />
</svg>
);
export const BreathIcon = (p: IconProps) => (
<svg {...base(p)}>
<circle cx="12" cy="12" r="3" />
<circle cx="12" cy="12" r="9" />
</svg>
);
export const MoodIcon = (p: IconProps) => (
<svg {...base(p)}>
<circle cx="12" cy="12" r="9" />
<path d="M8 14s1.5 2 4 2 4-2 4-2M9 9h.01M15 9h.01" />
</svg>
);
export const WorryIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M3 7h18l-2 13H5L3 7Z" />
<path d="M8 7V5a4 4 0 0 1 8 0v2" />
</svg>
);
export const SceneIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="m3 17 5-6 4 4 3-4 6 6" />
<circle cx="8" cy="7" r="2" />
</svg>
);
export const TrophyIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M8 21h8M12 17v4M7 4h10v5a5 5 0 0 1-10 0V4Z" />
<path d="M17 5h3v2a3 3 0 0 1-3 3M7 5H4v2a3 3 0 0 0 3 3" />
</svg>
);
export const ChatIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M21 11.5a8.38 8.38 0 0 1-9 8.34 9.5 9.5 0 0 1-3.4-.5L3 21l1.66-4.5A8.38 8.38 0 0 1 4 12a8.5 8.5 0 0 1 9-8.45 8.38 8.38 0 0 1 8 7.95Z" />
<path d="M8.5 12h.01M12 12h.01M15.5 12h.01" />
</svg>
);
export const TagIcon = (p: IconProps) => (
<svg {...base(p)}>
<path d="M3 12V5a2 2 0 0 1 2-2h7l9 9-9 9-9-9Z" />
<circle cx="7.5" cy="7.5" r="1.2" />
</svg>
);
export const UserIcon = (p: IconProps) => (
<svg {...base(p)}>
<circle cx="12" cy="8" r="4" />
<path d="M6 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2" />
</svg>
);
export const MonitorIcon = (p: IconProps) => (
<svg {...base(p)}>
<rect x="2" y="3" width="20" height="14" rx="2" />
<path d="M8 21h8M12 17v4" />
</svg>
);