theluyuan 38ba663466
Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
init
2025-09-02 14:49:16 +08:00

27 lines
719 B
TypeScript

import React, { useMemo } from 'react';
/**
* SVG rendering component.
*
* @returns {JSX.Element}
*/
const SvgXmlIcon = ({ src, ...rest }: {
src: string;
}): JSX.Element => {
const svgDocument = new DOMParser().parseFromString(src, 'image/svg+xml');
const element = svgDocument.documentElement.outerHTML;
const attributes = useMemo(() => Object.entries(rest).map(
([ key, value ]) => `${key}="${value}"`)
.join(' '), [ rest ]);
const html = element.replace('<svg', `<svg ${attributes}`);
return (
<div // eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML = {{ __html: html }}
{ ...rest } />
);
};
export default SvgXmlIcon;