From 64ea2a94ee7a6e89384d4080c49848f9c05bc754 Mon Sep 17 00:00:00 2001
From: Kai Salmen <kai.salmen@typefox.io>
Date: Wed, 25 Sep 2024 11:05:56 +0200
Subject: [PATCH] WIP: Add new example Advanced Applicaton Playground

- Allow to pass an url to import to the locale loader
- Integrate views service into new advanced example
- Move all code example files out of src into resources
---
 index.html                                    |   4 +
 package-lock.json                             |   4 +
 packages/examples/advanced.html               |  22 ++
 packages/examples/build/downloadResources.mts |   2 +-
 packages/examples/package.json                |   4 +
 packages/examples/resources/advanced/hello.ts |   8 +
 .../examples/resources/advanced/style.css     |  59 +++++
 .../examples/resources/advanced/tester.ts     |   3 +
 .../examples/resources/advanced/views.html    |  21 ++
 .../langium/langium-dsl}/example.langium      |   0
 .../statemachine}/example-mod.statemachine    |   0
 .../statemachine}/example.statemachine        |   0
 .../python/client => resources/python}/bad.py |   0
 .../client => resources/python}/hello.py      |   0
 .../client => resources/python}/hello2.py     |   0
 packages/examples/src/advanced/launcher.ts    |   8 +
 packages/examples/src/advanced/main.ts        | 237 ++++++++++++++++++
 .../langium-dsl/config/classicConfig.ts       |   5 +-
 .../langium-dsl/config/extendedConfig.ts      |   8 +-
 .../config/wrapperStatemachineConfig.ts       |   2 +-
 .../examples/src/langium/statemachine/main.ts |   4 +-
 packages/examples/src/python/client/config.ts |   3 -
 packages/examples/src/python/client/main.ts   |   4 +-
 .../src/python/client/reactPython.tsx         |   2 +-
 packages/examples/src/ts/wrapperTs.ts         |   1 -
 vite.config.ts                                |   4 +
 26 files changed, 385 insertions(+), 20 deletions(-)
 create mode 100644 packages/examples/advanced.html
 create mode 100644 packages/examples/resources/advanced/hello.ts
 create mode 100644 packages/examples/resources/advanced/style.css
 create mode 100644 packages/examples/resources/advanced/tester.ts
 create mode 100644 packages/examples/resources/advanced/views.html
 rename packages/examples/{src/langium/langium-dsl/content => resources/langium/langium-dsl}/example.langium (100%)
 rename packages/examples/{src/langium/statemachine/content => resources/langium/statemachine}/example-mod.statemachine (100%)
 rename packages/examples/{src/langium/statemachine/content => resources/langium/statemachine}/example.statemachine (100%)
 rename packages/examples/{src/python/client => resources/python}/bad.py (100%)
 rename packages/examples/{src/python/client => resources/python}/hello.py (100%)
 rename packages/examples/{src/python/client => resources/python}/hello2.py (100%)
 create mode 100644 packages/examples/src/advanced/launcher.ts
 create mode 100644 packages/examples/src/advanced/main.ts

diff --git a/index.html b/index.html
index 556cc4b3e..3c5e1e438 100644
--- a/index.html
+++ b/index.html
@@ -59,6 +59,10 @@ <h3>Multiple Languageclients</h3>
         <a href="./packages/examples/two_langauge_clients.html">Json & Python Languageclients & Language Server (Web Socket)</a>
         <br>
 
+        <h3>Advanced Application Playground</h3>
+        <a href="./packages/examples/advanced.html">Advanced Application Playground</a>
+        <br>
+
         <h2>Monaco Editor React</h2>
         <a href="./packages/examples/react_statemachine.html">React: Langium Statemachine Language Client & Language Server (Worker)</a>
         <br>
diff --git a/package-lock.json b/package-lock.json
index 79f5e8d85..e6c5a5a84 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11698,6 +11698,10 @@
         "@codingame/monaco-vscode-theme-service-override": "~10.1.0",
         "@codingame/monaco-vscode-typescript-basics-default-extension": "~10.1.0",
         "@codingame/monaco-vscode-typescript-language-features-default-extension": "~10.1.0",
