import React, {useEffect, useId, useRef, useState} from 'react'; import useBaseUrl from '@docusaurus/useBaseUrl'; export default function ArchifyDiagram({name, title, compact = false}: {name: string; title: string; compact?: boolean}): React.ReactElement { if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name)) throw new Error('Invalid diagram name'); const source = useBaseUrl(`/diagrams/${name}/`); const dialog = useRef(null); const opener = useRef(null); const headingId = useId(); const [expanded, setExpanded] = useState(false); useEffect(() => { if (!expanded) return; dialog.current?.showModal(); const previousOverflow = document.body.style.overflow; document.body.style.overflow = 'hidden'; return () => {document.body.style.overflow = previousOverflow;}; }, [expanded]); const close = () => {dialog.current?.close();}; return