--- import type { LogoType } from '@webtypes/Config'; import type { HTMLAttributes } from 'astro/types'; export interface Props extends HTMLAttributes<'svg'> { logo: LogoType size?: number | [number, number] silent?: boolean } const { logo, size = undefined, ...attr } = Astro.props; let svg: string | undefined; try { if (logo === undefined) return; const dir = '../../../public/media'; svg = (await import(/* @vite-ignore */ `${dir}/${logo.replaceAll('.', '/')}.svg?raw`)).default; if (svg === undefined) return; if (typeof size == 'number' || Array.isArray(size)) { // SVG main element regex const svgElementRegex = /]*>/; svg = svg.replace(svgElementRegex, (match) => { let newMatch = match; if (typeof size == 'number') { newMatch = newMatch.replace(/width="[^"]*"/, `width="${size}"`); newMatch = newMatch.replace(/height="[^"]*"/, `height="${size}"`); } else if (Array.isArray(size)) { newMatch = newMatch.replace(/width="[^"]*"/, `width="${size[0]}"`); newMatch = newMatch.replace(/height="[^"]*"/, `height="${size[1]}"`); } return newMatch; }); } svg = svg.replace(/ `${key}="${value}"`).join(' ')}`); } catch (err) { console.error(`Error occurred while loading SVG. Logo name is ${logo}.`); console.error(err); } ---