+        "@codingame/monaco-vscode-view-banner-service-override": "~10.1.0",
+        "@codingame/monaco-vscode-view-status-bar-service-override": "~10.1.0",
+        "@codingame/monaco-vscode-view-title-bar-service-override": "~10.1.0",
+        "@codingame/monaco-vscode-views-service-override": "~10.1.0",
         "@typefox/monaco-editor-react": "~6.0.0-next.4",
         "express": "~4.21.1",
         "langium": "~3.2.0",
diff --git a/packages/examples/advanced.html b/packages/examples/advanced.html
new file mode 100644
index 000000000..7b544ff58
--- /dev/null
+++ b/packages/examples/advanced.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <title>Advanced Application Playground</title>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <!-- <meta http-equiv="Content-Security-Policy" content="connect-src 'self' http://localhost:* https://localhost:* http://127.0.0.1:* https://127.0.0.1:*;" />
+    <meta http-equiv="Content-Security-Policy" content="script-src 'self' http://localhost:* https://localhost:* http://127.0.0.1:* https://127.0.0.1:*;" /> -->
+    <link rel="stylesheet" href="./resources/advanced/style.css">
+</head>
+
+<body>
+    <h2>Advanced Application Playground</h2>
+    <script type="module">
+        import { initLocaleLoader } from 'monaco-editor-wrapper/vscode/locale';
+        const url = new URL('./src/advanced/launcher.ts', import.meta.url);
+        await initLocaleLoader(url.href);
+    </script>
+</body>
+
+</html>
diff --git a/packages/examples/build/downloadResources.mts b/packages/examples/build/downloadResources.mts
index bf39f7cc4..dceb0171b 100644
--- a/packages/examples/build/downloadResources.mts
+++ b/packages/examples/build/downloadResources.mts
@@ -35,5 +35,5 @@ await downloadVsix('https://marketplace.visualstudio.com/_apis/public/gallery/pu
     resolve(getLocalDirectory(), '../resources/vsix/'), 'github-vscode-theme.vsix');
 
 // not yet used
