add playground.

This commit is contained in:
2023-05-04 11:28:48 +08:00
parent b7f48ccd28
commit 4aa70f22ed
5 changed files with 340 additions and 170 deletions

395
package-lock.json generated
View File

@@ -11,15 +11,15 @@
"@codemirror/lang-cpp": "^6.0.2",
"@codemirror/lang-python": "^6.1.2",
"@element-plus/icons-vue": "^2.1.0",
"@vueuse/core": "^10.1.0",
"@vueuse/core": "^10.1.2",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "1.3.5",
"chart.js": "^4.2.1",
"axios": "1.4.0",
"chart.js": "^4.3.0",
"codemirror": "^6.0.1",
"copy-text-to-clipboard": "^3.1.0",
"date-fns": "^2.29.3",
"highlight.js": "^11.7.0",
"date-fns": "^2.30.0",
"highlight.js": "^11.8.0",
"naive-ui": "^2.34.3",
"normalize.css": "^8.0.1",
"party-js": "^2.2.0",
@@ -31,19 +31,19 @@
},
"devDependencies": {
"@iconify-json/ep": "^1.1.10",
"@types/node": "^18.15.13",
"@vitejs/plugin-legacy": "^4.0.2",
"@vitejs/plugin-vue": "^4.1.0",
"@types/node": "^18.16.3",
"@vitejs/plugin-legacy": "^4.0.3",
"@vitejs/plugin-vue": "^4.2.1",
"markdown-it-shiki": "^0.8.1",
"prettier": "^2.8.7",
"prettier": "^2.8.8",
"terser": "^5.17.1",
"typescript": "^5.0.4",
"unplugin-auto-import": "^0.15.3",
"unplugin-icons": "^0.16.1",
"unplugin-vue-components": "^0.24.1",
"vite": "^4.3.1",
"vite-plugin-vue-markdown": "^0.22.6",
"vue-tsc": "^1.4.4"
"vite": "^4.3.4",
"vite-plugin-vue-markdown": "^0.23.0",
"vue-tsc": "^1.6.4"
}
},
"node_modules/@ampproject/remapping": {
@@ -88,30 +88,30 @@
}
},
"node_modules/@babel/compat-data": {
"version": "7.21.4",
"resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.21.4.tgz",
"integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==",
"version": "7.21.7",
"resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.21.7.tgz",
"integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
"version": "7.21.0",
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.21.0.tgz",
"integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==",
"version": "7.21.8",
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.21.8.tgz",
"integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.18.6",
"@babel/generator": "^7.21.0",
"@babel/helper-compilation-targets": "^7.20.7",
"@babel/helper-module-transforms": "^7.21.0",
"@babel/helpers": "^7.21.0",
"@babel/parser": "^7.21.0",
"@babel/code-frame": "^7.21.4",
"@babel/generator": "^7.21.5",
"@babel/helper-compilation-targets": "^7.21.5",
"@babel/helper-module-transforms": "^7.21.5",
"@babel/helpers": "^7.21.5",
"@babel/parser": "^7.21.8",
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.0",
"@babel/types": "^7.21.0",
"@babel/traverse": "^7.21.5",
"@babel/types": "^7.21.5",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -132,12 +132,12 @@
}
},
"node_modules/@babel/generator": {
"version": "7.21.4",
"resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.21.4.tgz",
"integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.21.5.tgz",
"integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==",
"dev": true,
"dependencies": {
"@babel/types": "^7.21.4",
"@babel/types": "^7.21.5",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -186,12 +186,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.21.4",
"resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz",
"integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz",
"integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.21.4",
"@babel/compat-data": "^7.21.5",
"@babel/helper-validator-option": "^7.21.0",
"browserslist": "^4.21.3",
"lru-cache": "^5.1.1",
@@ -293,9 +293,9 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
"version": "7.18.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
"integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz",
"integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -351,31 +351,31 @@
}
},
"node_modules/@babel/helper-module-imports": {
"version": "7.18.6",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
"integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
"version": "7.21.4",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
"integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.18.6"
"@babel/types": "^7.21.4"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.21.2",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
"integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz",
"integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
"@babel/helper-simple-access": "^7.20.2",
"@babel/helper-environment-visitor": "^7.21.5",
"@babel/helper-module-imports": "^7.21.4",
"@babel/helper-simple-access": "^7.21.5",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.2",
"@babel/types": "^7.21.2"
"@babel/traverse": "^7.21.5",
"@babel/types": "^7.21.5"
},
"engines": {
"node": ">=6.9.0"
@@ -438,12 +438,12 @@
}
},
"node_modules/@babel/helper-simple-access": {
"version": "7.20.2",
"resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
"integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz",
"integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.20.2"
"@babel/types": "^7.21.5"
},
"engines": {
"node": ">=6.9.0"
@@ -474,9 +474,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.19.4",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz",
"integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -516,14 +516,14 @@
}
},
"node_modules/@babel/helpers": {
"version": "7.21.0",
"resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.21.0.tgz",
"integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.21.5.tgz",
"integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==",
"dev": true,
"dependencies": {
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.0",
"@babel/types": "^7.21.0"
"@babel/traverse": "^7.21.5",
"@babel/types": "^7.21.5"
},
"engines": {
"node": ">=6.9.0"
@@ -544,9 +544,9 @@
}
},
"node_modules/@babel/parser": {
"version": "7.21.4",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.4.tgz",
"integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==",
"version": "7.21.8",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.8.tgz",
"integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1691,19 +1691,19 @@
}
},
"node_modules/@babel/traverse": {
"version": "7.21.4",
"resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.4.tgz",
"integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.5.tgz",
"integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.21.4",
"@babel/generator": "^7.21.4",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/generator": "^7.21.5",
"@babel/helper-environment-visitor": "^7.21.5",
"@babel/helper-function-name": "^7.21.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/parser": "^7.21.4",
"@babel/types": "^7.21.4",
"@babel/parser": "^7.21.5",
"@babel/types": "^7.21.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -1712,12 +1712,12 @@
}
},
"node_modules/@babel/types": {
"version": "7.21.4",
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.21.4.tgz",
"integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==",
"version": "7.21.5",
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.21.5.tgz",
"integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.19.4",
"@babel/helper-string-parser": "^7.21.5",
"@babel/helper-validator-identifier": "^7.19.1",
"to-fast-properties": "^2.0.0"
},
@@ -2566,15 +2566,15 @@
"dev": true
},
"node_modules/@types/node": {
"version": "18.15.13",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-18.15.13.tgz",
"integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==",
"version": "18.16.3",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-18.16.3.tgz",
"integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==",
"dev": true
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
"version": "0.0.17",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz",
"integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA=="
},
"node_modules/@uppy/companion-client": {
"version": "2.2.2",
@@ -2627,15 +2627,15 @@
}
},
"node_modules/@vitejs/plugin-legacy": {
"version": "4.0.2",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.0.2.tgz",
"integrity": "sha512-ivnt9sCkgwJTYTWLjuvY6H/HTuiQC1EgzAPkiAvi0yNAssiqOJjyjhG3hAK5LFUUorE0w9kGxn8K0f/74DlbxQ==",
"version": "4.0.3",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.0.3.tgz",
"integrity": "sha512-RqDQOSEmFSNL42vITkNp8HE8Ak1yjGgaav4B6BGcZ8/URK0wikzwSyhNRirHDkp+snflEEk7iPZXTXUYA9exbg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.21.0",
"@babel/core": "^7.21.3",
"@babel/preset-env": "^7.20.2",
"browserslist": "^4.21.5",
"core-js": "^3.29.0",
"core-js": "^3.29.1",
"magic-string": "^0.30.0",
"regenerator-runtime": "^0.13.11",
"systemjs": "^6.14.0"
@@ -2661,9 +2661,9 @@
}
},
"node_modules/@vitejs/plugin-vue": {
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz",
"integrity": "sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==",
"version": "4.2.1",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.2.1.tgz",
"integrity": "sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==",
"dev": true,
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -2704,22 +2704,112 @@
}
},
"node_modules/@volar/vue-language-core": {
"version": "1.4.4",
"resolved": "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.4.4.tgz",
"integrity": "sha512-c3hL6un+CfoOlusGvpypcodmk9ke/ImrWIUc0GkgI+imoQpUGzgu3tEQWlPs604R7AhxeZwWUi8hQNfax0R/zA==",
"version": "1.6.4",
"resolved": "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.6.4.tgz",
"integrity": "sha512-1o+cAtN2DIDNAX/HS8rkjZc8wTMTK+zCab/qtYbvEVlmokhZiDrQeoD9/l0Ug7YCNg+mVuMNHKNBY7pX8U2/Jw==",
"dev": true,
"dependencies": {
"@volar/language-core": "1.4.1",
"@volar/source-map": "1.4.1",
"@vue/compiler-dom": "^3.2.0",
"@vue/compiler-sfc": "^3.2.0",
"@vue/reactivity": "^3.2.0",
"@vue/shared": "^3.2.0",
"@vue/compiler-dom": "^3.3.0-beta.3",
"@vue/compiler-sfc": "^3.3.0-beta.3",
"@vue/reactivity": "^3.3.0-beta.3",
"@vue/shared": "^3.3.0-beta.3",
"minimatch": "^9.0.0",
"muggle-string": "^0.2.2",
"vue-template-compiler": "^2.7.14"
}
},
"node_modules/@volar/vue-language-core/node_modules/@vue/compiler-core": {
"version": "3.3.0-beta.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.0-beta.3.tgz",
"integrity": "sha512-mv2rPo4JHou6ebm7+U/wO1HpA6W1zDfTqbt4fqjoXrMwU4DWNgRcLKTXG6G3cXV4mOe+2YgWspfxEzo7fPTMKg==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.21.3",
"@vue/shared": "3.3.0-beta.3",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
}
},
"node_modules/@volar/vue-language-core/node_modules/@vue/compiler-dom": {
"version": "3.3.0-beta.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.0-beta.3.tgz",
"integrity": "sha512-e7VpjN9wYiuJdJos6Uoe501CzdMkfaEr/27Ks4Ss7Irtcj5YA/S1OROZ35Xl2Pc3ctx6beq5RpcOvnMqh0hcaA==",
"dev": true,
"dependencies": {
"@vue/compiler-core": "3.3.0-beta.3",
"@vue/shared": "3.3.0-beta.3"
}
},
"node_modules/@volar/vue-language-core/node_modules/@vue/compiler-sfc": {
"version": "3.3.0-beta.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.0-beta.3.tgz",
"integrity": "sha512-6shZNooetShjSMHJvgVoE0EM8pOMV5vnrzsHoCU06stzV+kqRJQpbN7xf2s9wK2fgHMIBSMINrM9AuZiQnNCJg==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.20.15",
"@vue/compiler-core": "3.3.0-beta.3",
"@vue/compiler-dom": "3.3.0-beta.3",
"@vue/compiler-ssr": "3.3.0-beta.3",
"@vue/reactivity-transform": "3.3.0-beta.3",
"@vue/shared": "3.3.0-beta.3",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.0",
"postcss": "^8.1.10",
"source-map-js": "^1.0.2"
}
},
"node_modules/@volar/vue-language-core/node_modules/@vue/compiler-ssr": {
"version": "3.3.0-beta.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.0-beta.3.tgz",
"integrity": "sha512-egJ0lEVAod3Hpnw96cJ/0a9qv5f5h5/VCBpKYT8scqkzoMsikh8AJant2omokBCL/Ut5UAMLVQlA5b66+2Ys/g==",
"dev": true,
"dependencies": {
"@vue/compiler-dom": "3.3.0-beta.3",
"@vue/shared": "3.3.0-beta.3"
}
},
"node_modules/@volar/vue-language-core/node_modules/@vue/reactivity": {
"version": "3.3.0-beta.3",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.0-beta.3.tgz",
"integrity": "sha512-9VjWfWgZJ18YXEkfnDfZr33RyLBa6zc0RARLkMqMApWvM26eusZAZ4hhyxlgODBU/mEFk4XOGIAtwwSQedA0MQ==",
"dev": true,
"dependencies": {
"@vue/shared": "3.3.0-beta.3"
}
},
"node_modules/@volar/vue-language-core/node_modules/@vue/reactivity-transform": {
"version": "3.3.0-beta.3",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.0-beta.3.tgz",
"integrity": "sha512-aM3TgBca9QMMu/9B9ASRVvckeZpAdJO9nmQh5UCznhoDYjVxQPS+sCQvH6TLOjPB1MDQMVQYg4ZiPqfVVo7NbA==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.20.15",
"@vue/compiler-core": "3.3.0-beta.3",
"@vue/shared": "3.3.0-beta.3",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.0"
}
},
"node_modules/@volar/vue-language-core/node_modules/@vue/shared": {
"version": "3.3.0-beta.3",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.0-beta.3.tgz",
"integrity": "sha512-st1SnB/Bkbb9TsieeI4TRX9TqHYIR5wvIma3ZtEben55EYSWa1q5u2BhTNgABSdH+rv3Xwfrvpwh5PmCw6Y53g==",
"dev": true
},
"node_modules/@volar/vue-language-core/node_modules/magic-string": {
"version": "0.30.0",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.0.tgz",
"integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.13"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@volar/vue-language-core/node_modules/minimatch": {
"version": "9.0.0",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.0.tgz",
@@ -2733,13 +2823,13 @@
}
},
"node_modules/@volar/vue-typescript": {
"version": "1.4.4",
"resolved": "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.4.4.tgz",
"integrity": "sha512-L61Fk15jlJw3QtIddD4cVE5jei5i6zbLJRiaEMYDDnUKB259/qUrdvnMfnZUFVyDwlevzdstjtaUyreeG/0nPQ==",
"version": "1.6.4",
"resolved": "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.6.4.tgz",
"integrity": "sha512-qKwgP0KVQR/aaH/SN3AP7RB8NnXPWDn3tjyXP6IT6etxkDeZLBLsXWUD9KMak/RvV1DgbXDuz4F9yuZlbt29rA==",
"dev": true,
"dependencies": {
"@volar/typescript": "1.4.1",
"@volar/vue-language-core": "1.4.4"
"@volar/vue-language-core": "1.6.4"
},
"peerDependencies": {
"typescript": "*"
@@ -2874,13 +2964,13 @@
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
},
"node_modules/@vueuse/core": {
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.1.0.tgz",
"integrity": "sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==",
"version": "10.1.2",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.1.2.tgz",
"integrity": "sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==",
"dependencies": {
"@types/web-bluetooth": "^0.0.16",
"@vueuse/metadata": "10.1.0",
"@vueuse/shared": "10.1.0",
"@types/web-bluetooth": "^0.0.17",
"@vueuse/metadata": "10.1.2",
"@vueuse/shared": "10.1.2",
"vue-demi": ">=0.14.0"
}
},
@@ -2907,14 +2997,14 @@
}
},
"node_modules/@vueuse/metadata": {
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.1.0.tgz",
"integrity": "sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg=="
"version": "10.1.2",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.1.2.tgz",
"integrity": "sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ=="
},
"node_modules/@vueuse/shared": {
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.1.0.tgz",
"integrity": "sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==",
"version": "10.1.2",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.1.2.tgz",
"integrity": "sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==",
"dependencies": {
"vue-demi": ">=0.14.0"
}
@@ -3168,9 +3258,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
"version": "1.3.5",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.3.5.tgz",
"integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==",
"version": "1.4.0",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.4.0.tgz",
"integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -3333,14 +3423,14 @@
}
},
"node_modules/chart.js": {
"version": "4.2.1",
"resolved": "https://registry.npmmirror.com/chart.js/-/chart.js-4.2.1.tgz",
"integrity": "sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==",
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/chart.js/-/chart.js-4.3.0.tgz",
"integrity": "sha512-ynG0E79xGfMaV2xAHdbhwiPLczxnNNnasrmPEXriXsPJGjmhOBYzFVEsB65w2qMDz+CaBJJuJD0inE/ab/h36g==",
"dependencies": {
"@kurkle/color": "^0.3.0"
},
"engines": {
"pnpm": "^7.0.0"
"pnpm": ">=7"
}
},
"node_modules/chokidar": {
@@ -3531,9 +3621,12 @@
}
},
"node_modules/date-fns": {
"version": "2.29.3",
"resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.29.3.tgz",
"integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
"version": "2.30.0",
"resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.30.0.tgz",
"integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
"dependencies": {
"@babel/runtime": "^7.21.0"
},
"engines": {
"node": ">=0.11"
}
@@ -4140,9 +4233,9 @@
}
},
"node_modules/highlight.js": {
"version": "11.7.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.7.0.tgz",
"integrity": "sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==",
"version": "11.8.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.8.0.tgz",
"integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==",
"engines": {
"node": ">=12.0.0"
}
@@ -4808,9 +4901,9 @@
"integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="
},
"node_modules/nanoid": {
"version": "3.3.4",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -5007,11 +5100,11 @@
}
},
"node_modules/postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"version": "8.4.23",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.23.tgz",
"integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
"dependencies": {
"nanoid": "^3.3.4",
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -5036,9 +5129,9 @@
"integrity": "sha512-KyoXVDU5OqTpG9LXlB3+y639JAGzl8JSBXLn1J9HTSB3gbKcuInga7bZnXLlxmK94ntTs1EFeZp0lrja2AuBYQ=="
},
"node_modules/prettier": {
"version": "2.8.7",
"resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.7.tgz",
"integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
"version": "2.8.8",
"resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
@@ -5219,9 +5312,9 @@
}
},
"node_modules/rollup": {
"version": "3.20.2",
"resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.20.2.tgz",
"integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==",
"version": "3.21.4",
"resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.21.4.tgz",
"integrity": "sha512-N5LxpvDolOm9ueiCp4NfB80omMDqb45ShtsQw2+OT3f11uJ197dv703NZvznYHP6RWR85wfxanXurXKG3ux2GQ==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
@@ -5938,14 +6031,14 @@
}
},
"node_modules/vite": {
"version": "4.3.1",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.1.tgz",
"integrity": "sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==",
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.4.tgz",
"integrity": "sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==",
"dev": true,
"dependencies": {
"esbuild": "^0.17.5",
"postcss": "^8.4.21",
"rollup": "^3.20.2"
"postcss": "^8.4.23",
"rollup": "^3.21.0"
},
"bin": {
"vite": "bin/vite.js"
@@ -5986,9 +6079,9 @@
}
},
"node_modules/vite-plugin-vue-markdown": {
"version": "0.22.6",
"resolved": "https://registry.npmmirror.com/vite-plugin-vue-markdown/-/vite-plugin-vue-markdown-0.22.6.tgz",
"integrity": "sha512-BB0/yYoRO+4hceFZRgU/iAOpgklFvo/eHLapOkavIoDkP0jeoQubOMTEF8K4FuYRX9jaN5WcP2TrfhUgc7RuUg==",
"version": "0.23.0",
"resolved": "https://registry.npmmirror.com/vite-plugin-vue-markdown/-/vite-plugin-vue-markdown-0.23.0.tgz",
"integrity": "sha512-/XG8pH0xiPeuU9+IfnWTRM57ETga3ZfxB7/tHEXy7HuCUTwCGTtbnvHMJEa6njJus8n3d8oyZHtzo8wh+bVV2g==",
"dev": true,
"dependencies": {
"@antfu/utils": "^0.7.2",
@@ -6106,13 +6199,13 @@
}
},
"node_modules/vue-tsc": {
"version": "1.4.4",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.4.4.tgz",
"integrity": "sha512-2XsCjF2mLo6gwOVcOpngwJkP8GzYQjNh20A+Pr2FGdsWzr9jjXJ0k08/DfcslfncsuCrTrnWtb4KEL3gcDtlNA==",
"version": "1.6.4",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.6.4.tgz",
"integrity": "sha512-8rg8S1AhRJ6/WriENQEhyqH5wsxSxuD5iaD+QnkZn2ArZ6evlhqfBAIcVN8mfSyCV9DeLkQXkOSv/MaeJiJPAQ==",
"dev": true,
"dependencies": {
"@volar/vue-language-core": "1.4.4",
"@volar/vue-typescript": "1.4.4",
"@volar/vue-language-core": "1.6.4",
"@volar/vue-typescript": "1.6.4",
"semver": "^7.3.8"
},
"bin": {

View File

@@ -13,15 +13,15 @@
"@codemirror/lang-cpp": "^6.0.2",
"@codemirror/lang-python": "^6.1.2",
"@element-plus/icons-vue": "^2.1.0",
"@vueuse/core": "^10.1.0",
"@vueuse/core": "^10.1.2",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "1.3.5",
"chart.js": "^4.2.1",
"axios": "1.4.0",
"chart.js": "^4.3.0",
"codemirror": "^6.0.1",
"copy-text-to-clipboard": "^3.1.0",
"date-fns": "^2.29.3",
"highlight.js": "^11.7.0",
"date-fns": "^2.30.0",
"highlight.js": "^11.8.0",
"naive-ui": "^2.34.3",
"normalize.css": "^8.0.1",
"party-js": "^2.2.0",
@@ -33,18 +33,18 @@
},
"devDependencies": {
"@iconify-json/ep": "^1.1.10",
"@types/node": "^18.15.13",
"@vitejs/plugin-legacy": "^4.0.2",
"@vitejs/plugin-vue": "^4.1.0",
"@types/node": "^18.16.3",
"@vitejs/plugin-legacy": "^4.0.3",
"@vitejs/plugin-vue": "^4.2.1",
"markdown-it-shiki": "^0.8.1",
"prettier": "^2.8.7",
"prettier": "^2.8.8",
"terser": "^5.17.1",
"typescript": "^5.0.4",
"unplugin-auto-import": "^0.15.3",
"unplugin-icons": "^0.16.1",
"unplugin-vue-components": "^0.24.1",
"vite": "^4.3.1",
"vite-plugin-vue-markdown": "^0.22.6",
"vue-tsc": "^1.4.4"
"vite": "^4.3.4",
"vite-plugin-vue-markdown": "^0.23.0",
"vue-tsc": "^1.6.4"
}
}

