1import { createWorkbench, type WorkbenchTheme } from 'minwebide';
2import { demoCustomEditors } from './customEditors';
3import { demoRunners } from './runners';
4import { openProjectFileSystem, touchProject, type ProjectInfo } from './projects';
6/** Opens the IDE for a project. Returns a disposable view. */
7export async function openIde(container: HTMLElement, project: ProjectInfo, theme: WorkbenchTheme): Promise<{ dispose(): void }> {
8 touchProject(project.id);
9 document.title = `${project.name} — minwebide demo`;
11 const fs = await openProjectFileSystem(project.id);
13 const workbench = createWorkbench(container, {
14 fileSystem: fs,
15 theme,
16 workspaceName: project.name,
17 customEditors: demoCustomEditors,
18 });
19 for (const runner of demoRunners) {
20 workbench.registerRunner(runner);
21 }
23 // the project indicator: click to go back to the project list
24 workbench.statusBar.setItem('project', 'left', project.name, {
25 icon: 'folder-opened',
26 title: 'Back to projects',
27 onClick: () => { location.hash = '#/'; },
28 });
29 // replace the default branding item with the project indicator
30 workbench.statusBar.removeItem('branding');
32 const readme = fs.root.with({ path: '/README.md' });
33 if (await fs.fileService.exists(readme)) {
34 await workbench.openFile(readme);
35 }
37 return {
38 dispose() {
39 workbench.dispose();
40 fs.dispose();
41 },
42 };
43}