From 5a447341c3563a699012ce1b0b12cf90ab64b227 Mon Sep 17 00:00:00 2001 From: Antonio De Lucreziis Date: Wed, 18 Sep 2024 01:59:03 +0200 Subject: [PATCH] added mock ide ui --- bun.lockb | Bin 221940 -> 0 bytes package-lock.json | 355 +++++++++++++++++++++ package.json | 7 + src/client/components/Editor.jsx | 3 + src/client/components/TreeView.jsx | 69 ++++ src/client/fonts.css | 47 +++ src/client/style.css | 490 +++++++++++++++++++++++++++++ src/components/Ide.astro | 116 +++++++ src/layouts/Base.astro | 25 ++ src/pages/@[ns]/[...path].astro | 11 + src/pages/index.astro | 25 +- tsconfig.json | 16 +- 12 files changed, 1141 insertions(+), 23 deletions(-) delete mode 100755 bun.lockb create mode 100644 src/client/components/Editor.jsx create mode 100644 src/client/components/TreeView.jsx create mode 100644 src/client/fonts.css create mode 100644 src/components/Ide.astro create mode 100644 src/layouts/Base.astro create mode 100644 src/pages/@[ns]/[...path].astro diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index b51c4dccf95104ce2cd975e9d17eba5f61f88cbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221940 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.9.0" + } + }, "node_modules/@babel/template": { "version": "7.25.0", "license": "MIT", @@ -456,6 +475,101 @@ "node": ">=6.9.0" } }, + "node_modules/@codemirror/autocomplete": { + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.1.tgz", + "integrity": "sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + }, + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.6.2.tgz", + "integrity": "sha512-Fq7eWOl1Rcbrfn6jD8FPCj9Auaxdm5nIK5RYOeW7ughnd/rY5AmPg6b+CfsG39ZHdwiwe8lde3q8uR7CF5S0yQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz", + "integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", + "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", + "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "license": "MIT" + }, + "node_modules/@codemirror/theme-one-dark": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz", + "integrity": "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.33.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.33.0.tgz", + "integrity": "sha512-AroaR3BvnjRW8fiZBalAaK+ZzB5usGgI014YKElYZvQdNH5ZIidHlO+cyf/2rWzyBFRkvG6VhiXeAEbC53P2YQ==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.21.5", "cpu": [ @@ -470,6 +584,24 @@ "node": ">=12" } }, + "node_modules/@fontsource-variable/fira-code": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/fira-code/-/fira-code-5.1.0.tgz", + "integrity": "sha512-fwJbJLvyZ2BhgBSPYCNsrQ6IFQTpRu9GWXY8N20wHTpbhV0Ro5QJihiZV060Ay3kVR6IVH/oSVe/cr7Ube28gg==", + "license": "OFL-1.1" + }, + "node_modules/@fontsource-variable/inter": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.1.0.tgz", + "integrity": "sha512-Wj2dUGP0vUpxRGQTXQTCNJO+aLcFcQm+gUPXfj/aS877bQkEPBPv9JvZJpwdm2vzelt8NTZ+ausKlBCJjh2XIg==", + "license": "OFL-1.1" + }, + "node_modules/@fontsource-variable/material-symbols-outlined": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/material-symbols-outlined/-/material-symbols-outlined-5.1.0.tgz", + "integrity": "sha512-t5lXmVtDZDha0iYp9//cwaftAjHrcLmWeWi6NILWsV/SvpQ8vnRQbVxMK7VIxHJy3czm4diHYA7I8w6MmqbLfQ==", + "license": "Apache-2.0" + }, "node_modules/@img/sharp-libvips-linux-x64": { "version": "1.0.4", "cpu": [ @@ -576,6 +708,30 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lezer/common": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", + "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==", + "license": "MIT" + }, + "node_modules/@lezer/highlight": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", + "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "license": "MIT", @@ -1009,6 +1165,119 @@ "@types/node": "*" } }, + "node_modules/@uiw/codemirror-extensions-basic-setup": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.2.tgz", + "integrity": "sha512-eacivkj7wzskl2HBYs4rfN0CbYlsSQh5ADtOYWTpc8Txm4ONw8RTi4/rxF6Ks2vdaovizewU5QaHximbxoNTrw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@codemirror/autocomplete": ">=6.0.0", + "@codemirror/commands": ">=6.0.0", + "@codemirror/language": ">=6.0.0", + "@codemirror/lint": ">=6.0.0", + "@codemirror/search": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/@uiw/codemirror-theme-github": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.23.2.tgz", + "integrity": "sha512-CFH6JVwQ8MPRiY32Fy13I+iiD56eYE8jBpGjtPZPiYDcxAmRNU++x79vCguO3dpXUvqSJ9bPjcHbz4wOXxCVEw==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.23.2" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-themes": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.23.2.tgz", + "integrity": "sha512-g8x+oPqgbzxXSkHhRf7e1AM1mI9/Nl3URReS89pHitRKv8MZNrE+ey+HE8ycfNXRUatrb6zTSRV3M75uoZwNYw==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@codemirror/language": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/@uiw/react-codemirror": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.23.2.tgz", + "integrity": "sha512-MmFL6P5V1Mr81JLkJyWNedfxENKdRhsvyU7Izji9wp337m8dqRAz7rCF5XWarGKx+iQ7q2H5ryl07nLqKLSvtQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@codemirror/commands": "^6.1.0", + "@codemirror/state": "^6.1.1", + "@codemirror/theme-one-dark": "^6.0.0", + "@uiw/codemirror-extensions-basic-setup": "4.23.2", + "codemirror": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.11.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/theme-one-dark": ">=6.0.0", + "@codemirror/view": ">=6.0.0", + "codemirror": ">=6.0.0", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@uiw/react-codemirror/node_modules/codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/@uiw/react-monacoeditor": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@uiw/react-monacoeditor/-/react-monacoeditor-3.6.0.tgz", + "integrity": "sha512-TByRDQvJLIzdyFhpkRdWz3g05fydBa73iTDKyHJ7W3Ic2fV+wEO/DX9HKOGk6f3r/hTdGOLDd4iytr8W7PFqmA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.16.7", + "monaco-editor": "^0.44.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "license": "ISC" @@ -1603,6 +1872,12 @@ "node": ">=6" } }, + "node_modules/codemirror": { + "version": "5.65.17", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.17.tgz", + "integrity": "sha512-1zOsUx3lzAOu/gnMAZkQ9kpIHcPYOc9y1Fbm2UVk5UBPkdq380nhkelG0qUwm1f7wPvTbndu9ZYlug35EwAZRQ==", + "license": "MIT" + }, "node_modules/color": { "version": "4.2.3", "license": "MIT", @@ -1713,6 +1988,12 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "6.0.5", "dev": true, @@ -3451,6 +3732,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "license": "ISC", @@ -4301,6 +4595,12 @@ "node": "*" } }, + "node_modules/monaco-editor": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz", + "integrity": "sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==", + "license": "MIT" + }, "node_modules/mrmime": { "version": "2.0.0", "license": "MIT", @@ -4893,6 +5193,33 @@ "node": ">= 0.8" } }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "dev": true, @@ -4906,6 +5233,12 @@ "node": ">=4" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, "node_modules/regex": { "version": "4.3.2", "license": "MIT" @@ -5254,6 +5587,16 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/section-matter": { "version": "1.0.0", "license": "MIT", @@ -5732,6 +6075,12 @@ "node": ">=0.10.0" } }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "license": "MIT" + }, "node_modules/supports-color": { "version": "5.5.0", "dev": true, @@ -6237,6 +6586,12 @@ } } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, "node_modules/web-namespaces": { "version": "2.0.1", "license": "MIT", diff --git a/package.json b/package.json index 3cd72ce..a889385 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,16 @@ "dependencies": { "@astrojs/node": "^8.3.3", "@astrojs/preact": "^3.5.3", + "@fontsource-variable/fira-code": "^5.1.0", + "@fontsource-variable/inter": "^5.1.0", + "@fontsource-variable/material-symbols-outlined": "^5.1.0", + "@uiw/codemirror-theme-github": "^4.23.2", + "@uiw/react-codemirror": "^4.23.2", + "@uiw/react-monacoeditor": "^3.6.0", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", "astro": "^4.15.6", + "codemirror": "^5.65.17", "express": "^4.21.0", "node-pty": "^1.0.0", "preact": "^10.24.0", diff --git a/src/client/components/Editor.jsx b/src/client/components/Editor.jsx new file mode 100644 index 0000000..082a9a0 --- /dev/null +++ b/src/client/components/Editor.jsx @@ -0,0 +1,3 @@ +export const Editor = ({}) => { + return +} diff --git a/src/client/components/TreeView.jsx b/src/client/components/TreeView.jsx new file mode 100644 index 0000000..43a86aa --- /dev/null +++ b/src/client/components/TreeView.jsx @@ -0,0 +1,69 @@ +export const EXAMPLE_TREE = { + type: 'root', + children: [ + { + type: 'folder', + name: 'bin/', + children: [ + { + type: 'file', + name: 'a.out', + }, + ], + }, + { + type: 'file', + name: 'main.c', + }, + { + type: 'file', + name: 'data.csv', + }, + ], +} + +const flattenTree = (node, depth = 0) => { + if (node.type === 'root') return node.children.flatMap(entry => flattenTree(entry, depth)) + + if (node.type === 'folder') + return [ + { + depth, + type: 'folder', + name: node.name, + }, + ...node.children.flatMap(entry => flattenTree(entry, depth + 1)), + ] + + if (node.type === 'file') + return [ + { + depth, + type: 'file', + name: node.name, + }, + ] + + throw new Error(`invalid node type "${node?.type ?? ''}"`) +} + +const ICONS = { + ['folder']: 'folder', + ['file']: 'description', +} + +export const TreeView = ({ value }) => { + const flatNodes = flattenTree(value) + + return ( +

