diff --git a/client/package.json b/client/package.json
index 3bd4bc8b..b5e6952e 100644
--- a/client/package.json
+++ b/client/package.json
@@ -26,7 +26,10 @@
"react-split": "^2.0.14",
"react": "^19.2.0",
"tailwindcss": "^4.1.18",
- "vscode-ws-jsonrpc": "^3.5.0"
+ "vscode-ws-jsonrpc": "^3.5.0",
+ "y-monaco": "^0.1.6",
+ "y-webrtc": "^10.3.0",
+ "yjs": "^13.6.30"
},
"devDependencies": {
"@codingame/esbuild-import-meta-url-plugin": "^1.0.3",
diff --git a/client/src/App.tsx b/client/src/App.tsx
index 153fb034..987a24bd 100644
--- a/client/src/App.tsx
+++ b/client/src/App.tsx
@@ -1,4 +1,5 @@
import './css/App.css'
+import './css/Collab.css'
import './css/Editor.css'
import { faCode } from '@fortawesome/free-solid-svg-icons'
@@ -8,14 +9,26 @@ import { useAtom } from 'jotai/react'
import { LeanMonaco, LeanMonacoEditor, LeanMonacoOptions } from 'lean4monaco'
import * as monaco from 'monaco-editor'
import * as path from 'path'
-import { useCallback, useEffect, useRef, useState } from 'react'
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import Split from 'react-split'
+import { MonacoBinding } from 'y-monaco'
+import { WebrtcProvider } from 'y-webrtc'
+import * as Y from 'yjs'
import LeanLogo from './assets/logo.svg'
import { codeAtom } from './editor/code-atoms'
+import { NavButton } from './navigation/NavButton'
import { Menu } from './navigation/Navigation'
+import RotatingGlobe from './navigation/RotatingGlobe'
+import LeaveCollaborationPopup from './Popups/LeaveCollaboration'
import { mobileAtom, settingsAtom } from './settings/settings-atoms'
import { lightThemes } from './settings/settings-types'
+import {
+ collabDisplayNameAtom,
+ collabPasswordAtom,
+ collabRoomAtom,
+ isCollaboratingAtom,
+} from './store/collaboration-atoms'
import { importedCodeAtom } from './store/import-atoms'
import { currentProjectAtom } from './store/project-atoms'
import { screenWidthAtom } from './store/window-atoms'
@@ -37,8 +50,18 @@ function App() {
const [, setScreenWidth] = useAtom(screenWidthAtom)
const [project] = useAtom(currentProjectAtom)
const [code, setCode] = useAtom(codeAtom)
+ const ydoc = useMemo(() => new Y.Doc(), [])
+ const [provider, setProvider] = useStateStart or join collaboration
+
+ {`Leave collaboration '${collabRoom}'?`}
+
+
{error}
: null} + {error &&{error}
}