UNPKG

@astro-tei/react

Version:

Astro integration for TEI as Custom Elements with React support

41 lines 1.54 kB
import React from "react"; function hideContent(root, rewriteIds = true) { const elements = root.querySelectorAll("*"); elements.forEach((element) => { element.setAttribute("data-processed", ""); if (rewriteIds && element.id) { element.setAttribute("data-origid", element.id); element.removeAttribute("id"); } }); return root; } export const forwardAttributes = (atts) => { return Array.from(atts).reduce((acc, att) => { acc[att.name === "ref" ? "Ref" : att.name] = att.value; return acc; }, {}); }; export default function Behavior({ children, node, className, keepOriginal = true, rewriteIds = true }) { const el = node; if (!el.tagName) { throw new Error("Behavior component must be passed an Element node."); } let hiddenOriginal = null; if (keepOriginal) { const hiddenContent = hideContent(el, rewriteIds).outerHTML .replace(/<([^\s/]+)([^>]*?)\/>/gm, "<$1$2></$1>"); // expand self closing elements hiddenOriginal = React.createElement("cetei-original", { "hidden": "", "data-original": "", dangerouslySetInnerHTML: { __html: hiddenContent } }); } const classAtt = {}; if (className) { classAtt.className = className; } const attributes = Object.assign(classAtt, forwardAttributes(el.attributes)); return React.createElement(el.tagName, attributes, hiddenOriginal, children); } //# sourceMappingURL=Behavior.js.map