components/elements/BodyText/BodyText.jsxjavascript
import "./BodyText.scss";

/**
 * Plain paragraph of body-sized text ("bodyText" element type) - an intro or
 * description paragraph below a headline. Distinct from `disclaimer` (small,
 * absolutely bottom-pinned legal print) and from `headline` (display-sized).
 *
 * @param {Object} props
 * @param {string} props.text - Paragraph text. Supports `<mark>...</mark>` highlight spans, but only when `level` is "1".
 * @param {string} [props.level] - Size variant; "1" renders the larger, mark-aware boxed style, anything else the plain `body-text--{level}` paragraph.
 */
export const BodyText = ({ text, level }) => {
  const parts = text.split(/(<mark>.*?<\/mark>)/g);

  return (
    <div className="text-box">
      {level === "1" ? (
        <div className="body-text__box">
          <p className={`body-text--1`}>
            {parts.map((part, index) => {
              if (part.startsWith("<mark>") && part.endsWith("</mark>")) {
                // Entfernt die Tags für die eigentliche Ausgabe
                const cleanText = part.replace(/<\/?mark>/g, "");
                return (
                  <mark key={index} className="text-highlight">
                    {cleanText}
                  </mark>
                );
              }
              return <span key={index}>{part}</span>;
            })}
          </p>
        </div>
      ) : (
        <p className={`body-text body-text--${level}`}>{text}</p>
      )}
    </div>
  );
};