From 4b59d1cf17b91e91d00b15dcccd68d94d7558da1 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 16 Sep 2025 17:37:43 +0800 Subject: [PATCH] add turtle --- package-lock.json | 350 ++++++++++++++++-------------- package.json | 7 +- public/turtle.svg | 1 + src/components/SelectLanguage.vue | 3 +- src/composables/code.ts | 27 ++- src/desktop/Content.vue | 48 +++- src/desktop/Debug.vue | 3 +- src/templates.ts | 12 + src/types.ts | 2 +- 9 files changed, 277 insertions(+), 176 deletions(-) create mode 100644 public/turtle.svg diff --git a/package-lock.json b/package-lock.json index b64123f..eeb2bca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,21 +11,22 @@ "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-python": "^6.2.1", "@vueuse/core": "^13.9.0", - "axios": "^1.11.0", + "axios": "^1.12.2", "client-zip": "1.7.0", "codemirror": "^6.0.2", "copy-text-to-clipboard": "^3.2.1", "fflate": "^0.8.2", "file-saver": "^2.0.5", - "naive-ui": "^2.42.0", + "naive-ui": "^2.43.1", "normalize.css": "^8.0.1", "query-string": "^9.3.0", + "skulpt": "^1.2.0", "vue": "^3.5.21", "vue-codemirror": "^6.1.1" }, "devDependencies": { "@iconify/vue": "^5.0.0", - "@rsbuild/core": "^1.5.6", + "@rsbuild/core": "^1.5.7", "@rsbuild/plugin-vue": "^1.1.2", "@types/file-saver": "^2.0.7", "prettier": "^3.6.2", @@ -188,7 +189,7 @@ }, "node_modules/@css-render/vue3-ssr": { "version": "0.15.14", - "resolved": "https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz", + "resolved": "https://registry.npmjs.org/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz", "integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==", "license": "MIT", "peerDependencies": { @@ -317,7 +318,7 @@ }, "node_modules/@juggle/resize-observer": { "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", "license": "Apache-2.0" }, @@ -422,26 +423,26 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz", - "integrity": "sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz", + "integrity": "sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.4.5", - "@emnapi/runtime": "^1.4.5", - "@tybys/wasm-util": "^0.10.0" + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" } }, "node_modules/@rsbuild/core": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.6.tgz", - "integrity": "sha512-EbJ9HlkI2Y2C59pAv877rHz3qS+5dy9anXxagOOXEHt4u3/uqSj7pcz3cD+UWkFQ4XOGJ3mMwkPfR7EE24t12A==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.7.tgz", + "integrity": "sha512-1/yyJJfZo4hqMsL3WQQmMDYFp0L/znHqjHrYE6NKsiKhkBEwEwSVMk1M5QoRu2EcRL1acW5AJf7WJyKFfPZ//Q==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/core": "1.5.3", + "@rspack/core": "1.5.4", "@rspack/lite-tapable": "~1.0.1", "@swc/helpers": "^0.5.17", "core-js": "~3.45.1", @@ -469,28 +470,28 @@ } }, "node_modules/@rspack/binding": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.3.tgz", - "integrity": "sha512-bWAKligHxelx3XxOgFmK6k1vR+ANxjBXLXTmgOiZxsJNScHJap3HYViXWJHKj5jvdXEvg9sC8TE7WNctCfa8iQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.4.tgz", + "integrity": "sha512-HtLF5uxbf77hDarB/Wl26XgaTyWkhMogDPUOC1mLU+YPke1vYem8p8yr+McUkRtbhYoqtFMcVcT3S8jKJPP3+g==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.5.3", - "@rspack/binding-darwin-x64": "1.5.3", - "@rspack/binding-linux-arm64-gnu": "1.5.3", - "@rspack/binding-linux-arm64-musl": "1.5.3", - "@rspack/binding-linux-x64-gnu": "1.5.3", - "@rspack/binding-linux-x64-musl": "1.5.3", - "@rspack/binding-wasm32-wasi": "1.5.3", - "@rspack/binding-win32-arm64-msvc": "1.5.3", - "@rspack/binding-win32-ia32-msvc": "1.5.3", - "@rspack/binding-win32-x64-msvc": "1.5.3" + "@rspack/binding-darwin-arm64": "1.5.4", + "@rspack/binding-darwin-x64": "1.5.4", + "@rspack/binding-linux-arm64-gnu": "1.5.4", + "@rspack/binding-linux-arm64-musl": "1.5.4", + "@rspack/binding-linux-x64-gnu": "1.5.4", + "@rspack/binding-linux-x64-musl": "1.5.4", + "@rspack/binding-wasm32-wasi": "1.5.4", + "@rspack/binding-win32-arm64-msvc": "1.5.4", + "@rspack/binding-win32-ia32-msvc": "1.5.4", + "@rspack/binding-win32-x64-msvc": "1.5.4" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.3.tgz", - "integrity": "sha512-8R1uqr5E2CzRZjsA1QLXkD4xwcsiHmLJTIzCNj9QJ4+lCw6XgtPqpHZuk3zNROLayijEKwotGXJFHJIbgv1clA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.4.tgz", + "integrity": "sha512-qD+n4D8KOOSoWdngK87iXl6lqbx1J63f6/xZFLPVIstzxIUbNyo9V9tpJYsoT3gYpnLkPVqA+KwQI0ozgYEXvw==", "cpu": [ "arm64" ], @@ -502,9 +503,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.3.tgz", - "integrity": "sha512-R4sb+scZbaBasyS+TQ6dRvv+f/2ZaZ0nXgY7t/ehcuGRvUz3S7FTJF/Mr/Ocxj5oVfb06thDAm+zaAVg+hsM9A==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.4.tgz", + "integrity": "sha512-g75qkrLLa28kVp7pkWAjUADwr+0GumEF134VWHuL+TAm7VCw4IXRKnZhquE8K5kcqRpLcLX4guRqZzK9OEu/hg==", "cpu": [ "x64" ], @@ -516,9 +517,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.3.tgz", - "integrity": "sha512-NeDJJRNTLx8wOQT+si90th7cdt04I2F697Mp5w0a3Jf3XHAmsraBMn0phdLGWJoUWrrfVGthjgZDl5lcc1UHEA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.4.tgz", + "integrity": "sha512-O3zSTz/dy1EJHd7YS8zzmAG2zxewEZJi7QlYiU+YhFuqjP2ab6ZFWLHkglvrSy4aHyC8fx9OkSjioYtHUcCSdQ==", "cpu": [ "arm64" ], @@ -530,9 +531,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.3.tgz", - "integrity": "sha512-M9utPq9s7zJkKapUlyfwwYT/rjZ+XM56NHQMUH9MVYgMJIl+66QURgWUXCAbuogxf1XWayUGQaZsgypoOrTG9A==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.4.tgz", + "integrity": "sha512-ki84vbRY1gbf1T3BHiKAdi3m0hQFmqiAIYvFuLGA9Vop1R+W2C3Mzh8Q5YL6TnWOP0eiwizuigztz4/07fPf6Q==", "cpu": [ "arm64" ], @@ -544,9 +545,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.3.tgz", - "integrity": "sha512-AsKqU4pIg0yYg1VvSEU0NspIwCexqXD2AYE0wujAAwBo0hOfbt5dl1JCK7idiZdIQvoFg86HbfGwdHIVcFLI0w==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.4.tgz", + "integrity": "sha512-SJVQSgR1JqDEnURI79SRcn/gcdG+yFb2mLUYV/TSPUTxMIlu44p5+fnOY6+6qMtjQhO6J4C2+UyV00U/yjlikA==", "cpu": [ "x64" ], @@ -558,9 +559,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.3.tgz", - "integrity": "sha512-0aHuvDef92pFZaHhk8Mp8RP9TfTzhQ+Pjqrc2ixRS/FeJA+jVB2CSaYlAPP4QrgXdmW7tewSxEw8hYhF9CNv/A==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.4.tgz", + "integrity": "sha512-UL1xw3yLsFH6UD/ubXXbRaDRNl+qI22QgugKYuqmpDGfOcVlv4fGpf3faPwYJasqPjhDWvcoyd8OqI+ftWKWEA==", "cpu": [ "x64" ], @@ -572,9 +573,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.3.tgz", - "integrity": "sha512-Y7KN/ZRuWcFdjCzuZE0JsPwTqJAz1aipJsEOI3whBUj9Va2RwbR9r3vbW6OscS0Wm3rTJAfqH0xwx9x3GksnAw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.4.tgz", + "integrity": "sha512-VPGhik1M87SZQzmX2sRvXrO6KgycSbmJ/bLqVuXHYGjsLkYqw4auKCJrkZcKa1GVsSvpVNC3FlTUk2QxjpmNSA==", "cpu": [ "wasm32" ], @@ -586,9 +587,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.3.tgz", - "integrity": "sha512-I9SqobDwFwcIUNzr+VwvR2lUGqfarOpFDp7mZmA6+qO/V0yJxS0aqBIwNoZB/UFPbUh71OdmFavBzcTYE9vPSg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.4.tgz", + "integrity": "sha512-YxhK8dTv/6ff//C5Djm87TkiePuvGRoxLgsHgwR7C0rnA8lS5gLNwrNY9FjAY1x6WamnGGirFK97rigaeTDn+g==", "cpu": [ "arm64" ], @@ -600,9 +601,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.3.tgz", - "integrity": "sha512-pPSzSycfK03lLNxzwEkrRUfqETB7y0KEEbO0HcGX63EC9Ne4SILJfkkH55G0PO4aT/dfAosAlkf6V64ATgrHGA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.4.tgz", + "integrity": "sha512-SU4EyAo1BI1zV/sSDF2cqoN+Qq6iIHLwtq0RJI5WQ4Yjn/mhhRFxNoerPCJUpPiiCxvG/IrpGzGi90MwFnMtNQ==", "cpu": [ "ia32" ], @@ -614,9 +615,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.3.tgz", - "integrity": "sha512-He/GrFVrCZ4gBrHSxGd7mnwk9A9BDkAeZZEBnfK4n/HfXxU32WX5jiAGacFoJQYFLDOWTAcmxFad37TSs61zXw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.4.tgz", + "integrity": "sha512-xEgOCnD2FCUcxRgg3X5etq81vvf8rWwvPASfrG234diSduvU6zRiuiyYFMLTMDwQNEzZEFGHp7wIZNCKHudbng==", "cpu": [ "x64" ], @@ -628,14 +629,14 @@ ] }, "node_modules/@rspack/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.3.tgz", - "integrity": "sha512-EMNXysJyqsfd2aVys5C7GDZKaLEcoN5qgs7ZFhWOWJGKgBqjdKTljyRTd4RRZV4fV6iAko/WrxnAxmzZNk8mjA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.4.tgz", + "integrity": "sha512-s/bVG+KRZjIpPP2f4TOQkJ/D+rql7HAV0MFEWoqoyeNnln/p6I28RYbw5zYF+Qg4J0swR8Qk2pbn7qlIdGusLQ==", "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime-tools": "0.18.0", - "@rspack/binding": "1.5.3", + "@rspack/binding": "1.5.4", "@rspack/lite-tapable": "1.0.1" }, "engines": { @@ -671,9 +672,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "license": "MIT", "optional": true, @@ -1172,9 +1173,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -1601,7 +1602,7 @@ }, "node_modules/evtd": { "version": "0.2.4", - "resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz", + "resolved": "https://registry.npmjs.org/evtd/-/evtd-0.2.4.tgz", "integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==", "license": "MIT" }, @@ -1859,6 +1860,12 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jsbi": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz", + "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==", + "license": "Apache-2.0" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -1938,9 +1945,9 @@ } }, "node_modules/naive-ui": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.42.0.tgz", - "integrity": "sha512-c7cXR2YgOjgtBadXHwiWL4Y0tpGLAI5W5QzzHksOi22iuHXoSGMAzdkVTGVPE/PM0MSGQ/JtUIzCx2Y0hU0vTQ==", + "version": "2.43.1", + "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.43.1.tgz", + "integrity": "sha512-w52W0mOhdOGt4uucFSZmP0DI44PCsFyuxeLSs9aoUThfIuxms90MYjv46Qrr7xprjyJRw5RU6vYpCx4o9ind3A==", "license": "MIT", "dependencies": { "@css-render/plugin-bem": "^0.15.14", @@ -1961,7 +1968,7 @@ "treemate": "^0.3.11", "vdirs": "^0.1.8", "vooks": "^0.2.12", - "vueuc": "^0.4.63" + "vueuc": "^0.4.65" }, "peerDependencies": { "vue": "^3.0.0" @@ -2138,9 +2145,9 @@ } }, "node_modules/seemly": { - "version": "0.3.8", - "resolved": "https://registry.npmmirror.com/seemly/-/seemly-0.3.8.tgz", - "integrity": "sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.10.tgz", + "integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==", "license": "MIT" }, "node_modules/serialize-javascript": { @@ -2153,6 +2160,18 @@ "randombytes": "^2.1.0" } }, + "node_modules/skulpt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/skulpt/-/skulpt-1.2.0.tgz", + "integrity": "sha512-T0cv0sdSOXLlIJTuyXSeYJ3TFdWYSZfX2PcBLpRKrKZ3dTbVQXRMiYudSuko2xzcyMif47DS2ShatCwjCbsSsA==", + "license": "MIT", + "dependencies": { + "jsbi": "^3.1.4" + }, + "engines": { + "node": ">=10.4" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", @@ -2337,7 +2356,7 @@ }, "node_modules/vdirs": { "version": "0.1.8", - "resolved": "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz", + "resolved": "https://registry.npmjs.org/vdirs/-/vdirs-0.1.8.tgz", "integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==", "license": "MIT", "dependencies": { @@ -2349,7 +2368,7 @@ }, "node_modules/vooks": { "version": "0.2.12", - "resolved": "https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz", + "resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz", "integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==", "license": "MIT", "dependencies": { @@ -2419,9 +2438,9 @@ } }, "node_modules/vueuc": { - "version": "0.4.64", - "resolved": "https://registry.npmmirror.com/vueuc/-/vueuc-0.4.64.tgz", - "integrity": "sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==", + "version": "0.4.65", + "resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.65.tgz", + "integrity": "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==", "license": "MIT", "dependencies": { "@css-render/vue3-ssr": "^0.15.10", @@ -2649,7 +2668,7 @@ }, "@css-render/vue3-ssr": { "version": "0.15.14", - "resolved": "https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz", + "resolved": "https://registry.npmjs.org/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz", "integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==", "requires": {} }, @@ -2754,7 +2773,7 @@ }, "@juggle/resize-observer": { "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" }, "@lezer/common": { @@ -2852,24 +2871,24 @@ } }, "@napi-rs/wasm-runtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz", - "integrity": "sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz", + "integrity": "sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==", "dev": true, "optional": true, "requires": { - "@emnapi/core": "^1.4.5", - "@emnapi/runtime": "^1.4.5", - "@tybys/wasm-util": "^0.10.0" + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" } }, "@rsbuild/core": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.6.tgz", - "integrity": "sha512-EbJ9HlkI2Y2C59pAv877rHz3qS+5dy9anXxagOOXEHt4u3/uqSj7pcz3cD+UWkFQ4XOGJ3mMwkPfR7EE24t12A==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.7.tgz", + "integrity": "sha512-1/yyJJfZo4hqMsL3WQQmMDYFp0L/znHqjHrYE6NKsiKhkBEwEwSVMk1M5QoRu2EcRL1acW5AJf7WJyKFfPZ//Q==", "dev": true, "requires": { - "@rspack/core": "1.5.3", + "@rspack/core": "1.5.4", "@rspack/lite-tapable": "~1.0.1", "@swc/helpers": "^0.5.17", "core-js": "~3.45.1", @@ -2887,69 +2906,69 @@ } }, "@rspack/binding": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.3.tgz", - "integrity": "sha512-bWAKligHxelx3XxOgFmK6k1vR+ANxjBXLXTmgOiZxsJNScHJap3HYViXWJHKj5jvdXEvg9sC8TE7WNctCfa8iQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.4.tgz", + "integrity": "sha512-HtLF5uxbf77hDarB/Wl26XgaTyWkhMogDPUOC1mLU+YPke1vYem8p8yr+McUkRtbhYoqtFMcVcT3S8jKJPP3+g==", "dev": true, "requires": { - "@rspack/binding-darwin-arm64": "1.5.3", - "@rspack/binding-darwin-x64": "1.5.3", - "@rspack/binding-linux-arm64-gnu": "1.5.3", - "@rspack/binding-linux-arm64-musl": "1.5.3", - "@rspack/binding-linux-x64-gnu": "1.5.3", - "@rspack/binding-linux-x64-musl": "1.5.3", - "@rspack/binding-wasm32-wasi": "1.5.3", - "@rspack/binding-win32-arm64-msvc": "1.5.3", - "@rspack/binding-win32-ia32-msvc": "1.5.3", - "@rspack/binding-win32-x64-msvc": "1.5.3" + "@rspack/binding-darwin-arm64": "1.5.4", + "@rspack/binding-darwin-x64": "1.5.4", + "@rspack/binding-linux-arm64-gnu": "1.5.4", + "@rspack/binding-linux-arm64-musl": "1.5.4", + "@rspack/binding-linux-x64-gnu": "1.5.4", + "@rspack/binding-linux-x64-musl": "1.5.4", + "@rspack/binding-wasm32-wasi": "1.5.4", + "@rspack/binding-win32-arm64-msvc": "1.5.4", + "@rspack/binding-win32-ia32-msvc": "1.5.4", + "@rspack/binding-win32-x64-msvc": "1.5.4" } }, "@rspack/binding-darwin-arm64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.3.tgz", - "integrity": "sha512-8R1uqr5E2CzRZjsA1QLXkD4xwcsiHmLJTIzCNj9QJ4+lCw6XgtPqpHZuk3zNROLayijEKwotGXJFHJIbgv1clA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.4.tgz", + "integrity": "sha512-qD+n4D8KOOSoWdngK87iXl6lqbx1J63f6/xZFLPVIstzxIUbNyo9V9tpJYsoT3gYpnLkPVqA+KwQI0ozgYEXvw==", "dev": true, "optional": true }, "@rspack/binding-darwin-x64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.3.tgz", - "integrity": "sha512-R4sb+scZbaBasyS+TQ6dRvv+f/2ZaZ0nXgY7t/ehcuGRvUz3S7FTJF/Mr/Ocxj5oVfb06thDAm+zaAVg+hsM9A==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.4.tgz", + "integrity": "sha512-g75qkrLLa28kVp7pkWAjUADwr+0GumEF134VWHuL+TAm7VCw4IXRKnZhquE8K5kcqRpLcLX4guRqZzK9OEu/hg==", "dev": true, "optional": true }, "@rspack/binding-linux-arm64-gnu": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.3.tgz", - "integrity": "sha512-NeDJJRNTLx8wOQT+si90th7cdt04I2F697Mp5w0a3Jf3XHAmsraBMn0phdLGWJoUWrrfVGthjgZDl5lcc1UHEA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.4.tgz", + "integrity": "sha512-O3zSTz/dy1EJHd7YS8zzmAG2zxewEZJi7QlYiU+YhFuqjP2ab6ZFWLHkglvrSy4aHyC8fx9OkSjioYtHUcCSdQ==", "dev": true, "optional": true }, "@rspack/binding-linux-arm64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.3.tgz", - "integrity": "sha512-M9utPq9s7zJkKapUlyfwwYT/rjZ+XM56NHQMUH9MVYgMJIl+66QURgWUXCAbuogxf1XWayUGQaZsgypoOrTG9A==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.4.tgz", + "integrity": "sha512-ki84vbRY1gbf1T3BHiKAdi3m0hQFmqiAIYvFuLGA9Vop1R+W2C3Mzh8Q5YL6TnWOP0eiwizuigztz4/07fPf6Q==", "dev": true, "optional": true }, "@rspack/binding-linux-x64-gnu": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.3.tgz", - "integrity": "sha512-AsKqU4pIg0yYg1VvSEU0NspIwCexqXD2AYE0wujAAwBo0hOfbt5dl1JCK7idiZdIQvoFg86HbfGwdHIVcFLI0w==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.4.tgz", + "integrity": "sha512-SJVQSgR1JqDEnURI79SRcn/gcdG+yFb2mLUYV/TSPUTxMIlu44p5+fnOY6+6qMtjQhO6J4C2+UyV00U/yjlikA==", "dev": true, "optional": true }, "@rspack/binding-linux-x64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.3.tgz", - "integrity": "sha512-0aHuvDef92pFZaHhk8Mp8RP9TfTzhQ+Pjqrc2ixRS/FeJA+jVB2CSaYlAPP4QrgXdmW7tewSxEw8hYhF9CNv/A==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.4.tgz", + "integrity": "sha512-UL1xw3yLsFH6UD/ubXXbRaDRNl+qI22QgugKYuqmpDGfOcVlv4fGpf3faPwYJasqPjhDWvcoyd8OqI+ftWKWEA==", "dev": true, "optional": true }, "@rspack/binding-wasm32-wasi": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.3.tgz", - "integrity": "sha512-Y7KN/ZRuWcFdjCzuZE0JsPwTqJAz1aipJsEOI3whBUj9Va2RwbR9r3vbW6OscS0Wm3rTJAfqH0xwx9x3GksnAw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.4.tgz", + "integrity": "sha512-VPGhik1M87SZQzmX2sRvXrO6KgycSbmJ/bLqVuXHYGjsLkYqw4auKCJrkZcKa1GVsSvpVNC3FlTUk2QxjpmNSA==", "dev": true, "optional": true, "requires": { @@ -2957,34 +2976,34 @@ } }, "@rspack/binding-win32-arm64-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.3.tgz", - "integrity": "sha512-I9SqobDwFwcIUNzr+VwvR2lUGqfarOpFDp7mZmA6+qO/V0yJxS0aqBIwNoZB/UFPbUh71OdmFavBzcTYE9vPSg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.4.tgz", + "integrity": "sha512-YxhK8dTv/6ff//C5Djm87TkiePuvGRoxLgsHgwR7C0rnA8lS5gLNwrNY9FjAY1x6WamnGGirFK97rigaeTDn+g==", "dev": true, "optional": true }, "@rspack/binding-win32-ia32-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.3.tgz", - "integrity": "sha512-pPSzSycfK03lLNxzwEkrRUfqETB7y0KEEbO0HcGX63EC9Ne4SILJfkkH55G0PO4aT/dfAosAlkf6V64ATgrHGA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.4.tgz", + "integrity": "sha512-SU4EyAo1BI1zV/sSDF2cqoN+Qq6iIHLwtq0RJI5WQ4Yjn/mhhRFxNoerPCJUpPiiCxvG/IrpGzGi90MwFnMtNQ==", "dev": true, "optional": true }, "@rspack/binding-win32-x64-msvc": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.3.tgz", - "integrity": "sha512-He/GrFVrCZ4gBrHSxGd7mnwk9A9BDkAeZZEBnfK4n/HfXxU32WX5jiAGacFoJQYFLDOWTAcmxFad37TSs61zXw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.4.tgz", + "integrity": "sha512-xEgOCnD2FCUcxRgg3X5etq81vvf8rWwvPASfrG234diSduvU6zRiuiyYFMLTMDwQNEzZEFGHp7wIZNCKHudbng==", "dev": true, "optional": true }, "@rspack/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.3.tgz", - "integrity": "sha512-EMNXysJyqsfd2aVys5C7GDZKaLEcoN5qgs7ZFhWOWJGKgBqjdKTljyRTd4RRZV4fV6iAko/WrxnAxmzZNk8mjA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.4.tgz", + "integrity": "sha512-s/bVG+KRZjIpPP2f4TOQkJ/D+rql7HAV0MFEWoqoyeNnln/p6I28RYbw5zYF+Qg4J0swR8Qk2pbn7qlIdGusLQ==", "dev": true, "requires": { "@module-federation/runtime-tools": "0.18.0", - "@rspack/binding": "1.5.3", + "@rspack/binding": "1.5.4", "@rspack/lite-tapable": "1.0.1" } }, @@ -3004,9 +3023,9 @@ } }, "@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "optional": true, "requires": { @@ -3413,9 +3432,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -3695,7 +3714,7 @@ }, "evtd": { "version": "0.2.4", - "resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz", + "resolved": "https://registry.npmjs.org/evtd/-/evtd-0.2.4.tgz", "integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==" }, "fast-deep-equal": { @@ -3856,6 +3875,11 @@ "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", "dev": true }, + "jsbi": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz", + "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==" + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -3917,9 +3941,9 @@ } }, "naive-ui": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.42.0.tgz", - "integrity": "sha512-c7cXR2YgOjgtBadXHwiWL4Y0tpGLAI5W5QzzHksOi22iuHXoSGMAzdkVTGVPE/PM0MSGQ/JtUIzCx2Y0hU0vTQ==", + "version": "2.43.1", + "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.43.1.tgz", + "integrity": "sha512-w52W0mOhdOGt4uucFSZmP0DI44PCsFyuxeLSs9aoUThfIuxms90MYjv46Qrr7xprjyJRw5RU6vYpCx4o9ind3A==", "requires": { "@css-render/plugin-bem": "^0.15.14", "@css-render/vue3-ssr": "^0.15.14", @@ -3939,7 +3963,7 @@ "treemate": "^0.3.11", "vdirs": "^0.1.8", "vooks": "^0.2.12", - "vueuc": "^0.4.63" + "vueuc": "^0.4.65" } }, "nanoid": { @@ -4034,9 +4058,9 @@ } }, "seemly": { - "version": "0.3.8", - "resolved": "https://registry.npmmirror.com/seemly/-/seemly-0.3.8.tgz", - "integrity": "sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA==" + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.10.tgz", + "integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==" }, "serialize-javascript": { "version": "6.0.2", @@ -4047,6 +4071,14 @@ "randombytes": "^2.1.0" } }, + "skulpt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/skulpt/-/skulpt-1.2.0.tgz", + "integrity": "sha512-T0cv0sdSOXLlIJTuyXSeYJ3TFdWYSZfX2PcBLpRKrKZ3dTbVQXRMiYudSuko2xzcyMif47DS2ShatCwjCbsSsA==", + "requires": { + "jsbi": "^3.1.4" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", @@ -4153,7 +4185,7 @@ }, "vdirs": { "version": "0.1.8", - "resolved": "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz", + "resolved": "https://registry.npmjs.org/vdirs/-/vdirs-0.1.8.tgz", "integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==", "requires": { "evtd": "^0.2.2" @@ -4161,7 +4193,7 @@ }, "vooks": { "version": "0.2.12", - "resolved": "https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz", + "resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz", "integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==", "requires": { "evtd": "^0.2.2" @@ -4202,9 +4234,9 @@ } }, "vueuc": { - "version": "0.4.64", - "resolved": "https://registry.npmmirror.com/vueuc/-/vueuc-0.4.64.tgz", - "integrity": "sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==", + "version": "0.4.65", + "resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.65.tgz", + "integrity": "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==", "requires": { "@css-render/vue3-ssr": "^0.15.10", "@juggle/resize-observer": "^3.3.1", diff --git a/package.json b/package.json index 36ae909..3025fad 100644 --- a/package.json +++ b/package.json @@ -13,21 +13,22 @@ "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-python": "^6.2.1", "@vueuse/core": "^13.9.0", - "axios": "^1.11.0", + "axios": "^1.12.2", "client-zip": "1.7.0", "codemirror": "^6.0.2", "copy-text-to-clipboard": "^3.2.1", "fflate": "^0.8.2", "file-saver": "^2.0.5", - "naive-ui": "^2.42.0", + "naive-ui": "^2.43.1", "normalize.css": "^8.0.1", "query-string": "^9.3.0", + "skulpt": "^1.2.0", "vue": "^3.5.21", "vue-codemirror": "^6.1.1" }, "devDependencies": { "@iconify/vue": "^5.0.0", - "@rsbuild/core": "^1.5.6", + "@rsbuild/core": "^1.5.7", "@rsbuild/plugin-vue": "^1.1.2", "@types/file-saver": "^2.0.7", "prettier": "^3.6.2", diff --git a/public/turtle.svg b/public/turtle.svg new file mode 100644 index 0000000..1c4977d --- /dev/null +++ b/public/turtle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/SelectLanguage.vue b/src/components/SelectLanguage.vue index 7216dd2..0734e49 100644 --- a/src/components/SelectLanguage.vue +++ b/src/components/SelectLanguage.vue @@ -5,6 +5,7 @@ import { code } from "../composables/code" const LANGS = [ ["python", "Python"], + ["turtle", "海龟绘图"], ["c", "C 语言"], ["cpp", "C++"], ] @@ -35,6 +36,6 @@ const languages: SelectOption[] = LANGS.map((it) => ({ diff --git a/src/composables/code.ts b/src/composables/code.ts index 02672b9..f3a0b99 100644 --- a/src/composables/code.ts +++ b/src/composables/code.ts @@ -18,6 +18,7 @@ const cache: Cache = { python: useStorage("code_python", sources["python"]), c: useStorage("code_c", sources["c"]), cpp: useStorage("code_cpp", sources["cpp"]), + turtle: useStorage("code_turtle", sources["turtle"]), }, } @@ -29,6 +30,7 @@ export const input = ref("") export const output = ref("") export const status = ref(Status.NotStarted) export const loading = ref(false) +export const turtleRunId = ref(0) export const size = ref(0) export const debug = ref(false) @@ -100,15 +102,22 @@ export function reset() { export async function run() { loading.value = true const cleanCode = code.value.trim() - if (!cleanCode) return - output.value = "" - status.value = Status.NotStarted - const result = await submit( - { value: cleanCode, language: code.language }, - input.value.trim(), - ) - output.value = result.output || "" - status.value = result.status + if (!cleanCode) { + loading.value = false + return + } + if (code.language === "turtle") { + turtleRunId.value++ + } else { + output.value = "" + status.value = Status.NotStarted + const result = await submit( + { value: cleanCode, language: code.language }, + input.value.trim(), + ) + output.value = result.output || "" + status.value = result.status + } loading.value = false } diff --git a/src/desktop/Content.vue b/src/desktop/Content.vue index 2cdb153..c44364e 100644 --- a/src/desktop/Content.vue +++ b/src/desktop/Content.vue @@ -1,7 +1,9 @@ +
@@ -126,4 +167,9 @@ function handleDebug() { .container { height: calc(100vh - 60px); } + +.canvas { + width: 100%; + height: 100%; +} diff --git a/src/desktop/Debug.vue b/src/desktop/Debug.vue index a9472e5..9906e3e 100644 --- a/src/desktop/Debug.vue +++ b/src/desktop/Debug.vue @@ -21,7 +21,7 @@ import qs from "query-string" import { onMounted, ref, useTemplateRef } from "vue" import { code, debug } from "../composables/code" -import { useDark } from "@vueuse/core"; +import { useDark } from "@vueuse/core" const src = ref("") const loading = ref(true) @@ -29,7 +29,6 @@ const main = useTemplateRef("main") const isDark = useDark() onMounted(() => { - // const url = "http://localhost:8000" const url = import.meta.env.PUBLIC_PYVIZ_URL const base = url + "/iframe-embed.html" diff --git a/src/templates.ts b/src/templates.ts index 01da366..82c3cde 100644 --- a/src/templates.ts +++ b/src/templates.ts @@ -6,6 +6,17 @@ const pythonSource = "" const javaSource = "public class Main {\r\n public static void main(String[] args) {\r\n \r\n }\r\n}" +const turtleSource = `import turtle + +t = turtle.Turtle() +t.speed(1) + +for i in range(4): + t.forward(100) + t.left(90) + +turtle.done()` + export const languageToId = { c: 50, cpp: 54, @@ -18,4 +29,5 @@ export const sources = { cpp: cppSource, java: javaSource, python: pythonSource, + turtle: turtleSource, } diff --git a/src/types.ts b/src/types.ts index 236a726..8e49633 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,6 +1,6 @@ import { RemovableRef } from "@vueuse/core" -export type LANGUAGE = "c" | "python" | "cpp" +export type LANGUAGE = "c" | "python" | "cpp" | "turtle" export interface Code { value: string