+ {flatNodes.map(node => ( +
+
{ICONS[node.type]}
+
{node.name}
+
+
+ ))} +
+ ) +} diff --git a/src/client/fonts.css b/src/client/fonts.css new file mode 100644 index 0000000..9d2886f --- /dev/null +++ b/src/client/fonts.css @@ -0,0 +1,47 @@ +/* fira-mono-latin-400-normal */ +@font-face { + font-family: 'Fira Mono'; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/fontsource/fonts/fira-mono@latest/latin-400-normal.woff2) format('woff2'), + url(https://cdn.jsdelivr.net/fontsource/fonts/fira-mono@latest/latin-400-normal.woff) format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* fira-mono-latin-500-normal */ +@font-face { + font-family: 'Fira Mono'; + font-style: normal; + font-display: swap; + font-weight: 500; + src: url(https://cdn.jsdelivr.net/fontsource/fonts/fira-mono@latest/latin-500-normal.woff2) format('woff2'), + url(https://cdn.jsdelivr.net/fontsource/fonts/fira-mono@latest/latin-500-normal.woff) format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* fira-mono-latin-700-normal */ +@font-face { + font-family: 'Fira Mono'; + font-style: normal; + font-display: swap; + font-weight: 700; + src: url(https://cdn.jsdelivr.net/fontsource/fonts/fira-mono@latest/latin-700-normal.woff2) format('woff2'), + url(https://cdn.jsdelivr.net/fontsource/fonts/fira-mono@latest/latin-700-normal.woff) format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* inter-latin-wght-normal */ +@font-face { + font-family: 'Inter Variable'; + font-style: italic; + font-display: swap; + font-weight: 100 900; + src: url(https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-opsz-italic.woff2) + format('woff2-variations'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/src/client/style.css b/src/client/style.css index 7ebf586..bd6f20f 100644 --- a/src/client/style.css +++ b/src/client/style.css @@ -24,8 +24,39 @@ body { -moz-osx-font-smoothing: grayscale; } +/* Utility */ + +.flex-row { + display: flex; + flex-direction: row; + + .flex-grow { + flex-grow: 1; + } +} + /* Components */ +.material-symbols-outlined { + font-family: 'Material Symbols Outlined Variable'; + font-weight: normal; + font-style: normal; + font-size: 20px; /* Preferred icon size */ + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + + display: grid; + place-content: center; +} + +.material-symbols-outlined { + font-variation-settings: 'FILL' 0, 'wght' 300, 'GRAD' 0, 'opsz' 20; +} + .xterm { margin: 2rem; padding: 0.5rem; @@ -38,3 +69,462 @@ body { font-family: 'JetBrains Mono', monospace; } } + +textarea.code-editor-prototype { + appearance: none; + resize: none; + outline: none; + border: none; + background: #fff; + + width: 100%; + height: 100%; + + font-family: 'Fira Code Variable', monospace; + font-weight: 400; + font-size: 15px; +} + +input[type='text'] { + appearance: none; + outline: none; + border: none; + background: #fff; + + font-size: 16px; + + border: 1px solid #d9d9d9; + background: #fff; + + padding: 0.25rem 0.5rem; + + border-radius: 0.25rem; + + box-shadow: 0 0.125rem 0.125rem 0 #00000008; + + min-height: 1.75rem; +} + +button, +input[type='submit'], +[role='button'] { + appearance: none; + outline: none; + border: 1px solid #d9d9d9; + background: #fff; + + display: grid; + place-content: center; + place-items: center; + grid-auto-flow: column; + + font-size: 15px; + font-weight: 500; + + padding: 0.25rem 0.5rem; + gap: 0.25rem; + + border-radius: 0.25rem; + + box-shadow: 0 0.125rem 0.125rem 0 #00000008; + + min-height: 1.75rem; + + cursor: pointer; + + &:not(.icon):has(.material-symbols-outlined:first-child) { + padding-left: 0.125rem; + } + + &:hover { + background: #f8f8f8; + } + + &.icon { + padding: 0.25rem; + aspect-ratio: 1 / 1; + } + + &.run { + background: hsl(120, 35%, 46%); + border-color: hsl(120, 38%, 41%); + color: #fff; + + .material-symbols-outlined { + font-variation-settings: 'FILL' 1, 'wght' 300, 'GRAD' 0, 'opsz' 20; + } + + box-shadow: 0 0.125rem 0.2rem 0 hsla(120, 40%, 53%, 0.37); + + &:hover { + background: hsl(120, 35%, 51%); + } + } + + &.flat { + min-height: auto; + border: none; + background: none; + box-shadow: none; + + &.icon { + padding: 0; + } + + &:hover { + background: #0002; + } + } +} + +.user-details { + display: grid; + grid-template-columns: auto 1fr; + grid-template-rows: 1fr 1fr; + + padding: 0.5rem; + column-gap: 0.5rem; + + border: 1px solid #d9d9d9; + border-radius: 0.5rem; + box-shadow: 0 0.125rem 0.125rem 0 #00000008; + + > .profile { + grid-column: 1 / 2; + grid-row: 1 / 3; + + img { + width: 2.5rem; + height: 2.5rem; + object-fit: cover; + } + } + + > .username { + grid-column: 2 / 3; + grid-row: 1 / 2; + + font-size: 16px; + font-weight: 500; + + align-self: end; + } + + > .email { + grid-column: 2 / 3; + grid-row: 2 / 3; + + align-self: start; + + font-size: 14px; + color: #777; + } + + cursor: pointer; + + &:hover { + background: #00000004; + } +} + +.project-details { + display: grid; + grid-template-columns: 1fr auto; + align-content: center; + + padding: 0 0.25rem 0 0.5rem; + column-gap: 0.5rem; + + min-height: 2rem; + + border: 1px solid #d9d9d9; + border-radius: 0.35rem; + box-shadow: 0 0.125rem 0.125rem 0 #00000008; + + font-size: 15px; + font-weight: 450; + + cursor: pointer; + + &:hover { + background: #00000004; + } +} + +.tree-view { + display: grid; + grid-auto-flow: row; + gap: 0.25rem; + + > .entry { + display: grid; + grid-template-columns: auto 1fr auto; + + padding: 0.125rem 0.5rem 0.125rem 0.25rem; + border-radius: 0.35rem; + gap: 0.35rem; + + margin-left: calc(var(--depth) * 1rem); + + cursor: pointer; + + &:hover { + background: #00000006; + } + } +} + +.ide { + user-select: none; + + display: grid; + height: 100%; + + grid-template-columns: 20rem 1fr; + grid-template-rows: 3rem 1fr 33vh auto; + + grid-template-areas: + 'sidebar header' + 'sidebar editor' + 'sidebar terminal' + 'sidebar status'; + + > .sidebar { + grid-area: sidebar; + + display: flex; + flex-direction: column; + + padding: 1rem; + gap: 1rem; + + border-right: 1px solid #d9d9d9; + + .flex-row { + gap: 0.5rem; + } + + > * { + flex-shrink: 0; + } + + .logo { + font-size: 24px; + font-weight: 700; + } + + > .spacer { + flex-grow: 1; + } + + > .section { + display: flex; + flex-direction: column; + gap: 0.5rem; + + /* border-radius: 0.35rem; + + padding: 0.25rem; + + &:hover { + background: #00000004; + } */ + + padding-bottom: 1rem; + border-bottom: 1px solid #d9d9d9; + + > .spoiler { + display: grid; + grid-template-columns: auto 1fr auto; + align-content: center; + + font-weight: 550; + + border-radius: 0.35rem; + padding: 0.35rem; + gap: 0.5rem; + + cursor: pointer; + + &:hover { + background: #00000006; + } + } + } + } + + > .header { + grid-area: header; + + display: grid; + grid-template-columns: 1fr auto; + align-items: center; + + gap: 1rem; + + padding: 0 0.5rem; + + border-bottom: 1px solid #d9d9d9; + + > .search { + place-self: center; + + display: grid; + + width: 100%; + max-width: 40rem; + + position: relative; + + > .material-symbols-outlined { + position: absolute; + + right: 0; + + top: 50%; + transform: translateY(-50%); + + padding-right: 0.35rem; + } + } + + > .actions { + display: grid; + grid-auto-flow: column; + align-items: center; + + gap: 0.5rem; + } + } + + > .tabbed-editor { + grid-area: editor; + + display: grid; + grid-template-rows: auto 1fr; + + /* background: #fafcfe; */ + background: #f5efff; + + > .tabs { + display: grid; + grid-auto-flow: column; + + padding: 0.5rem; + padding-bottom: 0; + + justify-content: start; + + border-bottom: 1px solid #d9d9d9; + + > .tab { + background: #fff; + + border: 1px solid #d9d9d9; + border-bottom: none; + border-top-left-radius: 0.5rem; + border-top-right-radius: 0.5rem; + + display: grid; + grid-template-columns: 1fr auto; + gap: 0.5rem; + + align-items: center; + + padding: 0.35rem; + + font-size: 15px; + font-weight: 450; + + z-index: 1; + transform: translate(0, 1px); + + cursor: pointer; + + > .title { + padding: 0 0 0 0.15rem; + } + + &:not(.active) { + border-bottom: 1px solid #d9d9d9; + + &:hover { + background: #f8f8f8; + } + } + + &:not(:first-child) { + border-left: none; + } + } + } + + > .editor { + background: #fff; + padding: 0.5rem; + } + } + + > .terminal { + grid-area: terminal; + position: relative; + + border-top: 1px solid #d9d9d9; + + display: grid; + grid-template-rows: auto 1fr; + + padding: 0.5rem; + gap: 0.5rem; + + > .actions { + position: absolute; + top: 0; + right: 0; + + display: grid; + grid-auto-flow: column; + gap: 0.25rem; + + padding: 0.5rem; + } + + &:not(:hover) > .actions { + .material-symbols-outlined { + color: #888; + } + } + + > .title { + font-size: 14px; + font-weight: 550; + } + + > .content { + font-family: 'JetBrains Mono', monospace; + font-size: 14px; + } + } + + > .status { + border-top: 1px solid #d9d9d9; + + padding: 0.125rem 0.25rem; + + display: flex; + flex-direction: row; + gap: 0.25rem; + + font-size: 13px; + } +} + +/* Layout */ + +body { + font-family: 'Inter Variable', sans-serif; + font-size: 16px; + font-weight: 400; + + color: #333; +} diff --git a/src/components/Ide.astro b/src/components/Ide.astro new file mode 100644 index 0000000..377b776 --- /dev/null +++ b/src/components/Ide.astro @@ -0,0 +1,116 @@ +--- +import { TreeView, EXAMPLE_TREE } from '@/client/components/TreeView.jsx' +import { Editor } from '@/client/components/Editor.jsx' + +const { project } = Astro.props + +const userName = project.split('/').at(0).slice(1) +const projectName = project.split('/').at(-1) +--- + +
+ +
+ +
+ + +
+
+
+
+
+
main.c
+
+ +
+
+
+
data.csv
+
+ +
+
+
+
+ +
+
+
+
Terminal
+
+ + +
+
+
{`/ # ls`}
+
+
+
Websocket connection active
+
diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro new file mode 100644 index 0000000..3d3e8e5 --- /dev/null +++ b/src/layouts/Base.astro @@ -0,0 +1,25 @@ +--- +import '@fontsource-variable/material-symbols-outlined/full.css' +import '@fontsource-variable/inter/index.css' +import '@fontsource-variable/fira-code/index.css' + +import '@/client/style.css' + +const { title } = Astro.props +--- + + + + + + + + + + {[title, 'Online Code Editor'].filter(Boolean).join(' | ')} + + + + + + diff --git a/src/pages/@[ns]/[...path].astro b/src/pages/@[ns]/[...path].astro new file mode 100644 index 0000000..507d4cb --- /dev/null +++ b/src/pages/@[ns]/[...path].astro @@ -0,0 +1,11 @@ +--- +import Base from '@/layouts/Base.astro' +import Ide from '@/components/Ide.astro' + +const { ns, path } = Astro.params +const fullPath = `@${ns}/${path}` +--- + + + + diff --git a/src/pages/index.astro b/src/pages/index.astro index c8f39d3..528156c 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,23 +1,14 @@ --- import '@xterm/xterm/css/xterm.css' import '../client/style.css' +import Base from '../layouts/Base.astro' --- - - - - - - + +

docker+xterm.js

+
- docker+xterm.js - - -

docker+xterm.js

-
- - - - + + diff --git a/tsconfig.json b/tsconfig.json index 99df2e6..2b701b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { - "extends": "astro/tsconfigs/base", - "compilerOptions": { - "jsx": "react-jsx", - "jsxImportSource": "preact" - } -} \ No newline at end of file + "extends": "astro/tsconfigs/base", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "preact", + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + } +}