export function recolorSvg(svg: string, color: string): string { if (color === "none") return svg let out = svg out = out.replace(/\bstroke=["'](?!none)([^"']+)["']/g, `stroke="${color}"`) out = out.replace(/\bfill=["'](?!none)([^"']+)["']/g, (match, _val) => { if (match.includes(`fill="none"`)) return match return `fill="${color}"` }) return out } export function stripSvgWrapper(svg: string): string { const m = svg.match(/]*>([\s\S]*)<\/svg>/) return m ? m[1].trim() : svg } export function extractRootAttrs(svg: string): { stroke?: string; fill?: string; strokeWidth?: string } { const attrs: { stroke?: string; fill?: string; strokeWidth?: string } = {} const strokeMatch = svg.match(/]*\bstroke=["']([^"']+)["']/) if (strokeMatch) attrs.stroke = strokeMatch[1] const fillMatch = svg.match(/]*\bfill=["']([^"']+)["']/) if (fillMatch) attrs.fill = fillMatch[1] const swMatch = svg.match(/]*\bstroke-width=["']([^"']+)["']/) if (swMatch) attrs.strokeWidth = swMatch[1] return attrs }