some addtions

This commit is contained in:
Alexander Medvedev 2026-08-10 21:40:43 +02:00
parent e1a71e2e79
commit 18dfb3c73e
24 changed files with 1378 additions and 291 deletions

166
bun.lock
View File

@ -9,7 +9,7 @@
"devDependencies": {
"@types/bun": "^1.3.14",
"vitepress": "^2.0.0-alpha.18",
"vue": "^3.6.0-beta.17",
"vue": "^3.6.0-rc.2",
},
},
},
@ -22,83 +22,71 @@
"@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="],
"@docsearch/css": ["@docsearch/css@4.6.3", "", {}, "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ=="],
"@docsearch/css": ["@docsearch/css@4.7.0", "", {}, "sha512-Sk5xkdRFeE7PeWjG9l4AfTwdvMfr9wHiwNNCpHXT4v4SNyNMKdHGvEILc31BgaVFGDDNbv5u/a73tofRiwbEZw=="],
"@docsearch/js": ["@docsearch/js@4.6.3", "", {}, "sha512-qUIX2b4Apew3tv4F0qhmgShsl/Lfw4m6mqv/5/5dWNxwTcDdLMp2s3YwZ+NMGh3IKCg0pBaXm7Q5VdyU5Rj+cQ=="],
"@docsearch/js": ["@docsearch/js@4.7.0", "", {}, "sha512-x5lCqu1tetgsJFkjQ6VSocbHldsRkGEgwg5N98Vx21sq/V5wcmj4u226PY9k+TEpIgQ772zlYbPLTPicWyGnpA=="],
"@docsearch/sidepanel-js": ["@docsearch/sidepanel-js@4.6.3", "", {}, "sha512-grGSmvXzG0if+mrzdIKykvpIAuEQ9u0sEJ2eLRRCaQfJvsWqh2C2/aY04bIzWvDh7myi5rvl8D+tUNsVrjYQ3A=="],
"@docsearch/sidepanel-js": ["@docsearch/sidepanel-js@4.7.0", "", {}, "sha512-A8r34jCU8kcIk2viECEn2msA28ojUF1BLi/3v5OWWc5G2N3jOuuumBXoeYjfr8dA0UxgFSy5R2bt12dnFJQSyA=="],
"@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="],
"@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="],
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="],
"@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.89", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-hRaCY5s2G5oWAIhc4LCGYn6g6RrwLL4zhoLOT+KUO3joVCxVlZKA+839bv/47Nbe9/ZD4UA6dznZ4XPYcI53wA=="],
"@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.93", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-/XhANjfGYOuqvSR3TmUnkQkINvQ4GVjVuukvymRbxtVFBvIq/yiXJqCDycKcQPT401OYT9H2vIY6ihAlz1QIAw=="],
"@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="],
"@oxc-project/types": ["@oxc-project/types@0.143.0", "", {}, "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA=="],
"@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="],
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.3", "", { "os": "android", "cpu": "arm64" }, "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw=="],
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ=="],
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA=="],
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.1.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw=="],
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA=="],
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.1.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g=="],
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg=="],
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.1.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA=="],
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.3", "", { "os": "linux", "cpu": "arm" }, "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw=="],
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.1.5", "", { "os": "linux", "cpu": "arm" }, "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw=="],
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw=="],
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q=="],
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q=="],
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA=="],
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w=="],
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.1.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg=="],
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg=="],
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.1.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA=="],
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w=="],
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ=="],
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A=="],
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg=="],
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.3", "", { "os": "none", "cpu": "arm64" }, "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug=="],
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.5", "", { "os": "none", "cpu": "arm64" }, "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw=="],
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw=="],
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.1.5", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA=="],
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.1.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw=="],
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.1.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA=="],
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg=="],
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="],
"@shikijs/core": ["@shikijs/core@4.3.1", "", { "dependencies": { "@shikijs/primitive": "4.3.1", "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA=="],
"@shikijs/core": ["@shikijs/core@4.4.3", "", { "dependencies": { "@shikijs/primitive": "4.4.3", "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" } }, "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg=="],
"@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ=="],
"@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ=="],
"@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg=="],
"@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w=="],
"@shikijs/langs": ["@shikijs/langs@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1" } }, "sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ=="],
"@shikijs/langs": ["@shikijs/langs@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3" } }, "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A=="],
"@shikijs/primitive": ["@shikijs/primitive@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A=="],
"@shikijs/primitive": ["@shikijs/primitive@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ=="],
"@shikijs/themes": ["@shikijs/themes@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1" } }, "sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA=="],
"@shikijs/themes": ["@shikijs/themes@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3" } }, "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw=="],
"@shikijs/transformers": ["@shikijs/transformers@4.3.1", "", { "dependencies": { "@shikijs/core": "4.3.1", "@shikijs/types": "4.3.1" } }, "sha512-z6ir0bGDgWcF2FduktEfPgIsdOtIlDiLAjFBgBzE42Q9xHbkkIXZtORHzlLVB71iZP9elEcqKg6keajvOUwE2A=="],
"@shikijs/transformers": ["@shikijs/transformers@4.4.3", "", { "dependencies": { "@shikijs/core": "4.4.3", "@shikijs/types": "4.4.3" } }, "sha512-oJSARV6NaWd+rnNJbtnpAdj3Zg0ZVyzsnMgb3vi3HA+35y8lBWUCpOnWsmyiXZIikY+x1BDqrQUgmxfzWh7Jvw=="],
"@shikijs/types": ["@shikijs/types@4.3.1", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g=="],
"@shikijs/types": ["@shikijs/types@4.4.3", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g=="],
"@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="],
"@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
"@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
"@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="],
"@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="],
@ -116,7 +104,7 @@
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
"@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.7", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.2.25" } }, "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg=="],
"@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.8", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.2.25" } }, "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew=="],
"@vue/compiler-core": ["@vue/compiler-core@3.6.0-rc.2", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/shared": "3.6.0-rc.2", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xx79h4EpJktQBShelXNKaRuvn9N6YsYL1j+RXdvPKzI+8tohYziBJbxOFGAkdcOKBwKc2SIWV4DOlTAMhE96yQ=="],
@ -128,11 +116,11 @@
"@vue/compiler-vapor": ["@vue/compiler-vapor@3.6.0-rc.2", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/compiler-dom": "3.6.0-rc.2", "@vue/shared": "3.6.0-rc.2", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-QbrA01pbj9xemF2McgBopyaOwj3kQGN0W1GW5EdFXORIT4fQQJpmUOj40h99S3bk09gLs5bFTRS4YE+Oyw/F9w=="],
"@vue/devtools-api": ["@vue/devtools-api@8.1.5", "", { "dependencies": { "@vue/devtools-kit": "^8.1.5" } }, "sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ=="],
"@vue/devtools-api": ["@vue/devtools-api@8.2.1", "", { "dependencies": { "@vue/devtools-kit": "^8.2.1" } }, "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A=="],
"@vue/devtools-kit": ["@vue/devtools-kit@8.1.5", "", { "dependencies": { "@vue/devtools-shared": "^8.1.5", "birpc": "^2.6.1", "hookable": "^5.5.3", "perfect-debounce": "^2.0.0" } }, "sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA=="],
"@vue/devtools-kit": ["@vue/devtools-kit@8.2.1", "", { "dependencies": { "@vue/devtools-shared": "^8.2.1", "birpc": "^2.6.1", "hookable": "^5.5.3", "perfect-debounce": "^2.0.0" } }, "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ=="],
"@vue/devtools-shared": ["@vue/devtools-shared@8.1.5", "", {}, "sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ=="],
"@vue/devtools-shared": ["@vue/devtools-shared@8.2.1", "", {}, "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g=="],
"@vue/reactivity": ["@vue/reactivity@3.6.0-rc.2", "", { "dependencies": { "@vue/shared": "3.6.0-rc.2" } }, "sha512-B01EoSTcaVQiJwZDoSoeKYClVgj60BHN43oHEcxXhPVLdxsXI0SOiQuskUskQDZn2ma08llICKJohL60o+UamA=="],
@ -144,15 +132,15 @@
"@vue/server-renderer": ["@vue/server-renderer@3.6.0-rc.2", "", { "dependencies": { "@vue/compiler-ssr": "3.6.0-rc.2", "@vue/runtime-dom": "3.6.0-rc.2", "@vue/shared": "3.6.0-rc.2" } }, "sha512-TIsqoYljs6b0wfoCDhv4EeU3Du2a8gTadkaTGMjIYLTLlO4p8r4VdDqfNp/ZMAm87bW4ST1naBMRe+bXQBpAeQ=="],
"@vue/shared": ["@vue/shared@3.5.39", "", {}, "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA=="],
"@vue/shared": ["@vue/shared@3.5.41", "", {}, "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA=="],
"@vueuse/core": ["@vueuse/core@14.3.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.3.0", "@vueuse/shared": "14.3.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw=="],
"@vueuse/core": ["@vueuse/core@14.4.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.4.0", "@vueuse/shared": "14.4.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-X4WHz1HlCzCBoYXesUkifzzWBAcZgXG8Fi5iNPQg/epdzOB3gu8Fawj3hvuwYR1nGcXGnvxwYYcUC/71++svtQ=="],
"@vueuse/integrations": ["@vueuse/integrations@14.3.0", "", { "dependencies": { "@vueuse/core": "14.3.0", "@vueuse/shared": "14.3.0" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA=="],
"@vueuse/integrations": ["@vueuse/integrations@14.4.0", "", { "dependencies": { "@vueuse/core": "14.4.0", "@vueuse/shared": "14.4.0" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-oJz9qTgczvA7L1nXQFRU7h8tQbOCoiceqvMMhT9XYMyOGTqLJ2rEa09PON+nD2t48sZUfeOmg4eaWJXV4sZb/w=="],
"@vueuse/metadata": ["@vueuse/metadata@14.3.0", "", {}, "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw=="],
"@vueuse/metadata": ["@vueuse/metadata@14.4.0", "", {}, "sha512-swx/255R6JyHZFJhx845iz5CRWDZdCfvkZOpACWc5+c5WHcG24mv8gUT1WIdFQaHt6dq79rvILd9QnCWiyVm9g=="],
"@vueuse/shared": ["@vueuse/shared@14.3.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg=="],
"@vueuse/shared": ["@vueuse/shared@14.4.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-JRgY90Sz8DDtPMsaDflvPMp9xYk69JZAmbuDvAquUVXKr2gEjqtzGNTTthLfckH0BzBqvnu31gb4a8TGLRe79g=="],
"birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="],
@ -192,29 +180,29 @@
"html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
"lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
"lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="],
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="],
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="],
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="],
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="],
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="],
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="],
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="],
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="],
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="],
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="],
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="],
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="],
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="],
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="],
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="],
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="],
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="],
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="],
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="],
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="],
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="],
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
@ -234,7 +222,7 @@
"minisearch": ["minisearch@7.2.0", "", {}, "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg=="],
"nanoid": ["nanoid@3.3.15", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA=="],
"nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="],
"oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="],
@ -248,7 +236,7 @@
"picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="],
"postcss": ["postcss@8.5.16", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg=="],
"postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="],
"property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="],
@ -258,9 +246,9 @@
"regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="],
"rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="],
"rolldown": ["rolldown@1.2.3", "", { "dependencies": { "@oxc-project/types": "=0.143.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.2.3", "@rolldown/binding-darwin-arm64": "1.2.3", "@rolldown/binding-darwin-x64": "1.2.3", "@rolldown/binding-freebsd-x64": "1.2.3", "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", "@rolldown/binding-linux-arm64-gnu": "1.2.3", "@rolldown/binding-linux-arm64-musl": "1.2.3", "@rolldown/binding-linux-ppc64-gnu": "1.2.3", "@rolldown/binding-linux-s390x-gnu": "1.2.3", "@rolldown/binding-linux-x64-gnu": "1.2.3", "@rolldown/binding-linux-x64-musl": "1.2.3", "@rolldown/binding-openharmony-arm64": "1.2.3", "@rolldown/binding-win32-arm64-msvc": "1.2.3", "@rolldown/binding-win32-x64-msvc": "1.2.3" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A=="],
"shiki": ["shiki@4.3.1", "", { "dependencies": { "@shikijs/core": "4.3.1", "@shikijs/engine-javascript": "4.3.1", "@shikijs/engine-oniguruma": "4.3.1", "@shikijs/langs": "4.3.1", "@shikijs/themes": "4.3.1", "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw=="],
"shiki": ["shiki@4.4.3", "", { "dependencies": { "@shikijs/core": "4.4.3", "@shikijs/engine-javascript": "4.4.3", "@shikijs/engine-oniguruma": "4.4.3", "@shikijs/langs": "4.4.3", "@shikijs/themes": "4.4.3", "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g=="],
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
@ -274,8 +262,6 @@
"trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="],
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
"unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="],
@ -292,9 +278,9 @@
"vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="],
"vite": ["vite@8.1.4", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.5", "postcss": "^8.5.16", "rolldown": "~1.1.4", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.3.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ=="],
"vite": ["vite@8.2.1", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.25", "rolldown": "~1.2.1", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw=="],
"vitepress": ["vitepress@2.0.0-alpha.18", "", { "dependencies": { "@docsearch/css": "^4.6.3", "@docsearch/js": "^4.6.3", "@docsearch/sidepanel-js": "^4.6.3", "@iconify-json/simple-icons": "^1.2.87", "@shikijs/core": "^4.3.0", "@shikijs/transformers": "^4.3.0", "@shikijs/types": "^4.3.0", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^6.0.7", "@vue/devtools-api": "^8.1.4", "@vue/shared": "^3.5.39", "@vueuse/core": "^14.3.0", "@vueuse/integrations": "^14.3.0", "focus-trap": "^8.2.2", "mark.js": "8.11.1", "minisearch": "^7.2.0", "shiki": "^4.3.0", "vite": "^8.1.3", "vue": "^3.5.39" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-Lk1G2/QqSf+MwNLICl9fmzWOtoCEwjZoWgaQy41QvWTfcGpLE9XwJDbcCyES/9rj6R2g1zFqFvLVkYKLLDALFw=="],
"vitepress": ["vitepress@2.0.0-alpha.19", "", { "dependencies": { "@docsearch/css": "^4.7.0", "@docsearch/js": "^4.7.0", "@docsearch/sidepanel-js": "^4.7.0", "@iconify-json/simple-icons": "^1.2.92", "@shikijs/core": "^4.4.1", "@shikijs/transformers": "^4.4.1", "@shikijs/types": "^4.4.1", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^6.0.8", "@vue/devtools-api": "^8.2.1", "@vue/shared": "^3.5.40", "@vueuse/core": "^14.4.0", "@vueuse/integrations": "^14.4.0", "focus-trap": "^8.2.2", "mark.js": "8.11.1", "minisearch": "^7.2.0", "shiki": "^4.4.1", "vite": "^8.2.0", "vue": "^3.5.40" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-WnBsb0Bwr43kXKyiis+lld/7ri3hnMbthS8N3hpFtjjwsdLO4IRmiAE08D7aud4q6oMDf9uwRowxzNqRFe/amw=="],
"vue": ["vue@3.6.0-rc.2", "", { "dependencies": { "@vue/compiler-dom": "3.6.0-rc.2", "@vue/compiler-sfc": "3.6.0-rc.2", "@vue/runtime-dom": "3.6.0-rc.2", "@vue/runtime-vapor": "3.6.0-rc.2", "@vue/server-renderer": "3.6.0-rc.2", "@vue/shared": "3.6.0-rc.2" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-pBgoISqETcufJ1e92vVW2/D5MEbCm2XHlC/5dq3hWq8s17tx9v5BEdYv4hojJ0yEEDidYxUL7itS+vV32wfZrw=="],
@ -322,30 +308,48 @@
"@vue/server-renderer/@vue/shared": ["@vue/shared@3.6.0-rc.2", "", {}, "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ=="],
"vitepress/vue": ["vue@3.5.39", "", { "dependencies": { "@vue/compiler-dom": "3.5.39", "@vue/compiler-sfc": "3.5.39", "@vue/runtime-dom": "3.5.39", "@vue/server-renderer": "3.5.39", "@vue/shared": "3.5.39" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA=="],
"hast-util-to-html/@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
"hast-util-whitespace/@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
"mdast-util-to-hast/@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
"vitepress/vue": ["vue@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/compiler-sfc": "3.5.41", "@vue/runtime-dom": "3.5.41", "@vue/server-renderer": "3.5.41", "@vue/shared": "3.5.41" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg=="],
"vue/@vue/shared": ["@vue/shared@3.6.0-rc.2", "", {}, "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ=="],
"@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="],
"vitepress/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.39", "", { "dependencies": { "@vue/compiler-core": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg=="],
"vitepress/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.41", "", { "dependencies": { "@vue/compiler-core": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw=="],
"vitepress/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.39", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/compiler-core": "3.5.39", "@vue/compiler-dom": "3.5.39", "@vue/compiler-ssr": "3.5.39", "@vue/shared": "3.5.39", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.15", "source-map-js": "^1.2.1" } }, "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg=="],
"vitepress/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/compiler-core": "3.5.41", "@vue/compiler-dom": "3.5.41", "@vue/compiler-ssr": "3.5.41", "@vue/shared": "3.5.41", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.19", "source-map-js": "^1.2.1" } }, "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ=="],
"vitepress/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.39", "", { "dependencies": { "@vue/reactivity": "3.5.39", "@vue/runtime-core": "3.5.39", "@vue/shared": "3.5.39", "csstype": "^3.2.3" } }, "sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww=="],
"vitepress/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.41", "", { "dependencies": { "@vue/reactivity": "3.5.41", "@vue/runtime-core": "3.5.41", "@vue/shared": "3.5.41", "csstype": "^3.2.3" } }, "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw=="],
"vitepress/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.39", "", { "dependencies": { "@vue/compiler-ssr": "3.5.39", "@vue/shared": "3.5.39" }, "peerDependencies": { "vue": "3.5.39" } }, "sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw=="],
"vitepress/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.41", "", { "dependencies": { "@vue/compiler-ssr": "3.5.41", "@vue/runtime-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ=="],
"vitepress/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.39", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/shared": "3.5.39", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw=="],
"vitepress/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/shared": "3.5.41", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg=="],
"vitepress/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.39", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/shared": "3.5.39", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw=="],
"vitepress/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="],
"vitepress/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.39", "", { "dependencies": { "@vue/compiler-dom": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw=="],
"vitepress/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/shared": "3.5.41", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg=="],
"vitepress/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.39", "", { "dependencies": { "@vue/shared": "3.5.39" } }, "sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog=="],
"vitepress/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A=="],
"vitepress/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.39", "", { "dependencies": { "@vue/reactivity": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw=="],
"vitepress/vue/@vue/compiler-sfc/postcss": ["postcss@8.5.22", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ=="],
"vitepress/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.39", "", { "dependencies": { "@vue/compiler-dom": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw=="],
"vitepress/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.41", "", { "dependencies": { "@vue/shared": "3.5.41" } }, "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA=="],
"vitepress/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.41", "", { "dependencies": { "@vue/reactivity": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg=="],
"vitepress/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A=="],
"vitepress/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="],
"vitepress/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="],
"vitepress/vue/@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="],
"vitepress/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="],
}
}

View File

@ -23,6 +23,13 @@ export const en = defineConfig({
{ text: "Helping & Donating", link: "/about/helping" },
],
},
{
text: "Administration",
items: [
{ text: "Overview", link: "/admin/introduction" },
{ text: "Migrating from Bukkit", link: "/admin/migrating-from-bukkit" },
],
},
{
text: "Configuration",
items: [
@ -70,6 +77,32 @@ export const en = defineConfig({
text: "Introduction",
link: "/plugin-dev/introduction",
},
{
text: "Migrating from Bukkit",
collapsed: false,
items: [
{
text: "Overview",
link: "/plugin-dev/migrating-from-bukkit/",
},
{
text: "Commands",
link: "/plugin-dev/migrating-from-bukkit/commands",
},
{
text: "Events",
link: "/plugin-dev/migrating-from-bukkit/events",
},
{
text: "Inventories & GUIs",
link: "/plugin-dev/migrating-from-bukkit/inventories",
},
{
text: "Configuration & Data",
link: "/plugin-dev/migrating-from-bukkit/configuration",
},
],
},
{
text: "Rust",
collapsed: false,
@ -113,6 +146,10 @@ export const en = defineConfig({
text: "Basic Logic",
link: "/plugin-dev/python/basic-logic",
},
{
text: "First Command",
link: "/plugin-dev/python/first-command",
},
{
text: "Events",
link: "/plugin-dev/python/events",
@ -127,6 +164,10 @@ export const en = defineConfig({
text: "Quick Start",
link: "/plugin-dev/csharp/quick-start",
},
{
text: "First Command",
link: "/plugin-dev/csharp/first-command",
},
],
},
{
@ -137,6 +178,10 @@ export const en = defineConfig({
text: "Quick Start",
link: "/plugin-dev/c/quick-start",
},
{
text: "First Command",
link: "/plugin-dev/c/first-command",
},
],
},
{
@ -151,6 +196,10 @@ export const en = defineConfig({
text: "Basic Logic",
link: "/plugin-dev/go/basic-logic",
},
{
text: "First Command",
link: "/plugin-dev/go/first-command",
},
],
},
{
@ -161,6 +210,10 @@ export const en = defineConfig({
text: "Quick Start",
link: "/plugin-dev/kotlin/quick-start",
},
{
text: "First Command",
link: "/plugin-dev/kotlin/first-command",
},
],
},
],

View File

@ -28,7 +28,7 @@ Für Code-Beiträge lesen Sie bitte unseren [Beitragsleitfaden](/developer/contr
## 3. Finanzielle Unterstützung & Spenden
Die Pflege einer hochleistungsfähigen Minecraft-Server-Software erfordert viel Mühe und Ressourcen.
- **Sponsoring & Spenden**: Sehen Sie sich unsere Finanzierungsoptionen auf [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) oder auf unserer offiziellen Website [pumpkinmc.org](https://pumpkinmc.org/) an.
- **Spenden**: Sehen Sie sich unsere Finanzierungsoptionen auf unserer offiziellen Spenden-Website [pumpkinmc.org/donate](https://pumpkinmc.org/donate) an.
- **Server-Infrastruktur**: Sie können auch durch die Bereitstellung von Testumgebungen helfen.
---

View File

@ -33,7 +33,7 @@ For code contributions, please read our dedicated [Contributing Guide](/develope
Maintaining and advancing high-performance Minecraft server software requires dedicated effort and resources. If you would like to financially back the development of Pumpkin:
- **Sponsorship & Donations**: Check out our funding options on [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) or links on our official site [pumpkinmc.org](https://pumpkinmc.org/).
- **Donations**: Check out our funding options on our official donation page [pumpkinmc.org/donate](https://pumpkinmc.org/donate).
- **Server Infrastructure**: You can also assist by providing benchmark test environments, hardware hosting, or testing infrastructure.
---

View File

@ -0,0 +1,25 @@
# Administration Overview
Welcome to the **Admin Section** for Pumpkin server administrators. Pumpkin is a high-performance, multithreaded Minecraft server written in Rust, engineered to support massive player counts with minimal resource consumption.
---
## Key Features for Server Admins
- **Extreme Multithreading**: Designed from the ground up for modern multi-core processors.
- **WASM Plugin Architecture**: Secure, sandboxed plugin execution in Rust, Python, Kotlin, C#, Go, or C without JVM overhead.
- **Native Cross-Proxy Support**: Out-of-the-box support for Velocity, BungeeCord, and modern proxy forwarding.
- **TOML-Based Configuration**: Clean, human-readable configuration files located in `pumpkin.toml` and feature-specific TOML configs.
---
## Admin Guides & Topics
Explore the following administration guides:
- [Migrating from Bukkit / Paper / Spigot Server](./migrating-from-bukkit) — Key differences in server administration, plugins, world storage, and performance.
- [Server Configuration](../config/introduction) — Detailed breakdown of `pumpkin.toml` settings.
- [Proxy Setup](../config/proxy) — Configuring BungeeCord & Velocity player forwarding.
- [Commands & Permissions](../config/commands) — Managing in-game operator commands and permissions.
- [Authentication](../config/authentication) — Online-mode vs offline-mode and Yggdrasil settings.
- [Troubleshooting & Common Issues](../troubleshooting/common_issues) — Resolving port binding, memory, and plugin loading issues.

View File

@ -0,0 +1,72 @@
# Migrating a Server from Bukkit / Spigot / Paper to Pumpkin
Switching your server environment from Paper/Spigot to Pumpkin brings massive performance gains, multithreaded tick execution, and reduced RAM usage. However, because Pumpkin is built in Rust rather than running on the Java Virtual Machine, there are fundamental architectural differences that server administrators need to know.
---
## 1. Major Server Differences At-a-Glance
| Feature / Aspect | Bukkit / Spigot / Paper | Pumpkin |
| :--- | :--- | :--- |
| **Runtime Environment** | Java Virtual Machine (JVM) | Native Binary (Rust) |
| **Main Thread Architecture** | Single-threaded tick loop with asynchronous offloading | Multithreaded tick execution across CPU cores |
| **Plugin Engine** | `.jar` files compiled for Java / Bukkit API | `.wasm` WebAssembly components running in sandboxed WASM runtime |
| **Plugin Languages** | Java / Kotlin / Scala | Rust, Python, Kotlin, C#, Go, C |
| **Configuration Format** | `server.properties` & `paper.yml` / `spigot.yml` | `pumpkin.toml` & structured TOML configuration files |
| **Memory Footprint** | High baseline (JVM garbage collection overhead) | Micro baseline (Native memory management) |
---
## 2. Plugins & Extensions
- **Java `.jar` Plugins Cannot Run Directly**: Standard Bukkit/Spigot `.jar` plugins are bytecode compiled for the Java JVM and Bukkit API. They cannot be dropped into Pumpkin's `plugins/` directory.
- **WebAssembly Plugins**: Pumpkin uses WebAssembly (`.wasm`) for plugins. This sandboxes plugins for memory safety and security while allowing developers to write plugins in virtually any language.
- **Porting Plugins**: If you maintain custom internal plugins, consult our [Developer Migration Guide](../plugin-dev/migrating-from-bukkit/index) to convert Java logic to Pumpkin plugin bindings.
---
## 3. Configuration & Properties
Instead of `server.properties` and YAML files, Pumpkin consolidates server configuration into clean TOML files:
| Paper / Spigot Setting | Pumpkin `pumpkin.toml` Equivalent |
| :--- | :--- |
| `server-port=25565` | `server_address = "0.0.0.0:25565"` |
| `motd=...` | `motd = "A Pumpkin Server"` |
| `max-players=20` | `max_players = 20` |
| `online-mode=true` | `online_mode = true` |
| `view-distance=10` | `view_distance = 10` |
| `simulation-distance=8` | `simulation_distance = 8` |
---
## 4. World & Data Storage
- **Anvil Format Compatibility**: Pumpkin reads standard Minecraft chunk data format.
- **Dimension Directories**: Make sure `world`, `world_nether`, and `world_the_end` directory structures are mapped appropriately when copying existing worlds from Paper/Spigot server installations.
---
## 5. Performance Tuning & Startup
Unlike Paper servers which require complex JVM flags (`-XX:+UseG1GC`, `-Xms`, `-Xmx`), Pumpkin runs as a direct native binary:
```bash
# Starting Pumpkin Server on Linux/macOS
./pumpkin
# Or running via Docker
docker run -p 25565:25565 -v ./data:/data pumpkinmc/pumpkin:latest
```
No garbage collection tuning or JVM heap allocation tuning is needed.
---
## Admin Checklist for Migration
1. [ ] Back up your existing Paper/Spigot server data and world files.
2. [ ] Map `server.properties` values into Pumpkin's `pumpkin.toml`.
3. [ ] Check if replacement WebAssembly plugins (`.wasm`) are available for your essential server utilities.
4. [ ] Configure Proxy support (`Velocity` / `BungeeCord`) if running behind a server network.
5. [ ] Launch `./pumpkin` and verify player connectivity and performance logs.

View File

@ -0,0 +1,90 @@
# Creating Your First Command
Writing commands in C for Pumpkin is low-overhead, fast, and uses C WIT bindings.
---
## 1. Quick Example
Here is a complete C plugin file (`main.c`) that registers a `/hello` command with permission checks and sends a response back to the player.
```c [main.c]
#include <stdio.h>
#include "pumpkin.h"
void plugin_on_load(pumpkin_context_t ctx) {
// 1. Register permission node
pumpkin_permission_t perm = {
.node = "my_c_plugin:hello",
.description = "Allows executing the /hello command",
.default_access = PERMISSION_DEFAULT_ALLOW
};
pumpkin_register_permission(ctx, &perm);
// 2. Build and register command tree
const char* names[] = {"hello", "hi"};
pumpkin_command_t cmd = pumpkin_command_new(names, 2, "Greets the player");
pumpkin_register_command(ctx, cmd, "my_c_plugin:hello");
}
int32_t plugin_handle_command(uint32_t command_id, pumpkin_sender_t sender, pumpkin_server_t server) {
pumpkin_sender_send_message(sender, "Hello from C Plugin!");
return 1;
}
pumpkin_metadata_t plugin_get_metadata() {
pumpkin_metadata_t meta = {
.name = "my_c_plugin",
.version = "0.1.0",
.description = "My first Pumpkin C plugin"
};
return meta;
}
```
---
## 2. In-Game Preview
Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft:
<img src="/assets/first_command_preview.png" alt="In-Game Command Autocompletion Preview" width="500"/>
---
## 3. How It Works
::: details Step-by-Step Breakdown
### Step 1: Define the Permission Struct
Populate a `pumpkin_permission_t` struct and call `pumpkin_register_permission`:
```c
pumpkin_permission_t perm = {
.node = "my_c_plugin:hello",
.description = "Allows executing the /hello command",
.default_access = PERMISSION_DEFAULT_ALLOW
};
pumpkin_register_permission(ctx, &perm);
```
### Step 2: Build the Command Tree
Create the command tree by passing name array and description:
```c
const char* names[] = {"hello", "hi"};
pumpkin_command_t cmd = pumpkin_command_new(names, 2, "Greets the player");
```
### Step 3: Register Command & Handle Execution
Pass the command handle to `pumpkin_register_command` and handle responses inside `plugin_handle_command`:
```c
pumpkin_register_command(ctx, cmd, "my_c_plugin:hello");
```
:::
---
## Next Steps
- Check out the [C Quick Start Guide](./quick-start) to set up your compiler toolchain.

View File

@ -0,0 +1,110 @@
# Creating Your First Command
Registering custom commands in Pumpkin using C# provides a strongly-typed, clean structure.
---
## 1. Quick Example
Here is a complete C# plugin file (`MyPlugin.cs`) that registers a `/hello` command with permission checks and sends a response back to the player.
```csharp [MyPlugin.cs]
using PluginWorld;
using PluginWorld.wit.Exports.pumpkin.plugin.v0_1_0;
using PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0;
namespace MyPumpkinPlugin;
public class MyPlugin : IPluginWorldExports, IMetadataExports
{
public static void InitPlugin() { }
public static void OnLoad(IContextImports.Context context)
{
// 1. Register permission node
var perm = new IPermissionImports.Permission(
"my_csharp_plugin:hello",
"Allows executing the /hello command",
IPermissionImports.PermissionDefault.Allow,
[]
);
IContextImports.RegisterPermission(context, perm);
// 2. Build and register command tree
var command = ICommandImports.Command.New(["hello", "hi"], "Greets the player");
IContextImports.RegisterCommand(context, command, "my_csharp_plugin:hello");
}
public static void OnUnload(IContextImports.Context context) { }
public static IEventImports.Event HandleEvent(uint eventId, IServerImports.Server server, IEventImports.Event @event)
{
return @event;
}
public static int HandleCommand(uint commandId, ICommandImports.CommandSender sender, IServerImports.Server server, ICommandImports.ConsumedArgs args)
{
ICommandImports.SendMessage(sender, "Hello from C# Plugin!");
return 1;
}
public static void HandleTask(uint handlerId, IServerImports.Server server) { }
public static IMetadataExports.PluginMetadata Metadata()
{
return new IMetadataExports.PluginMetadata(
"my_csharp_plugin",
"0.1.0",
"My first Pumpkin C# plugin",
["Developer"],
[]
);
}
}
```
---
## 2. In-Game Preview
Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft:
<img src="/assets/first_command_preview.png" alt="In-Game Command Autocompletion Preview" width="500"/>
---
## 3. How It Works
::: details Step-by-Step Breakdown
### Step 1: Define the Permission Node
Construct an `IPermissionImports.Permission` record and register it via `IContextImports.RegisterPermission`:
```csharp
var perm = new IPermissionImports.Permission(
"my_csharp_plugin:hello",
"Allows executing the /hello command",
IPermissionImports.PermissionDefault.Allow,
[]
);
IContextImports.RegisterPermission(context, perm);
```
### Step 2: Build the Command Tree
Instantiate your command with primary names and description:
```csharp
var command = ICommandImports.Command.New(["hello", "hi"], "Greets the player");
```
### Step 3: Register and Handle
Register the command with `IContextImports.RegisterCommand` and process incoming executions inside `HandleCommand`:
```csharp
IContextImports.RegisterCommand(context, command, "my_csharp_plugin:hello");
```
:::
---
## Next Steps
- Follow the [C# Quick Start Guide](./quick-start) to configure `.csproj` and build WebAssembly outputs.

View File

@ -0,0 +1,103 @@
# Creating Your First Command
Registering commands in Go with Pumpkin is built on standard Go idiom using TinyGo WASM compilation.
---
## 1. Quick Example
Here is a complete Go plugin file (`main.go`) that registers a `/hello` command with permission checks and sends a response back to the player.
```go [main.go]
package main
import (
"github.com/Pumpkin-MC/pumpkin-api-go/api"
"github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_command"
"github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_context"
"github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_permission"
_ "github.com/Pumpkin-MC/pumpkin-api-go/pkg/wit_exports"
)
type MyPlugin struct {
api.DefaultPlugin
}
func (p *MyPlugin) Metadata() api.Metadata {
return api.Metadata{
Name: "my_go_plugin",
Version: "0.1.0",
Authors: []string{"Developer"},
Description: "My first Pumpkin Go plugin",
}
}
func (p *MyPlugin) OnLoad(ctx *pumpkin_plugin_context.Context) {
// 1. Register permission node
ctx.RegisterPermission(pumpkin_plugin_permission.Permission{
Node: "my_go_plugin:hello",
Description: "Allows executing the /hello command",
Default: pumpkin_plugin_permission.PermissionDefaultAllow(),
})
// 2. Build and register command tree
cmd := pumpkin_plugin_command.New([]string{"hello", "hi"}, "Greets the player")
ctx.RegisterCommand(cmd, "my_go_plugin:hello")
}
func (p *MyPlugin) HandleCommand(cmdID uint32, sender pumpkin_plugin_command.CommandSender) int32 {
sender.SendMessage("Hello from Go Plugin!")
return 1
}
func init() {
api.RegisterPlugin(&MyPlugin{})
}
func main() {}
```
---
## 2. In-Game Preview
Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft:
<img src="/assets/first_command_preview.png" alt="In-Game Command Autocompletion Preview" width="500"/>
---
## 3. How It Works
::: details Step-by-Step Breakdown
### Step 1: Register Permission
Call `ctx.RegisterPermission` inside `OnLoad`:
```go
ctx.RegisterPermission(pumpkin_plugin_permission.Permission{
Node: "my_go_plugin:hello",
Description: "Allows executing the /hello command",
Default: pumpkin_plugin_permission.PermissionDefaultAllow(),
})
```
### Step 2: Build the Command Tree
Instantiate the command tree with `pumpkin_plugin_command.New`:
```go
cmd := pumpkin_plugin_command.New([]string{"hello", "hi"}, "Greets the player")
```
### Step 3: Register & Execute
Register the command with `ctx.RegisterCommand` and handle execution in `HandleCommand`:
```go
ctx.RegisterCommand(cmd, "my_go_plugin:hello")
```
:::
---
## Next Steps
- Follow the [Go Quick Start Guide](./quick-start) to set up TinyGo compilation.
- Learn more about [Basic Logic](./basic-logic).

View File

@ -0,0 +1,94 @@
# Creating Your First Command
Registering custom commands in Pumpkin using Kotlin is concise, idiomatic, and strongly typed.
---
## 1. Quick Example
Here is a complete Kotlin plugin (`Plugin.kt`) that registers a `/hello` command with permission checks and sends a response back to the player.
```kotlin [src/wasmWasiMain/kotlin/plugin/Plugin.kt]
package plugin
import pumpkin.plugin.context.Context
import pumpkin.plugin.command.Command
import pumpkin.plugin.permission.Permission
import pumpkin.plugin.permission.PermissionDefault
class MyPlugin {
fun onLoad(ctx: Context) {
// 1. Register permission node
ctx.registerPermission(
Permission(
node = "my_kotlin_plugin:hello",
description = "Allows executing the /hello command",
default = PermissionDefault.ALLOW,
children = emptyList()
)
)
// 2. Build and register command tree
val cmd = Command(
names = listOf("hello", "hi"),
description = "Greets the player"
)
ctx.registerCommand(cmd, "my_kotlin_plugin:hello")
}
fun handleCommand(sender: pumpkin.plugin.command.CommandSender): Int {
sender.sendMessage("Hello from Kotlin Plugin!")
return 1
}
}
```
---
## 2. In-Game Preview
Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft:
<img src="/assets/first_command_preview.png" alt="In-Game Command Autocompletion Preview" width="500"/>
---
## 3. How It Works
::: details Step-by-Step Breakdown
### Step 1: Define the Permission Node
Construct a `Permission` object and pass it to `ctx.registerPermission`:
```kotlin
ctx.registerPermission(
Permission(
node = "my_kotlin_plugin:hello",
description = "Allows executing the /hello command",
default = PermissionDefault.ALLOW,
children = emptyList()
)
)
```
### Step 2: Build the Command Tree
Instantiate `Command` with primary names and aliases:
```kotlin
val cmd = Command(
names = listOf("hello", "hi"),
description = "Greets the player"
)
```
### Step 3: Register with Context
Register the command with `ctx.registerCommand` and handle calls inside `handleCommand`:
```kotlin
ctx.registerCommand(cmd, "my_kotlin_plugin:hello")
```
:::
---
## Next Steps
- Follow the [Kotlin Quick Start Guide](./quick-start) to configure your `Makefile` and Kotlin/Wasm build tools.

View File

@ -0,0 +1,171 @@
# Migrating Commands from Bukkit
In Bukkit, commands are defined in `plugin.yml` and handled through `CommandExecutor` classes or the Brigadier library.
In Pumpkin, commands are built using a **Brigadier-inspired command tree** and registered programmatically via `context.register_command`. No YAML configuration files are used.
---
## Key Differences
| Feature | Bukkit / Spigot | Pumpkin |
| :--- | :--- | :--- |
| **Declaration** | Declared in `plugin.yml` under `commands:` | Constructed in code using `Command::new(...)` |
| **Permissions** | Linked in `plugin.yml` or checked via `player.hasPermission()` | Explicit permission node bound during `register_command()` |
| **Tab Completion** | Manual string matching in `TabCompleter` | Automatic tree-based client-side tab completion |
| **Subcommands** | Manual `if (args[0].equalsIgnoreCase("..."))` | Nested `Command` tree nodes |
---
## Code Comparison: Simple Command
Compare registering a `/feed` command in Bukkit vs. Pumpkin:
### 1. Bukkit Implementation (Java)
```java [FeedCommand.java]
// 1. Registered in plugin.yml:
// commands:
// feed:
// description: Feeds the player
// permission: myplugin.feed
public class FeedCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("Only players can execute this command!");
return true;
}
Player player = (Player) sender;
if (!player.hasPermission("myplugin.feed")) {
player.sendMessage("No permission!");
return true;
}
player.setFoodLevel(20);
player.sendMessage("Your hunger has been satisfied!");
return true;
}
}
```
### 2. Pumpkin Implementations
::: code-group
```rust [Rust]
use pumpkin_plugin_api::{
command::{CommandHandler, CommandSender, ConsumedArgs, CommandError, Command},
permission::{Permission, PermissionDefault},
Context, Plugin, PluginMetadata, Server,
};
struct FeedExecutor;
impl CommandHandler for FeedExecutor {
fn handle(&self, sender: CommandSender, _server: Server, _args: ConsumedArgs) -> Result<i32, CommandError> {
sender.send_message("Your hunger has been satisfied!");
Ok(1)
}
}
pub struct MyPlugin;
impl Plugin for MyPlugin {
fn new() -> Self { MyPlugin }
fn metadata(&self) -> PluginMetadata {
PluginMetadata {
name: "feed_plugin".into(),
version: "1.0.0".into(),
authors: vec!["Developer".into()],
description: "Feed command plugin".into(),
}
}
fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> {
// 1. Register permission node (Replaces plugin.yml permission)
context.register_permission(&Permission {
node: "feed_plugin:feed".to_string(),
description: "Allows executing /feed".to_string(),
default: PermissionDefault::Allow,
children: Vec::new(),
})?;
// 2. Build command tree
let command = Command::new(&["feed".to_string(), "eat".to_string()], "Feeds the player")
.execute(FeedExecutor);
// 3. Register with context
context.register_command(command, "feed_plugin:feed")?;
Ok(())
}
}
```
```python [Python]
from pumpkin_api import (
Plugin, PluginMetadata, register_plugin,
permission, command, context, server
)
class FeedExecutor:
def handle(self, sender: command.CommandSender, srv: server.Server, args: command.ConsumedArgs) -> int:
sender.send_message("Your hunger has been satisfied!")
return 1
class FeedPlugin(Plugin):
def metadata(self) -> PluginMetadata:
return PluginMetadata(name="feed_plugin", version="1.0.0", authors=["Dev"], description="Feed command")
def on_load(self, ctx: context.Context) -> None:
ctx.register_permission(permission.Permission(
node="feed_plugin:feed",
description="Allows executing /feed",
default=permission.PermissionDefault.ALLOW,
children=[]
))
cmd = command.Command(["feed", "eat"], "Feeds the player")
cmd.execute(FeedExecutor())
ctx.register_command(cmd, "feed_plugin:feed")
register_plugin(FeedPlugin)
```
```kotlin [Kotlin]
package plugin
import pumpkin.plugin.context.Context
import pumpkin.plugin.command.Command
import pumpkin.plugin.command.CommandSender
import pumpkin.plugin.permission.Permission
import pumpkin.plugin.permission.PermissionDefault
class FeedPlugin {
fun onLoad(ctx: Context) {
ctx.registerPermission(
Permission(
node = "feed_plugin:feed",
description = "Allows executing /feed",
default = PermissionDefault.ALLOW,
children = emptyList()
)
)
val cmd = Command(
names = listOf("feed", "eat"),
description = "Feeds the player"
)
ctx.registerCommand(cmd, "feed_plugin:feed")
}
fun handleCommand(sender: CommandSender): Int {
sender.sendMessage("Your hunger has been satisfied!")
return 1
}
}
```
:::

View File

@ -0,0 +1,69 @@
# Migrating Configuration & Data Storage
Bukkit plugins heavily rely on `config.yml`, `YamlConfiguration`, and the Bukkit configuration serializing system.
In Pumpkin, WebAssembly plugins run in a secure sandbox environment where configuration files can be handled natively using standard formats like **TOML**, **JSON**, or **YAML**.
---
## Key Differences
| Feature | Bukkit / Spigot | Pumpkin |
| :--- | :--- | :--- |
| **Config File Format** | `config.yml` (YAML format) | Flexible: TOML, JSON, or custom files |
| **Default Config Generation** | `saveDefaultConfig()` | Reading config from plugin directory or embedded WASM asset |
| **Data Parsing** | `getConfig().getString(...)` | Native serde / JSON / TOML deserialization |
| **File I/O Sandboxing** | Direct filesystem access anywhere | Sandboxed directory access granted to WASM plugin |
---
## Code Comparison: Loading Configuration
### 1. Bukkit Implementation (Java)
```java [ConfigExample.java]
public class ConfigExample extends JavaPlugin {
@Override
public void onEnable() {
saveDefaultConfig(); // Saves config.yml from jar resources
FileConfiguration config = getConfig();
String welcomeMsg = config.getString("welcome-message", "Default welcome!");
int maxItems = config.getInt("max-items", 10);
getLogger().info("Loaded message: " + welcomeMsg);
}
}
```
### 2. Pumpkin Implementation (Rust)
In Pumpkin, you can derive `serde::Deserialize` to parse clean TOML configuration files:
```rust [config.rs]
use serde::Deserialize;
use std::fs;
#[derive(Deserialize, Debug)]
pub struct PluginConfig {
pub welcome_message: String,
pub max_items: i32,
}
impl Default for PluginConfig {
fn default() -> Self {
Self {
welcome_message: "Default welcome!".to_string(),
max_items: 10,
}
}
}
pub fn load_config() -> PluginConfig {
let config_path = "plugins/my_plugin/config.toml";
if let Ok(content) = fs::read_to_string(config_path) {
toml::from_str(&content).unwrap_or_default()
} else {
PluginConfig::default()
}
}
```

View File

@ -0,0 +1,117 @@
# Migrating Events from Bukkit
In Bukkit, events are handled by creating classes that implement `Listener` and annotating methods with `@EventHandler`.
In Pumpkin, event handlers are structs or objects registered explicitly via `context.register_event_handler(...)`. Pumpkin also differentiates between **Blocking** and **Non-blocking** events to maximize server concurrency.
---
## Key Differences
| Feature | Bukkit / Spigot | Pumpkin |
| :--- | :--- | :--- |
| **Listener Declaration** | `@EventHandler` annotation on methods | `EventHandler<E>` trait / interface implementation |
| **Registration** | `pm.registerEvents(listener, plugin)` | `context.register_event_handler(handler, priority, is_blocking)` |
| **Execution Model** | Main thread execution (`EventPriority`) | Choice between **Blocking** (sequential/cancellable) and **Non-blocking** (concurrent) |
| **Cancellation** | `event.setCancelled(true)` | `event.cancel()` on blocking events |
---
## Blocking vs. Non-Blocking Events in Pumpkin
Unlike Bukkit where all event handlers run sequentially on the main server thread, Pumpkin lets you specify whether an event handler is **blocking**:
```rust
// Registration signature in Rust:
context.register_event_handler(handler, priority, is_blocking)?;
```
- **Blocking (`is_blocking = true`)**: Executes in sequential priority order. Can modify event data (e.g. edit join message) or cancel the event.
- **Non-blocking (`is_blocking = false`)**: Executes concurrently across worker threads. Ideal for logging, metrics, or external notifications where cancellation is not needed.
---
## Code Comparison: Player Join Event
### 1. Bukkit Implementation (Java)
```java [JoinListener.java]
public class JoinListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
event.setJoinMessage("Welcome " + player.getName() + " to the server!");
}
}
// In JavaPlugin:
// getServer().getPluginManager().registerEvents(new JoinListener(), this);
```
### 2. Pumpkin Implementations
::: code-group
```rust [Rust]
use pumpkin_plugin_api::{
Context, Plugin, PluginMetadata, Server,
events::{EventData, EventHandler, EventPriority, PlayerJoinEvent},
text::TextComponent,
};
struct JoinHandler;
impl EventHandler<PlayerJoinEvent> for JoinHandler {
fn handle<'a>(
&'a self,
_server: Server,
mut event: EventData<PlayerJoinEvent>,
) -> EventData<PlayerJoinEvent> {
event.join_message = TextComponent::text("Welcome to the Pumpkin server!");
event
}
}
pub struct MyPlugin;
impl Plugin for MyPlugin {
fn new() -> Self { MyPlugin }
fn metadata(&self) -> PluginMetadata {
PluginMetadata {
name: "join_plugin".into(),
version: "1.0.0".into(),
authors: vec!["Developer".into()],
description: "Join event handler".into(),
}
}
fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> {
// Register blocking event handler with Normal priority
context.register_event_handler(JoinHandler, EventPriority::Normal, true)?;
Ok(())
}
}
```
```python [Python]
from pumpkin_api import (
Plugin, PluginMetadata, register_plugin,
event, server, context
)
class MyPlugin(Plugin):
def metadata(self) -> PluginMetadata:
return PluginMetadata(name="join_plugin", version="1.0.0", authors=["Dev"], description="Join event")
def on_load(self, ctx: context.Context) -> None:
self.register_event(ctx, event.EventType.PLAYER_JOIN_EVENT, self.on_player_join)
def on_player_join(self, srv: server.Server, evt: event.PlayerJoinEventData) -> event.PlayerJoinEventData:
print(f"Player joined!")
return evt
register_plugin(MyPlugin)
```
:::

View File

@ -0,0 +1,39 @@
# Migrating Overview & Architecture
Moving from **Bukkit / Spigot / Paper** plugin development to Pumpkin involves shifting from a Java-centric object-oriented model to a compiled, multi-language **WebAssembly (WASM)** component model.
---
## High-Level Architectural Differences
```mermaid
flowchart LR
subgraph Bukkit / Paper
A[Java Source] --> B[Java Bytecode .jar]
B --> C[JVM / Main Server Thread]
end
subgraph Pumpkin
D[Rust / Python / C# / Go / C] --> E[WASM Component .wasm]
E --> F[WASM Sandbox / Multithreaded Engine]
end
```
| Concept | Bukkit / Spigot / Paper | Pumpkin |
| :--- | :--- | :--- |
| **Language Support** | Java / Kotlin / Scala (JVM) | Rust, Python, Kotlin, C#, Go, C |
| **Binary Output** | `.jar` Java Archive | `.wasm` WebAssembly Component |
| **Plugin Descriptor** | `plugin.yml` file | Programmatic `PluginMetadata` struct |
| **Lifecycle Hooks** | `onEnable()` / `onDisable()` | `on_load(context)` / `on_unload(context)` |
| **Security & Isolation** | Unrestricted JVM Reflection | Sandboxed WASM capability model |
| **Concurrency** | Single-threaded tick loop (`BukkitScheduler`) | Multithreaded native execution with Async runtime |
---
## Detailed Migration Topics
Explore dedicated guides on migrating each major plugin subsystem:
- [Migrating Commands](./commands) — Transitioning from `getCommand().setExecutor()` and `plugin.yml` to Brigadier command trees.
- [Migrating Events](./events) — Replacing `@EventHandler` and `Listener` interfaces with Pumpkin's blocking vs. non-blocking event system.
- [Migrating Inventories & GUIs](./inventories) — Moving from `Bukkit.createInventory()` to Pumpkin container and window handlers.
- [Migrating Configuration & Data](./configuration) — Replaces `getConfig()` / `config.yml` with native TOML, JSON, or custom storage.

View File

@ -0,0 +1,72 @@
# Migrating Inventories & GUIs from Bukkit
Creating inventory GUIs (like chest menus, shop interfaces, or custom player windows) is a common task in Minecraft plugin development.
In Bukkit, custom GUIs are created using `Bukkit.createInventory()` and handled via `InventoryClickEvent`. In Pumpkin, inventory windows are managed through **Window APIs** and container click packets.
---
## Key Differences
| Feature | Bukkit / Spigot | Pumpkin |
| :--- | :--- | :--- |
| **Inventory Creation** | `Bukkit.createInventory(owner, size, title)` | Window container definitions (`WindowType`) |
| **Opening Windows** | `player.openInventory(inv)` | `player.open_window(window)` |
| **Click Interception** | `InventoryClickEvent` handling | Window click callback handlers |
| **Item Stacking** | `ItemStack` with `ItemMeta` | `ItemStack` with components / NBT |
---
## Code Comparison: Opening a Custom Menu GUI
### 1. Bukkit Implementation (Java)
```java [MenuGUI.java]
public class MenuGUI implements Listener {
public void openMenu(Player player) {
Inventory inv = Bukkit.createInventory(null, 9, Component.text("Custom Menu"));
ItemStack item = new ItemStack(Material.DIAMOND);
ItemMeta meta = item.getItemMeta();
meta.displayName(Component.text("Click Me!"));
item.setItemMeta(meta);
inv.setItem(4, item);
player.openInventory(inv);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (event.getView().getTitle().equals("Custom Menu")) {
event.setCancelled(true);
if (event.getSlot() == 4) {
event.getWhoClicked().sendMessage("Diamond clicked!");
}
}
}
}
```
### 2. Pumpkin Implementation (Rust)
```rust [gui.rs]
use pumpkin_plugin_api::{
player::Player,
item::ItemStack,
window::{Window, WindowType},
text::TextComponent,
};
pub fn open_custom_menu(player: &Player) {
// 1. Create a 9-slot chest window
let mut window = Window::new(WindowType::Generic9x1, TextComponent::text("Custom Menu"));
// 2. Set item in slot 4
let item = ItemStack::new("minecraft:diamond", 1);
window.set_item(4, Some(item));
// 3. Open window for player
player.open_window(window);
}
```

View File

@ -0,0 +1,95 @@
# Creating Your First Command
Registering and handling custom commands in Pumpkin with Python is designed to be straightforward and expressive.
---
## 1. Quick Example
Here is a complete, minimal Python plugin (`main.py`) that registers a `/hello` command with permission checks and sends a response back to the player.
```python [main.py]
from pumpkin_api import (
Plugin, PluginMetadata, register_plugin,
permission, command, context, server
)
class HelloCommand:
def handle(self, sender: command.CommandSender, srv: server.Server, args: command.ConsumedArgs) -> int:
sender.send_message("Hello from Python Plugin!")
return 1
class MyPlugin(Plugin):
def metadata(self) -> PluginMetadata:
return PluginMetadata(
name="my_python_plugin",
version="0.1.0",
authors=["Developer"],
description="My first Pumpkin Python plugin"
)
def on_load(self, ctx: context.Context) -> None:
# 1. Register permission node
ctx.register_permission(permission.Permission(
node="my_python_plugin:hello",
description="Allows executing the /hello command",
default=permission.PermissionDefault.ALLOW,
children=[]
))
# 2. Build the command tree with aliases & executor
cmd = command.Command(["hello", "hi"], "Greets the player")
cmd.execute(HelloCommand())
# 3. Register the command
ctx.register_command(cmd, "my_python_plugin:hello")
register_plugin(MyPlugin)
```
---
## 2. In-Game Preview
Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft:
<img src="/assets/first_command_preview.png" alt="In-Game Command Autocompletion Preview" width="500"/>
---
## 3. How It Works
::: details Step-by-Step Breakdown
### Step 1: Define the Permission
Commands in Pumpkin require a permission node. Register it with `permission.PermissionDefault.ALLOW` to allow execution by default:
```python
ctx.register_permission(permission.Permission(
node="my_python_plugin:hello",
description="Allows executing the /hello command",
default=permission.PermissionDefault.ALLOW,
children=[]
))
```
### Step 2: Build the Command Tree
Create a `command.Command` instance with primary names and aliases, then attach your handler with `.execute(...)`:
```python
cmd = command.Command(["hello", "hi"], "Greets the player")
cmd.execute(HelloCommand())
```
### Step 3: Register with Context
Pass the command tree and permission node string to `ctx.register_command`:
```python
ctx.register_command(cmd, "my_python_plugin:hello")
```
:::
---
## Next Steps
- Check out [Events](./events) to handle player actions and server events in Python.
- Learn more about [Basic Logic](./basic-logic).

View File

@ -1,42 +1,36 @@
# Making your first Command
# Creating Your First Command
Before registering your command, you should choose a name. In this example, we define it as a constant array. Using an array allows you to easily add aliases
Registering and handling custom commands in Pumpkin is designed to be developer-friendly, fast, and structured like Mojang's Brigadier system.
```rust
let names = ["test".to_string()];
// OR with aliases
let names = ["test".to_string(), "testcommand".to_string()];
```
---
You should also define a description, which will be displayed when players use the /help command
## 1. Quick Example
```rust
let description = "My first Command!";
```
Here is a complete, minimal Rust plugin that registers a `/hello` command with permission checks and sends a response back to the player.
Pumpkin's Command API is heavily inspired by Mojang's [Brigadier](https://github.com/Mojang/brigadier) This system allows you to easily manage command syntax and provides automatic tab-completion for players
```rust [src/lib.rs]
use pumpkin_plugin_api::{
command::{CommandHandler, CommandSender, ConsumedArgs, CommandError, Command},
permission::{Permission, PermissionDefault},
Context, Plugin, PluginMetadata, Server,
};
#### Implementing the Command Tree
struct HelloExecutor;
```rust
use pumpkin_plugin_api::command::Command;
pub fn init_command_tree() -> Command {
let names = ["test".to_string(), "testcommand".to_string()];
let description = "My first Command!";
Command::new(&names, description)
impl CommandHandler for HelloExecutor {
fn handle(
&self,
sender: CommandSender,
_server: Server,
_args: ConsumedArgs,
) -> Result<i32, CommandError> {
sender.send_message("Hello from Pumpkin!");
Ok(1)
}
}
```
#### Registration and Permissions
pub struct MyPlugin;
To make the command usable, you must register both the Permission and the Command itself within your plugin context.
First, register the Permission. In this example, we set `PermissionDefault::Allow` so that everyone can use the command by default
```rust
struct MyPlugin;
impl Plugin for MyPlugin {
fn new() -> Self {
MyPlugin
@ -44,97 +38,78 @@ impl Plugin for MyPlugin {
fn metadata(&self) -> PluginMetadata {
PluginMetadata {
name: "plugin_docs_plugin".into(),
name: "my_plugin".into(),
version: env!("CARGO_PKG_VERSION").into(),
authors: vec!["Bjorn".into()],
description: "A simple example plugin".into(),
authors: vec!["Developer".into()],
description: "My first Pumpkin plugin".into(),
}
}
fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> {
tracing::info!("Hello, Pumpkin!");
context.register_permission(&Permission { // [!code ++:7]
// This has to have the same name space as provided in your PluginMetadata
node: "plugin_docs_plugin:test".to_string(),
description: "Important Test Permission".to_string(),
default: PermissionDefault::Allow,
children: Vec::new(),
})?;
Ok(())
}
}
```
Next, register the command using the permission string created above:
```rust
struct MyPlugin;
impl Plugin for MyPlugin {
// ...
fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> {
tracing::info!("Hello, Pumpkin!");
// 1. Register permission node
context.register_permission(&Permission {
// This has to have the same name space as provided in your PluginMetadata
node: "plugin_docs_plugin:test".to_string(),
description: "Important Test Permission".to_string(),
node: "my_plugin:hello".to_string(),
description: "Allows executing the /hello command".to_string(),
default: PermissionDefault::Allow,
children: Vec::new(),
})?;
context.register_command(init_command_tree(), "plugin_docs_plugin:test"); // [!code ++:1]
// 2. Build the command tree with aliases & executor
let names = ["hello".to_string(), "hi".to_string()];
let command = Command::new(&names, "Greets the player").execute(HelloExecutor);
// 3. Register the command
context.register_command(command, "my_plugin:hello")?;
Ok(())
}
}
```
Rebuild your plugin, move the plugins file into the plugins folder, and restart your server
---
**Congrats!**, The command is now registered and should be highlighted in-game and in console
## 2. In-Game Preview
<img src="/assets/plugin-dev/first_command_preview.png" alt="drawing" width="1000"/>
Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft:
Executing the command right now likely thrown an Syntax error since no Command Executor has been implemented and the Command just does nothing
<img src="/assets/first_command_preview.png" alt="In-Game Command Autocompletion Preview" width="500"/>
```
$ test
$ Invalid Syntax. Usage: /test
```
---
### Adding an Executor
## 3. How It Works
Lets create a super simple Command Executor without requiring and arguments
::: details Step-by-Step Breakdown
### Step 1: Define the Permission
Commands in Pumpkin require a permission node. Using `PermissionDefault::Allow` allows all players to execute it by default:
```rust
struct MyCommandExecutor;
impl CommandHandler for MyCommandExecutor {
fn handle(
&self,
sender: pumpkin_plugin_api::command::CommandSender,
server: pumpkin_plugin_api::Server,
args: pumpkin_plugin_api::command::ConsumedArgs,
) -> pumpkin_plugin_api::Result<i32, CommandError> {
Ok(1)
}
}
context.register_permission(&Permission {
node: "my_plugin:hello".to_string(),
description: "Allows executing the /hello command".to_string(),
default: PermissionDefault::Allow,
children: Vec::new(),
})?;
```
### Attaching the Executor
Now in order to attach the executor, all that we need to do now is provide it to the Command.
### Step 2: Build the Command Tree
Use `Command::new` to define primary names and aliases, then attach your `CommandHandler` struct with `.execute(...)`:
```rust
pub fn init_command_tree() -> Command {
let names = ["test".to_string(), "testcommand".to_string()];
let description = "My first Command!";
Command::new(&names, description).execute(MyCommandExecutor) // [!code ++:1]
}
let names = ["hello".to_string(), "hi".to_string()];
let command = Command::new(&names, "Greets the player")
.execute(HelloExecutor);
```
Now you should get no syntax error when running `/test`.
### Step 3: Register with Context
Pass the command tree and the permission node string to `context.register_command`:
```rust
context.register_command(command, "my_plugin:hello")?;
```
:::
---
## Next Steps
- Explore complex subcommands and argument parsing in the [Rock-Paper-Scissors Tutorial](./rock-paper-scissors).
- Learn how to handle inventory and GUI interactions in plugin logic.

View File

@ -28,7 +28,7 @@ Pumpkinの使用中にバグ、クラッシュ、または予期しない動作
## 3. 財政的支援と寄付
高性能なMinecraftサーバーソフトウェアの維持には多大な労力が必要です。
- **スポンサーと寄付**: [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC)または[pumpkinmc.org](https://pumpkinmc.org/)の資金提供オプションを確認してください。
- **寄付**: [pumpkinmc.org/donate](https://pumpkinmc.org/donate) の公式寄付ページで資金提供オプションを確認してください。
- **サーバーインフラ**: テスト環境を提供することでも貢献できます。
---

View File

@ -28,7 +28,7 @@ Lees voor codebijdragen onze [Bijdragegids](/developer/contributing).
## 3. Financiële Ondersteuning & Doneren
Het onderhouden van krachtige Minecraft-serversoftware vereist veel inzet.
- **Sponsoring & Donaties**: Bekijk onze financieringsopties op [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) of op [pumpkinmc.org](https://pumpkinmc.org/).
- **Donaties**: Bekijk onze financieringsopties op onze officiële donatiepagina [pumpkinmc.org/donate](https://pumpkinmc.org/donate).
- **Serverinfrastructuur**: U kunt ook helpen door testomgevingen beschikbaar te stellen.
---

View File

@ -28,7 +28,7 @@ Para contribuições de código, leia nosso [Guia de Contribuição](/developer/
## 3. Suporte Financeiro e Doações
Manter um software de servidor Minecraft de alto desempenho requer muito esforço.
- **Patrocínio e Doações**: Confira nossas opções de financiamento no [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) ou [pumpkinmc.org](https://pumpkinmc.org/).
- **Doações**: Confira nossas opções de financiamento em nossa página oficial de doações [pumpkinmc.org/donate](https://pumpkinmc.org/donate).
- **Infraestrutura de Servidor**: Você também pode ajudar fornecendo ambientes de teste.
---

View File

@ -28,7 +28,7 @@ Kod katkıları için lütfen [Katkıda Bulunma Kılavuzumuzu](/developer/contri
## 3. Finansal Destek ve Bağış
Yüksek performanslı Minecraft sunucu yazılımını sürdürmek büyük çaba gerektirir.
- **Sponsorluk ve Bağışlar**: [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) veya [pumpkinmc.org](https://pumpkinmc.org/) adresindeki finansman seçeneklerimizi inceleyin.
- **Bağışlar**: Resmi bağış sayfamızdaki [pumpkinmc.org/donate](https://pumpkinmc.org/donate) finansman seçeneklerimizi inceleyin.
- **Sunucu Altyapısı**: Test ortamları sağlayarak da yardımcı olabilirsiniz.
---

View File

@ -28,7 +28,7 @@
## 3. 财务支持与捐赠
维护高性能 Minecraft 服务器软件需要大量精力。
- **赞助与捐赠**:在 [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) 或 [pumpkinmc.org](https://pumpkinmc.org/) 查看我们的资金选项。
- **捐赠**:在我们的官方捐赠页面 [pumpkinmc.org/donate](https://pumpkinmc.org/donate) 查看我们的资金选项。
- **服务器基础设施**:您也可以通过提供测试环境来提供帮助。
---

212
package-lock.json generated
View File

@ -10,7 +10,7 @@
"devDependencies": {
"@types/bun": "^1.3.14",
"vitepress": "^2.0.0-alpha.18",
"vue": "^3.6.0-beta.17"
"vue": "^3.6.0-rc.2"
}
},
"node_modules/@babel/helper-string-parser": {
@ -672,106 +672,106 @@
}
},
"node_modules/@vue/compiler-core": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.6.0-beta.17.tgz",
"integrity": "sha512-4xB2W8+00h7bfHbVeHD+zI+bmyF+XgQBKCCWLjFJ/VCJ/1tBjnlzWpX0OqcOE78LktGiCGcKgNk+eZAuav5cqg==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.6.0-rc.2.tgz",
"integrity": "sha512-Xx79h4EpJktQBShelXNKaRuvn9N6YsYL1j+RXdvPKzI+8tohYziBJbxOFGAkdcOKBwKc2SIWV4DOlTAMhE96yQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.7",
"@vue/shared": "3.6.0-beta.17",
"@vue/shared": "3.6.0-rc.2",
"entities": "^7.0.1",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-core/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/compiler-dom": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.6.0-beta.17.tgz",
"integrity": "sha512-viCM7YwHK6HuQ9rY8O27ET1xLi9WeJ+EmMWlwvtggpqb2j+l7DZOATkCRXOivjTOqtt8h5MIGnlB7tQlupQgeA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.6.0-rc.2.tgz",
"integrity": "sha512-dRTdTdi/KXzHYIkHtyjGxepTIxnsZ/hB3v1osnS8c4MeycAyzkSoZW6OZkXXN4oVVVU6NKXds1XtKAEKVVw7nA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17"
"@vue/compiler-core": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2"
}
},
"node_modules/@vue/compiler-dom/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/compiler-sfc": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.6.0-beta.17.tgz",
"integrity": "sha512-L3KGWeWDCqm1tL03m09IXKRhIEh0Ij2gEIax9W0smDtlCAQt4gc8dmeTbjTOg4+1N2qAFEaAs+0xVu9y1j7Sng==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.6.0-rc.2.tgz",
"integrity": "sha512-EZWTNh0UwdxvrBJkFc6+dqfwuUSdTVHDIohQcGDPCqGaYTHOfUL20b+grEAzlyxB741KrVBUb7qqpes92hAh2w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.7",
"@vue/compiler-core": "3.6.0-beta.17",
"@vue/compiler-dom": "3.6.0-beta.17",
"@vue/compiler-ssr": "3.6.0-beta.17",
"@vue/compiler-vapor": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17",
"@vue/compiler-core": "3.6.0-rc.2",
"@vue/compiler-dom": "3.6.0-rc.2",
"@vue/compiler-ssr": "3.6.0-rc.2",
"@vue/compiler-vapor": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.21",
"postcss": "^8.5.14",
"postcss": "^8.5.19",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-sfc/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/compiler-ssr": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.6.0-beta.17.tgz",
"integrity": "sha512-OWBt5fu62UGeGTcl3Ra5ocMZbJ3h8ze862g9GlS72CNsYYZTbh3V9LePoOp6WX73SdsSdbsWLSsZfi5Wgh+ggQ==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.6.0-rc.2.tgz",
"integrity": "sha512-lqHSdQTmlhKX3dNEvR1TcspUzDlTR82T7BYLDzfvTwAqGXxAI2WJfyGJPcNpPjPKYEMI9JRGF32DU8TlHLx1AA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17"
"@vue/compiler-dom": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2"
}
},
"node_modules/@vue/compiler-ssr/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/compiler-vapor": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/compiler-vapor/-/compiler-vapor-3.6.0-beta.17.tgz",
"integrity": "sha512-8qqHnEwQVytCnaF9zSOtcZxnYxz+FJqBNl9zIpSKwKRStl4XqmgcXlHtJYQMCxZS6xa7JfPvutkt5mBneh07Yw==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/compiler-vapor/-/compiler-vapor-3.6.0-rc.2.tgz",
"integrity": "sha512-QbrA01pbj9xemF2McgBopyaOwj3kQGN0W1GW5EdFXORIT4fQQJpmUOj40h99S3bk09gLs5bFTRS4YE+Oyw/F9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.7",
"@vue/compiler-dom": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17",
"@vue/compiler-dom": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-vapor/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
@ -806,99 +806,97 @@
"license": "MIT"
},
"node_modules/@vue/reactivity": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.6.0-beta.17.tgz",
"integrity": "sha512-oKLiLZRomHyJ++367F286Er49TXazWofj1PbNFUBoRxNNLne8xlDHAypN+C9Yr+JfAIN9cRp8l1PdjwfwMsV8g==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.6.0-rc.2.tgz",
"integrity": "sha512-B01EoSTcaVQiJwZDoSoeKYClVgj60BHN43oHEcxXhPVLdxsXI0SOiQuskUskQDZn2ma08llICKJohL60o+UamA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/shared": "3.6.0-beta.17"
"@vue/shared": "3.6.0-rc.2"
}
},
"node_modules/@vue/reactivity/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/runtime-core": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.6.0-beta.17.tgz",
"integrity": "sha512-JDPvmiyLpXtTnpG6I9URF88bOF+7KVgpDvPvZVl9AMboQj+LW4Pp19QOhGzxGoKES6wBts8c4xM1zjtr0xHcQw==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.6.0-rc.2.tgz",
"integrity": "sha512-qFV61Hbg6LyEGxJiVRJYuiIfryxrfO4+cgW1esxtkR1/pvemULwG6KpFImsJDwcC+YxrtvndXGM5PRVwUCGuiA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17"
"@vue/reactivity": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2"
}
},
"node_modules/@vue/runtime-core/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/runtime-dom": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.6.0-beta.17.tgz",
"integrity": "sha512-7B02MUGEFzuJaMbhxtgNRSMOrbj+AlERBy1EBxrXHplHSwv8xQjJpiBk0Z+5+vQMDVS4zc8VIYgeP7CUyROpUg==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.6.0-rc.2.tgz",
"integrity": "sha512-clIE/xk0b61t30BPKoOXZep253nhWdjyw7iac53yy2KN0nxAupkb6x3ImOI9iljjXqOW5lYdNVHNxNlcx3iA1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.6.0-beta.17",
"@vue/runtime-core": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17",
"@vue/reactivity": "3.6.0-rc.2",
"@vue/runtime-core": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2",
"csstype": "^3.2.3"
}
},
"node_modules/@vue/runtime-dom/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/runtime-vapor": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/runtime-vapor/-/runtime-vapor-3.6.0-beta.17.tgz",
"integrity": "sha512-nJpdHuMOXMEmVUrRTEo4AEDPreBja9euIXHjvUe4aEk1pmTKs61hQRluAdETRyXZwkyFe6D6+fXxvKf5wPBJBg==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/runtime-vapor/-/runtime-vapor-3.6.0-rc.2.tgz",
"integrity": "sha512-8EpxbNyT629k/52el4D7PxXmZtiYhJRBHPXJR7CZw0OluiADtT9W8J+XB83EVlzHmFUysXcd+mGWmuHwIhuHZA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17"
"@vue/reactivity": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2"
},
"peerDependencies": {
"@vue/runtime-dom": "3.6.0-beta.17"
"@vue/runtime-dom": "3.6.0-rc.2"
}
},
"node_modules/@vue/runtime-vapor/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/server-renderer": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.6.0-beta.17.tgz",
"integrity": "sha512-C7YpoWxewo01cG+S51MouH1v6taXBU5XvmxPjPAI3E9Zn3gpzb49e/ikShA5ov8ijE9R7tyIOUk4QU2xoDiT+Q==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.6.0-rc.2.tgz",
"integrity": "sha512-TIsqoYljs6b0wfoCDhv4EeU3Du2a8gTadkaTGMjIYLTLlO4p8r4VdDqfNp/ZMAm87bW4ST1naBMRe+bXQBpAeQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17"
},
"peerDependencies": {
"vue": "3.6.0-beta.17"
"@vue/compiler-ssr": "3.6.0-rc.2",
"@vue/runtime-dom": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2"
}
},
"node_modules/@vue/server-renderer/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},
@ -1643,9 +1641,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.15",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
"integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
"version": "3.3.18",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
"integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
"dev": true,
"funding": [
{
@ -1716,9 +1714,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.16",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz",
"integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==",
"version": "8.5.26",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
"integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
"dev": true,
"funding": [
{
@ -1736,7 +1734,7 @@
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.12",
"nanoid": "^3.3.17",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@ -2271,18 +2269,18 @@
}
},
"node_modules/vue": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.6.0-beta.17.tgz",
"integrity": "sha512-sVvFEriOhBjKIi7Jy+vwnlcBVRKhvxMVG4lh2erX1vrlaNKggURyWttRF+z5Vo+6VYriVsXAUyOgaQZub0W8ug==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.6.0-rc.2.tgz",
"integrity": "sha512-pBgoISqETcufJ1e92vVW2/D5MEbCm2XHlC/5dq3hWq8s17tx9v5BEdYv4hojJ0yEEDidYxUL7itS+vV32wfZrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.6.0-beta.17",
"@vue/compiler-sfc": "3.6.0-beta.17",
"@vue/runtime-dom": "3.6.0-beta.17",
"@vue/runtime-vapor": "3.6.0-beta.17",
"@vue/server-renderer": "3.6.0-beta.17",
"@vue/shared": "3.6.0-beta.17"
"@vue/compiler-dom": "3.6.0-rc.2",
"@vue/compiler-sfc": "3.6.0-rc.2",
"@vue/runtime-dom": "3.6.0-rc.2",
"@vue/runtime-vapor": "3.6.0-rc.2",
"@vue/server-renderer": "3.6.0-rc.2",
"@vue/shared": "3.6.0-rc.2"
},
"peerDependencies": {
"typescript": "*"
@ -2294,9 +2292,9 @@
}
},
"node_modules/vue/node_modules/@vue/shared": {
"version": "3.6.0-beta.17",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz",
"integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==",
"version": "3.6.0-rc.2",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz",
"integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==",
"dev": true,
"license": "MIT"
},

View File

@ -7,7 +7,7 @@
},
"devDependencies": {
"@types/bun": "^1.3.14",
"vitepress": "^2.0.0-alpha.18",
"vitepress": "^2.0.0-alpha.19",
"vue": "^3.6.0-rc.2"
},
"dependencies": {