// Next.js 15 IDE embed — App Router pattern. // // The IDE requires the browser so the component must be a Client Component. // All heavy imports are wrapped in a dynamic() boundary with ssr:false so // Next.js does not try to render them on the server. // // File layout: // app/ide/page.tsx — server component, sets metadata // components/IdePanel.tsx ← this file (client component) 'use client'; import dynamic from 'next/dynamic'; // The `Ide` component renders only in the browser: it uses canvas, Web // Workers, and SharedArrayBuffer. `ssr: false` prevents a hydration mismatch. const Ide = dynamic(() => import('@gameguild/emception-ide').then((m) => m.Ide), { ssr: false, loading: () =>
Loading IDE…
, }); const STARTER_SOURCE = `#include