40 lines
825 B
Plaintext
40 lines
825 B
Plaintext
---
|
|
import { Icons } from './icons.ts';
|
|
|
|
interface Path {
|
|
d: string;
|
|
class?: string;
|
|
}
|
|
|
|
const { name } = Astro.props;
|
|
|
|
const icon = (Icons as any)[name] || {};
|
|
const paths: Path[] = icon.paths || [];
|
|
---
|
|
|
|
{
|
|
icon ? (
|
|
<svg
|
|
class={icon.class}
|
|
height={icon.height}
|
|
viewBox={icon.viewBox}
|
|
width={icon.width}
|
|
fill={icon.fill}
|
|
clip-rule={icon.clipRule}
|
|
fill-rule={icon.fillRule}
|
|
stroke={icon.stroke}
|
|
stroke-width={icon.strokeWidth}
|
|
stroke-linecap={icon.strokeLinecap}
|
|
stroke-linejoin={icon.strokeLinejoin}
|
|
>
|
|
<title>{icon.title}</title>
|
|
<circle cx={icon.circleCx} cy={icon.circleCy} r={icon.circleR} />
|
|
{paths.map((path) => (
|
|
<path d={path.d} class={path.class || ''} />
|
|
))}
|
|
</svg>
|
|
) : (
|
|
'Icon not found'
|
|
)
|
|
}
|