From 8dfe0d73e1b1f3778327989e83aeaff0e4d3526c Mon Sep 17 00:00:00 2001 From: beerpiss Date: Mon, 22 Jan 2024 22:21:36 +0700 Subject: [PATCH] Initial commit --- .github/workflows/deploy.yaml | 63 + .gitignore | 157 ++ package.json | 49 + pnpm-lock.yaml | 1615 +++++++++++++++++ tsconfig.json | 35 + typings/global.d.ts | 20 + website/.vitepress/config.ts | 77 + website/.vitepress/config/constants.ts | 4 + website/.vitepress/config/navigation/nav.ts | 11 + .../.vitepress/config/navigation/sidebar.ts | 39 + website/.vitepress/config/shortcodes.ts | 93 + .../theme/components/AddRepoButton.vue | 137 ++ .../Extensions/ExtensionFilters.vue | 104 ++ .../components/Extensions/ExtensionGroup.vue | 50 + .../components/Extensions/ExtensionItem.vue | 158 ++ .../components/Extensions/ExtensionList.vue | 36 + .../Extensions/ExtensionsWrapper.vue | 127 ++ website/.vitepress/theme/components/News.vue | 161 ++ website/.vitepress/theme/data/news.data.ts | 29 + website/.vitepress/theme/index.ts | 17 + .../.vitepress/theme/plugin/goatcounter.ts | 21 + .../queries/useExtensionsRepositoryQuery.ts | 44 + website/.vitepress/theme/styles/base.styl | 40 + website/.vitepress/theme/utils/languages.ts | 20 + website/.vitepress/vue-shim.d.ts | 6 + website/add-repo.md | 48 + website/docs/faq/general.md | 14 + website/docs/guides/getting-started.md | 53 + website/docs/guides/troubleshooting.md | 111 ++ .../guides/troubleshooting/http-errors.md | 36 + website/extensions.md | 19 + website/index.md | 22 + website/news.md | 16 + .../news/2024-01-15-colored-manga-is-down.md | 9 + website/news/2024-01-16-mmscans-is-down.md | 9 + website/public/_headers | 8 + website/public/android-chrome-192x192.png | Bin 0 -> 17756 bytes website/public/android-chrome-512x512.png | Bin 0 -> 80955 bytes .../troubleshooting/open-webview.dark.webp | Bin 0 -> 100250 bytes website/public/favicon-16x16.png | Bin 0 -> 814 bytes website/public/favicon-32x32.png | Bin 0 -> 1568 bytes website/public/favicon.ico | Bin 0 -> 13094 bytes website/public/robots.txt | 2 + website/public/site.webmanifest | 19 + website/sandbox/api-examples.md | 49 + website/sandbox/markdown-examples.md | 85 + 46 files changed, 3613 insertions(+) create mode 100644 .github/workflows/deploy.yaml create mode 100644 .gitignore create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 tsconfig.json create mode 100644 typings/global.d.ts create mode 100644 website/.vitepress/config.ts create mode 100644 website/.vitepress/config/constants.ts create mode 100644 website/.vitepress/config/navigation/nav.ts create mode 100644 website/.vitepress/config/navigation/sidebar.ts create mode 100644 website/.vitepress/config/shortcodes.ts create mode 100644 website/.vitepress/theme/components/AddRepoButton.vue create mode 100644 website/.vitepress/theme/components/Extensions/ExtensionFilters.vue create mode 100644 website/.vitepress/theme/components/Extensions/ExtensionGroup.vue create mode 100644 website/.vitepress/theme/components/Extensions/ExtensionItem.vue create mode 100644 website/.vitepress/theme/components/Extensions/ExtensionList.vue create mode 100644 website/.vitepress/theme/components/Extensions/ExtensionsWrapper.vue create mode 100644 website/.vitepress/theme/components/News.vue create mode 100644 website/.vitepress/theme/data/news.data.ts create mode 100644 website/.vitepress/theme/index.ts create mode 100644 website/.vitepress/theme/plugin/goatcounter.ts create mode 100644 website/.vitepress/theme/queries/useExtensionsRepositoryQuery.ts create mode 100644 website/.vitepress/theme/styles/base.styl create mode 100644 website/.vitepress/theme/utils/languages.ts create mode 100644 website/.vitepress/vue-shim.d.ts create mode 100644 website/add-repo.md create mode 100644 website/docs/faq/general.md create mode 100644 website/docs/guides/getting-started.md create mode 100644 website/docs/guides/troubleshooting.md create mode 100644 website/docs/guides/troubleshooting/http-errors.md create mode 100644 website/extensions.md create mode 100644 website/index.md create mode 100644 website/news.md create mode 100644 website/news/2024-01-15-colored-manga-is-down.md create mode 100644 website/news/2024-01-16-mmscans-is-down.md create mode 100644 website/public/_headers create mode 100644 website/public/android-chrome-192x192.png create mode 100644 website/public/android-chrome-512x512.png create mode 100644 website/public/docs/guides/troubleshooting/open-webview.dark.webp create mode 100644 website/public/favicon-16x16.png create mode 100644 website/public/favicon-32x32.png create mode 100644 website/public/favicon.ico create mode 100644 website/public/robots.txt create mode 100644 website/public/site.webmanifest create mode 100644 website/sandbox/api-examples.md create mode 100644 website/sandbox/markdown-examples.md diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..26a76e5 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,63 @@ +name: "Deploy to Pages" + +on: + push: + branches: + - main + workflow_dispatch: + + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + + - name: Setup PNPM + uses: pnpm/action-setup@d882d12c64e032187b2edb46d3a0d003b7a43598 # v2 + + - name: Setup Node + uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3 + with: + node-version: 18 + cache: pnpm + + - name: Setup Pages + uses: actions/configure-pages@1f0c5cde4bc74cd7e1254d0cb4de8d49e9068c7d # v4 + + - name: Install dependencies + run: pnpm install + + - name: Build with VitePress + run: | + pnpm run docs:build + touch website/.vitepress/dist/.nojekyll + + - name: Upload artifact + uses: actions/upload-pages-artifact@0252fc4ba7626f0298f0cf00902a25c6afc77fa8 # v3 + with: + path: website/.vitepress/dist + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@87c3283f01cd6fe19a0ab93a23b2f6fcba5a8e42 # v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea785b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,157 @@ +# Created by https://www.toptal.com/developers/gitignore/api/node,vue +# Edit at https://www.toptal.com/developers/gitignore?templates=node,vue + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +### Vue ### +# gitignore template for Vue.js projects +# +# Recommended template: Node.gitignore + +# TODO: where does this rule come from? +docs/_book + +# TODO: where does this rule come from? +test/ + +# End of https://www.toptal.com/developers/gitignore/api/node,vue + +website/.vitepress/cache diff --git a/package.json b/package.json new file mode 100644 index 0000000..5052ee1 --- /dev/null +++ b/package.json @@ -0,0 +1,49 @@ +{ + "name": "keiyoushi-website", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "docs:dev": "vitepress dev website", + "docs:build": "vitepress build website", + "docs:preview": "vitepress preview website" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@iconify-prerendered/vue-mdi": "^0.23.1702456985", + "@tanstack/vue-query": "^5.17.19", + "@vueuse/core": "^10.7.2", + "axios": "^1.6.5", + "element-plus": "^2.5.2", + "lodash.groupby": "^4.6.0", + "markdown-it-shortcode-tag": "^1.1.0", + "unplugin-element-plus": "^0.8.0" + }, + "devDependencies": { + "@mdit/plugin-attrs": "^0.8.0", + "@mdit/plugin-figure": "^0.8.0", + "@mdit/plugin-img-lazyload": "^0.8.0", + "@mdit/plugin-img-mark": "^0.8.0", + "@mdit/plugin-img-size": "^0.8.0", + "@mdit/plugin-include": "^0.8.0", + "@types/lodash.groupby": "^4.6.9", + "@types/node": "^20.11.5", + "stylus": "^0.62.0", + "vite": "^5.0.12", + "vitepress": "1.0.0-rc.39", + "vitepress-plugin-tabs": "^0.5.0", + "vue": "^3.4.15" + }, + "pnpm": { + "peerDependencyRules": { + "ignoreMissing": [ + "@algolia/client-search", + "search-insights" + ] + } + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..6a8d141 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1615 @@ +lockfileVersion: 5.4 + +specifiers: + '@iconify-prerendered/vue-mdi': ^0.23.1702456985 + '@mdit/plugin-attrs': ^0.8.0 + '@mdit/plugin-figure': ^0.8.0 + '@mdit/plugin-img-lazyload': ^0.8.0 + '@mdit/plugin-img-mark': ^0.8.0 + '@mdit/plugin-img-size': ^0.8.0 + '@mdit/plugin-include': ^0.8.0 + '@tanstack/vue-query': ^5.17.19 + '@types/lodash.groupby': ^4.6.9 + '@types/node': ^20.11.5 + '@vueuse/core': ^10.7.2 + axios: ^1.6.5 + element-plus: ^2.5.2 + lodash.groupby: ^4.6.0 + markdown-it-shortcode-tag: ^1.1.0 + stylus: ^0.62.0 + unplugin-element-plus: ^0.8.0 + vite: ^5.0.12 + vitepress: 1.0.0-rc.39 + vitepress-plugin-tabs: ^0.5.0 + vue: ^3.4.15 + +dependencies: + '@iconify-prerendered/vue-mdi': 0.23.1702456985_vue@3.4.15 + '@tanstack/vue-query': 5.17.19_vue@3.4.15 + '@vueuse/core': 10.7.2_vue@3.4.15 + axios: 1.6.5 + element-plus: 2.5.2_vue@3.4.15 + lodash.groupby: 4.6.0 + markdown-it-shortcode-tag: 1.1.0 + unplugin-element-plus: 0.8.0 + +devDependencies: + '@mdit/plugin-attrs': 0.8.0 + '@mdit/plugin-figure': 0.8.0 + '@mdit/plugin-img-lazyload': 0.8.0 + '@mdit/plugin-img-mark': 0.8.0 + '@mdit/plugin-img-size': 0.8.0 + '@mdit/plugin-include': 0.8.0 + '@types/lodash.groupby': 4.6.9 + '@types/node': 20.11.5 + stylus: 0.62.0 + vite: 5.0.12_smwemoomoidrnwxn4gwympx4iq + vitepress: 1.0.0-rc.39_eduk2rp3i55crsqrgb6m5446ri + vitepress-plugin-tabs: 0.5.0_pkjlofkdfwbenhgnxwc4yp7mim + vue: 3.4.15 + +packages: + + /@adobe/css-tools/4.3.2: + resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} + dev: true + + /@algolia/autocomplete-core/1.9.3_algoliasearch@4.22.1: + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3_algoliasearch@4.22.1 + '@algolia/autocomplete-shared': 1.9.3_algoliasearch@4.22.1 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights/1.9.3_algoliasearch@4.22.1: + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + peerDependenciesMeta: + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-shared': 1.9.3_algoliasearch@4.22.1 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia/1.9.3_algoliasearch@4.22.1: + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + peerDependenciesMeta: + '@algolia/client-search': + optional: true + dependencies: + '@algolia/autocomplete-shared': 1.9.3_algoliasearch@4.22.1 + algoliasearch: 4.22.1 + dev: true + + /@algolia/autocomplete-shared/1.9.3_algoliasearch@4.22.1: + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + peerDependenciesMeta: + '@algolia/client-search': + optional: true + dependencies: + algoliasearch: 4.22.1 + dev: true + + /@algolia/cache-browser-local-storage/4.22.1: + resolution: {integrity: sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==} + dependencies: + '@algolia/cache-common': 4.22.1 + dev: true + + /@algolia/cache-common/4.22.1: + resolution: {integrity: sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==} + dev: true + + /@algolia/cache-in-memory/4.22.1: + resolution: {integrity: sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==} + dependencies: + '@algolia/cache-common': 4.22.1 + dev: true + + /@algolia/client-account/4.22.1: + resolution: {integrity: sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==} + dependencies: + '@algolia/client-common': 4.22.1 + '@algolia/client-search': 4.22.1 + '@algolia/transporter': 4.22.1 + dev: true + + /@algolia/client-analytics/4.22.1: + resolution: {integrity: sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==} + dependencies: + '@algolia/client-common': 4.22.1 + '@algolia/client-search': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 + dev: true + + /@algolia/client-common/4.22.1: + resolution: {integrity: sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==} + dependencies: + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 + dev: true + + /@algolia/client-personalization/4.22.1: + resolution: {integrity: sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==} + dependencies: + '@algolia/client-common': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 + dev: true + + /@algolia/client-search/4.22.1: + resolution: {integrity: sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==} + dependencies: + '@algolia/client-common': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 + dev: true + + /@algolia/logger-common/4.22.1: + resolution: {integrity: sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==} + dev: true + + /@algolia/logger-console/4.22.1: + resolution: {integrity: sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==} + dependencies: + '@algolia/logger-common': 4.22.1 + dev: true + + /@algolia/requester-browser-xhr/4.22.1: + resolution: {integrity: sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==} + dependencies: + '@algolia/requester-common': 4.22.1 + dev: true + + /@algolia/requester-common/4.22.1: + resolution: {integrity: sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==} + dev: true + + /@algolia/requester-node-http/4.22.1: + resolution: {integrity: sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==} + dependencies: + '@algolia/requester-common': 4.22.1 + dev: true + + /@algolia/transporter/4.22.1: + resolution: {integrity: sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==} + dependencies: + '@algolia/cache-common': 4.22.1 + '@algolia/logger-common': 4.22.1 + '@algolia/requester-common': 4.22.1 + dev: true + + /@babel/helper-string-parser/7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier/7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/parser/7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + + /@babel/types/7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + 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 + + /@ctrl/tinycolor/3.6.1: + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + dev: false + + /@docsearch/css/3.5.2: + resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} + dev: true + + /@docsearch/js/3.5.2: + resolution: {integrity: sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==} + dependencies: + '@docsearch/react': 3.5.2 + preact: 10.19.3 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react/3.5.2: + resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3_algoliasearch@4.22.1 + '@algolia/autocomplete-preset-algolia': 1.9.3_algoliasearch@4.22.1 + '@docsearch/css': 3.5.2 + algoliasearch: 4.22.1 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + + /@element-plus/icons-vue/2.3.1_vue@3.4.15: + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + peerDependencies: + vue: ^3.2.0 + dependencies: + vue: 3.4.15 + dev: false + + /@esbuild/aix-ppc64/0.19.11: + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm/0.19.11: + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64/0.19.11: + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64/0.19.11: + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64/0.19.11: + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64/0.19.11: + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64/0.19.11: + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64/0.19.11: + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm/0.19.11: + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64/0.19.11: + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32/0.19.11: + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.19.11: + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el/0.19.11: + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64/0.19.11: + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64/0.19.11: + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x/0.19.11: + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64/0.19.11: + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64/0.19.11: + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64/0.19.11: + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64/0.19.11: + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64/0.19.11: + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32/0.19.11: + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64/0.19.11: + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@floating-ui/core/1.5.3: + resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} + dependencies: + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/dom/1.5.4: + resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} + dependencies: + '@floating-ui/core': 1.5.3 + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/utils/0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + dev: false + + /@iconify-prerendered/vue-mdi/0.23.1702456985_vue@3.4.15: + resolution: {integrity: sha512-fhHd1d+0znBx1T4PR8OjxYFil41VPjWwrldS/lOeuKeKGnn+g1yc8BuHlrW0yXukKqi/3mS3kJMgUGR2TZnvcg==} + peerDependencies: + vue: ^3.0.0 + dependencies: + vue: 3.4.15 + dev: false + + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@mdit/plugin-attrs/0.8.0: + resolution: {integrity: sha512-ewmx5i+b3M4CRJNDpDNBA0YTHa1snn+adDsDDpDtPPSzCH1NhtWXdzwI0TrcCQUnueeSEEWX/wY4ESo+NRkBNQ==} + engines: {node: '>= 18'} + peerDependencies: + markdown-it: ^14.0.0 + peerDependenciesMeta: + markdown-it: + optional: true + dependencies: + '@types/markdown-it': 13.0.7 + dev: true + + /@mdit/plugin-figure/0.8.0: + resolution: {integrity: sha512-/o4RoKjnkdWc+K7m6mR7BAu2J79yYE38s8HUc8iKk9v+e9j1E+6LeXcpx1LoPnHzUhT4EO2QmUsv+kAaPFfZYw==} + engines: {node: '>= 18'} + peerDependencies: + markdown-it: ^14.0.0 + peerDependenciesMeta: + markdown-it: + optional: true + dependencies: + '@types/markdown-it': 13.0.7 + dev: true + + /@mdit/plugin-img-lazyload/0.8.0: + resolution: {integrity: sha512-Rrlf2FzOxxyszbv3DpkIwEgmYKmtwHdxIO+Whkn0a9QckxnEKkaGl5KARCnM7LqX2fhEyFLgnfkr3onVOJG54g==} + engines: {node: '>= 18'} + peerDependencies: + markdown-it: ^14.0.0 + peerDependenciesMeta: + markdown-it: + optional: true + dependencies: + '@types/markdown-it': 13.0.7 + dev: true + + /@mdit/plugin-img-mark/0.8.0: + resolution: {integrity: sha512-4P6z2QOfLHLMSXUP4mB/2Rnd6KeHmJBkUXJWJhybcXoIG5S5FDTFHJxOycSP4eGzfdOYAWSlkx6XwXEUGGZz5w==} + engines: {node: '>= 18'} + peerDependencies: + markdown-it: ^14.0.0 + peerDependenciesMeta: + markdown-it: + optional: true + dependencies: + '@types/markdown-it': 13.0.7 + dev: true + + /@mdit/plugin-img-size/0.8.0: + resolution: {integrity: sha512-r+LbAizP/hw5SisY44VbHEnR7XUKpcHM2k2fwu5wb1+V1crxeigG4sa8rzrJEddU+k6uCl27yL5FTGbHjAl82Q==} + engines: {node: '>= 18'} + peerDependencies: + markdown-it: ^14.0.0 + peerDependenciesMeta: + markdown-it: + optional: true + dependencies: + '@types/markdown-it': 13.0.7 + dev: true + + /@mdit/plugin-include/0.8.0: + resolution: {integrity: sha512-e8Z8q5VkJ6UX04tTgELraupB/MdHio7hkdYT71wBJ6UQuhSmFv/xMOxFfTcGKH5yzsbEM45BtAFHzSXIi3dMCw==} + peerDependencies: + markdown-it: ^14.0.0 + peerDependenciesMeta: + markdown-it: + optional: true + dependencies: + '@types/markdown-it': 13.0.7 + upath: 2.0.1 + dev: true + + /@rollup/pluginutils/5.1.0: + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: false + + /@rollup/rollup-android-arm-eabi/4.9.6: + resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64/4.9.6: + resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64/4.9.6: + resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64/4.9.6: + resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf/4.9.6: + resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu/4.9.6: + resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl/4.9.6: + resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu/4.9.6: + resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu/4.9.6: + resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl/4.9.6: + resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc/4.9.6: + resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc/4.9.6: + resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc/4.9.6: + resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + + /@tanstack/match-sorter-utils/8.11.7: + resolution: {integrity: sha512-4PUKgaaFpiB7MK406N5VAiLu2VUhDumojGWhEC8kNQ767RGU2vsJDI7Xp4D8lMBzijqswRWz3U8ioa2zUKnFeQ==} + engines: {node: '>=12'} + dependencies: + remove-accents: 0.4.2 + dev: false + + /@tanstack/query-core/5.17.19: + resolution: {integrity: sha512-Lzw8FUtnLCc9Jwz0sw9xOjZB+/mCCmJev38v2wHMUl/ioXNIhnNWeMxu0NKUjIhAd62IRB3eAtvxAGDJ55UkyA==} + dev: false + + /@tanstack/vue-query/5.17.19_vue@3.4.15: + resolution: {integrity: sha512-8LsQmOy44qV1FxAPukjhdEYvcDoRq4P+PRkKeig7EsdfgaopxhSH+/GpxyDZiyEfU2Rg/JYQ3p88ufQYV424Sw==} + peerDependencies: + '@vue/composition-api': ^1.1.2 + vue: ^2.6.0 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + '@tanstack/match-sorter-utils': 8.11.7 + '@tanstack/query-core': 5.17.19 + '@vue/devtools-api': 6.5.1 + vue: 3.4.15 + vue-demi: 0.14.6_vue@3.4.15 + dev: false + + /@types/estree/1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + /@types/linkify-it/3.0.5: + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + dev: true + + /@types/lodash-es/4.17.12: + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + dependencies: + '@types/lodash': 4.14.202 + dev: false + + /@types/lodash.groupby/4.6.9: + resolution: {integrity: sha512-z2xtCX2ko7GrqORnnYea4+ksT7jZNAvaOcLd6mP9M7J09RHvJs06W8BGdQQAX8ARef09VQLdeRilSOcfHlDQJQ==} + dependencies: + '@types/lodash': 4.14.202 + dev: true + + /@types/lodash/4.14.202: + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + + /@types/markdown-it/13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + dev: true + + /@types/mdurl/1.0.5: + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + dev: true + + /@types/node/20.11.5: + resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/web-bluetooth/0.0.16: + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + dev: false + + /@types/web-bluetooth/0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + /@vitejs/plugin-vue/5.0.3_vite@5.0.12+vue@3.4.15: + resolution: {integrity: sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.0.12_smwemoomoidrnwxn4gwympx4iq + vue: 3.4.15 + dev: true + + /@vue/compiler-core/3.4.15: + resolution: {integrity: sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==} + dependencies: + '@babel/parser': 7.23.6 + '@vue/shared': 3.4.15 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + + /@vue/compiler-dom/3.4.15: + resolution: {integrity: sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==} + dependencies: + '@vue/compiler-core': 3.4.15 + '@vue/shared': 3.4.15 + + /@vue/compiler-sfc/3.4.15: + resolution: {integrity: sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==} + dependencies: + '@babel/parser': 7.23.6 + '@vue/compiler-core': 3.4.15 + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.33 + source-map-js: 1.0.2 + + /@vue/compiler-ssr/3.4.15: + resolution: {integrity: sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==} + dependencies: + '@vue/compiler-dom': 3.4.15 + '@vue/shared': 3.4.15 + + /@vue/devtools-api/6.5.1: + resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} + + /@vue/reactivity/3.4.15: + resolution: {integrity: sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==} + dependencies: + '@vue/shared': 3.4.15 + + /@vue/runtime-core/3.4.15: + resolution: {integrity: sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==} + dependencies: + '@vue/reactivity': 3.4.15 + '@vue/shared': 3.4.15 + + /@vue/runtime-dom/3.4.15: + resolution: {integrity: sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==} + dependencies: + '@vue/runtime-core': 3.4.15 + '@vue/shared': 3.4.15 + csstype: 3.1.3 + + /@vue/server-renderer/3.4.15_vue@3.4.15: + resolution: {integrity: sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw==} + peerDependencies: + vue: 3.4.15 + dependencies: + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 + vue: 3.4.15 + + /@vue/shared/3.4.15: + resolution: {integrity: sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==} + + /@vueuse/core/10.7.2_vue@3.4.15: + resolution: {integrity: sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.7.2 + '@vueuse/shared': 10.7.2_vue@3.4.15 + vue-demi: 0.14.6_vue@3.4.15 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + /@vueuse/core/9.13.0_vue@3.4.15: + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0_vue@3.4.15 + vue-demi: 0.14.6_vue@3.4.15 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/integrations/10.7.2_bvrvo7qax6mez7y3gu5pgwrizi: + resolution: {integrity: sha512-+u3RLPFedjASs5EKPc69Ge49WNgqeMfSxFn+qrQTzblPXZg6+EFzhjarS5edj2qAf6xQ93f95TUxRwKStXj/sQ==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.7.2_vue@3.4.15 + '@vueuse/shared': 10.7.2_vue@3.4.15 + axios: 1.6.5 + focus-trap: 7.5.4 + vue-demi: 0.14.6_vue@3.4.15 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata/10.7.2: + resolution: {integrity: sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==} + + /@vueuse/metadata/9.13.0: + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + dev: false + + /@vueuse/shared/10.7.2_vue@3.4.15: + resolution: {integrity: sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==} + dependencies: + vue-demi: 0.14.6_vue@3.4.15 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + /@vueuse/shared/9.13.0_vue@3.4.15: + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + dependencies: + vue-demi: 0.14.6_vue@3.4.15 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /acorn/8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /algoliasearch/4.22.1: + resolution: {integrity: sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==} + dependencies: + '@algolia/cache-browser-local-storage': 4.22.1 + '@algolia/cache-common': 4.22.1 + '@algolia/cache-in-memory': 4.22.1 + '@algolia/client-account': 4.22.1 + '@algolia/client-analytics': 4.22.1 + '@algolia/client-common': 4.22.1 + '@algolia/client-personalization': 4.22.1 + '@algolia/client-search': 4.22.1 + '@algolia/logger-common': 4.22.1 + '@algolia/logger-console': 4.22.1 + '@algolia/requester-browser-xhr': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/requester-node-http': 4.22.1 + '@algolia/transporter': 4.22.1 + dev: true + + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /async-validator/4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + dev: false + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + /axios/1.6.5: + resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} + dependencies: + follow-redirects: 1.15.5 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /csstype/3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + /dayjs/1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + dev: false + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + /element-plus/2.5.2_vue@3.4.15: + resolution: {integrity: sha512-0Xbihy5CvpdH+OZeRPnZlfkbZS8uyLvHJiALehvw6n7nvHGrujCmdiw8NXvYhkLpRtwue/N6oBfAvMJvQSPoNA==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.1_vue@3.4.15 + '@floating-ui/dom': 1.5.4 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 + '@types/lodash': 4.14.202 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0_vue@3.4.15 + async-validator: 4.2.5 + dayjs: 1.11.10 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3_vpgwo5v3ie2bia5ss74pgoa5ly + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.4.15 + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + + /entities/4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + /es-module-lexer/1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + dev: false + + /esbuild/0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.11 + '@esbuild/android-arm': 0.19.11 + '@esbuild/android-arm64': 0.19.11 + '@esbuild/android-x64': 0.19.11 + '@esbuild/darwin-arm64': 0.19.11 + '@esbuild/darwin-x64': 0.19.11 + '@esbuild/freebsd-arm64': 0.19.11 + '@esbuild/freebsd-x64': 0.19.11 + '@esbuild/linux-arm': 0.19.11 + '@esbuild/linux-arm64': 0.19.11 + '@esbuild/linux-ia32': 0.19.11 + '@esbuild/linux-loong64': 0.19.11 + '@esbuild/linux-mips64el': 0.19.11 + '@esbuild/linux-ppc64': 0.19.11 + '@esbuild/linux-riscv64': 0.19.11 + '@esbuild/linux-s390x': 0.19.11 + '@esbuild/linux-x64': 0.19.11 + '@esbuild/netbsd-x64': 0.19.11 + '@esbuild/openbsd-x64': 0.19.11 + '@esbuild/sunos-x64': 0.19.11 + '@esbuild/win32-arm64': 0.19.11 + '@esbuild/win32-ia32': 0.19.11 + '@esbuild/win32-x64': 0.19.11 + dev: true + + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + + /focus-trap/7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + dependencies: + tabbable: 6.2.0 + dev: true + + /follow-redirects/1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents/2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + + /lodash-es/4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: false + + /lodash-unified/1.0.3_vpgwo5v3ie2bia5ss74pgoa5ly: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + dev: false + + /lodash.groupby/4.6.0: + resolution: {integrity: sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==} + dev: false + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /magic-string/0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + /mark.js/8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + + /markdown-it-shortcode-tag/1.1.0: + resolution: {integrity: sha512-6qVQHmfVYMYlO2HebbF6ydXoTpOl3jPJvw6RyPnWaGJLSXdxlIJ7ihyzzbXNNHkZlQPfoDehDQYMfqeOv1KwgQ==} + engines: {node: '>=4.0'} + dev: false + + /memoize-one/6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minisearch/6.3.0: + resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-wheel-es/1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + dev: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false + + /postcss/8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /preact/10.19.3: + resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} + dev: true + + /proxy-from-env/1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /remove-accents/0.4.2: + resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} + dev: false + + /rollup/4.9.6: + resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.6 + '@rollup/rollup-android-arm64': 4.9.6 + '@rollup/rollup-darwin-arm64': 4.9.6 + '@rollup/rollup-darwin-x64': 4.9.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 + '@rollup/rollup-linux-arm64-gnu': 4.9.6 + '@rollup/rollup-linux-arm64-musl': 4.9.6 + '@rollup/rollup-linux-riscv64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-musl': 4.9.6 + '@rollup/rollup-win32-arm64-msvc': 4.9.6 + '@rollup/rollup-win32-ia32-msvc': 4.9.6 + '@rollup/rollup-win32-x64-msvc': 4.9.6 + fsevents: 2.3.3 + dev: true + + /sax/1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + dev: true + + /shikiji-core/0.9.19: + resolution: {integrity: sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==} + dev: true + + /shikiji-transformers/0.9.19: + resolution: {integrity: sha512-lGLI7Z8frQrIBbhZ74/eiJtxMoCQRbpaHEB+gcfvdIy+ZFaAtXncJGnc52932/UET+Y4GyKtwwC/vjWUCp+c/Q==} + dependencies: + shikiji: 0.9.19 + dev: true + + /shikiji/0.9.19: + resolution: {integrity: sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==} + dependencies: + shikiji-core: 0.9.19 + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map/0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /stylus/0.62.0: + resolution: {integrity: sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==} + hasBin: true + dependencies: + '@adobe/css-tools': 4.3.2 + debug: 4.3.4 + glob: 7.2.3 + sax: 1.3.0 + source-map: 0.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /tabbable/6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false + + /undici-types/5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /unplugin-element-plus/0.8.0: + resolution: {integrity: sha512-jByUGY3FG2B8RJKFryqxx4eNtSTj+Hjlo8edcOdJymewndDQjThZ1pRUQHRjQsbKhTV2jEctJV7t7RJ405UL4g==} + engines: {node: '>=14.19.0'} + dependencies: + '@rollup/pluginutils': 5.1.0 + es-module-lexer: 1.4.1 + magic-string: 0.30.5 + unplugin: 1.6.0 + transitivePeerDependencies: + - rollup + dev: false + + /unplugin/1.6.0: + resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==} + dependencies: + acorn: 8.11.3 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + dev: false + + /upath/2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + dev: true + + /vite/5.0.12_smwemoomoidrnwxn4gwympx4iq: + resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.11.5 + esbuild: 0.19.11 + postcss: 8.4.33 + rollup: 4.9.6 + stylus: 0.62.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitepress-plugin-tabs/0.5.0_pkjlofkdfwbenhgnxwc4yp7mim: + resolution: {integrity: sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A==} + peerDependencies: + vitepress: ^1.0.0-rc.27 + vue: ^3.3.8 + dependencies: + vitepress: 1.0.0-rc.39_eduk2rp3i55crsqrgb6m5446ri + vue: 3.4.15 + dev: true + + /vitepress/1.0.0-rc.39_eduk2rp3i55crsqrgb6m5446ri: + resolution: {integrity: sha512-EcgoRlAAp37WOxUOYv45oxyhLrcy3Upey+mKpqW3ldsg6Ol4trPndRBk2GO0QiSvEKlb9BMerk49D/bFICN6kg==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4.3.2 + postcss: ^8.4.33 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.5.2 + '@docsearch/js': 3.5.2 + '@types/markdown-it': 13.0.7 + '@vitejs/plugin-vue': 5.0.3_vite@5.0.12+vue@3.4.15 + '@vue/devtools-api': 6.5.1 + '@vueuse/core': 10.7.2_vue@3.4.15 + '@vueuse/integrations': 10.7.2_bvrvo7qax6mez7y3gu5pgwrizi + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 6.3.0 + shikiji: 0.9.19 + shikiji-core: 0.9.19 + shikiji-transformers: 0.9.19 + vite: 5.0.12_smwemoomoidrnwxn4gwympx4iq + vue: 3.4.15 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + + /vue-demi/0.14.6_vue@3.4.15: + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.15 + + /vue/3.4.15: + resolution: {integrity: sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-sfc': 3.4.15 + '@vue/runtime-dom': 3.4.15 + '@vue/server-renderer': 3.4.15_vue@3.4.15 + '@vue/shared': 3.4.15 + + /webpack-sources/3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false + + /webpack-virtual-modules/0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + dev: false + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a11220e --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "target": "esnext", + "jsx": "preserve", + "lib": ["esnext", "dom"], + "useDefineForClassFields": true, + "module": "esnext", + "moduleResolution": "node", + "paths": { + "@/*": ["./website/.vitepress/*"] + }, + "resolveJsonModule": true, + "strict": true, + "sourceMap": true, + "esModuleInterop": true, + "isolatedModules": true, + "skipLibCheck": true, + "typeRoots": [ + "./node_modules/@types", + "./typings", + ] + }, + "include": [ + "typings/**/*.d.ts", + "website/**/*.vue", + "website/**/*.tsx", + "website/**/*.ts", + "website/.**/**/*.ts", + "website/.**/**/*.tsx", + "website/.**/**/*.vue" + ], + "exclude": ["**/node_modules/**", "dist/**"], + "extensions": [".js", ".ts", ".tsx", ".jsx", ".vue"], + "allowSyntheticDefaultImports": true + } \ No newline at end of file diff --git a/typings/global.d.ts b/typings/global.d.ts new file mode 100644 index 0000000..2049839 --- /dev/null +++ b/typings/global.d.ts @@ -0,0 +1,20 @@ +declare namespace Goatcounter { + interface CountVars { + event?: boolean; + path?: string; + title?: string; + referrer?: string; + } + + interface Goatcounter { + count: (vars: CountVars) => void; + } +} + +declare global { + interface Window { + goatcounter?: Goatcounter.Goatcounter; + } +} + +export {} diff --git a/website/.vitepress/config.ts b/website/.vitepress/config.ts new file mode 100644 index 0000000..1f3bdbf --- /dev/null +++ b/website/.vitepress/config.ts @@ -0,0 +1,77 @@ +import { defineConfig } from 'vitepress'; +import { attrs } from '@mdit/plugin-attrs'; +import { figure } from '@mdit/plugin-figure'; +import { imgLazyload } from '@mdit/plugin-img-lazyload'; +import { imgMark } from '@mdit/plugin-img-mark'; +import { imgSize } from '@mdit/plugin-img-size'; +import { include } from '@mdit/plugin-include'; +import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'; +import shortcodePlugin from 'markdown-it-shortcode-tag'; +import shortcodes from './config/shortcodes'; +import ElementPlus from 'unplugin-element-plus/vite'; + +import { GITHUB_EXTENSION_MIN_JSON } from './config/constants'; +import nav from './config/navigation/nav'; +import sidebar from './config/navigation/sidebar'; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Keiyoushi", + description: "An unofficial repository of extensions for Tachiyomi and variants.", + cleanUrls: true, + transformHead: (context) => { + context.head.push(['meta', { name: 'robots', content: 'noindex, nofollow' }]); + }, + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav, + sidebar, + socialLinks: [ + { + icon: 'github', + link: 'https://github.com/keiyoushi/extensions', + ariaLabel: 'Project GitHub', + }, + { + icon: 'discord', + link: 'https://discord.gg/keiyoushi', + ariaLabel: 'Discord server', + }, + ], + + editLink: { + pattern: 'https://github.com/keiyoushi/website/edit/main/website/:path', + text: 'Help us improve this page', + }, + + lastUpdated: { + text: 'Last updated', + formatOptions: { + forceLocale: true, + dateStyle: 'long', + timeStyle: 'short', + }, + }, + }, + markdown: { + config: (md) => { + md + .use(attrs) + .use(figure) + .use(imgLazyload) + .use(imgMark) + .use(imgSize) + .use(include, { + currentPath: env => env.filePath, + }) + .use(tabsMarkdownPlugin) + .use(shortcodePlugin, shortcodes); + } + }, + vite: { + plugins: [ElementPlus({})], + ssr: { + noExternal: ['element-plus'], + } + } +}) diff --git a/website/.vitepress/config/constants.ts b/website/.vitepress/config/constants.ts new file mode 100644 index 0000000..69228a3 --- /dev/null +++ b/website/.vitepress/config/constants.ts @@ -0,0 +1,4 @@ +export const GITHUB_EXTENSION_REPO = 'keiyoushi/extensions'; +export const GITHUB_EXTENSION_BASE = `https://raw.githubusercontent.com/${GITHUB_EXTENSION_REPO}/repo`; +export const GITHUB_EXTENSION_JSON = `${GITHUB_EXTENSION_BASE}/index.json`; +export const GITHUB_EXTENSION_MIN_JSON = `${GITHUB_EXTENSION_BASE}/index.min.json`; diff --git a/website/.vitepress/config/navigation/nav.ts b/website/.vitepress/config/navigation/nav.ts new file mode 100644 index 0000000..6a2ed6c --- /dev/null +++ b/website/.vitepress/config/navigation/nav.ts @@ -0,0 +1,11 @@ +import type { DefaultTheme } from "vitepress"; +import { GITHUB_EXTENSION_MIN_JSON } from "../constants"; + +const nav: DefaultTheme.NavItem[] = [ + { text: 'Add repo', link: `/add-repo?url=${encodeURIComponent(GITHUB_EXTENSION_MIN_JSON)}` }, + { text: 'Guide', link: '/docs/guides/getting-started' }, + { text: 'Extensions', link: '/extensions' }, + { text: 'News', link: '/news' }, +] + +export default nav; diff --git a/website/.vitepress/config/navigation/sidebar.ts b/website/.vitepress/config/navigation/sidebar.ts new file mode 100644 index 0000000..61c9f67 --- /dev/null +++ b/website/.vitepress/config/navigation/sidebar.ts @@ -0,0 +1,39 @@ +import type { DefaultTheme } from 'vitepress'; + +const sidebar: DefaultTheme.SidebarMulti = { + '/add-repo': defaultSidebar(), + '/extensions': defaultSidebar(), + '/news': defaultSidebar(), + '/docs/': defaultSidebar(), +}; + +function defaultSidebar(): DefaultTheme.SidebarItem[] { + return [ + { + items: [ + { text: 'Extensions', link: '/extensions' } + ], + }, + { + text: 'Frequently asked questions', + items: [ + { text: 'General', link: '/docs/faq/general' }, + ], + }, + { + text: 'Guides', + items: [ + { text: 'Getting started', link: '/docs/guides/getting-started' }, + { + text: 'Troubleshooting', + link: '/docs/guides/troubleshooting', + items: [ + { text: 'HTTP errors', link: '/docs/guides/troubleshooting/http-errors' }, + ], + }, + ], + }, + ] +} + +export default sidebar; diff --git a/website/.vitepress/config/shortcodes.ts b/website/.vitepress/config/shortcodes.ts new file mode 100644 index 0000000..1158142 --- /dev/null +++ b/website/.vitepress/config/shortcodes.ts @@ -0,0 +1,93 @@ +const iconMappings = { + alertDecagramOutline: '', + bookmarkBoxOutline: '', + bookOpenOutline: '', + cloudOffOutline: '', + codeTags: '', + cog: '', + compassOutline: '', + dotsHorizontal: '', + downloadOutline: '', + glasses: '', + helpCircleOutline: '', + history: '', + informationOutline: '', + labelOutline: '', + paletteOutline: '', + queryStats: '', + security: '', + storage: '', + sync: '', +} + +interface Navigation { + name: string + icon?: string + dependsOn?: string +} + +const navigationMappings: Record = { + // Main menus + 'main_library': { name: 'Library', icon: iconMappings.bookmarkBoxOutline }, + 'main_updates': { name: 'Updates', icon: iconMappings.alertDecagramOutline }, + 'main_history': { name: 'History', icon: iconMappings.history }, + 'main_browse': { name: 'Browse', icon: iconMappings.compassOutline }, + 'main_more': { name: 'More', icon: iconMappings.dotsHorizontal }, + + // Browse menu + 'sources': { name: 'Sources', dependsOn: 'main_browse' }, + 'extensions': { name: 'Extensions', dependsOn: 'main_browse' }, + 'migrate': { name: 'Migrate', dependsOn: 'main_browse' }, + + // More menu + 'downloaded-only': { name: 'Downloaded only', icon: iconMappings.cloudOffOutline, dependsOn: 'main_more' }, + 'incognito-mode': { name: 'Incognito mode', icon: iconMappings.glasses, dependsOn: 'main_more' }, + 'download-queue': { name: 'Download queue', icon: iconMappings.downloadOutline, dependsOn: 'main_more' }, + 'categories': { name: 'Categories', icon: iconMappings.labelOutline, dependsOn: 'main_more' }, + 'statistics': { name: 'Statistics', icon: iconMappings.queryStats, dependsOn: 'main_more' }, + 'data-and-storage': { name: 'Data and storage', icon: iconMappings.storage, dependsOn: 'main_more' }, + 'settings': { name: 'Settings', icon: iconMappings.cog, dependsOn: 'main_more' }, + 'about': { name: 'About', icon: iconMappings.informationOutline, dependsOn: 'main_more' }, + 'help': { name: 'Help', icon: iconMappings.helpCircleOutline, dependsOn: 'main_more' }, + + // Settings submenu + 'appearance': { name: 'Appearance', icon: iconMappings.paletteOutline, dependsOn: 'settings' }, + 'library': { name: 'Library', icon: iconMappings.bookmarkBoxOutline, dependsOn: 'settings' }, + 'downloads': { name: 'Downloads', icon: iconMappings.downloadOutline, dependsOn: 'settings' }, + 'tracking': { name: 'Tracking', icon: iconMappings.sync, dependsOn: 'settings' }, + 'browse': { name: 'Browse', icon: iconMappings.compassOutline, dependsOn: 'settings' }, + 'security-and-privacy': { name: 'Security and privacy', icon: iconMappings.security, dependsOn: 'settings' }, + 'reader': { name: 'Reader', icon: iconMappings.bookOpenOutline, dependsOn: 'settings' }, + 'advanced': { name: 'Advanced', icon: iconMappings.codeTags, dependsOn: 'settings' }, + + // Edit repos (TachiyomiAZ) + 'extension-repos': { name: 'Extension repos / Edit repos', dependsOn: 'browse' }, +} + +function generateNavigationHtml(navKey: string) { + const navData = navigationMappings[navKey] + + if (!navData) + return 'Unsupported Navigation!' + + const { name, icon, dependsOn } = navData + + const iconHtml = icon ?? '' + let html = `${iconHtml}${name}` + + if (dependsOn) + html = `${generateNavigationHtml(dependsOn)} -> ${html}` + + return html +} + +const shortcodes = { + nav: { + // @ts-ignore + render({ to }) { + return generateNavigationHtml(to) + }, + }, +} + +export default shortcodes diff --git a/website/.vitepress/theme/components/AddRepoButton.vue b/website/.vitepress/theme/components/AddRepoButton.vue new file mode 100644 index 0000000..0a6aa2b --- /dev/null +++ b/website/.vitepress/theme/components/AddRepoButton.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/website/.vitepress/theme/components/Extensions/ExtensionFilters.vue b/website/.vitepress/theme/components/Extensions/ExtensionFilters.vue new file mode 100644 index 0000000..9e4ed68 --- /dev/null +++ b/website/.vitepress/theme/components/Extensions/ExtensionFilters.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/website/.vitepress/theme/components/Extensions/ExtensionGroup.vue b/website/.vitepress/theme/components/Extensions/ExtensionGroup.vue new file mode 100644 index 0000000..5b30dc0 --- /dev/null +++ b/website/.vitepress/theme/components/Extensions/ExtensionGroup.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/website/.vitepress/theme/components/Extensions/ExtensionItem.vue b/website/.vitepress/theme/components/Extensions/ExtensionItem.vue new file mode 100644 index 0000000..071ca66 --- /dev/null +++ b/website/.vitepress/theme/components/Extensions/ExtensionItem.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/website/.vitepress/theme/components/Extensions/ExtensionList.vue b/website/.vitepress/theme/components/Extensions/ExtensionList.vue new file mode 100644 index 0000000..76b3785 --- /dev/null +++ b/website/.vitepress/theme/components/Extensions/ExtensionList.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/website/.vitepress/theme/components/Extensions/ExtensionsWrapper.vue b/website/.vitepress/theme/components/Extensions/ExtensionsWrapper.vue new file mode 100644 index 0000000..c80405e --- /dev/null +++ b/website/.vitepress/theme/components/Extensions/ExtensionsWrapper.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/website/.vitepress/theme/components/News.vue b/website/.vitepress/theme/components/News.vue new file mode 100644 index 0000000..13136cb --- /dev/null +++ b/website/.vitepress/theme/components/News.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/website/.vitepress/theme/data/news.data.ts b/website/.vitepress/theme/data/news.data.ts new file mode 100644 index 0000000..f7d70d5 --- /dev/null +++ b/website/.vitepress/theme/data/news.data.ts @@ -0,0 +1,29 @@ +import { createContentLoader } from 'vitepress' + +export interface News { + title: string + description: string + date: string + url: string +} + +declare const data: News[] +export { data } + +export default createContentLoader('news/*.md', { + excerpt: true, + transform(articles) { + return articles + .filter(({ url }) => url !== '/news/') + .map( + ({ frontmatter, url }) => + { + title: frontmatter.title, + description: frontmatter.description, + date: frontmatter.date, + url, + }, + ) + .sort((a, b) => b.date.localeCompare(a.date)) + }, +}); \ No newline at end of file diff --git a/website/.vitepress/theme/index.ts b/website/.vitepress/theme/index.ts new file mode 100644 index 0000000..339f041 --- /dev/null +++ b/website/.vitepress/theme/index.ts @@ -0,0 +1,17 @@ +import type { Theme } from 'vitepress' +import DefaultTheme from 'vitepress/theme' +import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client' +import { VueQueryPlugin } from '@tanstack/vue-query'; +import goatcounter from './plugin/goatcounter'; + +import './styles/base.styl'; +import 'element-plus/theme-chalk/dark/css-vars.css'; + +export default { + extends: DefaultTheme, + enhanceApp({ app }) { + app.use(VueQueryPlugin); + enhanceAppWithTabs(app); + goatcounter({ id: "keiyoushi" }); + } +} satisfies Theme diff --git a/website/.vitepress/theme/plugin/goatcounter.ts b/website/.vitepress/theme/plugin/goatcounter.ts new file mode 100644 index 0000000..5feb8e2 --- /dev/null +++ b/website/.vitepress/theme/plugin/goatcounter.ts @@ -0,0 +1,21 @@ +function mountGoatcounter(id: string) { + // @ts-ignore + if (window.goatcounter || window.location.hostname === 'localhost') { + return + } + + const script = document.createElement("script") + + script.dataset.goatcounter = `https://${id}.goatcounter.com/count` + script.async = true + script.src = "//gc.zgo.at/count.js" + + document.head.appendChild(script) +} + +export default function ({ id }: { id: string }) { + // eslint-disable-next-line node/prefer-global/process + if (process.env.NODE_ENV === 'production' && id && typeof window !== 'undefined') { + mountGoatcounter(id) + } +} \ No newline at end of file diff --git a/website/.vitepress/theme/queries/useExtensionsRepositoryQuery.ts b/website/.vitepress/theme/queries/useExtensionsRepositoryQuery.ts new file mode 100644 index 0000000..a3ad1e1 --- /dev/null +++ b/website/.vitepress/theme/queries/useExtensionsRepositoryQuery.ts @@ -0,0 +1,44 @@ +import type { UseQueryOptions } from '@tanstack/vue-query' +import { useQuery } from '@tanstack/vue-query' +import axios from 'axios' +import { GITHUB_EXTENSION_JSON } from '../../config/constants' + +export type ReleaseType = 'stable' | 'preview' + +export interface Extension { + name: string + pkg: string + apk: string + lang: string + code: number + version: string + nsfw: number + hasReadme: number + hasChangelog: number + sources: Source[] +} + +export interface Source { + name: string + lang: string + id: string + baseUrl: string + versionId: number +} + +type UseExtensionsRepositoryQueryOptions = + UseQueryOptions + +export default function useExtensionsRepositoryQuery(options: UseExtensionsRepositoryQueryOptions = {}) { + return useQuery({ + queryKey: ['extensions'], + queryFn: async () => { + const { data } = await axios.get(GITHUB_EXTENSION_JSON) + + return data + }, + initialData: () => [], + refetchOnWindowFocus: false, + ...options, + }) +} \ No newline at end of file diff --git a/website/.vitepress/theme/styles/base.styl b/website/.vitepress/theme/styles/base.styl new file mode 100644 index 0000000..dbd83c4 --- /dev/null +++ b/website/.vitepress/theme/styles/base.styl @@ -0,0 +1,40 @@ +/** + * Component: Element Plus + */ +body { + --el-color-primary: var(--vp-c-brand-1) +} + +.vp-doc a { + text-decoration: none + + &:hover { + text-decoration: underline + text-underline-offset: 2px + } +} + +.navigation { + color: var(--vp-c-green-2) + font-weight: 600 + + &:hover { + color: var(--vp-c-green-1) + cursor: default + } + + svg, + span.name { + vertical-align: middle // Align both SVG and vertically + position: relative + bottom: 1px + } + + svg { + fill: currentColor + height: 1em + width: 1em + display: inline-block + margin-right: 4px + } +} diff --git a/website/.vitepress/theme/utils/languages.ts b/website/.vitepress/theme/utils/languages.ts new file mode 100644 index 0000000..c02e981 --- /dev/null +++ b/website/.vitepress/theme/utils/languages.ts @@ -0,0 +1,20 @@ +export function simpleLangName(code: string) { + if (code === 'all') + return 'All' + + const namesInEnglish = new Intl.DisplayNames(['en'], { type: 'language' }) + return capitalize(namesInEnglish.of(code)!, 'en') +} + +export function langName(code: string) { + if (code === 'all') + return 'All' + + const namesInEnglish = new Intl.DisplayNames(['en'], { type: 'language' }) + const namesInNative = new Intl.DisplayNames([code], { type: 'language' }) + return `${capitalize(namesInEnglish.of(code)!, 'en')} - ${capitalize(namesInNative.of(code)!, code)}` +} + +function capitalize(string: string, locale: string) { + return string.charAt(0).toLocaleUpperCase(locale) + string.substring(1) +} \ No newline at end of file diff --git a/website/.vitepress/vue-shim.d.ts b/website/.vitepress/vue-shim.d.ts new file mode 100644 index 0000000..3b42e5b --- /dev/null +++ b/website/.vitepress/vue-shim.d.ts @@ -0,0 +1,6 @@ +declare module '*.vue' { + import type { Component } from 'vue' + + const _default: Component + export default _default +} diff --git a/website/add-repo.md b/website/add-repo.md new file mode 100644 index 0000000..e7d53b5 --- /dev/null +++ b/website/add-repo.md @@ -0,0 +1,48 @@ +--- +title: "Add repository" +description: "Add this repository to Tachiyomi." +lastUpdated: false +editLink: false +prev: false +next: false +--- + + + +
+ You should be redirected to Tachiyomi in a moment. Refresh the page if it doesn't work, + or add the repo manually using this link: +
+
+ Unsupported operating system. Tachiyomi is an Android app only. Please add + the repo manually using this link: +
+ +{{ decodedUrl }} diff --git a/website/docs/faq/general.md b/website/docs/faq/general.md new file mode 100644 index 0000000..44e660c --- /dev/null +++ b/website/docs/faq/general.md @@ -0,0 +1,14 @@ +--- +title: General +titleTemplate: Frequently asked questions +description: Frequently asked questions about the Keiyoushi project. +--- + +# General +Frequently asked questions. + +## Will the extensions be maintained? +Extensions will be maintained as long as there are contributors updating them. + +## Who is maintaining these extensions? +Volunteers who spend their free time, just like the old official extension repo. diff --git a/website/docs/guides/getting-started.md b/website/docs/guides/getting-started.md new file mode 100644 index 0000000..f08ea9a --- /dev/null +++ b/website/docs/guides/getting-started.md @@ -0,0 +1,53 @@ +--- +title: Getting started +titleTemplate: Guides +description: Essential information to help you set up the extension repo. +--- + + + +# Getting started +Essential information to help you set up the extension repo. + +## Adding the extension repo +### Before you start +Uninstall all existing extensions. You will not get extension updates otherwise. + +### Adding the repository +For all modern variants of Tachiyomi (Tachiyomi, TachiyomiSY, TachiyomiJ2K, Mihon), click +the button below to add the repository: + + + +::: details Adding the repo manually +- Go to