File size: 1,747 Bytes
a8898de 560169d a8647ab a8898de 560169d a8647ab a8898de | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <script lang="ts">
import type { Component } from 'svelte';
import {
Tent,
Trees,
Image,
AudioLines,
MessageSquare,
Code,
Server,
Compass,
Footprints,
Mountain,
Flag,
CirclePlay,
ArrowLeftRight,
Star,
Check,
ArrowRight,
MapPin,
Link,
FileText,
BookOpen,
Mail,
Zap,
Box,
LayoutGrid,
Clock,
Globe,
Smile,
X,
GitBranch,
Plus,
Menu,
Unplug,
Target,
Palette,
Cpu,
Share2,
NotebookPen,
TriangleAlert
} from '@lucide/svelte';
interface Props {
name: string;
size?: number;
stroke?: string;
sw?: number;
class?: string;
rotate?: number;
}
let { name, size = 24, stroke = 'currentColor', sw = 1.6, class: cls = '', rotate }: Props = $props();
const MAP: Record<string, Component> = {
shed: Tent,
trees: Trees,
image: Image,
wave: AudioLines,
chat: MessageSquare,
code: Code,
server: Server,
compass: Compass,
boot: Footprints,
mountain: Mountain,
flag: Flag,
play: CirclePlay,
swap: ArrowLeftRight,
star: Star,
check: Check,
arrow: ArrowRight,
pin: MapPin,
link: Link,
doc: FileText,
book: BookOpen,
mail: Mail,
bolt: Zap,
cube: Box,
grid: LayoutGrid,
clock: Clock,
plus: Plus,
menu: Menu,
close: X,
unplug: Unplug,
target: Target,
palette: Palette,
cpu: Cpu,
share: Share2,
notebook: NotebookPen,
alert: TriangleAlert,
// social / external — neutral generic marks (no brand logos)
globe: Globe,
hug: Smile,
xsocial: X,
github: GitBranch
};
const Cmp = $derived(MAP[name] ?? Star);
const style = $derived(rotate !== undefined ? `transform: rotate(${rotate}deg)` : undefined);
</script>
<Cmp {size} color={stroke} strokeWidth={sw} class={cls} {style} aria-hidden="true" />
|