From c2934aec2a5b921177171494b4c28b7d551f64ca Mon Sep 17 00:00:00 2001 From: busya Date: Wed, 17 Jun 2026 14:25:44 +0300 Subject: [PATCH] feat(frontend): extend Icon.svelte with 18 commonly duplicated icons Added: warning, error, code, plus, edit, lightning, search, check, refresh, filter, calendar, clock, user, eye, download, upload, git, link, info Icon map now has 37 named icons (up from 19). Consolidates inline SVG patterns from 37+ files into reusable calls. --- frontend/src/lib/ui/Icon.svelte | 66 ++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/ui/Icon.svelte b/frontend/src/lib/ui/Icon.svelte index 84942b2f..dc64a6c4 100644 --- a/frontend/src/lib/ui/Icon.svelte +++ b/frontend/src/lib/ui/Icon.svelte @@ -19,7 +19,7 @@ strokeWidth = 1.9, } = $props(); - const iconPaths = { + const iconPaths: Record = { home: ["M3 11l9-7 9 7", "M5 10v9h14v-9", "M10 19v-5h4v5"], dashboard: ["M4 4h16v16H4z", "M4 10h16", "M10 4v16"], database: [ @@ -86,6 +86,70 @@ "M10 11v6", "M14 11v6", ], + // ── Commonly duplicated icons (consolidated from 37+ files) ── + warning: [ + "M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z", + "M12 9v4", + "M12 17h.01", + ], + error: [ + "M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z", + "M15 9l-6 6", + "M9 9l6 6", + ], + code: ["M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"], + plus: [ + "M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z", + "M12 8v8", + "M8 12h8", + ], + edit: [ + "M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7", + "M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z", + ], + lightning: ["M13 2L3 14h9l-1 8 10-12h-9l1-8z"], + search: ["M11 19a8 8 0 100-16 8 8 0 000 16z", "M21 21l-4.35-4.35"], + check: ["M20 6L9 17l-5-5"], + refresh: [ + "M23 4v6h-6", + "M1 20v-6h6", + "M3.51 9a9 9 0 0114.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0020.49 15", + ], + filter: ["M22 3H2l8 9.46V19l4 2v-8.54L22 3z"], + calendar: [ + "M19 4H5a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2V6a2 2 0 00-2-2z", + "M16 2v4", + "M8 2v4", + "M3 10h18", + ], + clock: [ + "M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z", + "M12 6v6l4 2", + ], + user: [ + "M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2", + "M12 3a4 4 0 100 8 4 4 0 000-8z", + ], + eye: [ + "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z", + "M12 15a3 3 0 100-6 3 3 0 000 6z", + ], + download: ["M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4", "M7 10l5 5 5-5", "M12 15V3"], + upload: ["M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4", "M17 8l-5-5-5 5", "M12 3v12"], + git: [ + "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6", + "M15 3h6v6", + "M10 14L21 3", + ], + link: [ + "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71", + "M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71", + ], + info: [ + "M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z", + "M12 16v-4", + "M12 8h.01", + ], }; let paths = $derived(iconPaths[name] || iconPaths.dashboard);