From fbd52f3edb74bc8f2449fdab338170e38f5fb53c Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sun, 3 Dec 2023 19:31:29 +0100 Subject: [PATCH] New Code Editor and fun --- astro-i18n.config.ts | 3 + astro.config.mjs | 6 +- package.json | 16 +- pnpm-lock.yaml | 646 ++++++++++-------- src/components/EloTable.svelte | 44 ++ src/components/FightStatistics.svelte | 19 + src/components/FightStatsChart.svelte | 73 ++ src/components/FightTable.svelte | 50 ++ src/components/PostComponent.astro | 37 + src/components/TagComponent.astro | 16 + src/components/admin/pages/Event.svelte | 2 +- src/components/admin/pages/Perms.svelte | 15 +- src/components/admin/pages/edit/Editor.svelte | 8 +- .../admin/pages/edit/MDEMarkdownEditor.svelte | 37 + src/components/dashboard/Statistics.svelte | 25 + src/components/dashboard/UserInfo.svelte | 8 +- src/components/repo/data.ts | 4 +- src/components/repo/event.ts | 42 +- src/components/repo/fight.ts | 32 +- src/components/repo/page.ts | 7 +- src/components/repo/perms.ts | 8 +- src/components/repo/repo.ts | 2 + src/components/repo/schem.ts | 8 +- src/components/repo/stats.ts | 20 + src/components/types/stats.ts | 26 + src/content/announcements/de/first.md | 13 + src/content/announcements/en/first.md | 26 + src/content/announcements/en/secound.md | 11 + src/content/config.ts | 27 +- src/content/modes/airship.json | 3 +- src/content/pages/de/faq.md | 2 +- src/content/pages/en/about.md | 28 +- src/content/pages/en/faq.md | 144 ++++ src/content/pages/en/join.md | 29 + src/env.d.ts | 4 +- src/i18n/common/en.json | 15 + src/i18n/pages/announcements/de.json | 5 + src/i18n/pages/announcements/en.json | 5 + src/i18n/pages/announcements/tags/en.json | 5 + src/i18n/pages/ranked/de.json | 5 + src/i18n/pages/ranked/en.json | 5 + src/i18n/pages/rules/en.json | 7 +- src/i18n/pages/stats/fight/de.json | 5 + src/i18n/pages/stats/fight/en.json | 5 + src/layouts/NavbarLayout.astro | 12 +- src/pages/[...slug].astro | 36 +- src/pages/announcements/[...slug].astro | 101 +++ src/pages/announcements/index.astro | 20 + src/pages/announcements/tags/[tag].astro | 51 ++ src/pages/ranked/[...gamemode].astro | 30 +- src/pages/rules/[...slug].astro | 56 +- src/pages/rules/index.astro | 5 +- src/pages/stats/fight.astro | 10 + 53 files changed, 1330 insertions(+), 489 deletions(-) create mode 100644 src/components/EloTable.svelte create mode 100644 src/components/FightStatistics.svelte create mode 100644 src/components/FightStatsChart.svelte create mode 100644 src/components/FightTable.svelte create mode 100644 src/components/PostComponent.astro create mode 100644 src/components/TagComponent.astro create mode 100644 src/components/admin/pages/edit/MDEMarkdownEditor.svelte create mode 100644 src/components/dashboard/Statistics.svelte create mode 100644 src/components/repo/stats.ts create mode 100644 src/components/types/stats.ts create mode 100644 src/content/announcements/de/first.md create mode 100644 src/content/announcements/en/first.md create mode 100644 src/content/announcements/en/secound.md create mode 100644 src/content/pages/en/faq.md create mode 100644 src/content/pages/en/join.md create mode 100644 src/i18n/pages/announcements/de.json create mode 100644 src/i18n/pages/announcements/en.json create mode 100644 src/i18n/pages/announcements/tags/en.json create mode 100644 src/i18n/pages/ranked/de.json create mode 100644 src/i18n/pages/ranked/en.json create mode 100644 src/i18n/pages/stats/fight/de.json create mode 100644 src/i18n/pages/stats/fight/en.json create mode 100644 src/pages/announcements/[...slug].astro create mode 100644 src/pages/announcements/index.astro create mode 100644 src/pages/announcements/tags/[tag].astro create mode 100644 src/pages/stats/fight.astro diff --git a/astro-i18n.config.ts b/astro-i18n.config.ts index 0b3badc..b151f71 100644 --- a/astro-i18n.config.ts +++ b/astro-i18n.config.ts @@ -18,6 +18,9 @@ export default defineAstroI18nConfig({ "code-of-conduct": "verhaltensrichtlinien", rules: "regeln", ranked: "rangliste", + faq: "haeufige-fragen", + stats: "statistiken", + announcements: "ankuendigungen", } }, }) \ No newline at end of file diff --git a/astro.config.mjs b/astro.config.mjs index 937d314..a9384d8 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -11,7 +11,5 @@ export default defineConfig({ }, compressHTML: true, integrations: [svelte(), tailwind(), configureI18n()], - vite: { - - } -}); + vite: {}, +}); \ No newline at end of file diff --git a/package.json b/package.json index ba99b21..f76357c 100644 --- a/package.json +++ b/package.json @@ -20,30 +20,32 @@ "@astropub/icons": "^0.2.0", "@types/color": "^3.0.6", "@types/crypto-js": "^4.2.1", - "@types/node": "^20.9.3", + "@types/node": "^20.10.1", "cssnano": "^6.0.1", - "esbuild": "^0.19.7", + "esbuild": "^0.19.8", "postcss-nesting": "^12.0.1", "sass": "^1.69.5", - "svelte": "^4.2.7", + "svelte": "^4.2.8", "tailwind-merge": "^2.0.0", "tailwindcss": "^3.3.5" }, "dependencies": { "@codemirror/lang-json": "^6.0.1", - "@codemirror/lang-markdown": "^6.2.2", "@ddietr/codemirror-themes": "^1.4.2", - "astro": "^3.5.6", + "astro": "^3.6.4", "astro-i18n": "^2.1.18", + "chart.js": "^4.4.0", + "chartjs-adapter-moment": "^1.0.1", "color": "^4.2.3", "crypto-js": "^4.2.0", + "easymde": "^2.18.0", "flowbite": "^1.8.1", - "flowbite-svelte": "^0.44.19", + "flowbite-svelte": "^0.44.20", "flowbite-svelte-icons": "^0.4.5", "moment": "^2.29.4", "sharp": "^0.32.6", "svelte-awesome": "^3.2.1", - "svelte-codemirror-editor": "^1.1.0", + "svelte-codemirror-editor": "^1.2.0", "svelte-spa-router": "^3.3.0", "zod": "^3.22.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46bd79d..44647e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,32 +9,41 @@ dependencies: specifier: ^6.0.1 version: 6.0.1 '@codemirror/lang-markdown': - specifier: ^6.2.2 - version: 6.2.2 + specifier: ^6.2.3 + version: 6.2.3 '@ddietr/codemirror-themes': specifier: ^1.4.2 version: 1.4.2 astro: - specifier: ^3.5.6 - version: 3.5.6(@types/node@20.9.3)(sass@1.69.5)(typescript@5.3.2) + specifier: ^3.6.4 + version: 3.6.4(@types/node@20.10.1)(sass@1.69.5)(typescript@5.3.2) astro-i18n: specifier: ^2.1.18 - version: 2.1.18(esbuild@0.19.7) + version: 2.1.18(esbuild@0.19.8) + chart.js: + specifier: ^4.4.0 + version: 4.4.0 + chartjs-adapter-moment: + specifier: ^1.0.1 + version: 1.0.1(chart.js@4.4.0)(moment@2.29.4) color: specifier: ^4.2.3 version: 4.2.3 crypto-js: specifier: ^4.2.0 version: 4.2.0 + easymde: + specifier: ^2.18.0 + version: 2.18.0 flowbite: specifier: ^1.8.1 version: 1.8.1 flowbite-svelte: - specifier: ^0.44.19 - version: 0.44.19(svelte@4.2.7) + specifier: ^0.44.20 + version: 0.44.20(svelte@4.2.8) flowbite-svelte-icons: specifier: ^0.4.5 - version: 0.4.5(svelte@4.2.7)(tailwind-merge@2.0.0)(tailwindcss@3.3.5) + version: 0.4.5(svelte@4.2.8)(tailwind-merge@2.0.0)(tailwindcss@3.3.5) moment: specifier: ^2.29.4 version: 2.29.4 @@ -43,10 +52,10 @@ dependencies: version: 0.32.6 svelte-awesome: specifier: ^3.2.1 - version: 3.2.1(svelte@4.2.7) + version: 3.2.1(svelte@4.2.8) svelte-codemirror-editor: - specifier: ^1.1.0 - version: 1.1.0(codemirror@6.0.1) + specifier: ^1.2.0 + version: 1.2.0(codemirror@6.0.1)(svelte@4.2.8) svelte-spa-router: specifier: ^3.3.0 version: 3.3.0 @@ -60,13 +69,13 @@ devDependencies: version: 0.4.1 '@astrojs/svelte': specifier: ^4.0.4 - version: 4.0.4(astro@3.5.6)(svelte@4.2.7)(typescript@5.3.2)(vite@4.5.0) + version: 4.0.4(astro@3.6.4)(svelte@4.2.8)(typescript@5.3.2)(vite@4.5.0) '@astrojs/tailwind': specifier: ^5.0.2 - version: 5.0.2(astro@3.5.6)(tailwindcss@3.3.5) + version: 5.0.2(astro@3.6.4)(tailwindcss@3.3.5) '@astropub/icons': specifier: ^0.2.0 - version: 0.2.0(astro@3.5.6) + version: 0.2.0(astro@3.6.4) '@types/color': specifier: ^3.0.6 version: 3.0.6 @@ -74,14 +83,14 @@ devDependencies: specifier: ^4.2.1 version: 4.2.1 '@types/node': - specifier: ^20.9.3 - version: 20.9.3 + specifier: ^20.10.1 + version: 20.10.1 cssnano: specifier: ^6.0.1 version: 6.0.1(postcss@8.4.31) esbuild: - specifier: ^0.19.7 - version: 0.19.7 + specifier: ^0.19.8 + version: 0.19.8 postcss-nesting: specifier: ^12.0.1 version: 12.0.1(postcss@8.4.31) @@ -89,8 +98,8 @@ devDependencies: specifier: ^1.69.5 version: 1.69.5 svelte: - specifier: ^4.2.7 - version: 4.2.7 + specifier: ^4.2.8 + version: 4.2.8 tailwind-merge: specifier: ^2.0.0 version: 2.0.0 @@ -117,13 +126,13 @@ packages: /@astrojs/internal-helpers@0.2.1: resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==} - /@astrojs/markdown-remark@3.5.0(astro@3.5.6): + /@astrojs/markdown-remark@3.5.0(astro@3.6.4): resolution: {integrity: sha512-q7vdIqzYhxpsfghg2YmkmSXCfp4w7lBTYP+SSHw89wVhC5Riltr3u8w2otBRxNLSByNi+ht/gGkFC23Shetytw==} peerDependencies: astro: ^3.0.0 dependencies: '@astrojs/prism': 3.0.0 - astro: 3.5.6(@types/node@20.9.3)(sass@1.69.5)(typescript@5.3.2) + astro: 3.6.4(@types/node@20.10.1)(sass@1.69.5)(typescript@5.3.2) github-slugger: 2.0.0 import-meta-resolve: 3.1.1 mdast-util-definitions: 6.0.0 @@ -152,30 +161,30 @@ packages: dependencies: prismjs: 1.29.0 - /@astrojs/svelte@4.0.4(astro@3.5.6)(svelte@4.2.7)(typescript@5.3.2)(vite@4.5.0): + /@astrojs/svelte@4.0.4(astro@3.6.4)(svelte@4.2.8)(typescript@5.3.2)(vite@4.5.0): resolution: {integrity: sha512-7OIq3YWSq270TrJZhVNzGXB5+eCp1vyNS0+WcGixxtUSz8ciwO+PqZ6GIhvmEjbBPR0x0QS8t0p0B2qlKJu/EA==} engines: {node: '>=18.14.1'} peerDependencies: astro: ^3.0.0 svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1 dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.2(svelte@4.2.7)(vite@4.5.0) - astro: 3.5.6(@types/node@20.9.3)(sass@1.69.5)(typescript@5.3.2) - svelte: 4.2.7 - svelte2tsx: 0.6.25(svelte@4.2.7)(typescript@5.3.2) + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.0) + astro: 3.6.4(@types/node@20.10.1)(sass@1.69.5)(typescript@5.3.2) + svelte: 4.2.8 + svelte2tsx: 0.6.27(svelte@4.2.8)(typescript@5.3.2) transitivePeerDependencies: - supports-color - typescript - vite dev: true - /@astrojs/tailwind@5.0.2(astro@3.5.6)(tailwindcss@3.3.5): + /@astrojs/tailwind@5.0.2(astro@3.6.4)(tailwindcss@3.3.5): resolution: {integrity: sha512-oXqeqmBlkQmsltrsU9nEWeXOtrZIAHW8dcmX7BCdrjzPnU6dPwWzAwhddNQ9ihKiWwsLnlbwQZIo2CDigcZlIA==} peerDependencies: astro: ^3.2.4 tailwindcss: ^3.0.24 dependencies: - astro: 3.5.6(@types/node@20.9.3)(sass@1.69.5)(typescript@5.3.2) + astro: 3.6.4(@types/node@20.10.1)(sass@1.69.5)(typescript@5.3.2) autoprefixer: 10.4.16(postcss@8.4.31) postcss: 8.4.31 postcss-load-config: 4.0.2(postcss@8.4.31) @@ -198,39 +207,39 @@ packages: transitivePeerDependencies: - supports-color - /@astropub/icons@0.2.0(astro@3.5.6): + /@astropub/icons@0.2.0(astro@3.6.4): resolution: {integrity: sha512-qM/ldW/9rVHULNOZgz/23Yzgm2r3Iy2JJ1FuvJB6sFU67n61o1ImuXdHiaWSNoEHubD+IUkD9WG0hbhINgszqA==} peerDependencies: astro: '*' dependencies: - astro: 3.5.6(@types/node@20.9.3)(sass@1.69.5)(typescript@5.3.2) + astro: 3.6.4(@types/node@20.10.1)(sass@1.69.5)(typescript@5.3.2) dev: true - /@babel/code-frame@7.23.4: - resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.23.4 chalk: 2.4.2 - /@babel/compat-data@7.23.3: - resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - /@babel/core@7.23.3: - resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.4 - '@babel/generator': 7.23.4 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) - '@babel/helpers': 7.23.4 - '@babel/parser': 7.23.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.4 - '@babel/types': 7.23.4 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -239,11 +248,11 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.23.4: - resolution: {integrity: sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==} + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 @@ -252,14 +261,14 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 /@babel/helper-compilation-targets@7.22.15: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.3 - '@babel/helper-validator-option': 7.22.15 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 @@ -273,27 +282,27 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -308,13 +317,13 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} @@ -324,17 +333,17 @@ packages: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.23.4: - resolution: {integrity: sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==} + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.4 - '@babel/types': 7.23.4 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 transitivePeerDependencies: - supports-color @@ -346,37 +355,37 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.23.4: - resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==} + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.3): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.3): + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.5): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) - '@babel/types': 7.23.4 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/types': 7.23.5 - /@babel/runtime@7.23.4: - resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 @@ -385,92 +394,92 @@ packages: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.4 - '@babel/parser': 7.23.4 - '@babel/types': 7.23.4 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 - /@babel/traverse@7.23.4: - resolution: {integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==} + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.4 - '@babel/generator': 7.23.4 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.4 - '@babel/types': 7.23.4 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.23.4: - resolution: {integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==} + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@codemirror/autocomplete@6.11.0(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1): - resolution: {integrity: sha512-LCPH3W+hl5vcO7OzEQgX6NpKuKVyiKFLGAy7FXROF6nUpsWUdQEgUb3fe/g7B0E1KZCRFfgzdKASt6Wly2UOBg==} + /@codemirror/autocomplete@6.11.1(@codemirror/language@6.9.3)(@codemirror/state@6.3.2)(@codemirror/view@6.22.1)(@lezer/common@1.1.1): + resolution: {integrity: sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==} peerDependencies: '@codemirror/language': ^6.0.0 '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 '@lezer/common': ^1.0.0 dependencies: - '@codemirror/language': 6.9.2 - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/language': 6.9.3 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 '@lezer/common': 1.1.1 dev: false - /@codemirror/commands@6.3.0: - resolution: {integrity: sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==} + /@codemirror/commands@6.3.2: + resolution: {integrity: sha512-tjoi4MCWDNxgIpoLZ7+tezdS9OEB6pkiDKhfKx9ReJ/XBcs2G2RXIu+/FxXBlWsPTsz6C9q/r4gjzrsxpcnqCQ==} dependencies: - '@codemirror/language': 6.9.2 - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/language': 6.9.3 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 '@lezer/common': 1.1.1 dev: false - /@codemirror/lang-css@6.2.1(@codemirror/view@6.22.0): + /@codemirror/lang-css@6.2.1(@codemirror/view@6.22.1): resolution: {integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==} dependencies: - '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) - '@codemirror/language': 6.9.2 - '@codemirror/state': 6.3.1 + '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.9.3)(@codemirror/state@6.3.2)(@codemirror/view@6.22.1)(@lezer/common@1.1.1) + '@codemirror/language': 6.9.3 + '@codemirror/state': 6.3.2 '@lezer/common': 1.1.1 '@lezer/css': 1.1.4 transitivePeerDependencies: - '@codemirror/view' dev: false - /@codemirror/lang-html@6.4.6: - resolution: {integrity: sha512-E4C8CVupBksXvgLSme/zv31x91g06eZHSph7NczVxZW+/K+3XgJGWNT//2WLzaKSBoxpAjaOi5ZnPU1SHhjh3A==} + /@codemirror/lang-html@6.4.7: + resolution: {integrity: sha512-y9hWSSO41XlcL4uYwWyk0lEgTHcelWWfRuqmvcAmxfCs0HNWZdriWo/EU43S63SxEZpc1Hd50Itw7ktfQvfkUg==} dependencies: - '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) - '@codemirror/lang-css': 6.2.1(@codemirror/view@6.22.0) + '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.9.3)(@codemirror/state@6.3.2)(@codemirror/view@6.22.1)(@lezer/common@1.1.1) + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.22.1) '@codemirror/lang-javascript': 6.2.1 - '@codemirror/language': 6.9.2 - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/language': 6.9.3 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 '@lezer/common': 1.1.1 '@lezer/css': 1.1.4 - '@lezer/html': 1.3.6 + '@lezer/html': 1.3.7 dev: false /@codemirror/lang-javascript@6.2.1: resolution: {integrity: sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==} dependencies: - '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) - '@codemirror/language': 6.9.2 + '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.9.3)(@codemirror/state@6.3.2)(@codemirror/view@6.22.1)(@lezer/common@1.1.1) + '@codemirror/language': 6.9.3 '@codemirror/lint': 6.4.2 - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 '@lezer/common': 1.1.1 '@lezer/javascript': 1.4.9 dev: false @@ -478,27 +487,27 @@ packages: /@codemirror/lang-json@6.0.1: resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} dependencies: - '@codemirror/language': 6.9.2 + '@codemirror/language': 6.9.3 '@lezer/json': 1.0.1 dev: false - /@codemirror/lang-markdown@6.2.2: - resolution: {integrity: sha512-wmwM9Y5n/e4ndU51KcYDaQnb9goYdhXjU71dDW9goOc1VUTIPph6WKAPdJ6BzC0ZFy+UTsDwTXGWSP370RH69Q==} + /@codemirror/lang-markdown@6.2.3: + resolution: {integrity: sha512-wCewRLWpdefWi7uVkHIDiE8+45Fe4buvMDZkihqEom5uRUQrl76Zb13emjeK3W+8pcRgRfAmwelURBbxNEKCIg==} dependencies: - '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) - '@codemirror/lang-html': 6.4.6 - '@codemirror/language': 6.9.2 - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.9.3)(@codemirror/state@6.3.2)(@codemirror/view@6.22.1)(@lezer/common@1.1.1) + '@codemirror/lang-html': 6.4.7 + '@codemirror/language': 6.9.3 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 '@lezer/common': 1.1.1 '@lezer/markdown': 1.1.1 dev: false - /@codemirror/language@6.9.2: - resolution: {integrity: sha512-QGTQXSpAKDIzaSE96zNK1UfIUhPgkT1CLjh1N5qVzZuxgsEOhz5RqaN8QCIdyOQklGLx3MgHd9YrE3X3+Pl1ow==} + /@codemirror/language@6.9.3: + resolution: {integrity: sha512-qq48pYzoi6ldYWV/52+Z9Ou6QouVI+8YwvxFbUypI33NbjG2UeRHKENRyhwljTTiOqjQ33FjyZj6EREQ9apAOQ==} dependencies: - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 '@lezer/common': 1.1.1 '@lezer/highlight': 1.2.0 '@lezer/lr': 1.3.14 @@ -508,27 +517,27 @@ packages: /@codemirror/lint@6.4.2: resolution: {integrity: sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==} dependencies: - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 crelt: 1.0.6 dev: false - /@codemirror/search@6.5.4: - resolution: {integrity: sha512-YoTrvjv9e8EbPs58opjZKyJ3ewFrVSUzQ/4WXlULQLSDDr1nGPJ67mMXFNNVYwdFhybzhrzrtqgHmtpJwIF+8g==} + /@codemirror/search@6.5.5: + resolution: {integrity: sha512-PIEN3Ke1buPod2EHbJsoQwlbpkz30qGZKcnmH1eihq9+bPQx8gelauUwLYaY4vBOuBAuEhmpDLii4rj/uO0yMA==} dependencies: - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 crelt: 1.0.6 dev: false - /@codemirror/state@6.3.1: - resolution: {integrity: sha512-88e4HhMtKJyw6fKprGaN/yZfiaoGYOi2nM45YCUC6R/kex9sxFWBDGatS1vk4lMgnWmdIIB9tk8Gj1LmL8YfvA==} + /@codemirror/state@6.3.2: + resolution: {integrity: sha512-5jEikOfU0r9y+OTlZn5AEQB15mibu3deLBUp+GnLzVUNezEEuPt/JdSeniQNi+0YviblAvOPO2JQAlgJ3SYYaA==} dev: false - /@codemirror/view@6.22.0: - resolution: {integrity: sha512-6zLj4YIoIpfTGKrDMTbeZRpa8ih4EymMCKmddEDcJWrCdp/N1D46B38YEz4creTb4T177AVS9EyXkLeC/HL2jA==} + /@codemirror/view@6.22.1: + resolution: {integrity: sha512-38BRn1nPqZqiHbmWfI8zri23IbRVbmSpSmh1E/Ysvc+lIGGdBC17K8zlK7ZU6fhfy9x4De9Zyj5JQqScPq5DkA==} dependencies: - '@codemirror/state': 6.3.1 + '@codemirror/state': 6.3.2 style-mod: 4.1.0 w3c-keyname: 2.2.8 dev: false @@ -545,9 +554,9 @@ packages: /@ddietr/codemirror-themes@1.4.2: resolution: {integrity: sha512-8U3H3lmtmSWLD5VRlt7jf2HW62URnwgPxjZZDYjBX5EtMpgZ2QnqiIYrNzdQPPjJngT9D43gls3+JlekCBmrfw==} dependencies: - '@codemirror/language': 6.9.2 - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/language': 6.9.3 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 '@lezer/highlight': 1.2.0 dev: false @@ -559,8 +568,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.19.7: - resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} + /@esbuild/android-arm64@0.19.8: + resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -575,8 +584,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.19.7: - resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} + /@esbuild/android-arm@0.19.8: + resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -591,8 +600,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.19.7: - resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} + /@esbuild/android-x64@0.19.8: + resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -607,8 +616,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.19.7: - resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} + /@esbuild/darwin-arm64@0.19.8: + resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -623,8 +632,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.19.7: - resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} + /@esbuild/darwin-x64@0.19.8: + resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -639,8 +648,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.19.7: - resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} + /@esbuild/freebsd-arm64@0.19.8: + resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -655,8 +664,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.19.7: - resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} + /@esbuild/freebsd-x64@0.19.8: + resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -671,8 +680,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.19.7: - resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} + /@esbuild/linux-arm64@0.19.8: + resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -687,8 +696,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.19.7: - resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} + /@esbuild/linux-arm@0.19.8: + resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -703,8 +712,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.19.7: - resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} + /@esbuild/linux-ia32@0.19.8: + resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -719,8 +728,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.19.7: - resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} + /@esbuild/linux-loong64@0.19.8: + resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -735,8 +744,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.19.7: - resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} + /@esbuild/linux-mips64el@0.19.8: + resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -751,8 +760,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.19.7: - resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} + /@esbuild/linux-ppc64@0.19.8: + resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -767,8 +776,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.19.7: - resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} + /@esbuild/linux-riscv64@0.19.8: + resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -783,8 +792,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.19.7: - resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} + /@esbuild/linux-s390x@0.19.8: + resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -799,8 +808,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.19.7: - resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} + /@esbuild/linux-x64@0.19.8: + resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -815,8 +824,8 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.19.7: - resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} + /@esbuild/netbsd-x64@0.19.8: + resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -831,8 +840,8 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.19.7: - resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} + /@esbuild/openbsd-x64@0.19.8: + resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -847,8 +856,8 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.19.7: - resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} + /@esbuild/sunos-x64@0.19.8: + resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -863,8 +872,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.19.7: - resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} + /@esbuild/win32-arm64@0.19.8: + resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -879,8 +888,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.19.7: - resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} + /@esbuild/win32-ia32@0.19.8: + resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -895,16 +904,16 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.19.7: - resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} + /@esbuild/win32-x64@0.19.8: + resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@floating-ui/core@1.5.0: - resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + /@floating-ui/core@1.5.1: + resolution: {integrity: sha512-QgcKYwzcc8vvZ4n/5uklchy8KVdjJwcOeI+HnnTNclJjs2nYsy23DOCf+sSV1kBwD9yDAoVKCkv/gEPzgQU3Pw==} dependencies: '@floating-ui/utils': 0.1.6 dev: false @@ -912,7 +921,7 @@ packages: /@floating-ui/dom@1.5.3: resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} dependencies: - '@floating-ui/core': 1.5.0 + '@floating-ui/core': 1.5.1 '@floating-ui/utils': 0.1.6 dev: false @@ -945,6 +954,10 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@kurkle/color@0.3.2: + resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} + dev: false + /@lezer/common@1.1.1: resolution: {integrity: sha512-aAPB9YbvZHqAW+bIwiuuTDGB4DG0sYNRObGLxud8cW7osw1ZQxfDuTZ8KQiqfZ0QJGcR34CvpTMDXEyo/+Htgg==} dev: false @@ -962,8 +975,8 @@ packages: '@lezer/common': 1.1.1 dev: false - /@lezer/html@1.3.6: - resolution: {integrity: sha512-Kk9HJARZTc0bAnMQUqbtuhFVsB4AnteR2BFUWfZV7L/x1H0aAKz6YabrfJ2gk/BEgjh9L3hg5O4y2IDZRBdzuQ==} + /@lezer/html@1.3.7: + resolution: {integrity: sha512-Wo+rZ5UjLP0VqUTyXjzgmTYRW5bvTJUFn4Uw0K3HCQjX2/+f+zRo9GLN5BCAojwHQISPvaQk8BWSv2SSKx/UcQ==} dependencies: '@lezer/common': 1.1.1 '@lezer/highlight': 1.2.0 @@ -1019,7 +1032,7 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.2)(svelte@4.2.7)(vite@4.5.0): + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.0): resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -1027,29 +1040,29 @@ packages: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.2(svelte@4.2.7)(vite@4.5.0) + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.0) debug: 4.3.4 - svelte: 4.2.7 - vite: 4.5.0(@types/node@20.9.3)(sass@1.69.5) + svelte: 4.2.8 + vite: 4.5.0(@types/node@20.10.1)(sass@1.69.5) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.5.2(svelte@4.2.7)(vite@4.5.0): - resolution: {integrity: sha512-Dfy0Rbl+IctOVfJvWGxrX/3m6vxPLH8o0x+8FA5QEyMUQMo4kGOVIojjryU7YomBAexOTAuYf1RT7809yDziaA==} + /@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.8)(vite@4.5.0): + resolution: {integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==} engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.2)(svelte@4.2.7)(vite@4.5.0) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.0) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 - svelte: 4.2.7 - svelte-hmr: 0.15.3(svelte@4.2.7) - vite: 4.5.0(@types/node@20.9.3)(sass@1.69.5) + svelte: 4.2.8 + svelte-hmr: 0.15.3(svelte@4.2.8) + vite: 4.5.0(@types/node@20.10.1)(sass@1.69.5) vitefu: 0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color @@ -1063,8 +1076,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.4 - '@babel/types': 7.23.4 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 '@types/babel__generator': 7.6.7 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 @@ -1072,18 +1085,24 @@ packages: /@types/babel__generator@7.6.7: resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.4 - '@babel/types': 7.23.4 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 /@types/babel__traverse@7.20.4: resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.23.5 + + /@types/codemirror@5.60.15: + resolution: {integrity: sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA==} + dependencies: + '@types/tern': 0.23.9 + dev: false /@types/color-convert@2.0.3: resolution: {integrity: sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==} @@ -1123,6 +1142,10 @@ packages: dependencies: '@types/unist': 3.0.2 + /@types/marked@4.3.2: + resolution: {integrity: sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==} + dev: false + /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: @@ -1141,14 +1164,20 @@ packages: dependencies: '@types/unist': 2.0.10 - /@types/node@20.9.3: - resolution: {integrity: sha512-nk5wXLAXGBKfrhLB0cyHGbSqopS+nz0BUgZkUQqSHSSgdee0kssp1IAqlQOu333bW+gMNs2QREx7iynm19Abxw==} + /@types/node@20.10.1: + resolution: {integrity: sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==} dependencies: undici-types: 5.26.5 /@types/parse5@6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + /@types/tern@0.23.9: + resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} + dependencies: + '@types/estree': 1.0.5 + dev: false + /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -1231,30 +1260,30 @@ packages: /array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} - /astro-i18n@2.1.18(esbuild@0.19.7): + /astro-i18n@2.1.18(esbuild@0.19.8): resolution: {integrity: sha512-yuJnoZoPOhP62p4qBIPYqUuBX0qdQoaoxK7E96aQp2epQWhYQzwDbgOkf5qBTbxZlRvguVc0s3P+68wGQSTYXg==} hasBin: true peerDependencies: esbuild: 0.x dependencies: - esbuild: 0.19.7 + esbuild: 0.19.8 dev: false - /astro@3.5.6(@types/node@20.9.3)(sass@1.69.5)(typescript@5.3.2): - resolution: {integrity: sha512-50gKrQl7rlPKeChtZVLRMNQDVKJP2PoGk8ZiDVHt4U4AjJjnLs/XvOBuseoSXvQW5Zbp0IQuDN/uzq8hRhTl6w==} + /astro@3.6.4(@types/node@20.10.1)(sass@1.69.5)(typescript@5.3.2): + resolution: {integrity: sha512-YatUyWEQ9GUC79Wc2zbovy6D6bXPW9++Z6PYs4GDamEDspUSnnzL/INB7WJqgFI0xAFk9jcUr+MZYjkdWqXYTw==} engines: {node: '>=18.14.1', npm: '>=6.14.0'} hasBin: true dependencies: '@astrojs/compiler': 2.3.2 '@astrojs/internal-helpers': 0.2.1 - '@astrojs/markdown-remark': 3.5.0(astro@3.5.6) + '@astrojs/markdown-remark': 3.5.0(astro@3.6.4) '@astrojs/telemetry': 3.0.4 - '@babel/core': 7.23.3 - '@babel/generator': 7.23.4 - '@babel/parser': 7.23.4 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.3) - '@babel/traverse': 7.23.4 - '@babel/types': 7.23.4 + '@babel/core': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5) + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 '@types/babel__core': 7.20.5 acorn: 8.11.2 boxen: 7.1.1 @@ -1268,7 +1297,7 @@ packages: devalue: 4.3.2 diff: 5.1.0 es-module-lexer: 1.4.1 - esbuild: 0.19.7 + esbuild: 0.19.8 estree-walker: 3.0.3 execa: 8.0.1 fast-glob: 3.3.2 @@ -1298,7 +1327,7 @@ packages: tsconfck: 3.0.0(typescript@5.3.2) unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.5.0(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.0(@types/node@20.10.1)(sass@1.69.5) vitefu: 0.2.5(vite@4.5.0) which-pm: 2.1.1 yargs-parser: 21.1.1 @@ -1324,7 +1353,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.22.1 - caniuse-lite: 1.0.30001563 + caniuse-lite: 1.0.30001565 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -1401,9 +1430,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001563 - electron-to-chromium: 1.4.589 - node-releases: 2.0.13 + caniuse-lite: 1.0.30001565 + electron-to-chromium: 1.4.600 + node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.1) /buffer@5.7.1: @@ -1430,13 +1459,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.22.1 - caniuse-lite: 1.0.30001563 + caniuse-lite: 1.0.30001565 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001563: - resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} + /caniuse-lite@1.0.30001565: + resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1462,6 +1491,23 @@ packages: /character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + /chart.js@4.4.0: + resolution: {integrity: sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==} + engines: {pnpm: '>=7'} + dependencies: + '@kurkle/color': 0.3.2 + dev: false + + /chartjs-adapter-moment@1.0.1(chart.js@4.4.0)(moment@2.29.4): + resolution: {integrity: sha512-Uz+nTX/GxocuqXpGylxK19YG4R3OSVf8326D+HwSTsNw1LgzyIGRo+Qujwro1wy6X+soNSnfj5t2vZ+r6EaDmA==} + peerDependencies: + chart.js: '>=3.0.0' + moment: ^2.10.2 + dependencies: + chart.js: 4.4.0 + moment: 2.29.4 + dev: false + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -1493,8 +1539,8 @@ packages: dependencies: restore-cursor: 4.0.0 - /cli-spinners@2.9.1: - resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} /clsx@2.0.0: @@ -1510,16 +1556,26 @@ packages: estree-walker: 3.0.3 periscopic: 3.1.0 + /codemirror-spell-checker@1.1.2: + resolution: {integrity: sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==} + dependencies: + typo-js: 1.2.3 + dev: false + + /codemirror@5.65.16: + resolution: {integrity: sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg==} + dev: false + /codemirror@6.0.1(@lezer/common@1.1.1): resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} dependencies: - '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) - '@codemirror/commands': 6.3.0 - '@codemirror/language': 6.9.2 + '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.9.3)(@codemirror/state@6.3.2)(@codemirror/view@6.22.1)(@lezer/common@1.1.1) + '@codemirror/commands': 6.3.2 + '@codemirror/language': 6.9.3 '@codemirror/lint': 6.4.2 - '@codemirror/search': 6.5.4 - '@codemirror/state': 6.3.1 - '@codemirror/view': 6.22.0 + '@codemirror/search': 6.5.5 + '@codemirror/state': 6.3.2 + '@codemirror/view': 6.22.1 transitivePeerDependencies: - '@lezer/common' dev: false @@ -1826,8 +1882,18 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.589: - resolution: {integrity: sha512-zF6y5v/YfoFIgwf2dDfAqVlPPsyQeWNpEWXbAlDUS8Ax4Z2VoiiZpAPC0Jm9hXEkJm2vIZpwB6rc4KnLTQffbQ==} + /easymde@2.18.0: + resolution: {integrity: sha512-IxVVUxNWIoXLeqtBU4BLc+eS/ScYhT1Dcb6yF5Wchoj1iXAV+TIIDWx+NCaZhY7RcSHqDPKllbYq7nwGKILnoA==} + dependencies: + '@types/codemirror': 5.60.15 + '@types/marked': 4.3.2 + codemirror: 5.65.16 + codemirror-spell-checker: 1.1.2 + marked: 4.3.0 + dev: false + + /electron-to-chromium@1.4.600: + resolution: {integrity: sha512-KD6CWjf1BnQG+NsXuyiTDDT1eV13sKuYsOUioXkQweYTQIbgHkXPry9K7M+7cKtYHnSUPitVaLrXYB1jTkkYrw==} /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -1879,34 +1945,34 @@ packages: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - /esbuild@0.19.7: - resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} + /esbuild@0.19.8: + resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.19.7 - '@esbuild/android-arm64': 0.19.7 - '@esbuild/android-x64': 0.19.7 - '@esbuild/darwin-arm64': 0.19.7 - '@esbuild/darwin-x64': 0.19.7 - '@esbuild/freebsd-arm64': 0.19.7 - '@esbuild/freebsd-x64': 0.19.7 - '@esbuild/linux-arm': 0.19.7 - '@esbuild/linux-arm64': 0.19.7 - '@esbuild/linux-ia32': 0.19.7 - '@esbuild/linux-loong64': 0.19.7 - '@esbuild/linux-mips64el': 0.19.7 - '@esbuild/linux-ppc64': 0.19.7 - '@esbuild/linux-riscv64': 0.19.7 - '@esbuild/linux-s390x': 0.19.7 - '@esbuild/linux-x64': 0.19.7 - '@esbuild/netbsd-x64': 0.19.7 - '@esbuild/openbsd-x64': 0.19.7 - '@esbuild/sunos-x64': 0.19.7 - '@esbuild/win32-arm64': 0.19.7 - '@esbuild/win32-ia32': 0.19.7 - '@esbuild/win32-x64': 0.19.7 + '@esbuild/android-arm': 0.19.8 + '@esbuild/android-arm64': 0.19.8 + '@esbuild/android-x64': 0.19.8 + '@esbuild/darwin-arm64': 0.19.8 + '@esbuild/darwin-x64': 0.19.8 + '@esbuild/freebsd-arm64': 0.19.8 + '@esbuild/freebsd-x64': 0.19.8 + '@esbuild/linux-arm': 0.19.8 + '@esbuild/linux-arm64': 0.19.8 + '@esbuild/linux-ia32': 0.19.8 + '@esbuild/linux-loong64': 0.19.8 + '@esbuild/linux-mips64el': 0.19.8 + '@esbuild/linux-ppc64': 0.19.8 + '@esbuild/linux-riscv64': 0.19.8 + '@esbuild/linux-s390x': 0.19.8 + '@esbuild/linux-x64': 0.19.8 + '@esbuild/netbsd-x64': 0.19.8 + '@esbuild/openbsd-x64': 0.19.8 + '@esbuild/sunos-x64': 0.19.8 + '@esbuild/win32-arm64': 0.19.8 + '@esbuild/win32-ia32': 0.19.8 + '@esbuild/win32-x64': 0.19.8 /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -2004,20 +2070,20 @@ packages: micromatch: 4.0.5 pkg-dir: 4.2.0 - /flowbite-svelte-icons@0.4.5(svelte@4.2.7)(tailwind-merge@2.0.0)(tailwindcss@3.3.5): + /flowbite-svelte-icons@0.4.5(svelte@4.2.8)(tailwind-merge@2.0.0)(tailwindcss@3.3.5): resolution: {integrity: sha512-IBudEfw9B4UE2gCRMhbRnyE8p7qq7DDMauy0mPVIShzjaN3yVk2AmAHia1JRe9jUC98Wn7xNk/IdJlXeQj19Iw==} peerDependencies: svelte: ^3.54.0 || ^4.0.0 tailwind-merge: ^2.0.0 tailwindcss: ^3.3.2 dependencies: - svelte: 4.2.7 + svelte: 4.2.8 tailwind-merge: 2.0.0 tailwindcss: 3.3.5 dev: false - /flowbite-svelte@0.44.19(svelte@4.2.7): - resolution: {integrity: sha512-ihP6NYxr34uTb/H91uqYLG830XffuSiPyezLufgjfS/ip3vWxTLRYrqQlRG8+ls7TqTmOsjJ9H/Yx4qN/oq+mQ==} + /flowbite-svelte@0.44.20(svelte@4.2.8): + resolution: {integrity: sha512-juvzolgEvGEga8PIe+vpzGf9/xfpvd4p9ZgtSPpWQLZB8iyY/ebbKb5HNu60uqoehdokFuy/0htBBLNmP2yd/g==} engines: {node: '>=18.0.0', npm: '>=7.0.0'} peerDependencies: svelte: ^4.0.0 @@ -2025,7 +2091,7 @@ packages: '@floating-ui/dom': 1.5.3 apexcharts: 3.44.0 flowbite: 2.2.0 - svelte: 4.2.7 + svelte: 4.2.8 tailwind-merge: 2.0.0 dev: false @@ -2517,6 +2583,12 @@ packages: /markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + /marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + dev: false + /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -3013,8 +3085,8 @@ packages: /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -3068,7 +3140,7 @@ packages: dependencies: chalk: 5.3.0 cli-cursor: 4.0.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 2.0.0 is-unicode-supported: 1.3.0 log-symbols: 5.1.0 @@ -3529,7 +3601,7 @@ packages: dependencies: postcss: 8.4.31 postcss-value-parser: 4.2.0 - svgo: 3.0.4 + svgo: 3.0.5 dev: true /postcss-unique-selectors@6.0.0(postcss@8.4.31): @@ -4007,29 +4079,31 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-awesome@3.2.1(svelte@4.2.7): + /svelte-awesome@3.2.1(svelte@4.2.8): resolution: {integrity: sha512-4jckcBktldqgmHUWg1xvl3vCrZllt5YSSsPun4NW7dOp9VZx1mOqJ9ddkYCH7O3PJN4ntucJr5P9/6q2xvw/0A==} peerDependencies: svelte: ^3.43.1 || ^4.0.0 dependencies: - svelte: 4.2.7 + svelte: 4.2.8 dev: false - /svelte-codemirror-editor@1.1.0(codemirror@6.0.1): - resolution: {integrity: sha512-wFdMIsZds5qzn3x2NbFUxDVU6Cn3rwFdq0035ypaFVgzTjJ90bnPm6IbrFA4OJz1ngIyfbIuPAPDjm7rJIr0gg==} + /svelte-codemirror-editor@1.2.0(codemirror@6.0.1)(svelte@4.2.8): + resolution: {integrity: sha512-OEf52U4bBeyDFCMtPH+ZYCtYT+KdyjUw+l19V72Bxeadh2LdPOWC0WSEP+hXRleg/94VC5NgfgqHXf3DqoVZUA==} peerDependencies: codemirror: ^6.0.0 + svelte: ^3.0.0 || ^4.0.0 dependencies: codemirror: 6.0.1(@lezer/common@1.1.1) + svelte: 4.2.8 dev: false - /svelte-hmr@0.15.3(svelte@4.2.7): + /svelte-hmr@0.15.3(svelte@4.2.8): resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.2.7 + svelte: 4.2.8 dev: true /svelte-spa-router@3.3.0: @@ -4038,20 +4112,20 @@ packages: regexparam: 2.0.1 dev: false - /svelte2tsx@0.6.25(svelte@4.2.7)(typescript@5.3.2): - resolution: {integrity: sha512-hhBKL5X9gGvKQAZ9xLoHnbE9Yb00HxEZJlxcj2drxWK+Tpqcs/bnodjSfCGbqEhvNaUXYNbVL7s4dEXT+o0f6w==} + /svelte2tsx@0.6.27(svelte@4.2.8)(typescript@5.3.2): + resolution: {integrity: sha512-E1uPW1o6VsbRz+nUk3fznZ2lSmCITAJoNu8AYefWSvIwE2pSB01i5sId4RMbWNzfcwCQl1DcgGShCPcldl4rvg==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 4.2.7 + svelte: 4.2.8 typescript: 5.3.2 dev: true - /svelte@4.2.7: - resolution: {integrity: sha512-UExR1KS7raTdycsUrKLtStayu4hpdV3VZQgM0akX8XbXgLBlosdE/Sf3crOgyh9xIjqSYB3UEBuUlIQKRQX2hg==} + /svelte@4.2.8: + resolution: {integrity: sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.2.1 @@ -4122,8 +4196,8 @@ packages: svg.js: 2.7.1 dev: false - /svgo@3.0.4: - resolution: {integrity: sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g==} + /svgo@3.0.5: + resolution: {integrity: sha512-HQKHEo73pMNOlDlBcLgZRcHW2+1wo7bFYayAXkGN0l/2+h68KjlfZyMRhdhaGvoHV2eApOovl12zoFz42sT6rQ==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -4139,7 +4213,7 @@ packages: /tailwind-merge@2.0.0: resolution: {integrity: sha512-WO8qghn9yhsldLSg80au+3/gY9E4hFxIvQ3qOmlpXnqpDKoMruKfi/56BbbMg6fHTQJ9QD3cc79PoWqlaQE4rw==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.23.5 /tailwindcss@3.3.5: resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} @@ -4268,6 +4342,10 @@ packages: engines: {node: '>=14.17'} hasBin: true + /typo-js@1.2.3: + resolution: {integrity: sha512-67Hyl94beZX8gmTap7IDPrG5hy2cHftgsCAcGvE1tzuxGT+kRB+zSBin0wIMwysYw8RUCBCvv9UfQl8TNM75dA==} + dev: false + /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -4417,7 +4495,7 @@ packages: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - /vite@4.5.0(@types/node@20.9.3)(sass@1.69.5): + /vite@4.5.0(@types/node@20.10.1)(sass@1.69.5): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -4445,7 +4523,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.9.3 + '@types/node': 20.10.1 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 @@ -4461,7 +4539,7 @@ packages: vite: optional: true dependencies: - vite: 4.5.0(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.0(@types/node@20.10.1)(sass@1.69.5) /w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} diff --git a/src/components/EloTable.svelte b/src/components/EloTable.svelte new file mode 100644 index 0000000..db4a912 --- /dev/null +++ b/src/components/EloTable.svelte @@ -0,0 +1,44 @@ + + +{#await request} +

Loading...

+{:then data} +
+ + + + + + + {#each data as player, i} + + + + + + {/each} +
PlatzSpielerElo
{`${i + 1}.`}{player.name}{player.elo}
+
+{:catch error} +

{error.message}

+{/await} + + + diff --git a/src/components/FightStatistics.svelte b/src/components/FightStatistics.svelte new file mode 100644 index 0000000..43c78ab --- /dev/null +++ b/src/components/FightStatistics.svelte @@ -0,0 +1,19 @@ + + +{#await request} +

{t("status.loading")}

+{:then stats} + +{:catch error} +

error: {error}

+{/await} \ No newline at end of file diff --git a/src/components/FightStatsChart.svelte b/src/components/FightStatsChart.svelte new file mode 100644 index 0000000..2742060 --- /dev/null +++ b/src/components/FightStatsChart.svelte @@ -0,0 +1,73 @@ + + +
+ +
\ No newline at end of file diff --git a/src/components/FightTable.svelte b/src/components/FightTable.svelte new file mode 100644 index 0000000..f3c65b3 --- /dev/null +++ b/src/components/FightTable.svelte @@ -0,0 +1,50 @@ + + +
+ + + {#each Array(rows) as _} + + + + {/each} + + {#each window(event.fights.filter(f => f.group === group), rows) as fights} + + {#each fights as fight} + + + + {/each} + + {/each} +
TimeBlue TeamRed Team
{Intl.DateTimeFormat(astroI18n.locale, { + hour: "numeric", + minute: "numeric", + }).format(new Date(fight.start))}{fight.blueTeam.kuerzel}{fight.redTeam.kuerzel}
+
+ + \ No newline at end of file diff --git a/src/components/PostComponent.astro b/src/components/PostComponent.astro new file mode 100644 index 0000000..c932165 --- /dev/null +++ b/src/components/PostComponent.astro @@ -0,0 +1,37 @@ +--- +import {CollectionEntry} from "astro:content" +import {l} from "../util/util"; +import {astroI18n} from "astro-i18n"; +import {Image} from "astro:assets"; +import TagComponent from "./TagComponent.astro"; + +interface Props { + post: CollectionEntry<'announcements'> +} + +const { post } = Astro.props as Props; +--- + + +
+ {post.data.image != null ? ( +
+ Post Image +
+ ) : null} +
+

{post.data.title}

+
{Intl.DateTimeFormat(astroI18n.locale, { + day: "numeric", + month: "long", + year: "numeric" + }).format(post.data.created)}
+
{post.data.description}
+
+ {post.data.tags.map((tag) => ( + + ))} +
+
+
+
\ No newline at end of file diff --git a/src/components/TagComponent.astro b/src/components/TagComponent.astro new file mode 100644 index 0000000..bb04518 --- /dev/null +++ b/src/components/TagComponent.astro @@ -0,0 +1,16 @@ +--- + +import {l} from "../util/util"; +import {capitalize} from "./admin/util"; + +interface Props { + tag: string; +} + +const {tag} = Astro.props; + +--- + + + {capitalize(tag)} + diff --git a/src/components/admin/pages/Event.svelte b/src/components/admin/pages/Event.svelte index 0804f49..3a0ec85 100644 --- a/src/components/admin/pages/Event.svelte +++ b/src/components/admin/pages/Event.svelte @@ -6,7 +6,7 @@ import {eventRepo} from "../../repo/repo.js"; import TeamList from "./event/TeamList.svelte"; - export let params: { id: number } = {}; + export let params: { id: number }; let id = params.id; let event = $eventRepo.getEvent(id.toString()); diff --git a/src/components/admin/pages/Perms.svelte b/src/components/admin/pages/Perms.svelte index 2450d98..f3d80aa 100644 --- a/src/components/admin/pages/Perms.svelte +++ b/src/components/admin/pages/Perms.svelte @@ -4,20 +4,21 @@ import {players} from "../../stores/stores.ts"; import {permsRepo} from "../../repo/repo.ts"; import {capitalize} from "../util.ts"; + import type {Player} from "../../types/data.ts"; let search = ""; $: lowerCaseSearch = search.toLowerCase(); $: filteredPlayers = $players.filter(value => value.name.toLowerCase().includes(lowerCaseSearch)); - let selectedPlayer = null; + let selectedPlayer: number | null = null; $: player = $players.find(value => value.id === selectedPlayer); let playerPerms = loadPlayer(selectedPlayer); $: playerPerms = loadPlayer(selectedPlayer); let prefixEdit = "PREFIX_NONE"; - let activePerms = []; + let activePerms: string[] = []; - function loadPlayer(id: number) { + function loadPlayer(id: number | null) { if (!id) { return; } @@ -39,20 +40,20 @@ } function save() { - playerPerms.then(async perms => { + playerPerms!.then(async perms => { if (perms.prefix.name != prefixEdit) { - await $permsRepo.setPrefix(selectedPlayer, prefixEdit); + await $permsRepo.setPrefix(selectedPlayer!, prefixEdit); } for (let value of activePerms) { if (!perms.perms.includes(value)) { - await $permsRepo.addPerm(selectedPlayer, value); + await $permsRepo.addPerm(selectedPlayer!, value); } } for (let value of perms.perms) { if (!activePerms.includes(value)) { - await $permsRepo.removePerm(selectedPlayer, value); + await $permsRepo.removePerm(selectedPlayer!, value); } } diff --git a/src/components/admin/pages/edit/Editor.svelte b/src/components/admin/pages/edit/Editor.svelte index e0c8319..81a0e1d 100644 --- a/src/components/admin/pages/edit/Editor.svelte +++ b/src/components/admin/pages/edit/Editor.svelte @@ -1,6 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/components/dashboard/Statistics.svelte b/src/components/dashboard/Statistics.svelte new file mode 100644 index 0000000..890b7c4 --- /dev/null +++ b/src/components/dashboard/Statistics.svelte @@ -0,0 +1,25 @@ + + +{#await request} +

{t("status.loading")}

+{:then data} +

Playtime: {data.playtime}h

+

Fights: {data.fights}

+ {#if user.perms.includes("CHECK")} +

Schematics Checked: {data.acceptedSchematics}

+ {/if} +{:catch error} +

error: {error}

+{/await} \ No newline at end of file diff --git a/src/components/dashboard/UserInfo.svelte b/src/components/dashboard/UserInfo.svelte index cea4480..835e0a3 100644 --- a/src/components/dashboard/UserInfo.svelte +++ b/src/components/dashboard/UserInfo.svelte @@ -3,6 +3,7 @@ import type {Player} from "../types/data.ts"; import {tokenStore} from "../repo/repo.ts"; import {l} from "../../util/util.ts"; + import Statistics from "./Statistics.svelte"; export let user: Player; @@ -31,11 +32,6 @@

{t("dashboard.title", {name: user.name})}

{t("dashboard.rank", {rank: t("home.prefix." + user.prefix)})}

-

{t("dashboard.permissions")}

-
    - {#each user.perms as permission} -
  • {permission}
  • - {/each} -
+
\ No newline at end of file diff --git a/src/components/repo/data.ts b/src/components/repo/data.ts index 604a172..40c64dc 100644 --- a/src/components/repo/data.ts +++ b/src/components/repo/data.ts @@ -6,10 +6,10 @@ export class DataRepo { constructor(private token: string) {} public async getServer(): Promise { - return await fetchWithToken(this.token, "/data/server").then(value => value.json()).then(value => ServerSchema.parse(value)); + return await fetchWithToken(this.token, "/data/server").then(value => value.json()).then(ServerSchema.parse); } public async getMe(): Promise { - return await fetchWithToken(this.token, "/data/me").then(value => value.json()).then(value => PlayerSchema.parse(value)); + return await fetchWithToken(this.token, "/data/me").then(value => value.json()).then(PlayerSchema.parse); } } \ No newline at end of file diff --git a/src/components/repo/event.ts b/src/components/repo/event.ts index e14b6b1..3950fe1 100644 --- a/src/components/repo/event.ts +++ b/src/components/repo/event.ts @@ -25,44 +25,31 @@ export class EventRepo { constructor(private token: string) {} public async listEvents(): Promise { - const res = await fetchWithToken(this.token, "/events"); - - if (res.ok) { - return z.array(ShortEventSchema).parse(await res.json()); - } else { - throw new Error("Could not fetch events: " + res.statusText); - } + return await fetchWithToken(this.token, "/events") + .then(value => value.json()) + .then(value => z.array(ShortEventSchema).parse(value)); } public async getEvent(id: string): Promise { - const res = await fetchWithToken(this.token, `/events/${id}`); - - if (res.ok) { - return ExtendedEventSchema.parse(await res.json()); - } else { - throw new Error("Could not fetch event: " + res.statusText); - } + return await fetchWithToken(this.token, `/events/${id}`) + .then(value => value.json()) + .then(ExtendedEventSchema.parse); } public async createEvent(event: CreateEvent): Promise { - const res = await fetchWithToken(this.token, "/events", { + return await fetchWithToken(this.token, "/events", { method: "POST", body: JSON.stringify({ name: event.name, start: +event.start, end: +event.end }), - }); - - if (res.ok) { - return SWEventSchema.parse(await res.json()); - } else { - throw new Error("Could not create event: " + res.statusText); - } + }).then(value => value.json()) + .then(SWEventSchema.parse); } public async updateEvent(id: string, event: UpdateEvent): Promise { - const res = await fetchWithToken(this.token, `/events/${id}`, { + return await fetchWithToken(this.token, `/events/${id}`, { method: "PUT", body: JSON.stringify({ name: event.name, @@ -77,13 +64,8 @@ export class EventRepo { headers: { "Content-Type": "application/json" } - }); - - if (res.ok) { - return SWEventSchema.parse(await res.json()); - } else { - throw new Error("Could not update event: " + res.statusText); - } + }).then(value => value.json()) + .then(SWEventSchema.parse); } public async deleteEvent(id: string): Promise { diff --git a/src/components/repo/fight.ts b/src/components/repo/fight.ts index 1a6cc5e..2369d8f 100644 --- a/src/components/repo/fight.ts +++ b/src/components/repo/fight.ts @@ -28,17 +28,13 @@ export class FightRepo { constructor(private token: string) {} public async listFights(eventId: number): Promise { - const res = await fetchWithToken(this.token, `/events/${eventId}/fights`); - - if (res.ok) { - return z.array(EventFightSchema).parse(await res.json()); - } else { - throw new Error("Could not fetch fights: " + res.statusText); - } + return await fetchWithToken(this.token, `/events/${eventId}/fights`) + .then(value => value.json()) + .then(value => z.array(EventFightSchema).parse(value)); } public async createFight(eventId: number, fight: CreateFight): Promise { - let res = await fetchWithToken(this.token, `/fights`, { + return await fetchWithToken(this.token, `/fights`, { method: "POST", body: JSON.stringify({ event: eventId, @@ -50,17 +46,12 @@ export class FightRepo { kampfleiter: fight.kampfleiter, group: fight.group }) - }) - - if (res.ok) { - return EventFightSchema.parse(await res.json()); - } else { - throw new Error("Could not create fight: " + res.statusText); - } + }).then(value => value.json()) + .then(EventFightSchema.parse) } public async updateFight(fightId: number, fight: UpdateFight): Promise { - let res = await fetchWithToken(this.token, `/fights/${fightId}`, { + return await fetchWithToken(this.token, `/fights/${fightId}`, { method: "PUT", body: JSON.stringify({ spielmodus: fight.spielmodus, @@ -71,13 +62,8 @@ export class FightRepo { kampfleiter: fight.kampfleiter, group: fight.group }) - }) - - if (res.ok) { - return EventFightSchema.parse(await res.json()); - } else { - throw new Error("Could not update fight: " + res.statusText); - } + }).then(value => value.json()) + .then(EventFightSchema.parse) } public async deleteFight(fightId: number): Promise { diff --git a/src/components/repo/page.ts b/src/components/repo/page.ts index f41f5f1..4145781 100644 --- a/src/components/repo/page.ts +++ b/src/components/repo/page.ts @@ -2,6 +2,7 @@ import type {Page, PageList} from "../types/page.ts"; import {fetchWithToken} from "./repo.ts"; import {PageListSchema, PageSchema} from "../types/page.ts"; import {bytesToBase64} from "../admin/util.ts"; +import {z} from "zod"; export class PageRepo { constructor(private token: string) {} @@ -9,13 +10,14 @@ export class PageRepo { public async listPages(branch: string = "master"): Promise { return await fetchWithToken(this.token, `/page?branch=${branch}`) .then(value => value.json()) - .then(value => PageListSchema.parse(value).map(value1 => ({...value1, path: value1.path.replace("src/content/", "")}))) + .then(PageListSchema.parse) + .then(value => value.map(value1 => ({...value1, path: value1.path.replace("src/content/", "")}))) } public async getPage(id: number, branch: string = "master"): Promise { return await fetchWithToken(this.token, `/page/${id}?branch=${branch}`) .then(value => value.json()) - .then(value => PageSchema.parse(value)) + .then(PageSchema.parse) } public async updatePage(id: number, content: string, sha: string, message: string, branch: string = "master"): Promise { @@ -31,6 +33,7 @@ export class PageRepo { public async getBranches(): Promise { return await fetchWithToken(this.token, "/page/branch") .then(value => value.json()) + .then(value => z.array(z.string()).parse(value)) } public async createBranch(branch: string): Promise { diff --git a/src/components/repo/perms.ts b/src/components/repo/perms.ts index 0f354c9..8053a2d 100644 --- a/src/components/repo/perms.ts +++ b/src/components/repo/perms.ts @@ -16,13 +16,7 @@ export class PermsRepo { } public async getPerms(userId: number): Promise { - const res = await fetchWithToken(this.token, `/perms/user/${userId}`); - - if (res.ok) { - return UserPermsSchema.parse(await res.json()); - } else { - throw new Error("Could not fetch perms: " + res.statusText); - } + return await fetchWithToken(this.token, `/perms/user/${userId}`).then(value => value.json()).then(UserPermsSchema.parse); } public async setPrefix(userId: number, prefix: string): Promise { diff --git a/src/components/repo/repo.ts b/src/components/repo/repo.ts index 91f9eaf..8b3eff5 100644 --- a/src/components/repo/repo.ts +++ b/src/components/repo/repo.ts @@ -7,6 +7,7 @@ import {DataRepo} from "./data.ts"; import { AES, enc, format } from "crypto-js"; import {SchematicRepo} from "./schem.ts"; +import {StatsRepo} from "./stats.ts"; export { EventRepo } from "./event.js" @@ -31,3 +32,4 @@ export const permsRepo = derived(tokenStore, ($token) => new PermsRepo($token)) export const pageRepo = derived(tokenStore, ($token) => new PageRepo($token)) export const dataRepo = derived(tokenStore, ($token) => new DataRepo($token)) export const schemRepo = derived(tokenStore, ($token) => new SchematicRepo($token)) +export const statsRepo = derived(tokenStore, ($token) => new StatsRepo($token)) diff --git a/src/components/repo/schem.ts b/src/components/repo/schem.ts index 40d45fd..f164382 100644 --- a/src/components/repo/schem.ts +++ b/src/components/repo/schem.ts @@ -6,19 +6,19 @@ export class SchematicRepo { constructor(private token: string) {} public async getRootSchematicList(): Promise { - return await fetchWithToken(this.token, "/schem").then(value => value.json()).then(value => SchematicListSchema.parse(value)); + return await fetchWithToken(this.token, "/schem").then(value => value.json()).then(SchematicListSchema.parse); } public async getSchematicList(id: number): Promise { - return await fetchWithToken(this.token, `/schem/${id}/list`).then(value => value.json()).then(value => SchematicListSchema.parse(value)); + return await fetchWithToken(this.token, `/schem/${id}/list`).then(value => value.json()).then(SchematicListSchema.parse); } public async getSchematicInfo(id: number): Promise { - return await fetchWithToken(this.token, `/schem/${id}`).then(value => value.json()).then(value => SchematicInfoSchema.parse(value)); + return await fetchWithToken(this.token, `/schem/${id}`).then(value => value.json()).then(SchematicInfoSchema.parse); } public async createDownload(id: number): Promise { - return await fetchWithToken(this.token, `/schem/${id}/download`).then(value => value.json()).then(value => SchematicCodeSchema.parse(value)); + return await fetchWithToken(this.token, `/schem/${id}/download`).then(value => value.json()).then(SchematicCodeSchema.parse); } public async uploadSchematic(name: string, content: string) { diff --git a/src/components/repo/stats.ts b/src/components/repo/stats.ts new file mode 100644 index 0000000..db0e307 --- /dev/null +++ b/src/components/repo/stats.ts @@ -0,0 +1,20 @@ +import type {FightStats, Ranking, UserStats} from "../types/stats.ts"; +import {fetchWithToken} from "./repo.ts"; +import {FightStatsSchema, RankingSchema, UserStatsSchema} from "../types/stats.ts"; + +export class StatsRepo { + + constructor(private token: string) {} + + public async getRankings(gamemode: string): Promise { + return await fetchWithToken(this.token, `/stats/ranked/${gamemode}`).then(value => value.json()).then(RankingSchema.parse); + } + + public async getFightStats(): Promise { + return await fetchWithToken(this.token, `/stats/fights`).then(value => value.json()).then(FightStatsSchema.parse); + } + + public async getUserStats(id: number): Promise { + return await fetchWithToken(this.token, `/stats/user/${id}`).then(value => value.json()).then(UserStatsSchema.parse); + } +} \ No newline at end of file diff --git a/src/components/types/stats.ts b/src/components/types/stats.ts new file mode 100644 index 0000000..f719ce5 --- /dev/null +++ b/src/components/types/stats.ts @@ -0,0 +1,26 @@ +import {z} from "zod"; + +export const RankingSchema = z.array(z.object({ + name: z.string(), + elo: z.number(), +})) + +export type Ranking = z.infer; + +export const FightStatsSchema = z.array(z.object({ + date: z.string(), + gamemode: z.string(), + count: z.number(), +})) + +export type FightStats = z.infer; + +export const UserStatsSchema = z.object({ + eventFightParticipation: z.number(), + eventParticipation: z.number(), + acceptedSchematics: z.number(), + fights: z.number(), + playtime: z.number() +}) + +export type UserStats = z.infer; \ No newline at end of file diff --git a/src/content/announcements/de/first.md b/src/content/announcements/de/first.md new file mode 100644 index 0000000..eaa8d81 --- /dev/null +++ b/src/content/announcements/de/first.md @@ -0,0 +1,13 @@ +--- +title: First Announcement +description: First announcement for the 2021 edition of the conference. +created: 2021-01-01 +tags: + - blog + - event +--- + +# First Announcement + + + \ No newline at end of file diff --git a/src/content/announcements/en/first.md b/src/content/announcements/en/first.md new file mode 100644 index 0000000..b3062ee --- /dev/null +++ b/src/content/announcements/en/first.md @@ -0,0 +1,26 @@ +--- +title: First Announcement +description: First announcement for the 2021 edition of the conference. With realy long text to test the layout. But this is not enough, so I will add some more +created: 2023-12-03 +tags: + - event + - miniwargear +--- + +Liebe Community! + +Das Jahr 2023 neigt sich dem Ende zu und 2024 steht bereits in den Startlöschern. + +Auf diesem Wege Lade ich Euch zum traditionelle MicroWargearEvent auf Steamwar ein. Bereits zum dritten man in Folge findet das Event jedes Jahr zum 1.01. statt und wollen diese Tradition weiterführen. Ihr konntet Euch bereits seit einigen Wochen anmelden. Mit dem Befehl /team event MicroNeuJahr24 könnt Ihr Euer Team ingame anmelden. Alternativ besteht die Anmeldemöglichkeit ebenso auf unserem Community DC server unter dem Bereich Event. + +- Wann? 1.01.2024 c.a 16 Uhr +- Wo? Steamwar.de Minecraft Server +- Version: 1.20 +- Regelwerk: MicroWarGear Regelwerk – SteamWar +- max 3 Fighter pro Team + +das Serverteam würde sich freuen, wenn es wieder viele Teams gibt welch an diesem Event teilnehmen und wünschen allen Viel Spaß, Erfolg und einen Guten Rutsch! + +Viele Grüßen + +Steamwar – Serverteam diff --git a/src/content/announcements/en/secound.md b/src/content/announcements/en/secound.md new file mode 100644 index 0000000..e6ca2ca --- /dev/null +++ b/src/content/announcements/en/secound.md @@ -0,0 +1,11 @@ +--- +title: Second Announcement +description: Second announcement for the 2022 edition of the conference. +created: 2022-01-01 +tags: + - blog +--- + +# First Announcement + + \ No newline at end of file diff --git a/src/content/config.ts b/src/content/config.ts index 4725e97..56a7246 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -20,18 +20,6 @@ export const help = defineCollection({ }) }) -export const event = defineCollection({ - type: "content", - schema: z.object({ - name: z.string(), - start: z.date(), - end: z.date(), - mode: z.string().optional(), - leader: z.string().array().optional(), - eventId: z.number().gte(0) - }) -}) - export const modes = defineCollection({ type: "data", schema: z.object({ @@ -59,11 +47,22 @@ export const rules = defineCollection({ }) }) +export const announcements = defineCollection({ + type: "content", + schema: ({image}) => z.object({ + title: z.string(), + description: z.string(), + image: image().optional(), + tags: z.array(z.string()), + created: z.date() + }) +}) + export const collections = { 'pages': pages, 'help': help, - 'event': event, 'modes': modes, 'rules': rules, - 'downloads': downloads + 'downloads': downloads, + 'announcements': announcements } diff --git a/src/content/modes/airship.json b/src/content/modes/airship.json index 228e9cc..a7f8152 100644 --- a/src/content/modes/airship.json +++ b/src/content/modes/airship.json @@ -1,4 +1,5 @@ { "translationKey": "as", - "main": true + "main": true, + "ranked": true } \ No newline at end of file diff --git a/src/content/pages/de/faq.md b/src/content/pages/de/faq.md index d8b79e8..2e59fe2 100644 --- a/src/content/pages/de/faq.md +++ b/src/content/pages/de/faq.md @@ -1,7 +1,7 @@ --- title: FAQ description: Frequently asked questions -slug: faq +slug: haeufige-fragen --- # Server/ IP-Adresse diff --git a/src/content/pages/en/about.md b/src/content/pages/en/about.md index c5c7dd0..03d0761 100644 --- a/src/content/pages/en/about.md +++ b/src/content/pages/en/about.md @@ -1,5 +1,29 @@ --- -title: About Us -description: About SteamWar +title: Über uns +description: Über SteamWar slug: about --- + + +# Sicherheit + +Wir legen Wert auf Sicherheit. + +Deshalb hat niemand außer dir und denen, denen du die Rechte dazu gebt, ingame Zugriff auf deine Schematics und deine Bauwelt. Nur AdmiralSeekrank, YoyoNow, Chaoscaot und Lixfel haben (außerhalb von Minecraft) aus administrativen Gründen Zugriff darauf. + +
+ +# Stabilität + +Unsere Server sollen laggfrei und stabil laufen. + +Deswegen läuft jede Arena und jede Bauwelt auf einem eigenen Server. Damit bleibt deine Bauwelt so stabil und laggfrei wie möglich, solange du sie nicht selbst zum Absturz bringst :). + +
+ +# Komfort + +Unser Bauserver bietet einmalige Funktionen, welche dir beim Entwickeln deiner Technik hilfreich sein werden. +AirShips + +Um eine Mitte zwischen den Spielmodi WarShip und WarGear zu finden, haben wir den Spielmodus AirShips entwickelt! Mit einem möglichst einfachen Regelwerk versuchen wir dabei, ein maximal spannendes und interessantes Spielerlebnis zu gestalten. diff --git a/src/content/pages/en/faq.md b/src/content/pages/en/faq.md new file mode 100644 index 0000000..d8b79e8 --- /dev/null +++ b/src/content/pages/en/faq.md @@ -0,0 +1,144 @@ +--- +title: FAQ +description: Frequently asked questions +slug: faq +--- + +# Server/ IP-Adresse + +#### Was ist die IP? Wie kann ich auf den Server joinen? +Steamwar.de + +#### Mit welcher Version kann ich auf den Server joinen? +SteamWar läuft auf der 1.19.4, du kannst aber mit den Versionen 1.12.x -1.19.4 joinen. + +#### Kann ich auch mit der Bedrock-Version joinen? +Ja, über die IP: steamwar.de + +# Allgemeines + +#### Wo finde ich die Verhaltensrichtlinien/ Serverregeln +Über diese Website unter „Startseite“ oder indem du hier drauf klickst + +# Minigames/ Fights + +#### Wie kann ich Kämpfe starten? +Mit „/fight“ kannst du Kämpfe mit dem aktuellen WarGear Regelwerk und der WG Submodi starten. Du kannst aber auch die Lobby-Portale nutzen, indem du entweder durch die großen Portale am Spawn gehst, oder im Teleporter auf „Arenen“ drückst, und dann dort über die Portale eine Runde startest. + +#### Wie kann ich Kämpfe mit alten Regelwerken starten? +Mit „/historic“ kannst du alle historischen Spielmodi spielen, bis zur Version 1.7. + +#### Wie kann ich gegen einen bestimmten Spieler kämpfen? +Mit „/challenge“ kannst du den gewählten Spieler herausfordern. So können auch z. B. Private MissileWars Runden gestartet werden, in der jeder Spieler eingeladen werden muss, um teilnehmen zu können. Der Challenge-Befehl funktioniert nicht mit historischen Spielmodi. + +#### Was sind rotierende Modi? +Für manche Modi gibt es nicht genug Nachfrage, um eine dauerhafte Aufnahme dieser in die regulär spielbaren Modi zu rechtfertigen. Diese Modi kann man daher alle paar Monate spielen und werden allgemein als rotierende Modi bezeichnet. Es steht immer ein rotierender Modus zur Verfügung, und dieser wechselt ungefähr jeden Monat. Zu den rotierenden Modi gehören z. B. MicroWarGear und MegaWarGear. + +#### Wie kann ich anderen Kämpfen beitreten? +Entweder klickst du auf die entsprechende Nachricht im Chat, trittst einer Arena mit „/arena [arena]“ bei, oder folgst einem Spieler mit „/join [spieler]“ + +#### Nach welchen Regeln muss ich meine Kampfmaschinen bauen? +Die Regelwerke findest du hier auf der Website unter dem Menüpunkt „Spielmodi“ + +# Bauserver + +#### Was ist ein Bauserver? +Ein Bauserver ist ein privater Server, auf welchem Redstoneschaltungen, Kanonen und Schematics für unsere Spielmodi im Kreativmodus mit einer großen Liste an Hilfsmitteln gebaut werden können. + +#### Wie kann ich meinen Bauserver starten? +Entweder mit „/bau“, „/b“ oder „/build“. Solltest du auf einen Bau einer anderen Spielversion wollen, benutze „/b [version]“. + +#### Wie lasse ich andere auf meinen Bau? +Entweder über „/b addmember [spieler]“ oder klicke auf die Nachricht im Chat, wenn sie versuchen deinem Bau per command beizutreten. Du wirst sie erkennen, wenn sie erscheint. + +#### Wie trete ich anderen Baus bei? +Entweder über „/b tp [spieler]“ oder „/join [spieler]“, wenn du weißt, dass er sich auf seinem Bau befindet. Solltest du auf den Bau einer anderen Spielversion wollen, gebe „/b tp [spieler] [version]“ ein. + +#### Wie gebe ich anderen Spielern Rechte? +Für Worldrechte (Regionsverwaltung) „/b toggleworld [spieler]“ + +Für Worldedit „/b togglewe [spieler]“ + +#### Wie kann ich die verschiedenen Funktionen meines Baus nutzen? +Am Anfang ist es am einfachsten, das Bau-GUI zu nutzen. Das geht entweder über „/gui“ oder indem du deine Taste zum Hand wechseln zweimal schnell hintereinander drückst (standardmäßig „F“) + +#### Wie schreibe ich im lokalen Chat bzw. im Bau Chat? +„/bc [Nachricht]“, „/local [Nachricht]“ oder „+ [Nachricht]“ + +# Schematics + +#### Wo kann ich meine Schematics hochladen? +Entweder über https://steamwar.de/startseite/schematicupload/ + Oder schicke unserem Discord Bot (Steamwar Bot#9952) die Schematic per Privatnachricht. Dafür musst du deinen Minecraft und Discord Account bei uns verknüpft haben. + +#### Wie kann ich meine Schematics herunterladen? +Über die ingame Download Funktion im Schem-GUI „//schem gui“, und „//schem download [schematic]“, + +#### Wie kann ich meine Schematic auf die Arena bringen/ freigeben lassen? +„//schem changetype [schemname] [Typ]“ oder wenn du dich mit den Typen nicht auskennst „//schem changetype [schemname]“. Danach muss die Schematic von einem Supporter oder Moderator geprüft werden. + +#### Wie erfahre ich den Grund für die Ablehnung meiner Schematic? +Wenn du zum Zeitpunkt der Ablehnung offline warst „//schem search [schemname]“ + +Wenn du zum Zeitpunkt der Ablehnung online bist, steht eine Nachricht im Chat. + +Über eine Privatnachricht vom SteamWar Discord Bot. Verbinde dafür deinen Minecraft und Discord Account (Informationen dazu unter dem Punkt „Discord“) + +#### Wie erstelle ich eine Schematic/ speichere ich mein WarGear, WarShip usw.? +Gehe auf die Region mit deinem Bauwerk. Gebe nun „/select build“ ein. Stelle dich jetzt mittig vor den Baubereich (normalerweise der gelbe Glasblock), und gebe „//copy“ ein. Jetzt kannst du dein Bauwerk mit „//schem save [schemname]“ speichern. + +Gib „//wand“ ein, nimm das Item in die Hand und wähle mit Linksklick bspw. die untere linke Ecke des Bereichs aus, in welchem sich dein Bauwerk befindet, und wähle dann mit Rechtsklick die schräg gegenüberliegende Ecke aus. Alternativ kannst du die Ecken auch mit „//pos1“ und „//pos2“ auswählen. Dafür müssen dann die Füße deines Charakters in der jeweiligen Ecke bei Senden des Commands befinden. Jetzt sollte sich, wenn du das Item in der Hand hältst, dein Bauwerk innerhalb eines Rahmens aus Partikeln befinden. Sollte dies nicht der Fall sein, passe die Ecken an, bis sich dein Bauwerk in dem Rahmen befindet. Gehe nun an die Stelle, wo du dein Bauwerk kopieren möchtest, was üblicherweise mittig auf dem Boden vor diesem ist (der gelbe Glasblock im Boden). Gebe jetzt „//copy“ ein. Um das Ganze letztendlich zu speichern, gebe „//schem save [schemname]“ ein. + +#### Wie sende ich ein Public ein? +Informiere ein entsprechendes Ratsmitglied (einsehbar auf unserem Discord Server) und füge alle Mitglieder des entsprechenden Rates auf die Schem hinzu. Danach wird der Antrag innerhalb des Rates diskutiert. Sollte der Rat dem Antrag zustimmen, muss ein Admin entscheiden, ob es Public wird. Wenn ja, wirst du aufgefordert alle wieder von der Schematic zu entfernen und es wird zur Public Schem geändert. + +# Discord + +#### Wo finde ich den Discord Server? +[steamwar.de/discord](https://steamwar.de/discord) + +#### Wo finde ich den Social Media Discord Server? +[Discord](https://discord.gg/PvXFsRvZfB) + +#### Wie verbinde ich meinen Discord und Minecraft Account? +Klicke in dem Discord Channel „#「👮」regel-infos“ auf den Button „Minecraft verknüpfen“. Folge dann den von dem SteamWar Bot angewiesenen Schritten. + +# Support + +#### Wie öffne ich ein Support Ticket? +* Auf unserem Discord-Server über den Channel „#「❓」support“. Dort kannst du Fragen stellen, Bugs und Spieler melden, sowie Features vorschlagen und Entbannungsanträge stellen. + +#### Wie melde ich schnell einen Bug? +„/bug [beschreibung des bugs]“ + +# Events + +#### Wie kann ich mich für ein Event anmelden? +„/team event [eventname]“ oder, wenn du deinen Minecraft Account mit deinem Discord Accout verknüpft hast, über den Discord Channel „#「📣」events“ auf unserem Discord-Server. + +#### Kann ich mit zwei Accounts gleichzeitig teilnehmen? +Nein + +#### Kann ich während eines Events noch Spieler in mein Team einladen? +Nein. Während eines laufenden Events sind Neuaufnahmen in ein Team nicht möglich. + +# Forum + +#### Wo finde ich das Forum? +Auf unserem Discord Server unter der Kategorie „Forum“ + +# Website + +#### Wie melde ich mich auf der Website an? +Tritt unserem Minecraft Server bei, und gebe „/webpw [passwort]“ ein + +# Teams + +#### Wie trete ich einem Team bei? +Mit „/team join [Team]“. Mit „/team“ siehst du alle weiteren Commands. + +# Sonstiges + +#### Wo erhalte ich weitere Hilfe? +Mit „/tutorial“ kannst du dir Tutorial-Welten von Spielern ansehen. + diff --git a/src/content/pages/en/join.md b/src/content/pages/en/join.md new file mode 100644 index 0000000..0701a2d --- /dev/null +++ b/src/content/pages/en/join.md @@ -0,0 +1,29 @@ +--- +title: Join Now! +description: How to join SteamWar.de +slug: join-now +--- + + +# Minecraft Java Edition + +1. Klicke in Minecraft auf »Mehrspieler« +2. Klicke auf »Server hinzufügen« +3. Gib unter »Serveradresse« »**steamwar.de**« ein +4. Drücke auf »Fertig« +5. Doppelklicke auf den Server. Viel Spaß! + +Hinweis: Wir empfehlen derzeit die Minecraft-Version **1.20.1** (du kannst aber auch gerne eine andere Version verwenden) + +# Minecraft Bedrock Edition + +Serveradresse: `steamwar.de` +Port: `19132` + +Möchtest du mit der Bedrock Edition den gleichen Nutzernamen, Bauwelt und Schematics deines Java-Accounts nutzen, musst du die hier beschriebenen Anweisungen durchführen: https://wiki.geysermc.org/floodgate/linking/ + +Möchtest du mit einer Konsolenfassung von Minecraft (wo keine freie Serverwahl möglich ist) auf SteamWar spielen musst du die folgenden Zusatzschritte durchführen: https://wiki.geysermc.org/geyser/using-geyser-with-consoles/ + +# Discord + +Der Link zu unserem Discord Server ist https://discord.gg/J6fENfz6Zf oder Steamwar.de/discord diff --git a/src/env.d.ts b/src/env.d.ts index 989524f..b464b3d 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -10,9 +10,9 @@ type PrimaryLocale = "en" type SecondaryLocale = "de" type Locale = PrimaryLocale | SecondaryLocale -type RouteParameters = {"/dashboard":undefined;"/downloads":undefined;"/":undefined;"/login":undefined;"/[...slug]":{"slug":unknown;};"/admin":undefined;"/help":undefined;"/help/[...slug]":{"slug":unknown;};"/ranked/[...gamemode]":{"gamemode":unknown;};"/rules":undefined;"/rules/[...slug]":{"slug":unknown;};} +type RouteParameters = {"/dashboard":undefined;"/downloads":undefined;"/":undefined;"/login":undefined;"/[...slug]":{"slug":unknown;};"/admin":undefined;"/announcements":undefined;"/announcements/[...slug]":{"slug":unknown;};"/announcements/tags/[tag]":{"tag":unknown;};"/help":undefined;"/help/[...slug]":{"slug":unknown;};"/ranked/[...gamemode]":{"gamemode":unknown;};"/rules":undefined;"/rules/[...slug]":{"slug":unknown;};"/stats/fight":undefined;} type Route = keyof RouteParameters -type TranslationVariables = {"dashboard.page":object|undefined;"dashboard.title":{"name"?:unknown;}|undefined;"dashboard.rank":{"rank"?:unknown;}|undefined;"dashboard.permissions":object|undefined;"dashboard.buttons.logout":object|undefined;"dashboard.buttons.admin":object|undefined;"dashboard.schematic.upload":object|undefined;"dashboard.schematic.home":object|undefined;"dashboard.schematic.dir":object|undefined;"dashboard.schematic.head.type":object|undefined;"dashboard.schematic.head.name":object|undefined;"dashboard.schematic.head.owner":object|undefined;"dashboard.schematic.head.updated":object|undefined;"dashboard.schematic.head.replaceColor":object|undefined;"dashboard.schematic.head.allowReplay":object|undefined;"dashboard.schematic.info.path":{"path"?:unknown;}|undefined;"dashboard.schematic.info.replaceColor":object|undefined;"dashboard.schematic.info.allowReplay":object|undefined;"dashboard.schematic.info.type":{"type"?:unknown;}|undefined;"dashboard.schematic.info.updated":{"updated"?:unknown;}|undefined;"dashboard.schematic.info.item":{"item"?:unknown;}|undefined;"dashboard.schematic.info.members":{"members"?:unknown;}|undefined;"dashboard.schematic.info.btn.download":object|undefined;"dashboard.schematic.info.btn.close":object|undefined;"login.page":object|undefined;"login.title":object|undefined;"login.placeholder.username":object|undefined;"login.placeholder.token":object|undefined;"login.label.username":object|undefined;"login.label.token":object|undefined;"login.generateToken":object|undefined;"login.submit":object|undefined;"login.error":object|undefined;"page":object|undefined;"wg.title":object|undefined;"wg.description":object|undefined;"as.title":object|undefined;"as.description":object|undefined;"ws.title":object|undefined;"ws.description":object|undefined;"mwg.title":object|undefined;"mwg.description":object|undefined;"rules":object|undefined;"council":object|undefined;"ranking":object|undefined;"navbar.title":object|undefined;"navbar.logo.alt":object|undefined;"navbar.links.home.title":object|undefined;"navbar.links.home.announcements":object|undefined;"navbar.links.home.about":object|undefined;"navbar.links.home.downloads":object|undefined;"navbar.links.home.faq":object|undefined;"navbar.links.rules.title":object|undefined;"navbar.links.rules.gamemode":object|undefined;"navbar.links.rules.wg":object|undefined;"navbar.links.rules.mwg":object|undefined;"navbar.links.rules.ws":object|undefined;"navbar.links.rules.as":object|undefined;"navbar.links.rules.rotating":object|undefined;"navbar.links.rules.megawg":object|undefined;"navbar.links.rules.micro":object|undefined;"navbar.links.rules.sf":object|undefined;"navbar.links.rules.general":object|undefined;"navbar.links.rules.coc":object|undefined;"navbar.links.help.title":object|undefined;"navbar.links.help.center":object|undefined;"navbar.links.help.docs":object|undefined;"navbar.links.account":object|undefined;"status.loading":object|undefined;"status.status":object|undefined;"status.online":object|undefined;"status.offline":object|undefined;"status.players":{"count"?:unknown;}|undefined;"status.version":{"version"?:unknown;}|undefined;"home.page":object|undefined;"home.title.first":object|undefined;"home.title.second":object|undefined;"home.subtitle.1":object|undefined;"home.subtitle.2":object|undefined;"home.subtitle.3":object|undefined;"home.join":object|undefined;"home.benefits.historic.title":object|undefined;"home.benefits.historic.description.1":object|undefined;"home.benefits.historic.description.2":object|undefined;"home.benefits.server.title":object|undefined;"home.benefits.server.description":object|undefined;"home.benefits.events.title":object|undefined;"home.benefits.events.description.1":object|undefined;"home.benefits.events.description.2":object|undefined;"home.prefix.Admin":object|undefined;"home.prefix.Dev":object|undefined;"home.prefix.Mod":object|undefined;"home.prefix.Sup":object|undefined;"home.prefix.Arch":object|undefined;"footer.imprint":object|undefined;"footer.privacy":object|undefined;"footer.coc":object|undefined;"footer.stats":object|undefined;"footer.gamemodes":object|undefined;"footer.announcements":object|undefined;"footer.join":object|undefined;} +type TranslationVariables = {"dashboard.page":object|undefined;"dashboard.title":{"name"?:unknown;}|undefined;"dashboard.rank":{"rank"?:unknown;}|undefined;"dashboard.permissions":object|undefined;"dashboard.buttons.logout":object|undefined;"dashboard.buttons.admin":object|undefined;"dashboard.schematic.upload":object|undefined;"dashboard.schematic.home":object|undefined;"dashboard.schematic.dir":object|undefined;"dashboard.schematic.head.type":object|undefined;"dashboard.schematic.head.name":object|undefined;"dashboard.schematic.head.owner":object|undefined;"dashboard.schematic.head.updated":object|undefined;"dashboard.schematic.head.replaceColor":object|undefined;"dashboard.schematic.head.allowReplay":object|undefined;"dashboard.schematic.info.path":{"path"?:unknown;}|undefined;"dashboard.schematic.info.replaceColor":object|undefined;"dashboard.schematic.info.allowReplay":object|undefined;"dashboard.schematic.info.type":{"type"?:unknown;}|undefined;"dashboard.schematic.info.updated":{"updated"?:unknown;}|undefined;"dashboard.schematic.info.item":{"item"?:unknown;}|undefined;"dashboard.schematic.info.members":{"members"?:unknown;}|undefined;"dashboard.schematic.info.btn.download":object|undefined;"dashboard.schematic.info.btn.close":object|undefined;"login.page":object|undefined;"login.title":object|undefined;"login.placeholder.username":object|undefined;"login.placeholder.token":object|undefined;"login.label.username":object|undefined;"login.label.token":object|undefined;"login.generateToken":object|undefined;"login.submit":object|undefined;"login.error":object|undefined;"blog.title":object|undefined;"page":object|undefined;"wg.description":object|undefined;"as.description":object|undefined;"ws.description":object|undefined;"mwg.description":object|undefined;"rules":object|undefined;"council":object|undefined;"ranking":object|undefined;"title":{"mode"?:unknown;}|undefined;"stats.title":object|undefined;"navbar.title":object|undefined;"navbar.logo.alt":object|undefined;"navbar.links.home.title":object|undefined;"navbar.links.home.announcements":object|undefined;"navbar.links.home.about":object|undefined;"navbar.links.home.downloads":object|undefined;"navbar.links.home.faq":object|undefined;"navbar.links.rules.title":object|undefined;"navbar.links.rules.gamemode":object|undefined;"navbar.links.rules.wg":object|undefined;"navbar.links.rules.mwg":object|undefined;"navbar.links.rules.ws":object|undefined;"navbar.links.rules.as":object|undefined;"navbar.links.rules.rotating":object|undefined;"navbar.links.rules.megawg":object|undefined;"navbar.links.rules.micro":object|undefined;"navbar.links.rules.sf":object|undefined;"navbar.links.rules.general":object|undefined;"navbar.links.rules.coc":object|undefined;"navbar.links.help.title":object|undefined;"navbar.links.help.center":object|undefined;"navbar.links.help.docs":object|undefined;"navbar.links.account":object|undefined;"status.loading":object|undefined;"status.status":object|undefined;"status.online":object|undefined;"status.offline":object|undefined;"status.players":{"count"?:unknown;}|undefined;"status.version":{"version"?:unknown;}|undefined;"home.page":object|undefined;"home.title.first":object|undefined;"home.title.second":object|undefined;"home.subtitle.1":object|undefined;"home.subtitle.2":object|undefined;"home.subtitle.3":object|undefined;"home.join":object|undefined;"home.benefits.historic.title":object|undefined;"home.benefits.historic.description.1":object|undefined;"home.benefits.historic.description.2":object|undefined;"home.benefits.server.title":object|undefined;"home.benefits.server.description":object|undefined;"home.benefits.events.title":object|undefined;"home.benefits.events.description.1":object|undefined;"home.benefits.events.description.2":object|undefined;"home.prefix.Admin":object|undefined;"home.prefix.Dev":object|undefined;"home.prefix.Mod":object|undefined;"home.prefix.Sup":object|undefined;"home.prefix.Arch":object|undefined;"footer.imprint":object|undefined;"footer.privacy":object|undefined;"footer.coc":object|undefined;"footer.stats":object|undefined;"footer.gamemodes":object|undefined;"footer.announcements":object|undefined;"footer.join":object|undefined;"wg.title":object|undefined;"mwg.title":object|undefined;"ws.title":object|undefined;"as.title":object|undefined;"ranking.heading":{"mode"?:unknown;}|undefined;} type Translation = keyof TranslationVariables type Environment = "none"|"node"|"browser" declare module "astro-i18n" { diff --git a/src/i18n/common/en.json b/src/i18n/common/en.json index b09b64f..0156b26 100644 --- a/src/i18n/common/en.json +++ b/src/i18n/common/en.json @@ -90,5 +90,20 @@ "gamemodes": "Gamemodes", "announcements": "Announcements", "join": "Join Now" + }, + "wg": { + "title": "WarGear" + }, + "mwg": { + "title": "MiniWarGear" + }, + "ws": { + "title": "WarShip" + }, + "as": { + "title": "AirShip" + }, + "ranking": { + "heading": "{# mode #} Rankings" } } diff --git a/src/i18n/pages/announcements/de.json b/src/i18n/pages/announcements/de.json new file mode 100644 index 0000000..dad0d7c --- /dev/null +++ b/src/i18n/pages/announcements/de.json @@ -0,0 +1,5 @@ +{ + "blog": { + "title": "Ankündigungen - SteamWar" + } +} \ No newline at end of file diff --git a/src/i18n/pages/announcements/en.json b/src/i18n/pages/announcements/en.json new file mode 100644 index 0000000..50f4e91 --- /dev/null +++ b/src/i18n/pages/announcements/en.json @@ -0,0 +1,5 @@ +{ + "blog": { + "title": "Announcements - SteamWar" + } +} \ No newline at end of file diff --git a/src/i18n/pages/announcements/tags/en.json b/src/i18n/pages/announcements/tags/en.json new file mode 100644 index 0000000..e056792 --- /dev/null +++ b/src/i18n/pages/announcements/tags/en.json @@ -0,0 +1,5 @@ +{ + "tag": { + "title": "Tag: {# tag #} - SteamWar" + } +} \ No newline at end of file diff --git a/src/i18n/pages/ranked/de.json b/src/i18n/pages/ranked/de.json new file mode 100644 index 0000000..ffd61a6 --- /dev/null +++ b/src/i18n/pages/ranked/de.json @@ -0,0 +1,5 @@ +{ + "ranked": { + "title": "{# mode #} - Rangliste" + } +} \ No newline at end of file diff --git a/src/i18n/pages/ranked/en.json b/src/i18n/pages/ranked/en.json new file mode 100644 index 0000000..a7238f2 --- /dev/null +++ b/src/i18n/pages/ranked/en.json @@ -0,0 +1,5 @@ +{ + "ranked": { + "title": "{# mode #} - Ranking" + } +} \ No newline at end of file diff --git a/src/i18n/pages/rules/en.json b/src/i18n/pages/rules/en.json index bceac72..b082824 100644 --- a/src/i18n/pages/rules/en.json +++ b/src/i18n/pages/rules/en.json @@ -1,22 +1,19 @@ { "page": "SteamWar - Rules", "wg": { - "title": "WarGears", "description": "Today, the battlefields of Earth are dominated by heavy artillery. With our traditional rules, WarGears are also arena-wrecking heavyweights. Due to the cannon technology with the most projectiles, you can expect hard and short-lived battles in WarGears." }, "as": { - "title": "AirShips", "description": "The dream of flying has inspired humanity for millennia. The AirShips game mode offers you the almost unlimited possibilities of the sky. Whether you compete with 15 2-projectile cannons or 2 15-projectile cannons, you always have a realistic chance of winning. Because: Everything has its price." }, "ws": { - "title": "WarShips", "description": "For a long time, warships were the ultimate weapon of war. This is still true for Warships today in terms of rocket and slime technology. Due to the limited cannon power, WarShips offer long, intense and varied battles, with new techniques always being introduced in the arena. After a while, a WarShip battle shifts to the water through boarding, providing exciting PvP action." }, "mwg": { - "title": "MiniWarGears", "description": "In today's urban warfare, there is no place for heavy equipment, which is why smaller machines still have their place today. With their slightly smaller cannons, MiniWarGears are the perfect choice for beginners, casual players, and those who like to experiment." }, "rules": "Rules »", "council": "Council »", - "ranking": "Ranking »" + "ranking": "Ranking »", + "title": "{# mode #} - Rules" } \ No newline at end of file diff --git a/src/i18n/pages/stats/fight/de.json b/src/i18n/pages/stats/fight/de.json new file mode 100644 index 0000000..beb9fff --- /dev/null +++ b/src/i18n/pages/stats/fight/de.json @@ -0,0 +1,5 @@ +{ + "stats": { + "title": "Kampf Statistiken" + } +} \ No newline at end of file diff --git a/src/i18n/pages/stats/fight/en.json b/src/i18n/pages/stats/fight/en.json new file mode 100644 index 0000000..af68e2e --- /dev/null +++ b/src/i18n/pages/stats/fight/en.json @@ -0,0 +1,5 @@ +{ + "stats": { + "title": "Fight Statistics" + } +} \ No newline at end of file diff --git a/src/layouts/NavbarLayout.astro b/src/layouts/NavbarLayout.astro index 66f6222..9622638 100644 --- a/src/layouts/NavbarLayout.astro +++ b/src/layouts/NavbarLayout.astro @@ -34,7 +34,7 @@ const { title } = Astro.props;

{t("navbar.links.rules.gamemode")}

- {t("navbar.links.rules.wg")} - {t("navbar.links.rules.mwg")} - {t("navbar.links.rules.ws")} - {t("navbar.links.rules.as")} + {t("navbar.links.rules.wg")} + {t("navbar.links.rules.mwg")} + {t("navbar.links.rules.ws")} + {t("navbar.links.rules.as")}

{t("navbar.links.rules.rotating")}

{t("navbar.links.rules.megawg")} {t("navbar.links.rules.micro")} @@ -116,7 +116,7 @@ const { title } = Astro.props; {t("footer.join")} {t("footer.announcements")} {t("footer.gamemodes")} - {t("footer.stats")} + {t("footer.stats")} {t("footer.coc")} {t("footer.privacy")} {t("footer.imprint")} diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro index 3ec4b32..96d2b1e 100644 --- a/src/pages/[...slug].astro +++ b/src/pages/[...slug].astro @@ -25,40 +25,8 @@ const { Content } = await page.render(); diff --git a/src/pages/announcements/index.astro b/src/pages/announcements/index.astro new file mode 100644 index 0000000..5346bd9 --- /dev/null +++ b/src/pages/announcements/index.astro @@ -0,0 +1,20 @@ +--- +import { getCollection } from "astro:content" +import PageLayout from "../../layouts/PageLayout.astro"; +import {astroI18n, t} from "astro-i18n"; +import moment from "moment"; +import PostComponent from "../../components/PostComponent.astro"; + +const posts = (await getCollection("announcements", (entry) => entry.id.split("/")[0] === astroI18n.locale)) + .sort((a, b) => moment(b.data.created).unix() - moment(a.data.created).unix()); + +--- + + + {posts.map((post, index) => ( +
+ + {index !== posts.length - 1 &&
} +
+ ))} +
\ No newline at end of file diff --git a/src/pages/announcements/tags/[tag].astro b/src/pages/announcements/tags/[tag].astro new file mode 100644 index 0000000..e28b89c --- /dev/null +++ b/src/pages/announcements/tags/[tag].astro @@ -0,0 +1,51 @@ +--- +import moment from "moment/moment"; +import {CollectionEntry} from "astro:content"; +import {astroI18n, createGetStaticPaths, t} from "astro-i18n"; +import {getCollection} from "astro:content"; +import PageLayout from "../../../layouts/PageLayout.astro"; +import {l} from "../../../util/util"; +import {capitalize} from "../../../components/admin/util"; +import PostComponent from "../../../components/PostComponent.astro"; + +export const getStaticPaths = createGetStaticPaths(async () => { + const posts = (await getCollection('announcements', entry => entry.id.split("/")[0] === astroI18n.locale)) + .sort((a, b) => moment(b.data.created).unix() - moment(a.data.created).unix()); + + let groupedByTags: Record[]> = {} + posts.forEach(post => { + post.data.tags.forEach(tag => { + if (!groupedByTags[tag]) { + groupedByTags[tag] = [] + } + groupedByTags[tag].push(post) + }) + }) + + return Object.keys(groupedByTags).map(tag => ({ + params: { + tag: tag + }, + props: { + posts: groupedByTags[tag], + tag: tag + } + })) +}) + +interface Props { + posts: CollectionEntry<'announcements'>[] + tag: string +} + +const { posts, tag } = Astro.props; +--- + + + {posts.map((post, index) => ( +
+ + {index !== posts.length - 1 &&
} +
+ ))} +
diff --git a/src/pages/ranked/[...gamemode].astro b/src/pages/ranked/[...gamemode].astro index 853d812..34753b9 100644 --- a/src/pages/ranked/[...gamemode].astro +++ b/src/pages/ranked/[...gamemode].astro @@ -1,3 +1,31 @@ --- +import {createGetStaticPaths, t} from "astro-i18n"; +import {getCollection, CollectionEntry} from "astro:content"; +import PageLayout from "../../layouts/PageLayout.astro"; +import EloTable from "../../components/EloTable.svelte"; + +export const getStaticPaths = createGetStaticPaths(async () => { + const modes = await getCollection("modes", entry => entry.data.ranked); + + return modes.map(value => ({ + props: { + mode: value + }, + params: { + gamemode: value.id + } + })) +}); + +interface Props { + mode: CollectionEntry<"modes"> +} + +const { mode } = Astro.props; +--- ---- + + +

{t("ranking.heading", { mode: t(`${mode.data.translationKey}.title`) })}

+ +
\ No newline at end of file diff --git a/src/pages/rules/[...slug].astro b/src/pages/rules/[...slug].astro index 97da42b..2ab681e 100644 --- a/src/pages/rules/[...slug].astro +++ b/src/pages/rules/[...slug].astro @@ -1,22 +1,26 @@ --- -import {getCollection} from 'astro:content' -import {astroI18n, createGetStaticPaths} from "astro-i18n"; -import PageLayout from "../layouts/PageLayout.astro"; +import {getCollection, CollectionEntry} from 'astro:content' +import {astroI18n, createGetStaticPaths, t} from "astro-i18n"; +import PageLayout from "../../layouts/PageLayout.astro"; export const getStaticPaths = createGetStaticPaths(async () => { - let posts = await getCollection("rules"); + let posts = await getCollection("rules", value => value.id.split("/")[0] === astroI18n.locale); - return posts.filter(value => value.id.split("/")[0] === astroI18n.locale).map((page) => ({ - props: { page }, params: { slug: page.slug } - }) ) + return posts.map((page) => ({ + props: { page }, params: { slug: page.slug.split("/")[1] } + })) }) +interface Props { + page: CollectionEntry<"rules"> +} + const { page } = Astro.props; const { Content } = await page.render(); --- - +
@@ -24,40 +28,8 @@ const { Content } = await page.render();