// Sections.jsx — landing-page sections, themed via CSS vars on the wrapping div. function Nav({ active }) { // On sub-pages, in-page anchors must point back at index.html; // on the landing itself, keep them as bare hashes to avoid full reloads. const onLanding = !active; const root = onLanding ? '' : 'index.html'; return (
S
sourceweaver
How it works Pipelines Self-built Who it’s for CLI Compare
); } function AppShellFrame() { const ref = React.useRef(null); const [height, setHeight] = React.useState(620); React.useEffect(() => { function onMsg(e) { const d = e.data; if (d && d.type === '__sw_app_height' && typeof d.height === 'number') { setHeight(d.height); } } window.addEventListener('message', onMsg); return () => window.removeEventListener('message', onMsg); }, []); // Push the current theme into the iframe as soon as it loads. function onLoad() { try { const theme = document.documentElement.dataset.theme || 'terminal'; ref.current.contentWindow.postMessage({ type: '__sw_set_theme', theme }, '*'); } catch {} } const theme = (typeof document !== 'undefined' && document.documentElement.dataset.theme) || 'terminal'; return (