View File

@@ -1,5 +1,73 @@
<script lang="ts" setup></script>
<script lang="ts" setup>
import CodeEditor from "~/shared/CodeEditor.vue"
import { LANGUAGE_SHOW_VALUE } from "~/utils/constants"
import { LANGUAGE } from "~/utils/types"
const code = ref("")
const input = ref("输入信息")
const output = ref("运行结果")
const language = ref<LANGUAGE>("C")
const languages: LANGUAGE[] = ["C", "Python3"]
const options: DropdownOption[] = languages.map((it) => ({
label: () => [
h("img", {
src: `/${it}.svg`,
style: {
width: "16px",
height: "16px",
marginRight: "8px",
transform: "translateY(3px)",
},
}),
LANGUAGE_SHOW_VALUE[it],
],
value: it,
}))
</script>
<template>
<n-button>测试猫</n-button>
<n-layout>
<n-layout-header bordered class="header">
<n-space align="center" justify="space-between" class="header">
<div class="title">徐越的自测猫</div>
<n-space>
<n-select class="language" v-model="language" :options="options" />
<n-button type="primary">运行 F5</n-button>
</n-space>
</n-space>
</n-layout-header>
<n-layout-content>
<n-grid :cols="2" class="content">
<n-gi>
<CodeEditor v-model="code" :language="language" />
</n-gi>
<n-gi>
<n-grid :cols="1" class="content">
<n-gi>
<CodeEditor v-model="input" :language="language" />
</n-gi>
<n-gi>
<CodeEditor v-model="output" :language="language" readonly />
</n-gi>
</n-grid>
</n-gi>
</n-grid>
</n-layout-content>
</n-layout>
</template>
<style scoped></style>
<style scoped>
.header {
height: 60px;
padding: 0 8px;
}
.title {
font-size: 18px;
}
.content {
height: calc(100vh - 60px);
}
.language {
width: 120px;
}
</style>

View File

@@ -22,12 +22,14 @@ interface Props {
language?: LANGUAGE
fontSize?: number
height?: string
readonly?: boolean
}
const props = withDefaults(defineProps<Props>(), {
language: "C",
fontSize: 20,
height: "100%",
readonly: false,
})
const code = ref(props.modelValue)
@@ -55,11 +57,9 @@ function onChange(v: string) {
v-model="code"
:extensions="[styleTheme, lang, isDark ? oneDark : smoothy]"
indentWithTab
:disabled="props.readonly"
:tabSize="4"
@change="onChange"
:style="{
height: props.height,
fontSize: props.fontSize + 'px',
}"
:style="{ height: props.height, fontSize: props.fontSize + 'px' }"
/>
</template>

View File

@@ -59,6 +59,15 @@ const menus = computed<MenuOption[]>(() => [
show: userStore.isAdminRole,
key: "admin",
},
{
label: () =>
h(
RouterLink,
{ to: "/play", target: "_blank" },
{ default: () => "自测" }
),
key: "play",
},
])
const options: Array<DropdownOption | DropdownDividerOption> = [