import { jsx } from "react/jsx-runtime";
import * as React from "react";
import source_default from "../../_vendor/react-jsx-parser/dist-react-jsx-parser.min.js";
function matchJsxTag(code) {
  if (code.trim() === "") {
    return null;
  }
  const tagRegex = /<\/?([a-zA-Z][a-zA-Z0-9]*)\s*([^>]*?)(\/)?>/;
  const match = code.match(tagRegex);
  if (!match || typeof match.index === "undefined") {
    return null;
  }
  const [fullMatch, tagName, attributes, selfClosing] = match;
  const type = selfClosing ? "self-closing" : fullMatch.startsWith("</") ? "closing" : "opening";
  return {
    tag: fullMatch,
    tagName,
    type,
    attributes: attributes.trim(),
    startIndex: match.index,
    endIndex: match.index + fullMatch.length
  };
}
function completeJsxTag(code) {
  const stack = [];
  let result = "";
  let currentPosition = 0;
  while (currentPosition < code.length) {
    const match = matchJsxTag(code.slice(currentPosition));
    if (!match) break;
    const { tagName, type, endIndex } = match;
    if (type === "opening") {
      stack.push(tagName);
    } else if (type === "closing") {
      stack.pop();
    }
    result += code.slice(currentPosition, currentPosition + endIndex);
    currentPosition += endIndex;
  }
  return result + stack.reverse().map((tag) => `</${tag}>`).join("");
}
function JSXPreview({ jsx: jsx2, isStreaming = false, ...props }) {
  const processedJsx = React.useMemo(
    () => isStreaming ? completeJsxTag(jsx2) : jsx2,
    [jsx2, isStreaming]
  );
  const Parser = source_default;
  return /* @__PURE__ */ jsx(
    Parser,
    {
      jsx: processedJsx,
      ...props
    }
  );
}
export {
  JSXPreview
};
//# sourceMappingURL=jsx-preview.js.map
