diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-03-05 21:41:21 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-05 21:41:21 +0900 |
| commit | 0b59b262974167dfb89df1b16976f2e4c5b7f163 (patch) | |
| tree | 03fb8c874b3d7d951e84511cdced216185579b7c /docs | |
| parent | df1fe4fa8e140dfdebe359605ff95a9ce8f1c203 (diff) | |
| parent | 24734063e3c9ef2f30cac5537595f79c7a65f0cf (diff) | |
| download | LunaticChat-0b59b262974167dfb89df1b16976f2e4c5b7f163.tar.gz LunaticChat-0b59b262974167dfb89df1b16976f2e4c5b7f163.tar.bz2 LunaticChat-0b59b262974167dfb89df1b16976f2e4c5b7f163.zip | |
Merge pull request #132 from m1sk9/docs/version-system
feat(docs): add version system with @viteplus/versions
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/.vitepress/config.mts | 13 | ||||
| -rw-r--r-- | docs/.vitepress/config/en.ts | 1 | ||||
| -rw-r--r-- | docs/.vitepress/config/ja.ts | 1 | ||||
| -rw-r--r-- | docs/.vitepress/theme/Layout.vue | 14 | ||||
| -rw-r--r-- | docs/.vitepress/theme/VersionBanner.vue | 72 | ||||
| -rw-r--r-- | docs/.vitepress/theme/VersionSwitcher.vue | 249 | ||||
| -rw-r--r-- | docs/.vitepress/theme/custom.css | 21 | ||||
| -rw-r--r-- | docs/.vitepress/theme/index.ts | 12 | ||||
| -rw-r--r-- | docs/archive/v1/index.md | 23 | ||||
| -rw-r--r-- | docs/biome.jsonc | 7 | ||||
| -rw-r--r-- | docs/bun.lock | 63 | ||||
| -rw-r--r-- | docs/package.json | 1 | ||||
| -rw-r--r-- | docs/tsconfig.json | 12 |
13 files changed, 484 insertions, 5 deletions
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index c96f8b6..a9c733a 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,8 +1,8 @@ -import { defineConfig } from 'vitepress'; +import { defineVersionedConfig } from '@viteplus/versions'; import { en } from './config/en'; import { ja } from './config/ja'; -export default defineConfig({ +export default defineVersionedConfig({ cleanUrls: true, description: 'Next-generation channel chat plugin for Paper/Velocity', head: [['link', { href: '/favicon.ico', rel: 'icon' }]], @@ -20,7 +20,6 @@ export default defineConfig({ }, }, outDir: './dist', - srcDir: './src', themeConfig: { socialLinks: [ { icon: 'github', link: 'https://github.com/m1sk9/LunaticChat' }, @@ -28,7 +27,13 @@ export default defineConfig({ }, title: 'LunaticChat Docs', titleTemplate: 'LunaticChat', + versionsConfig: { + current: 'v0 (1.21.x) - Latest', + sources: 'src', + archive: 'archive', + versionSwitcher: false, + }, vite: { - publicDir: '../.vitepress/public', + publicDir: '.vitepress/public', }, }); diff --git a/docs/.vitepress/config/en.ts b/docs/.vitepress/config/en.ts index 6d2068d..6b1a18c 100644 --- a/docs/.vitepress/config/en.ts +++ b/docs/.vitepress/config/en.ts @@ -11,6 +11,7 @@ export const en: DefaultTheme.Config = { nav: [ { link: '/en/player-guide/getting-started', text: 'Player Guide' }, { link: '/en/admin-guide/getting-started', text: 'Admin Guide' }, + { component: 'VersionSwitcher' }, ], sidebar: { '/en/admin-guide/': [ diff --git a/docs/.vitepress/config/ja.ts b/docs/.vitepress/config/ja.ts index ee4a03c..857c951 100644 --- a/docs/.vitepress/config/ja.ts +++ b/docs/.vitepress/config/ja.ts @@ -11,6 +11,7 @@ export const ja: DefaultTheme.Config = { nav: [ { link: '/player-guide/getting-started', text: 'プレイヤーガイド' }, { link: '/admin-guide/getting-started', text: '管理者ガイド' }, + { component: 'VersionSwitcher' }, ], sidebar: { '/admin-guide/': [ diff --git a/docs/.vitepress/theme/Layout.vue b/docs/.vitepress/theme/Layout.vue new file mode 100644 index 0000000..9a2b4ae --- /dev/null +++ b/docs/.vitepress/theme/Layout.vue @@ -0,0 +1,14 @@ +<script setup lang="ts"> +import DefaultTheme from 'vitepress/theme'; +import VersionBanner from './VersionBanner.vue'; + +const { Layout } = DefaultTheme; +</script> + +<template> + <Layout> + <template #layout-top> + <VersionBanner /> + </template> + </Layout> +</template> diff --git a/docs/.vitepress/theme/VersionBanner.vue b/docs/.vitepress/theme/VersionBanner.vue new file mode 100644 index 0000000..68347d0 --- /dev/null +++ b/docs/.vitepress/theme/VersionBanner.vue @@ -0,0 +1,72 @@ +<script setup lang="ts"> +import { ref, computed, watch, onMounted, onUnmounted, nextTick } from 'vue'; +import { useRoute, inBrowser } from 'vitepress'; + +const route = useRoute(); +const bannerRef = ref<HTMLElement | null>(null); + +const isNonDefaultVersion = computed(() => { + const path = route.path; + return /^\/(en\/)?v\d+\//.test(path) || /^\/(en\/)?v\d+$/.test(path); +}); + +const versionLabel = computed(() => { + const match = route.path.match(/\/v(\d+)/); + return match ? `v${match[1]}` : ''; +}); + +const isJapanese = computed(() => { + return !route.path.startsWith('/en/'); +}); + +function updateLayoutTopHeight() { + if (!inBrowser || !bannerRef.value) return; + const height = bannerRef.value.getBoundingClientRect().height; + if (height > 0) { + document.documentElement.style.setProperty('--vp-layout-top-height', `${height}px`); + } else { + document.documentElement.style.removeProperty('--vp-layout-top-height'); + } +} + +function updateBannerClass(show: boolean) { + if (!inBrowser) return; + if (show) { + document.documentElement.classList.add('has-version-banner'); + nextTick(updateLayoutTopHeight); + } else { + document.documentElement.classList.remove('has-version-banner'); + document.documentElement.style.removeProperty('--vp-layout-top-height'); + } +} + +let resizeObserver: ResizeObserver | null = null; + +onMounted(() => { + updateBannerClass(isNonDefaultVersion.value); + watch(isNonDefaultVersion, (val) => updateBannerClass(val)); + + if (bannerRef.value) { + resizeObserver = new ResizeObserver(updateLayoutTopHeight); + resizeObserver.observe(bannerRef.value); + } +}); + +onUnmounted(() => { + resizeObserver?.disconnect(); + updateBannerClass(false); +}); +</script> + +<template> + <div v-if="isNonDefaultVersion" ref="bannerRef" class="version-banner"> + <span v-if="isJapanese"> + このドキュメントは <strong>{{ versionLabel }}</strong> + 版です。最新の安定版ではありません。 + </span> + <span v-else> + You are viewing the <strong>{{ versionLabel }}</strong> documentation. + This is not the latest stable version. + </span> + </div> +</template> diff --git a/docs/.vitepress/theme/VersionSwitcher.vue b/docs/.vitepress/theme/VersionSwitcher.vue new file mode 100644 index 0000000..e534426 --- /dev/null +++ b/docs/.vitepress/theme/VersionSwitcher.vue @@ -0,0 +1,249 @@ +<script setup lang="ts"> +import { computed, ref } from 'vue'; +import { useData, useRouter } from 'vitepress'; +import VPFlyout from 'vitepress/dist/client/theme-default/components/VPFlyout.vue'; +import VPMenuLink from 'vitepress/dist/client/theme-default/components/VPMenuLink.vue'; + +/** + * Mapping from archive folder names to display labels. + * Update this when adding new versions. + */ +const versionLabels: Record<string, string> = { + v1: 'v1 (26.1) - Next', +}; + +interface VersioningPlugin { + versions: Set<string>; + currentVersion: string; +} + +interface Props { + versioningPlugin: VersioningPlugin; + screenMenu?: boolean; +} + +interface VersionMenuItem { + text: string; + link: string; +} + +const props = defineProps<Props>(); +const router = useRouter(); +const { site } = useData(); +const isOpen = ref(false); + +const versionSet = computed(() => new Set([...props.versioningPlugin.versions])); +const hasVersions = computed(() => versionSet.value.size > 0); + +const currentLocale = computed( + () => site.value.locales[site.value.localeIndex]?.link?.replace(/\//g, '') || '', +); + +const pathSegments = computed(() => + router.route.path.replace(/^\/|\/$/g, '').split('/'), +); + +const activeVersion = computed(() => { + const { currentVersion } = props.versioningPlugin; + const segments = pathSegments.value; + const locale = currentLocale.value; + const versionCandidate = segments[0] === locale ? segments[1] : segments[0]; + return versionSet.value.has(versionCandidate) ? versionCandidate : currentVersion; +}); + +const activeVersionLabel = computed( + () => versionLabels[activeVersion.value] ?? activeVersion.value, +); + +const availableVersions = computed(() => + Array.from(props.versioningPlugin.versions).filter((v) => v !== activeVersion.value), +); + +const shouldShowCurrentVersion = computed( + () => activeVersion.value !== props.versioningPlugin.currentVersion, +); + +function isLocaleFirst(segments: string[]): boolean { + return segments[0] === currentLocale.value; +} + +function removeVersionSegments(segments: string[]): string[] { + return segments.filter((seg) => !versionSet.value.has(seg)); +} + +function buildVersionPath(version: string): string { + const { currentVersion } = props.versioningPlugin; + const baseSegments = removeVersionSegments(pathSegments.value); + const hasLocale = isLocaleFirst(baseSegments); + + let newSegments: string[]; + + if (version === currentVersion) { + newSegments = baseSegments; + } else if (hasLocale) { + newSegments = [baseSegments[0], version, ...baseSegments.slice(1)]; + } else { + newSegments = [version, ...baseSegments]; + } + + return `/${newSegments.join('/')}`; +} + +function label(version: string): string { + return versionLabels[version] ?? version; +} + +function createVersionMenuItem(version: string): VersionMenuItem { + return { + text: label(version), + link: buildVersionPath(version), + }; +} + +function toggle(): void { + isOpen.value = !isOpen.value; +} +</script> + +<template> + <template v-if="hasVersions"> + <!-- Desktop flyout --> + <VPFlyout + v-if="!screenMenu" + class="VPVersionSwitcher" + icon="vpi-versioning" + :button="activeVersionLabel" + label="Switch Version" + > + <div class="items"> + <VPMenuLink + v-if="shouldShowCurrentVersion" + :item="createVersionMenuItem(versioningPlugin.currentVersion)" + /> + <VPMenuLink + v-for="version in availableVersions" + :key="version" + :item="createVersionMenuItem(version)" + /> + </div> + </VPFlyout> + + <!-- Mobile dropdown --> + <div v-else class="VPScreenVersionSwitcher" :class="{ open: isOpen }"> + <button + class="button" + type="button" + aria-controls="navbar-group-version" + :aria-expanded="isOpen" + @click="toggle" + > + <span class="button-text"> + <span class="vpi-versioning icon" /> + Switch Version + </span> + <span class="vpi-plus button-icon" /> + </button> + + <div id="navbar-group-version" class="items"> + <VPMenuLink :item="createVersionMenuItem(versioningPlugin.currentVersion)" /> + <VPMenuLink + v-for="version in versioningPlugin.versions" + :key="version" + :item="createVersionMenuItem(version)" + /> + </div> + </div> + </template> +</template> + +<style> +.vpi-versioning.option-icon { + margin-right: 2px !important; +} + +.vpi-versioning { + --icon: url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB3aWR0aD0iNjRweCIgaGVpZ2h0PSI2NHB4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZS13aWR0aD0iMi4yIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNvbG9yPSIjMDAwMDAwIj48cGF0aCBkPSJNMTcgN0MxOC4xMDQ2IDcgMTkgNi4xMDQ1NyAxOSA1QzE5IDMuODk1NDMgMTguMTA0NiAzIDE3IDNDMTUuODk1NCAzIDE1IDMuODk1NDMgMTUgNUMxNSA2LjEwNDU3IDE1Ljg5NTQgNyAxNyA3WiIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48L3BhdGg+PHBhdGggZD0iTTcgN0M4LjEwNDU3IDcgOSA2LjEwNDU3IDkgNUM5IDMuODk1NDMgOC4xMDQ1NyAzIDcgM0M1Ljg5NTQzIDMgNSAzLjg5NTQzIDUgNUM1IDYuMTA0NTcgNS44OTU0MyA3IDcgN1oiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PC9wYXRoPjxwYXRoIGQ9Ik03IDIxQzguMTA0NTcgMjEgOSAyMC4xMDQ2IDkgMTlDOSAxNy44OTU0IDguMTA0NTcgMTcgNyAxN0M1Ljg5NTQzIDE3IDUgMTcuODk1NCA1IDE5QzUgMjAuMTA0NiA1Ljg5NTQzIDIxIDcgMjFaIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjwvcGF0aD48cGF0aCBkPSJNNyA3VjE3IiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjwvcGF0aD48cGF0aCBkPSJNMTcgN1Y4QzE3IDEwLjUgMTUgMTEgMTUgMTFMOSAxM0M5IDEzIDcgMTMuNSA3IDE2VjE3IiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjwvcGF0aD48L3N2Zz4="); +} +</style> + +<style scoped> +.VPVersionSwitcher { + display: flex; + align-items: center; +} + +.icon { + padding: 8px; +} + +.title { + padding: 0 24px 0 12px; + line-height: 32px; + font-size: 14px; + font-weight: 700; + color: var(--vp-c-text-1); +} + +.VPScreenVersionSwitcher { + border-bottom: 1px solid var(--vp-c-divider); + height: 48px; + overflow: hidden; + transition: border-color 0.5s; +} + +.VPScreenVersionSwitcher .items { + visibility: hidden; +} + +.VPScreenVersionSwitcher.open { + padding-bottom: 10px; + height: auto; +} + +.VPScreenVersionSwitcher.open .items { + visibility: visible; +} + +.VPScreenVersionSwitcher.open .button { + padding-bottom: 6px; + color: var(--vp-c-brand-1); +} + +.VPScreenVersionSwitcher.open .button-icon { + transform: rotate(45deg); +} + +.VPScreenVersionSwitcher button .icon { + margin-right: 8px; +} + +.button { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 4px 11px 0; + width: 100%; + line-height: 24px; + font-size: 14px; + font-weight: 500; + color: var(--vp-c-text-1); + transition: color 0.25s; +} + +.button:hover { + color: var(--vp-c-brand-1); +} + +.button-icon { + transition: transform 0.25s; +} + +.group:first-child { + padding-top: 0; +} + +.group + .group, +.group + .item { + padding-top: 4px; +} +</style> diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css new file mode 100644 index 0000000..a4ebd52 --- /dev/null +++ b/docs/.vitepress/theme/custom.css @@ -0,0 +1,21 @@ +.version-banner { + display: block; + padding: 12px 16px; + background-color: var(--vp-c-warning-soft); + color: var(--vp-c-warning-1); + text-align: center; + font-size: 14px; + line-height: 1.6; + border-bottom: 1px solid var(--vp-c-warning-2); +} + +@media (min-width: 960px) { + .version-banner { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 30; + padding: 12px 24px; + } +} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..26c6640 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,12 @@ +import DefaultTheme from 'vitepress/theme'; +import Layout from './Layout.vue'; +import VersionSwitcher from './VersionSwitcher.vue'; +import './custom.css'; + +export default { + extends: DefaultTheme, + Layout, + enhanceApp({ app }) { + app.component('VersionSwitcher', VersionSwitcher); + }, +}; diff --git a/docs/archive/v1/index.md b/docs/archive/v1/index.md new file mode 100644 index 0000000..51834ed --- /dev/null +++ b/docs/archive/v1/index.md @@ -0,0 +1,23 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: 'LunaticChat' + tagline: A next-generation chat plugin for Paper, Folia and Velocity. + actions: + - theme: alt + text: GitHub + link: https://github.com/m1sk9/LunaticChat + image: + src: /icon.png + alt: LunaticChat Logo +--- + +::: warning + +このドキュメントは現在編集中です.現行安定版のドキュメントではありません. + +現行のバージョンについては [こちら](/) をご覧ください. + +::: diff --git a/docs/biome.jsonc b/docs/biome.jsonc index 226f67b..1a8593a 100644 --- a/docs/biome.jsonc +++ b/docs/biome.jsonc @@ -2,7 +2,12 @@ "$schema": "https://biomejs.dev/schemas/2.4.5/schema.json", "files": { "ignoreUnknown": true, - "includes": [".vitepress/config.mts", "biome.jsonc", ".vitepress/config/**"] + "includes": [ + ".vitepress/config.mts", + "biome.jsonc", + ".vitepress/config/**", + ".vitepress/theme/*.ts" + ] }, "formatter": { "enabled": true, diff --git a/docs/bun.lock b/docs/bun.lock index 063c7b9..66259ee 100644 --- a/docs/bun.lock +++ b/docs/bun.lock @@ -4,6 +4,7 @@ "workspaces": { "": { "dependencies": { + "@viteplus/versions": "^2.0.6", "wrangler": "^4.69.0", }, "devDependencies": { @@ -98,6 +99,8 @@ "@docsearch/react": ["@docsearch/react@3.8.2", "", { "dependencies": { "@algolia/autocomplete-core": "1.17.7", "@algolia/autocomplete-preset-algolia": "1.17.7", "@docsearch/css": "3.8.2", "algoliasearch": "^5.14.2" }, "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" }, "optionalPeers": ["@types/react", "react", "react-dom", "search-insights"] }, "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg=="], + "@docsearch/sidepanel-js": ["@docsearch/sidepanel-js@4.6.0", "", {}, "sha512-lFT5KLwlzUmpoGArCScNoK41l9a22JYsEPwBzMrz+/ILVR5Ax87UphCuiyDFQWEvEmbwzn/kJx5W/O5BUlN1Rw=="], + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], @@ -218,6 +221,10 @@ "@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="], + "@remotex-labs/xansi": ["@remotex-labs/xansi@1.3.3", "", {}, "sha512-P5qKSYLA5508Wt/lh4gUsGW7VO30hL6alswS713WnrYzo5xGknG2O5OddD1Ae/dRzP8e0H1rBJuf1v1ztu3IFQ=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.2", "", {}, "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.59.0", "", { "os": "android", "cpu": "arm" }, "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg=="], "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.59.0", "", { "os": "android", "cpu": "arm64" }, "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q=="], @@ -308,6 +315,8 @@ "@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.4", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA=="], + "@viteplus/versions": ["@viteplus/versions@2.0.6", "", { "dependencies": { "@remotex-labs/xansi": "^1.3.3", "vitepress": "^2.0.0-alpha.12" } }, "sha512-13XNud+sCGTOs1L6Z0Ru7TxwkYmTknGSm/KU7/5wXR7vwMPqaPByC/A4H6R2R3aF8uK4Y1Y9bXyBQYJyYc3/Cw=="], + "@vue/compiler-core": ["@vue/compiler-core@3.5.29", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.29", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw=="], "@vue/compiler-dom": ["@vue/compiler-dom@3.5.29", "", { "dependencies": { "@vue/compiler-core": "3.5.29", "@vue/shared": "3.5.29" } }, "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg=="], @@ -376,6 +385,8 @@ "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "focus-trap": ["focus-trap@7.8.0", "", { "dependencies": { "tabbable": "^6.4.0" } }, "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -418,6 +429,8 @@ "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], + "oniguruma-to-es": ["oniguruma-to-es@3.1.1", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ=="], "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], @@ -428,6 +441,8 @@ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], "preact": ["preact@10.28.4", "", {}, "sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ=="], @@ -466,6 +481,8 @@ "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -506,8 +523,32 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@viteplus/versions/vitepress": ["vitepress@2.0.0-alpha.16", "", { "dependencies": { "@docsearch/css": "^4.5.3", "@docsearch/js": "^4.5.3", "@docsearch/sidepanel-js": "^4.5.3", "@iconify-json/simple-icons": "^1.2.68", "@shikijs/core": "^3.21.0", "@shikijs/transformers": "^3.21.0", "@shikijs/types": "^3.21.0", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^6.0.3", "@vue/devtools-api": "^8.0.5", "@vue/shared": "^3.5.27", "@vueuse/core": "^14.1.0", "@vueuse/integrations": "^14.1.0", "focus-trap": "^7.8.0", "mark.js": "8.11.1", "minisearch": "^7.2.0", "shiki": "^3.21.0", "vite": "^7.3.1", "vue": "^3.5.27" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "oxc-minify": "*", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "oxc-minify", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-w1nwsefDVIsje7BZr2tsKxkZutDGjG0YoQ2yxO7+a9tvYVqfljYbwj5LMYkPy8Tb7YbPwa22HtIhk62jbrvuEQ=="], + "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], + "@viteplus/versions/vitepress/@docsearch/css": ["@docsearch/css@4.6.0", "", {}, "sha512-YlcAimkXclvqta47g47efzCM5CFxDwv2ClkDfEs/fC/Ak0OxPH2b3czwa4o8O1TRBf+ujFF2RiUwszz2fPVNJQ=="], + + "@viteplus/versions/vitepress/@docsearch/js": ["@docsearch/js@4.6.0", "", {}, "sha512-9/rbgkm/BgTq46cwxIohvSAz3koOFjnPpg0mwkJItAfzKbQIj+310PvwtgUY1YITDuGCag6yOL50GW2DBkaaBw=="], + + "@viteplus/versions/vitepress/@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], + + "@viteplus/versions/vitepress/@shikijs/transformers": ["@shikijs/transformers@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/types": "3.23.0" } }, "sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ=="], + + "@viteplus/versions/vitepress/@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], + + "@viteplus/versions/vitepress/@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.4", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.2" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "vue": "^3.2.25" } }, "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ=="], + + "@viteplus/versions/vitepress/@vue/devtools-api": ["@vue/devtools-api@8.0.7", "", { "dependencies": { "@vue/devtools-kit": "^8.0.7" } }, "sha512-tc1TXAxclsn55JblLkFVcIRG7MeSJC4fWsPjfM7qu/IcmPUYnQ5Q8vzWwBpyDY24ZjmZTUCCwjRSNbx58IhlAA=="], + + "@viteplus/versions/vitepress/@vueuse/core": ["@vueuse/core@14.2.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ=="], + + "@viteplus/versions/vitepress/@vueuse/integrations": ["@vueuse/integrations@14.2.1", "", { "dependencies": { "@vueuse/core": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA=="], + + "@viteplus/versions/vitepress/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], + + "@viteplus/versions/vitepress/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], @@ -553,5 +594,27 @@ "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + + "@viteplus/versions/vitepress/@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@8.0.7", "", { "dependencies": { "@vue/devtools-shared": "^8.0.7", "birpc": "^2.6.1", "hookable": "^5.5.3", "perfect-debounce": "^2.0.0" } }, "sha512-H6esJGHGl5q0E9iV3m2EoBQHJ+V83WMW83A0/+Fn95eZ2iIvdsq4+UCS6yT/Fdd4cGZSchx/MdWDreM3WqMsDw=="], + + "@viteplus/versions/vitepress/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@14.2.1", "", {}, "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw=="], + + "@viteplus/versions/vitepress/@vueuse/core/@vueuse/shared": ["@vueuse/shared@14.2.1", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw=="], + + "@viteplus/versions/vitepress/@vueuse/integrations/@vueuse/shared": ["@vueuse/shared@14.2.1", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw=="], + + "@viteplus/versions/vitepress/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], + + "@viteplus/versions/vitepress/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g=="], + + "@viteplus/versions/vitepress/shiki/@shikijs/langs": ["@shikijs/langs@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg=="], + + "@viteplus/versions/vitepress/shiki/@shikijs/themes": ["@shikijs/themes@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA=="], + + "@viteplus/versions/vitepress/@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@8.0.7", "", {}, "sha512-CgAb9oJH5NUmbQRdYDj/1zMiaICYSLtm+B1kxcP72LBrifGAjUmt8bx52dDH1gWRPlQgxGPqpAMKavzVirAEhA=="], + + "@viteplus/versions/vitepress/@vue/devtools-api/@vue/devtools-kit/perfect-debounce": ["perfect-debounce@2.1.0", "", {}, "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g=="], + + "@viteplus/versions/vitepress/shiki/@shikijs/engine-javascript/oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], } } diff --git a/docs/package.json b/docs/package.json index 783a0fe..422955d 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,6 +16,7 @@ "vitepress": "^1.6.4" }, "dependencies": { + "@viteplus/versions": "^2.0.6", "wrangler": "^4.69.0" } } diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 0000000..5f61eef --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "strict": true, + "jsx": "preserve", + "skipLibCheck": true + }, + "include": [".vitepress/**/*.ts", ".vitepress/**/*.mts", ".vitepress/**/*.vue"] +} |