-await downloadVsix('https://marketplace.visualstudio.com/_apis/public/gallery/publishers/TypeFox/vsextensions/open-collaboration-tools/0.2.3/vspackage',
+await downloadVsix('https://marketplace.visualstudio.com/_apis/public/gallery/publishers/TypeFox/vsextensions/open-collaboration-tools/0.2.4/vspackage',
     resolve(getLocalDirectory(), '../resources/vsix/'), 'open-collaboration-tools.vsix');
diff --git a/packages/examples/package.json b/packages/examples/package.json
index 1121fc0f2..acf0448e2 100644
--- a/packages/examples/package.json
+++ b/packages/examples/package.json
@@ -72,6 +72,10 @@
     "@codingame/monaco-vscode-theme-service-override": "~10.1.0",
     "@codingame/monaco-vscode-typescript-basics-default-extension": "~10.1.0",
     "@codingame/monaco-vscode-typescript-language-features-default-extension": "~10.1.0",
+    "@codingame/monaco-vscode-views-service-override": "~10.1.0",
+    "@codingame/monaco-vscode-view-banner-service-override": "~10.1.0",
+    "@codingame/monaco-vscode-view-status-bar-service-override": "~10.1.0",
+    "@codingame/monaco-vscode-view-title-bar-service-override": "~10.1.0",
     "@typefox/monaco-editor-react": "~6.0.0-next.4",
     "express": "~4.21.1",
     "langium": "~3.2.0",
diff --git a/packages/examples/resources/advanced/hello.ts b/packages/examples/resources/advanced/hello.ts
new file mode 100644
index 000000000..6a4f9f6b8
--- /dev/null
+++ b/packages/examples/resources/advanced/hello.ts
@@ -0,0 +1,8 @@
+import { sayFoo } from './tester.js';
+
+function sayHello(): string {
+    console.log(sayFoo());
+    return 'Hello';
+};
+
+sayHello();
diff --git a/packages/examples/resources/advanced/style.css b/packages/examples/resources/advanced/style.css
new file mode 100644
index 000000000..dd0c5f753
--- /dev/null
+++ b/packages/examples/resources/advanced/style.css
@@ -0,0 +1,59 @@
+:root {
+    font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
+    font-size: 16px;
+    line-height: 24px;
+    font-weight: 400;
+
+    font-synthesis: none;
+    text-rendering: optimizeLegibility;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    -webkit-text-size-adjust: 100%;
+  }
+
+  body {
+    background-color: var(--vscode-editorWidget-background);
+    color: var(--vscode-editorWidget-foreground);
+    margin: 0;
+  }
+
+  #editors {
+    position: relative;
+    min-width: 0;
+    height: 45vh;
+    border: 1px solid var(--vscode-editorWidget-border);
+  }
+
+  #panel {
+    display: flex;
+    flex: 1;
+    border: 1px solid var(--vscode-editorWidget-border);
+    min-height: 0;
+  }
+
+  .standalone-editor {
+    width: 100%;
+    height: 55vh;
+  }
+
+  #titleBar {
+    position: relative;
+    flex: none;
+  }
+
+  #banner {
+    flex: none;
+  }
+
+  #workbench-container {
+    height: 90vh;
+    display: flex;
+    flex-direction: column
+  }
+
+  #workbench-top {
+    display: flex;
+    gap: 20px;
+    flex: 2;
+    min-height: 0
+  }
diff --git a/packages/examples/resources/advanced/tester.ts b/packages/examples/resources/advanced/tester.ts
new file mode 100644
index 000000000..d1535caa3
--- /dev/null
+++ b/packages/examples/resources/advanced/tester.ts
@@ -0,0 +1,3 @@
+export const sayFoo = () => {
+    return 'Foo';
+};
diff --git a/packages/examples/resources/advanced/views.html b/packages/examples/resources/advanced/views.html
new file mode 100644
index 000000000..efc5d6ba7
--- /dev/null
+++ b/packages/examples/resources/advanced/views.html
@@ -0,0 +1,21 @@
+<div id="workbench-container">
+    <div id="titleBar"></div>
+    <div id="banner"></div>
+    <div id="workbench-top">
+        <div style="display: flex; flex: none; border: 1px solid var(--vscode-editorWidget-border)">
+            <div id="activityBar"></div>
+            <div id="sidebar" style="width: 400px"></div>
+            <div id="auxiliaryBar-left" style="max-width: 300px"></div>
+        </div>
+        <div style="flex: 1; min-width: 0">
+            <div id="editors"></div>
+        </div>
+        <div style="display: flex; flex: none; border: 1px solid var(--vscode-editorWidget-border);">
+            <div id="sidebar-right" style="max-width: 500px"></div>
+            <div id="activityBar-right"></div>
+            <div id="auxiliaryBar" style="max-width: 300px"></div>
+          </div>
+    </div>
+    <!-- <div id="panel"></div> -->
+    <div id="statusBar"></div>
+</div>
diff --git a/packages/examples/src/langium/langium-dsl/content/example.langium b/packages/examples/resources/langium/langium-dsl/example.langium
similarity index 100%
rename from packages/examples/src/langium/langium-dsl/content/example.langium
rename to packages/examples/resources/langium/langium-dsl/example.langium
diff --git a/packages/examples/src/langium/statemachine/content/example-mod.statemachine b/packages/examples/resources/langium/statemachine/example-mod.statemachine
similarity index 100%
rename from packages/examples/src/langium/statemachine/content/example-mod.statemachine
rename to packages/examples/resources/langium/statemachine/example-mod.statemachine
diff --git a/packages/examples/src/langium/statemachine/content/example.statemachine b/packages/examples/resources/langium/statemachine/example.statemachine
similarity index 100%
rename from packages/examples/src/langium/statemachine/content/example.statemachine
rename to packages/examples/resources/langium/statemachine/example.statemachine
diff --git a/packages/examples/src/python/client/bad.py b/packages/examples/resources/python/bad.py
similarity index 100%
rename from packages/examples/src/python/client/bad.py
rename to packages/examples/resources/python/bad.py
diff --git a/packages/examples/src/python/client/hello.py b/packages/examples/resources/python/hello.py
similarity index 100%
rename from packages/examples/src/python/client/hello.py
rename to packages/examples/resources/python/hello.py
diff --git a/packages/examples/src/python/client/hello2.py b/packages/examples/resources/python/hello2.py
similarity index 100%
rename from packages/examples/src/python/client/hello2.py
rename to packages/examples/resources/python/hello2.py
diff --git a/packages/examples/src/advanced/launcher.ts b/packages/examples/src/advanced/launcher.ts
new file mode 100644
index 000000000..1e2ef4f75
--- /dev/null
+++ b/packages/examples/src/advanced/launcher.ts
@@ -0,0 +1,8 @@
+/* --------------------------------------------------------------------------------------------
+ * Copyright (c) 2024 TypeFox and others.
+ * Licensed under the MIT License. See LICENSE in the package root for license information.
+ * ------------------------------------------------------------------------------------------ */
+
+import { runAdvancedApplicationPlayground } from './main.js';
+
+runAdvancedApplicationPlayground();
diff --git a/packages/examples/src/advanced/main.ts b/packages/examples/src/advanced/main.ts
new file mode 100644
index 000000000..7c77b317d
--- /dev/null
+++ b/packages/examples/src/advanced/main.ts
@@ -0,0 +1,237 @@
+/* --------------------------------------------------------------------------------------------
+ * Copyright (c) 2024 TypeFox and others.
+ * Licensed under the MIT License. See LICENSE in the package root for license information.
+ * ------------------------------------------------------------------------------------------ */
+
+import * as vscode from 'vscode';
+import { ITextFileEditorModel } from 'vscode/monaco';
+import { getService, IWorkbenchLayoutService, LogLevel } from 'vscode/services';
+import getConfigurationServiceOverride from '@codingame/monaco-vscode-configuration-service-override';
+import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
+import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-service-override';
+import getLocalizationServiceOverride from '@codingame/monaco-vscode-localization-service-override';
+import { IReference, OpenEditor, Parts, onPartVisibilityChange, isPartVisibile, attachPart, getSideBarPosition, onDidChangeSideBarPosition, Position } from '@codingame/monaco-vscode-views-service-override';
+import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
+import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
+import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
+import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
+import { RegisteredFileSystemProvider, registerFileSystemOverlay, RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
+// this is required syntax highlighting
+import '@codingame/monaco-vscode-typescript-basics-default-extension';
+import '@codingame/monaco-vscode-typescript-language-features-default-extension';
+
+import '../../resources/vsix/open-collaboration-tools.vsix';
+
+import { EditorAppExtended, MonacoEditorLanguageClientWrapper, RegisterLocalProcessExtensionResult, WrapperConfig } from 'monaco-editor-wrapper';
+import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
+import { configureMonacoWorkers } from '../common/client/utils.js';
+import helloTsCode from '../../resources/advanced/hello.ts?raw';
+import testerTsCode from '../../resources/advanced/tester.ts?raw';
+import viewsHtml from '../../resources/advanced/views.html?raw';
+
+const wrapper = new MonacoEditorLanguageClientWrapper();
+const openNewEditor: OpenEditor = async (modelRef) => {
+    console.log('open editor');
+    const container = document.createElement('div');
+    container.style.position = 'fixed';
+    container.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
+    container.style.top = container.style.bottom = container.style.left = container.style.right = '0';
+    container.style.cursor = 'pointer';
+
+    const editorElem = document.createElement('div');
+    editorElem.style.position = 'absolute';
+    editorElem.style.top = editorElem.style.bottom = editorElem.style.left = editorElem.style.right = '0';
+    editorElem.style.margin = 'auto';
+    editorElem.style.width = '80%';
+    editorElem.style.height = '80%';
+
+    container.appendChild(editorElem);
+    try {
+
+        wrapper.updateEditorModels({
+            modelRef: modelRef as IReference<ITextFileEditorModel>
+        });
+
+        wrapper.getEditor()?.onDidBlurEditorWidget(() => {
+            wrapper.dispose();
+        });
+        container.addEventListener('mousedown', (event) => {
+            if (event.target !== container) return;
+            wrapper.dispose();
+        });
+
+        return wrapper.getEditor();
+    } catch (error) {
+        document.body.removeChild(container);
+        wrapper.dispose();
+        throw error;
+    }
+};
+
+const initViews = () => {
+    for (const config of [
+        { part: Parts.TITLEBAR_PART, element: '#titleBar' },
+        { part: Parts.BANNER_PART, element: '#banner' },
+        {
+            part: Parts.SIDEBAR_PART, get element() {
+                return getSideBarPosition() === Position.LEFT ? '#sidebar' : '#sidebar-right';
+            }, onDidElementChange: onDidChangeSideBarPosition
+        },
+        {
+            part: Parts.ACTIVITYBAR_PART, get element() {
+                return getSideBarPosition() === Position.LEFT ? '#activityBar' : '#activityBar-right';
+            }, onDidElementChange: onDidChangeSideBarPosition
+        },
+        {
+            part: Parts.AUXILIARYBAR_PART, get element() {
+                return getSideBarPosition() === Position.LEFT ? '#auxiliaryBar' : '#auxiliaryBar-left';
+            }, onDidElementChange: onDidChangeSideBarPosition
+        },
+        { part: Parts.EDITOR_PART, element: '#editors' },
+        // { part: Parts.PANEL_PART, element: '#panel' },
+        { part: Parts.STATUSBAR_PART, element: '#statusBar' }
+    ]) {
+        attachPart(config.part, document.querySelector<HTMLDivElement>(config.element)!);
+
+        config.onDidElementChange?.(() => {
+            attachPart(config.part, document.querySelector<HTMLDivElement>(config.element)!);
+        });
+
+        if (!isPartVisibile(config.part)) {
+            document.querySelector<HTMLDivElement>(config.element)!.style.display = 'none';
+        }
+
+        onPartVisibilityChange(config.part, visible => {
+            document.querySelector<HTMLDivElement>(config.element)!.style.display = visible ? 'block' : 'none';
+        });
+    }
+};
+
+export const runAdvancedApplicationPlayground = async () => {
+    const helloTsUri = vscode.Uri.file('/workspace/hello.ts');
+    const testerTsUri = vscode.Uri.file('/workspace/tester.ts');
+    const htmlContainer = document.createElement('div', { is: 'app' });
+
+    const wrapperConfig: WrapperConfig = {
+        id: 'AAP',
+        logLevel: LogLevel.Debug,
+        vscodeApiConfig: {
+            userServices: {
+                ...getConfigurationServiceOverride(),
+                ...getKeybindingsServiceOverride(),
+                ...getLifecycleServiceOverride(),
+                ...getLocalizationServiceOverride(createDefaultLocaleConfiguration()),
+                ...getBannerServiceOverride(),
+                ...getStatusBarServiceOverride(),
+                ...getTitleBarServiceOverride(),
+                ...getExplorerServiceOverride()
+            },
+            enableExtHostWorker: true,
+            viewsConfig: {
+                viewServiceType: 'ViewsService',
+                openEditorFunc: openNewEditor,
+                viewsInitFunc: initViews
+            },
+            workspaceConfig: {
+                enableWorkspaceTrust: true,
+                windowIndicator: {
+                    label: 'mlc-advanced-example',
+                    tooltip: '',
+                    command: ''
+                },
+                workspaceProvider: {
+                    trusted: true,
+                    async open() {
+                        window.open(window.location.href);
+                        return true;
+                    },
+                    workspace: {
+                        workspaceUri: vscode.Uri.file('/workspace.code-workspace')
+                    }
+                },
+                configurationDefaults: {
+                    'window.title': 'mlc-advanced-example${separator}${dirty}${activeEditorShort}'
+                },
+                defaultLayout: {
+                    editors: [{
+                        uri: helloTsUri,
+                        viewColumn: 1
+                    }, {
+                        uri: testerTsUri,
+                        viewColumn: 2
+                    }],
+                    layout: {
+                        editors: {
+                            orientation: 0,
+                            groups: [{ size: 1 }, { size: 1 }]
+                        }
+                    }
+                },
+                productConfiguration: {
+                    nameShort: 'mlc-advanced-example',
+                    nameLong: 'mlc-advanced-example',
+                    extensionsGallery: {
+                        serviceUrl: 'https://open-vsx.org/vscode/gallery',
+                        itemUrl: 'https://open-vsx.org/vscode/item',
+                        resourceUrlTemplate: 'https://open-vsx.org/vscode/unpkg/{publisher}/{name}/{version}/{path}',
+                        controlUrl: '',
+                        nlsBaseUrl: '',
+                        publisherUrl: ''
+                    }
+                }
+            },
+            userConfiguration: {
+                json: JSON.stringify({
+                    'workbench.colorTheme': 'Default Dark Modern',
+                    'editor.wordBasedSuggestions': 'off',
+                    'typescript.tsserver.web.projectWideIntellisense.enabled': true,
+                    'typescript.tsserver.web.projectWideIntellisense.suppressSemanticErrors': false,
+                    'editor.guides.bracketPairsHorizontal': true,
+                    'oct.serverUrl': 'https://api.open-collab.tools/',
+                    'editor.experimental.asyncTokenization': false
+                })
+            },
+        },
+        editorAppConfig: {
+            $type: 'extended',
+            extensions: [{
+                config: {
+                    name: 'mlc-advanced-example',
+                    publisher: 'TypeFox',
+                    version: '1.0.0',
+                    engines: {
+                        vscode: '*'
+                    }
+                }
+            }],
+            codeResources: {
+                main: {
+                    text: helloTsCode,
+                    uri: '/workspace/hello.ts'
+                }
+            },
+            monacoWorkerFactory: configureMonacoWorkers,
+            htmlContainer
+        }
+    };
+
+    htmlContainer.innerHTML = viewsHtml;
+    document.body.append(htmlContainer);
+
+    await wrapper.init(wrapperConfig);
+    const result = (wrapper.getMonacoEditorApp() as EditorAppExtended).getExtensionRegisterResult('mlc-advanced-example') as RegisterLocalProcessExtensionResult;
+    result.setAsDefaultApi();
+    const vscodeApi = await result.getApi();
+
+    await getService(IWorkbenchLayoutService);
+
+    const fileSystemProvider = new RegisteredFileSystemProvider(false);
+    fileSystemProvider.registerFile(new RegisteredMemoryFile(helloTsUri, helloTsCode));
+    fileSystemProvider.registerFile(new RegisteredMemoryFile(testerTsUri, testerTsCode));
+
+    registerFileSystemOverlay(1, fileSystemProvider);
+
+    await vscodeApi.workspace.openTextDocument(helloTsUri);
+    await vscodeApi.workspace.openTextDocument(testerTsUri);
+
+};
diff --git a/packages/examples/src/langium/langium-dsl/config/classicConfig.ts b/packages/examples/src/langium/langium-dsl/config/classicConfig.ts
index 54ef2d407..88e5414b6 100644
--- a/packages/examples/src/langium/langium-dsl/config/classicConfig.ts
+++ b/packages/examples/src/langium/langium-dsl/config/classicConfig.ts
@@ -4,16 +4,14 @@
  * ------------------------------------------------------------------------------------------ */
 
 import getConfigurationServiceOverride from '@codingame/monaco-vscode-configuration-service-override';
-import getEditorServiceOverride from '@codingame/monaco-vscode-editor-service-override';
 import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
-import { useOpenEditorStub } from 'monaco-editor-wrapper/vscode/services';
 import { LogLevel } from 'vscode/services';
 import { Logger } from 'monaco-languageclient/tools';
 import { WrapperConfig } from 'monaco-editor-wrapper';
 import { LangiumMonarchContent } from './langium.monarch.js';
 import { loadLangiumWorker } from '../wrapperLangium.js';
-import code from '../content/example.langium?raw';
 import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
+import code from '../../../../resources/langium/langium-dsl/example.langium?raw';
 
 export const setupLangiumClientClassic = async (): Promise<WrapperConfig> => {
     const langiumWorker = loadLangiumWorker();
@@ -22,7 +20,6 @@ export const setupLangiumClientClassic = async (): Promise<WrapperConfig> => {
         vscodeApiConfig: {
             userServices: {
                 ...getConfigurationServiceOverride(),
-                ...getEditorServiceOverride(useOpenEditorStub),
                 ...getKeybindingsServiceOverride()
             }
         },
diff --git a/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts b/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts
index 1f3ace3c3..da237ff5f 100644
--- a/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts
+++ b/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts
@@ -3,10 +3,9 @@
  * Licensed under the MIT License. See LICENSE in the package root for license information.
  * ------------------------------------------------------------------------------------------ */
 
-import getEditorServiceOverride from '@codingame/monaco-vscode-editor-service-override';
 import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
 import '../../../../resources/vsix/github-vscode-theme.vsix';
-import { useOpenEditorStub } from 'monaco-editor-wrapper/vscode/services';
+
 import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
 import { LogLevel } from 'vscode/services';
 import { WrapperConfig } from 'monaco-editor-wrapper';
@@ -14,7 +13,7 @@ import { loadLangiumWorker } from '../wrapperLangium.js';
 import { configureMonacoWorkers } from '../../../common/client/utils.js';
 import langiumLanguageConfig from './langium.configuration.json?raw';
 import langiumTextmateGrammar from './langium.tmLanguage.json?raw';
-import text from '../content/example.langium?raw';
+import text from '../../../../resources/langium/langium-dsl//example.langium?raw';
 
 export const setupLangiumClientExtended = async (): Promise<WrapperConfig> => {
 
@@ -31,7 +30,6 @@ export const setupLangiumClientExtended = async (): Promise<WrapperConfig> => {
         logLevel: LogLevel.Debug,
         vscodeApiConfig: {
             userServices: {
-                ...getEditorServiceOverride(useOpenEditorStub),
                 ...getKeybindingsServiceOverride()
             },
             userConfiguration: {
@@ -55,7 +53,7 @@ export const setupLangiumClientExtended = async (): Promise<WrapperConfig> => {
             extensions: [{
                 config: {
                     name: 'langium-example',
-                    publisher: 'monaco-editor-wrapper-examples',
+                    publisher: 'TypeFox',
                     version: '1.0.0',
                     engines: {
                         vscode: '*'
diff --git a/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts b/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts
index 85980c9fc..2c60278d3 100644
--- a/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts
+++ b/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts
@@ -76,7 +76,7 @@ export const createLangiumGlobalConfig = async (params: {
             extensions: [{
                 config: {
                     name: 'statemachine-example',
-                    publisher: 'monaco-editor-wrapper-examples',
+                    publisher: 'TypeFox',
                     version: '1.0.0',
                     engines: {
                         vscode: '*'
diff --git a/packages/examples/src/langium/statemachine/main.ts b/packages/examples/src/langium/statemachine/main.ts
index 0c6e07024..6a35935ef 100644
--- a/packages/examples/src/langium/statemachine/main.ts
+++ b/packages/examples/src/langium/statemachine/main.ts
@@ -10,8 +10,8 @@ import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclien
 import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
 import workerUrl from './worker/statemachine-server?worker&url';
 import workerPortUrl from './worker/statemachine-server-port?worker&url';
-import text from './content/example.statemachine?raw';
-import textMod from './content/example-mod.statemachine?raw';
+import text from '../../../resources/langium/statemachine/example.statemachine?raw';
+import textMod from '../../../resources/langium/statemachine/example-mod.statemachine?raw';
 
 const wrapper = new MonacoEditorLanguageClientWrapper();
 const wrapper2 = new MonacoEditorLanguageClientWrapper();
diff --git a/packages/examples/src/python/client/config.ts b/packages/examples/src/python/client/config.ts
index 300ff323e..1e5c4b918 100644
--- a/packages/examples/src/python/client/config.ts
+++ b/packages/examples/src/python/client/config.ts
@@ -4,12 +4,10 @@
  * ------------------------------------------------------------------------------------------ */
 
 import * as vscode from 'vscode';
-import getEditorServiceOverride from '@codingame/monaco-vscode-editor-service-override';
 import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
 import '@codingame/monaco-vscode-python-default-extension';
 import { LogLevel } from 'vscode/services';
 import { createUrl, WrapperConfig } from 'monaco-editor-wrapper';
-import { useOpenEditorStub } from 'monaco-editor-wrapper/vscode/services';
 import { MonacoLanguageClient } from 'monaco-languageclient';
 import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
 import { configureMonacoWorkers } from '../../common/client/utils.js';
@@ -66,7 +64,6 @@ export const createUserConfig = (workspaceRoot: string, code: string, codeUri: s
         logLevel: LogLevel.Debug,
         vscodeApiConfig: {
             userServices: {
-                ...getEditorServiceOverride(useOpenEditorStub),
                 ...getKeybindingsServiceOverride()
             },
             userConfiguration: {
diff --git a/packages/examples/src/python/client/main.ts b/packages/examples/src/python/client/main.ts
index b63897b71..3b6c6c6d7 100644
--- a/packages/examples/src/python/client/main.ts
+++ b/packages/examples/src/python/client/main.ts
@@ -9,8 +9,8 @@ import '@codingame/monaco-vscode-python-default-extension';
 import { RegisteredFileSystemProvider, registerFileSystemOverlay, RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
 import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
 import { createUserConfig } from './config.js';
-import helloPyCode from './hello.py?raw';
-import hello2PyCode from './hello2.py?raw';
+import helloPyCode from '../../../resources/python/hello.py?raw';
+import hello2PyCode from '../../../resources/python/hello2.py?raw';
 
 export const runPythonWrapper = async () => {
     const helloPyUri = vscode.Uri.file('/workspace/hello.py');
diff --git a/packages/examples/src/python/client/reactPython.tsx b/packages/examples/src/python/client/reactPython.tsx
index a43b6258d..77c961653 100644
--- a/packages/examples/src/python/client/reactPython.tsx
+++ b/packages/examples/src/python/client/reactPython.tsx
@@ -10,7 +10,7 @@ import ReactDOM from 'react-dom/client';
 import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
 import { MonacoEditorLanguageClientWrapper, TextChanges } from 'monaco-editor-wrapper';
 import { createUserConfig } from './config.js';
-import badPyCode from './bad.py?raw';
+import badPyCode from '../../../resources/python/bad.py?raw';
 
 export const runPythonReact = async () => {
     const badPyUri = vscode.Uri.file('/workspace/bad.py');
diff --git a/packages/examples/src/ts/wrapperTs.ts b/packages/examples/src/ts/wrapperTs.ts
index 79d2c3161..1e8cdca56 100644
--- a/packages/examples/src/ts/wrapperTs.ts
+++ b/packages/examples/src/ts/wrapperTs.ts
@@ -5,7 +5,6 @@
 
 import * as vscode from 'vscode';
 import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
-import '@codingame/monaco-vscode-theme-defaults-default-extension';
 import '@codingame/monaco-vscode-typescript-basics-default-extension';
 import '@codingame/monaco-vscode-typescript-language-features-default-extension';
 import { LogLevel } from 'vscode/services';
diff --git a/vite.config.ts b/vite.config.ts
index 126cef79b..63922c309 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -15,6 +15,10 @@ export const definedViteConfig = defineConfig({
         rollupOptions: {
             input: {
                 index: path.resolve(__dirname, 'index.html'),
+
+                // advanced application playground
+                advanced: path.resolve(__dirname, 'packages/examples/advanced.html'),
+
                 // bare monaco-languageclient
                 bare: path.resolve(__dirname, 'packages/examples/bare.html'),