diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1cb1984..eba340a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,63 +9,24 @@ permissions: id-token: write pages: write -env: - INSTANCE: 'Writerside/xd' - ARTIFACT: 'webHelpXD2-all.zip' - DOCKER_VERSION: '241.18775' - jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Build docs using Writerside Docker builder - uses: JetBrains/writerside-github-action@v4 - with: - instance: ${{ env.INSTANCE }} - artifact: ${{ env.ARTIFACT }} - docker-version: ${{ env.DOCKER_VERSION }} - - name: Save artifact with build results - uses: actions/upload-artifact@v4 - with: - name: docs - path: | - artifacts/${{ env.ARTIFACT }} - artifacts/report.json - retention-days: 7 - test: - needs: build - runs-on: ubuntu-latest - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 with: - name: docs - path: artifacts + node-version: 20 + cache: npm - - name: Test documentation - uses: JetBrains/writerside-checker-action@v1 - with: - instance: ${{ env.INSTANCE }} - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - needs: [build, test] - runs-on: ubuntu-latest - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: docs + - name: Install dependencies + run: npm ci - - name: Unzip artifact - run: unzip -O UTF-8 -qq '${{ env.ARTIFACT }}' -d dir + - name: Build docs + run: npm run docs:build - name: Setup Pages uses: actions/configure-pages@v4 @@ -73,8 +34,16 @@ jobs: - name: Package and upload Pages artifact uses: actions/upload-pages-artifact@v3 with: - path: dir + path: .vitepress/dist + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 + diff --git a/.github/workflows/preview-cleanup.yml b/.github/workflows/preview-cleanup.yml new file mode 100644 index 0000000..1b9842f --- /dev/null +++ b/.github/workflows/preview-cleanup.yml @@ -0,0 +1,29 @@ +name: PR preview cleanup + +on: + pull_request: + types: [closed] + +permissions: + contents: read + +jobs: + cleanup: + name: Delete FTP preview + runs-on: ubuntu-latest + steps: + - name: Install lftp + run: sudo apt-get install -y lftp + + - name: Remove preview directory from FTP + env: + FTP_USERNAME: ${{ secrets.FTP_USERNAME }} + FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + lftp -c " + set ftp:ssl-allow no; + open -u $FTP_USERNAME,$FTP_PASSWORD ftpupload.net; + rm -rf htdocs/pr-$PR_NUMBER/; + bye + " diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml new file mode 100644 index 0000000..ab7dad8 --- /dev/null +++ b/.github/workflows/preview.yml @@ -0,0 +1,83 @@ +name: PR preview + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + pull-requests: write + +jobs: + preview: + name: Build & deploy preview + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build docs + run: npm run docs:build -- --base /pr-${{ github.event.pull_request.number }}/ + + - name: Deploy to FTP + uses: SamKirkland/FTP-Deploy-Action@v4.3.5 + with: + server: ftpupload.net + port: 21 + username: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + local-dir: .vitepress/dist/ + server-dir: htdocs/pr-${{ github.event.pull_request.number }}/ + + - name: Comment on PR + uses: actions/github-script@v7 + with: + script: | + const prNumber = context.payload.pull_request.number; + const previewUrl = `http://xmoj-docs.infinityfreeapp.com/pr-${prNumber}/`; + const runUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`; + const body = [ + '## 📖 文档预览', + '', + `构建成功!点击下方链接在线预览文档(PR 关闭后自动删除)。`, + '', + `**[🔗 在线预览](${previewUrl})**`, + '', + `> 预览地址:\`${previewUrl}\``, + `> 构建运行:[#${context.runNumber}](${runUrl})`, + ].join('\n'); + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + + const botComment = comments.find( + c => c.user.type === 'Bot' && c.body.includes('## 📖 文档预览') + ); + + if (botComment) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: botComment.id, + body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body, + }); + } diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..7379717 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,30 @@ +name: Test build + +on: + push: + branches-ignore: + - master + pull_request: + +permissions: + contents: read + +jobs: + build: + name: Build docs + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build docs + run: npm run docs:build diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57a09c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.vitepress/dist +.vitepress/cache diff --git a/.vitepress/config.mts b/.vitepress/config.mts new file mode 100644 index 0000000..3b6c1db --- /dev/null +++ b/.vitepress/config.mts @@ -0,0 +1,174 @@ +import { defineConfig } from 'vitepress' +import mathjax3 from 'markdown-it-mathjax3' + +const customElements = [ + 'mjx-container', 'mjx-assistive-mml', 'math', 'maction', 'maligngroup', + 'malignmark', 'menclose', 'merror', 'mfenced', 'mfrac', 'mi', 'mlabeledtr', + 'mlongdiv', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', + 'mprescripts', 'mroot', 'mrow', 'ms', 'mscarries', 'mscarry', 'msgroup', + 'mstack', 'msup', 'msub', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', + 'munder', 'munderover', 'semantics', 'annotation', 'annotation-xml' +] + +export default defineConfig({ + title: '小明的OJ增强脚本', + description: '小明的OJ增强脚本用户帮助文档', + lang: 'zh-CN', + + head: [ + ['link', { rel: 'icon', href: '/logo.png' }], + ], + + markdown: { + config: (md) => { + md.use(mathjax3) + }, + }, + + vue: { + template: { + compilerOptions: { + isCustomElement: (tag) => customElements.includes(tag), + }, + }, + }, + + themeConfig: { + logo: '/logo.png', + + nav: [ + { text: '首页', link: '/' }, + { text: '安装指南', link: '/guide/installation' }, + { + text: '功能介绍', + items: [ + { text: '功能总览', link: '/features/' }, + { text: '用户评分', link: '/features/rating' }, + { text: '图床', link: '/features/image-hosting' }, + { text: '获取测试点数据', link: '/features/get-data' }, + { text: '自动提交当年代码', link: '/features/auto-handin' }, + ], + }, + { + text: '社区', + items: [ + { text: '徽章/Tag', link: '/community/badges' }, + { text: '贡献指南', link: '/community/contributing' }, + ], + }, + { + text: '配套应用', + items: [ + { text: '短消息在线看', link: '/apps/messages' }, + { text: 'ELXMOJ 桌面客户端', link: '/apps/elxmoj' }, + ], + }, + { + text: '更多', + items: [ + { text: '常见问题', link: '/qa/discussion' }, + { text: '用户协议', link: '/legal/eula' }, + ], + }, + ], + + sidebar: [ + { + text: '快速开始', + items: [ + { text: '安装指南', link: '/guide/installation' }, + ], + }, + { + text: '功能介绍', + items: [ + { text: '功能总览', link: '/features/' }, + { text: '用户评分', link: '/features/rating' }, + { text: '图床', link: '/features/image-hosting' }, + { text: '获取测试点数据', link: '/features/get-data' }, + { text: '自动提交当年代码', link: '/features/auto-handin' }, + ], + }, + { + text: '配套应用', + items: [ + { text: '短消息在线看', link: '/apps/messages' }, + { text: 'ELXMOJ 桌面客户端', link: '/apps/elxmoj' }, + ], + }, + { + text: '社区', + items: [ + { text: '徽章/Tag', link: '/community/badges' }, + { text: '贡献指南', link: '/community/contributing' }, + ], + }, + { + text: '更多', + items: [ + { text: '常见问题', link: '/qa/discussion' }, + { text: '用户协议', link: '/legal/eula' }, + ], + }, + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/XMOJ-Script-dev/XMOJ-Script' }, + ], + + footer: { + message: '基于 GPLv3 许可证发布', + copyright: 'Copyright © XMOJ-Script-dev', + }, + + editLink: { + pattern: 'https://github.com/XMOJ-Script-dev/docs/edit/master/:path', + text: '在 GitHub 上编辑此页', + }, + + lastUpdated: { + text: '最后更新于', + }, + + docFooter: { + prev: '上一页', + next: '下一页', + }, + + outline: { + level: [2, 3], + label: '本页目录', + }, + + returnToTopLabel: '回到顶部', + sidebarMenuLabel: '菜单', + darkModeSwitchLabel: '主题', + lightModeSwitchTitle: '切换到浅色模式', + darkModeSwitchTitle: '切换到深色模式', + + search: { + provider: 'local', + options: { + locales: { + root: { + translations: { + button: { + buttonText: '搜索文档', + buttonAriaLabel: '搜索文档', + }, + modal: { + noResultsText: '无法找到相关结果', + resetButtonTitle: '清除查询条件', + footer: { + selectText: '选择', + navigateText: '切换', + closeText: '关闭', + }, + }, + }, + }, + }, + }, + }, + }, +}) diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js new file mode 100644 index 0000000..ea7a407 --- /dev/null +++ b/.vitepress/theme/index.js @@ -0,0 +1,4 @@ +import DefaultTheme from 'vitepress/theme' +import './style.css' + +export default DefaultTheme diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css new file mode 100644 index 0000000..6a6ffbb --- /dev/null +++ b/.vitepress/theme/style.css @@ -0,0 +1,529 @@ +/** + * GitHub Primer-inspired theme for VitePress + * https://primer.style/foundations/color + */ + +/* ============================================================ + Typography + ============================================================ */ +:root { + --vp-font-family-base: + -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + --vp-font-family-mono: + ui-monospace, SFMono-Regular, "SF Mono", Menlo, + Consolas, "Liberation Mono", monospace; +} + +/* ============================================================ + Light Mode — GitHub fg/bg/border palette + ============================================================ */ +:root { + /* Brand — GitHub Blue */ + --vp-c-brand-1: #0969da; + --vp-c-brand-2: #0550ae; + --vp-c-brand-3: #0a3069; + --vp-c-brand-soft: rgba(9, 105, 218, 0.08); + + /* Text */ + --vp-c-text-1: #1f2328; + --vp-c-text-2: #59636e; + --vp-c-text-3: #848d97; + + /* Background */ + --vp-c-bg: #ffffff; + --vp-c-bg-soft: #f6f8fa; + --vp-c-bg-alt: #f6f8fa; + --vp-c-bg-elv: #ffffff; + + /* Borders */ + --vp-c-border: #d0d7de; + --vp-c-divider: #d0d7de; + --vp-c-gutter: #eaeef2; + + /* Hero buttons — GitHub green */ + --vp-button-brand-bg: #1a7f37; + --vp-button-brand-hover-bg: #1a7f37; + --vp-button-brand-active-bg: #116329; + --vp-button-brand-border: rgba(31, 35, 40, 0.15); + --vp-button-brand-hover-border: rgba(31, 35, 40, 0.15); + --vp-button-brand-active-border: rgba(31, 35, 40, 0.15); + --vp-button-brand-shadow: 0 1px 0 rgba(31, 35, 40, 0.1); + --vp-button-brand-text: #ffffff; + --vp-button-brand-hover-text: #ffffff; + --vp-button-brand-active-text: #ffffff; + + --vp-button-alt-border: #d0d7de; + --vp-button-alt-bg: #f6f8fa; + --vp-button-alt-hover-bg: #eaeef2; + --vp-button-alt-text: #24292f; + --vp-button-alt-hover-text: #24292f; + + /* Custom blocks — GitHub alert colors */ + --vp-custom-block-tip-bg: #ddf4ff; + --vp-custom-block-tip-border: #54aeff; + --vp-custom-block-tip-text: #0550ae; + --vp-custom-block-tip-code-bg: rgba(31, 111, 235, 0.1); + + --vp-custom-block-info-bg: #f6f8fa; + --vp-custom-block-info-border: #d0d7de; + --vp-custom-block-info-text: #1f2328; + --vp-custom-block-info-code-bg: #eaeef2; + + --vp-custom-block-note-bg: #ddf4ff; + --vp-custom-block-note-border: #54aeff; + --vp-custom-block-note-text: #0550ae; + + --vp-custom-block-warning-bg: #fff8c5; + --vp-custom-block-warning-border: #d4a72c; + --vp-custom-block-warning-text: #633c01; + --vp-custom-block-warning-code-bg: rgba(212, 167, 44, 0.15); + + --vp-custom-block-danger-bg: #ffebe9; + --vp-custom-block-danger-border: #ff8182; + --vp-custom-block-danger-text: #82071e; + --vp-custom-block-danger-code-bg: rgba(255, 129, 130, 0.15); + + --vp-custom-block-details-bg: #f6f8fa; + --vp-custom-block-details-border: #d0d7de; + --vp-custom-block-details-text: #1f2328; + + /* Code */ + --vp-code-bg: #f6f8fa; + --vp-code-color: #1f2328; + --vp-code-line-highlight-color: rgba(9, 105, 218, 0.06); +} + +/* ============================================================ + Dark Mode — GitHub dark palette (#0d1117 canvas) + ============================================================ */ +.dark { + /* Brand */ + --vp-c-brand-1: #58a6ff; + --vp-c-brand-2: #79c0ff; + --vp-c-brand-3: #cae8ff; + --vp-c-brand-soft: rgba(88, 166, 255, 0.12); + + /* Text */ + --vp-c-text-1: #e6edf3; + --vp-c-text-2: #848d97; + --vp-c-text-3: #6e7681; + + /* Background */ + --vp-c-bg: #0d1117; + --vp-c-bg-soft: #161b22; + --vp-c-bg-alt: #161b22; + --vp-c-bg-elv: #1c2128; + + /* Borders */ + --vp-c-border: #30363d; + --vp-c-divider: #21262d; + --vp-c-gutter: #21262d; + + /* Hero buttons */ + --vp-button-brand-bg: #238636; + --vp-button-brand-hover-bg: #2ea043; + --vp-button-brand-active-bg: #238636; + --vp-button-brand-border: rgba(240, 246, 252, 0.1); + --vp-button-brand-shadow: 0 0 0 0; + --vp-button-brand-text: #ffffff; + --vp-button-brand-hover-text: #ffffff; + + --vp-button-alt-border: #30363d; + --vp-button-alt-bg: #21262d; + --vp-button-alt-hover-bg: #30363d; + --vp-button-alt-text: #c9d1d9; + --vp-button-alt-hover-text: #e6edf3; + + /* Custom blocks */ + --vp-custom-block-tip-bg: rgba(31, 111, 235, 0.1); + --vp-custom-block-tip-border: #1f6feb; + --vp-custom-block-tip-text: #58a6ff; + + --vp-custom-block-info-bg: rgba(22, 27, 34, 0.8); + --vp-custom-block-info-border: #30363d; + --vp-custom-block-info-text: #e6edf3; + + --vp-custom-block-warning-bg: rgba(187, 128, 9, 0.1); + --vp-custom-block-warning-border: #9e6a03; + --vp-custom-block-warning-text: #e3b341; + --vp-custom-block-warning-code-bg: rgba(187, 128, 9, 0.2); + + --vp-custom-block-danger-bg: rgba(248, 81, 73, 0.1); + --vp-custom-block-danger-border: #da3633; + --vp-custom-block-danger-text: #f85149; + --vp-custom-block-danger-code-bg: rgba(248, 81, 73, 0.2); + + --vp-custom-block-details-bg: #161b22; + --vp-custom-block-details-border: #30363d; + --vp-custom-block-details-text: #e6edf3; + + /* Code */ + --vp-code-bg: #161b22; + --vp-code-color: #e6edf3; +} + +/* ============================================================ + Navigation + ============================================================ */ +.VPNavBar { + background-color: var(--vp-c-bg) !important; + border-bottom: 1px solid var(--vp-c-border) !important; + box-shadow: none !important; +} + +.VPNav .divider { + display: none !important; +} + +/* ============================================================ + Sidebar + ============================================================ */ +.VPSidebar { + background-color: var(--vp-c-bg-soft) !important; + border-right: 1px solid var(--vp-c-border) !important; + box-shadow: none !important; +} + +.VPSidebarItem.level-0 > .item > .text { + font-weight: 600; + color: var(--vp-c-text-1); + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.VPSidebarItem.is-active > .item > .link > .text { + color: var(--vp-c-brand-1); + font-weight: 500; +} + +/* ============================================================ + Content — GitHub Markdown rendering + ============================================================ */ + +/* H1 & H2 get bottom borders like GitHub */ +.vp-doc h1, +.vp-doc h2 { + padding-bottom: 0.4em; + border-bottom: 1px solid var(--vp-c-border); + font-weight: 600; +} + +.vp-doc h1 { + font-size: 2em; + margin-top: 0; +} + +.vp-doc h3 { + font-size: 1.1em; + font-weight: 600; +} + +/* Links */ +.vp-doc a { + color: var(--vp-c-brand-1); + font-weight: 450; + text-decoration: none; +} + +.vp-doc a:hover { + text-decoration: underline; +} + +/* Inline code */ +.vp-doc :not(pre, h1, h2, h3, h4, h5, h6) > code { + background-color: var(--vp-c-bg-soft); + border: 1px solid var(--vp-c-border); + border-radius: 6px; + padding: 0.2em 0.4em; + font-size: 85%; + color: var(--vp-c-text-1); + font-family: var(--vp-font-family-mono); +} + +/* Code blocks */ +.vp-doc div[class*='language-'] { + border: 1px solid var(--vp-c-border) !important; + border-radius: 6px !important; + background-color: var(--vp-code-bg) !important; +} + +.vp-doc div[class*='language-'] > button.copy { + border-radius: 6px; + border: 1px solid var(--vp-c-border); + background: var(--vp-c-bg); +} + +/* Tables */ +.vp-doc table { + border-collapse: collapse; + width: 100%; + font-size: 0.95em; +} + +.vp-doc thead th { + background-color: var(--vp-c-bg-soft); + font-weight: 600; + text-align: left; +} + +.vp-doc tr:nth-child(2n) { + background-color: var(--vp-c-bg-soft); +} + +.vp-doc th, +.vp-doc td { + border: 1px solid var(--vp-c-border); + padding: 6px 13px; +} + +/* Blockquotes */ +.vp-doc blockquote { + border-left: 4px solid var(--vp-c-border); + color: var(--vp-c-text-2); + background: transparent; + padding: 0 1em; + margin: 1em 0; + border-radius: 0; +} + +.vp-doc blockquote > p { + color: var(--vp-c-text-2); +} + +/* HR */ +.vp-doc hr { + border-color: var(--vp-c-border); + margin: 24px 0; +} + +/* ============================================================ + Custom Blocks — GitHub alert style + ============================================================ */ +.custom-block { + border-radius: 6px; + border: 1px solid; + padding: 12px 16px; + font-size: 0.95em; +} + +.custom-block.tip { + background-color: var(--vp-custom-block-tip-bg); + border-color: var(--vp-custom-block-tip-border); + color: var(--vp-custom-block-tip-text); +} + +.custom-block.info { + background-color: var(--vp-custom-block-info-bg); + border-color: var(--vp-custom-block-info-border); + color: var(--vp-custom-block-info-text); +} + +.custom-block.warning { + background-color: var(--vp-custom-block-warning-bg); + border-color: var(--vp-custom-block-warning-border); + color: var(--vp-custom-block-warning-text); +} + +.custom-block.danger { + background-color: var(--vp-custom-block-danger-bg); + border-color: var(--vp-custom-block-danger-border); + color: var(--vp-custom-block-danger-text); +} + +.custom-block.details { + background-color: var(--vp-custom-block-details-bg); + border-color: var(--vp-custom-block-details-border); + color: var(--vp-custom-block-details-text); +} + +.custom-block-title { + font-weight: 600; + margin-bottom: 4px; +} + +/* ============================================================ + Home Page — Feature cards + ============================================================ */ +.VPHome .VPFeatures .VPFeature { + border: 1px solid var(--vp-c-border) !important; + border-radius: 6px !important; + background-color: var(--vp-c-bg) !important; + transition: border-color 0.15s ease, box-shadow 0.15s ease !important; +} + +.VPHome .VPFeatures .VPFeature:hover { + border-color: var(--vp-c-brand-1) !important; + box-shadow: 0 0 0 3px var(--vp-c-brand-soft) !important; + text-decoration: none !important; +} + +.VPHome .VPFeatures .VPFeature .title { + font-size: 1rem; + font-weight: 600; + color: var(--vp-c-text-1); +} + +.VPHome .VPFeatures .VPFeature .details { + font-size: 0.9rem; + color: var(--vp-c-text-2); +} + +/* Hero */ +.VPHero .name { + background: none !important; + -webkit-text-fill-color: var(--vp-c-text-1) !important; + font-weight: 700; +} + +.VPHero .text { + color: var(--vp-c-text-2) !important; + font-size: 1.6rem !important; + font-weight: 400 !important; +} + +.VPHero .tagline { + color: var(--vp-c-text-2) !important; + font-size: 1.05rem !important; +} + +/* ============================================================ + Badges (inline pill labels in content) + ============================================================ */ +.gh-badge { + display: inline-block; + padding: 0.12em 0.55em; + font-size: 0.75rem; + font-weight: 500; + line-height: 1.5; + border-radius: 2em; + border: 1px solid var(--vp-c-border); + background-color: var(--vp-c-bg-soft); + color: var(--vp-c-text-2); + vertical-align: middle; + font-family: var(--vp-font-family-base); +} + +.gh-badge.green { + background-color: #dafbe1; + border-color: rgba(26, 127, 55, 0.4); + color: #116329; +} + +.gh-badge.blue { + background-color: #ddf4ff; + border-color: rgba(9, 105, 218, 0.4); + color: #0550ae; +} + +.gh-badge.yellow { + background-color: #fff8c5; + border-color: rgba(154, 103, 0, 0.4); + color: #6e4500; +} + +.dark .gh-badge.green { + background-color: rgba(46, 160, 67, 0.15); + border-color: rgba(46, 160, 67, 0.4); + color: #3fb950; +} + +.dark .gh-badge.blue { + background-color: rgba(31, 111, 235, 0.15); + border-color: rgba(31, 111, 235, 0.4); + color: #58a6ff; +} + +.dark .gh-badge.yellow { + background-color: rgba(187, 128, 9, 0.15); + border-color: rgba(187, 128, 9, 0.4); + color: #e3b341; +} + +/* ============================================================ + Announcement bar / top banner + ============================================================ */ +.VPLocalSearchBox { + border-radius: 6px !important; +} + +/* ============================================================ + Footer + ============================================================ */ +.VPFooter { + border-top: 1px solid var(--vp-c-border) !important; + background-color: var(--vp-c-bg-soft) !important; +} + +/* ============================================================ + Scrollbar (subtle, GitHub-like) + ============================================================ */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background-color: var(--vp-c-border); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background-color: var(--vp-c-text-3); +} + +/* ============================================================ + Keyboard shortcuts + ============================================================ */ +kbd { + display: inline-block; + padding: 3px 6px; + font-size: 0.8em; + font-family: var(--vp-font-family-mono); + line-height: 1.4; + color: var(--vp-c-text-1); + background-color: var(--vp-c-bg-soft); + border: 1px solid var(--vp-c-border); + border-bottom-color: var(--vp-c-text-3); + border-radius: 6px; + box-shadow: inset 0 -1px 0 var(--vp-c-text-3); + white-space: nowrap; +} + +/* ============================================================ + Outline / TOC + ============================================================ */ +.VPDocOutlineItem a.outline-link { + color: var(--vp-c-text-2); + font-size: 0.85em; +} + +.VPDocOutlineItem a.outline-link:hover, +.VPDocOutlineItem a.outline-link.active { + color: var(--vp-c-brand-1); +} + +/* ============================================================ + Edit link & last-updated + ============================================================ */ +.edit-link-button { + color: var(--vp-c-brand-1) !important; +} + +/* ============================================================ + Step list — numbered steps styled like GitHub docs + ============================================================ */ +.vp-doc ol > li { + margin-bottom: 0.5em; +} + +.vp-doc ol > li::marker { + color: var(--vp-c-text-2); + font-weight: 600; +} diff --git a/Writerside/c.list b/Writerside/c.list deleted file mode 100644 index 5babfee..0000000 --- a/Writerside/c.list +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/Writerside/cfg/buildprofiles.xml b/Writerside/cfg/buildprofiles.xml deleted file mode 100644 index 09605f4..0000000 --- a/Writerside/cfg/buildprofiles.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - emerald - https://xmoj-bbs.me - Get XMOJ-Script - true - logo.png - logo.png - admin@xmoj-bbs.me - - -
- 2024 XMOJ-Script Dev Team - Send us an email -
- - - false - - -
diff --git a/Writerside/cfg/glossary.xml b/Writerside/cfg/glossary.xml deleted file mode 100644 index fa5a33c..0000000 --- a/Writerside/cfg/glossary.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - A special piece of text displayed beside your username. Also called tags. - - \ No newline at end of file diff --git a/Writerside/redirection-rules.xml b/Writerside/redirection-rules.xml deleted file mode 100644 index 86f5ae0..0000000 --- a/Writerside/redirection-rules.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - " from Instance Name]]> - edit_landing.html - - \ No newline at end of file diff --git a/Writerside/resources/tampermonkey_stable.crx b/Writerside/resources/tampermonkey_stable.crx deleted file mode 100644 index 9fbcf79..0000000 Binary files a/Writerside/resources/tampermonkey_stable.crx and /dev/null differ diff --git a/Writerside/topics/Badges.md b/Writerside/topics/Badges.md deleted file mode 100644 index 9a59f1c..0000000 --- a/Writerside/topics/Badges.md +++ /dev/null @@ -1,13 +0,0 @@ -# Tag/Badge - -![badge.png](badge.png) - -If you want a badge like this, you can get one by: - -- Inviting another user to use XMOJ-Script. -- Donating to the project. -- Contributing to the project. - -If you believe you deserve a badge, please contact an administrator. - -Edit your badge by going [here](https://www.xmoj.tech/modifypage.php). diff --git a/Writerside/topics/Installation.md b/Writerside/topics/Installation.md deleted file mode 100644 index 2fb29b1..0000000 --- a/Writerside/topics/Installation.md +++ /dev/null @@ -1,3 +0,0 @@ -# 安装 - -Download Tampermonkey \ No newline at end of file diff --git a/Writerside/topics/docs/ads.md b/Writerside/topics/docs/ads.md deleted file mode 100644 index ad5caf7..0000000 --- a/Writerside/topics/docs/ads.md +++ /dev/null @@ -1,19 +0,0 @@ -# 广告栏招租公告 - -首页广告栏招租啦! - -小明的OJ增强脚本用户访问量大,广告投放效果明显! - -单日平均访问量7000+*次,在众多网站中名列前茅!(访问量有波动,周末、寒暑假访问量巨大) - -我们的广告位物美价廉,仅需¥5/月!支持包年包月,长期投放可以洽谈优惠! - -欢迎站内短信联系@shanwenxiao 或者 邮件联系点击[这里](mailto:seanoj_noreply@yeah.net) - -### 形态展示 - -![](https://image.langningchen.com/plzsvgxvmupwwgfndwhxrhllshkassur) - -支持文字,图片等各种类型 - -*API request count diff --git a/Writerside/topics/docs/eula.md b/Writerside/topics/docs/eula.md deleted file mode 100644 index 8d25d12..0000000 --- a/Writerside/topics/docs/eula.md +++ /dev/null @@ -1,123 +0,0 @@ -# 用户协议 - -### 小明的OJ讨论区用户服务协议 - -欢迎阅读《小明的OJ讨论区用户服务协议》(以下简称“本协议”)。本协议阐述之条款和条件适用于您(以下简称“用户”)使用小明的OJ讨论区的各种产品和服务。 - -#### 1. 服务协议的确认 - -1.1 小明的OJ增强脚本开发组同意按照本协议的规定及其不时发布的操作规则提供基于互联网移动网的小明的OJ讨论区、小明的OJ增强脚本开发组官方网站(web.xmoj-bbs.tech)等相关服务(以下简称“小明的OJ增强脚本开发组服务”)。 - -1.2 小明的OJ增强脚本开发组服务使用人(以下简称“用户”)应当基于了解本协议全部内容、在独立思考的基础上认可、同意本协议的全部条款并按照页面上的提示完成全部的注册程序(于xmoj.tech内—),用户的注册、登录、使用等行为将视为完全接受本协议及小明的OJ增强脚本开发组公示的各项规则、规范。 - -1.3 小明的OJ增强脚本开发组享有对小明的OJ增强脚本开发组小明的OJ讨论区、小明的OJ增强脚本开发组官方网站上一切活动的监督、提示、检查、纠正等权利。 - -#### 2. 服务内容 - -2.1 小明的OJ增强脚本开发组服务的具体内容由小明的OJ增强脚本开发组根据实际情况提供,包括但不限于授权用户通过其帐号上传、搜索并向互相关联的用户推送相关信息、授权用户对其进行收录、分享等,小明的OJ增强脚本开发组有权对其提供的服务或产品形态进行升级或其他调整,均以小明的OJ讨论区网站内容更新的方式通知用户,不单独通知用户。 - -2.2 小明的OJ增强脚本开发组提供的小明的OJ增强脚本开发组服务中可能包括广告,用户同意在使用过程中显示小明的OJ增强脚本开发组和第三方供应商、合作伙伴提供的广告。 - -2.3 小明的OJ增强脚本开发组仅提供与小明的OJ增强脚本开发组服务相关的技术服务等,除此之外与相关网络服务有关的设备(如个人电脑、手机、及其他与接入互联网或移动网有关的装置)及所需费用(如为接入互联网而支付的电话费及上网费、为使用移动网而支付的手机费)均应由用户自行负担。 - -#### 3. 服务变更、中断或终止 - -3.1 鉴于网络服务的特殊性(包括但不限于不可抗力、网络稳定性、系统稳定性、技术故障、用户所在位置、用户关机、用户手机病毒或恶意的网络攻击行为及其他任何技术、互联网络、通信线路、内容侵权等原因),用户同意,小明的OJ增强脚本开发组有权随时中断或终止部分或全部小明的OJ增强脚本开发组服务,小明的OJ增强脚本开发组将尽可能及时以合理方式通知用户,并尽可能在第一时间对此进行修复。但对因此导致用户不能发送和接受阅读信息、或接发错信息,小明的OJ增强脚本开发组不承担任何责任,用户须承担以上风险。 - -3.2 用户理解,小明的OJ增强脚本开发组需要定期或不定期地对提供小明的OJ增强脚本开发组服务的平台或相关设备进行检修和维护,如因此类情况而造成服务在合理期间内的中断,小明的OJ增强脚本开发组将尽可能事先通知,但无需为此承担任何责任。 - -3.3 用户提供的个人资料不真实、用户违反法律法规国家政策或本协议规定的使用规则,小明的OJ增强脚本开发组有权随时中断或终止向用户提供本协议项下的小明的OJ增强脚本开发组服务,而无需对用户或任何第三方承担任何责任。 - -#### 4. 使用规则 - -4.1 用户在申请注册小明的OJ服务时,必须向小明的OJ提供准确的主体资料(用户为个人时,包括姓名、性别、出生年月、电话、邮箱等;用户为单位时,包括名称、注册地址、注册号等),如主体资料有任何变动,必须及时更新。因用户提供资料的真实性问题导致协议双方或第三方的任何损失均由用户承担。 - -4.2 用户注册成功后,将获得一个小明的OJ账号及由用户设置的密码,该用户帐号和密码由用户负责保管;用户应当对该用户帐号所有行为负相关法律责任。 - -用户在使用小明的OJ增强脚本开发组服务过程中,必须遵循以下原则: - -(1) 遵守中国有关的法律和法规; - -(2) 不得为任何非法目的而使用小明的OJ增强脚本开发组服务; - -(3) 遵守所有与网络服务有关的网络协议、规定和程序; - -(4) 不得利用小明的OJ和小明的OJ增强脚本开发组的服务系统进行任何可能对互联网的正常运转造成不利影响的行为; - -(5) 不得利用小明的OJ增强脚本开发组网络服务系统进行任何不利于小明的OJ增强脚本开发组和小明的OJ系统的行为。 - -4.3 用户不得使用小明的OJ增强脚本开发组服务制作、上传、发送、传播敏感信息和违反国家法律制度的信息,包括但不限于下列信息: - -(1) 反对宪法所确定的基本原则的; - -(2) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的; - -(3) 损害国家荣誉和利益的; - -(4) 煽动民族仇恨、民族歧视,破坏民族团结的; - -(5) 破坏国家宗教政策,宣扬邪教和封建迷信的; - -(6) 散布谣言,扰乱社会秩序,破坏社会稳定的; - -(7) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的; - -(8) 侮辱或者诽谤他人,侵害他人合法权益的; - -(9) 含有法律、行政法规禁止的其他内容的。 - -4.4 用户同意在任何情况下不使用其他用户的帐号或密码。在您怀疑他人在使用您的帐号或密码时,您同意立即通知小明的OJ增强脚本开发组。 - -4.5 用户有权更改、删除在小明的OJ增强脚本开发组服务中的个人资料、注册信息及传送内容等,但删除有关信息的同时也会删除任何您储存在系统中的文字和图片。用户需承担该风险。 - -4.6 如因用户违反本协议中的任何条款,小明的OJ增强脚本开发组有权依据本协议终止对违约用户小明的OJ增强脚本开发组帐号提供服务。 - -4.7 如用户注册小明的OJ增强脚本开发组帐号后长期不登录该帐号,小明的OJ增强脚本开发组有权回收该帐号,以免造成资源浪费,由此带来问题均由用户自行承担。 - -#### 5. 知识产权 - -5.1 小明的OJ增强脚本开发组提供小明的OJ增强脚本开发组服务中所包含的任何文本、图片、标识、音频、视频资料均受著作权、商标权、专利权及其他财产权法律的保护。 - -5.2 未经相关权利人和小明的OJ增强脚本开发组的同意,上述资料均不得以任何方式被展示于其他任何第三方平台或被用于其他任何商业目的;用户不得擅自复制、修改、编纂上述内容、或创造与内容有关的衍生产品。 - -#### 6. 隐私保护 - -6.1 本协议所指的“隐私”包括《电信和互联网用户个人信息保护规定》第4条规定的用户个人信息的内容以及未来不时制定或修订的法律法规中明确规定的隐私应包括的内容。 - -6.2 保护用户隐私和个人数据是小明的OJ增强脚本开发组的一项基本制度,小明的OJ增强脚本开发组将采取各种制度、安全技术和程序等措施来保护用户隐私和个人数据不被未经授权的访问、使用或泄漏,并保证不会将单个用户的注册资料及用户在使用小明的OJ增强脚本开发组服务时存储在小明的OJ增强脚本开发组的非公开内容向除合作单位以外的第三方公开或用于任何非法的用途,但下列情况除外: - -(1) 事先获得用户的明确授权; - -(2) 根据有关法律法规的要求; - -(3) 按照相关政府主管部门的要求; - -(4) 为维护社会公众的利益; - -(5) 用户侵害本协议项下小明的OJ增强脚本开发组的合法权益的情况下而为维护小明的OJ增强脚本开发组的合法权益所必须。 - -6.3 用户在注册小明的OJ增强脚本开发组小明的OJ讨论区帐号或使用小明的OJ增强脚本开发组小明的OJ讨论区服务的过程中,需要提供一些必要的信息,例如:姓名、电话、邮箱、性别、出生年月、名称、注册地址、注册号等。为向用户提供帐号注册服务或进行用户身份识别,需要用户填写手机号码;部分功能需要用户授权使用用户的相机或相册;部分功能需要用户授权访问用户的手机通讯录等。若用户不授权或提供的信息不完整,则无法使用本服务或在使用过程中受到限制。用户授权提供的信息,小明的OJ增强脚本开发组承诺将采取措施保护用户的个人信息安全。 - -6.4 为了向用户提供更好的用户体验和提高小明的OJ增强脚本开发组小明的OJ讨论区的服务质量,小明的OJ增强脚本开发组将可能会收集使用或向第三方提供用户的非个人隐私信息。小明的OJ增强脚本开发组将对该第三方使用用户个人数据的行为进行监督和管理,尽一切可能努力保护用户个人信息的安全。 - -#### 7. 免责声明 - -7.1 用户在使用小明的OJ增强脚本开发组服务的过程中应遵守国家法律法规及政策规定,对其所制作、上传、发送、传播的信息和内容承担任何法律责任,与小明的OJ增强脚本开发组无关。 - -7.2 小明的OJ增强脚本开发组小明的OJ讨论区在其页面上向用户显示、推送的任何信息和内容如系小明的OJ增强脚本开发组利用技术手段根据用户指令从互联网任何第三方网站搜索、定位、匹配后推荐给用户而非小明的OJ增强脚本开发组单方制作的,则该显示、推送的信息和内容并不代表小明的OJ增强脚本开发组及小明的OJ增强脚本开发组小明的OJ讨论区的观点,小明的OJ增强脚本开发组并不对上述信息的准确性和正确性负责。 - -7.3小明的OJ增强脚本开发组提供小明的OJ增强脚本开发组小明的OJ讨论区服务中所包含的任何文本、图片、标识、音频、视频资料均为教学用途,不涉及任何实体物品的商业活动。 - -7.4小明的OJ增强脚本开发组小明的OJ讨论区在其页面上向用户显示、推送的任何信息和内容如存在侵权任何第三方知识产权的嫌疑,权利人和相关利害关系人应当向小明的OJ增强脚本开发组发出权利通知,小明的OJ增强脚本开发组经过核实后根据有关法律法规有权采取包括但不限于断开该侵权内容的链接或删除并停止传输该侵权内容,但小明的OJ增强脚本开发组并不对该侵权内容承担法律责任。 - -7.5用户违反本协议的规定,导致或产生的任何第三方主张的任何索赔、要求或损失,包括合理的律师费,用户同意赔偿小明的OJ增强脚本开发组,使之免受损害。 - -#### 8. 其他条款 - -8.1 小明的OJ增强脚本开发组有权随时修改本协议的任何条款,一旦本协议的内容发生变动,小明的OJ增强脚本开发组将会在小明的OJ增强脚本开发组小明的OJ讨论区平台中公布修改后的协议内容或通过其他适当方式向用户公布修改内容。用户不同意上述修改内容,有权选择停止使用小明的OJ增强脚本开发组服务,但用户继续使用,则视为接受小明的OJ增强脚本开发组对本协议相关条款的修改。 - -8.2 本《协议》所定的任何条款无论因何种原因部分或全部无效或不具有执行力,本协议的其余条款仍应有效并具备约束力。 - -8.3 本协议的订立、执行和解释及纠纷的解决均应适用中华人民共和国法律并受中华人民共和国法院管辖。如双方就本协议内容或执行发生任何纠纷或争议,首先应友好协商解决,协商不成的,任何一方均可向小明的OJ增强脚本开发组所在地的有管辖权的人民法院提起诉讼。 - -8.4 本协议的版权归小明的OJ增强脚本开发组所有,本协议各项条款内容的最终解释权及修改权归小明的OJ增强脚本开发组所有。 diff --git a/Writerside/topics/docs/functions/auto-handin.md b/Writerside/topics/docs/functions/auto-handin.md deleted file mode 100644 index c820b72..0000000 --- a/Writerside/topics/docs/functions/auto-handin.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -comments: true - ---- - -# 自动提交当年代码 - -使用方法: - -1. 点击右上角用户名 ->插件设置 中找到 ``自动提交当年代码`` ,点击开启。 -2. 点击竞赛&作业,找到你的比赛。 -3. 这时,题目列表上方会出现“自动提交当年代码”按钮。点击后,系统会自动提交曾经AC的题目的代码 * 。 - -注意事项: - -1. 点击按钮提交当年代码会让你在该比赛中有很大几率(约90%)获得 ``疑似提交当年代码``的黄色标记,请谨慎使用! - -注释: - -* 由于题目数据、时间限制变动,可能会出现WA、TLE、MLE等情况,小明的OJ增强脚本不对正确性负责。 diff --git a/Writerside/topics/docs/functions/data.md b/Writerside/topics/docs/functions/data.md deleted file mode 100644 index b3155ce..0000000 --- a/Writerside/topics/docs/functions/data.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -comments: true ---- -# 获取数据 - -⚠️ 该功能存在bug待修复,使用上可能存在问题。 - -小明的OJ增强脚本获取数据功能可以帮助用户获取一部分的数据,提高debug速度,刷到更多的提。点击存在错误的运行,单击 ``获取数据``即可。 diff --git a/Writerside/topics/docs/functions/pics.md b/Writerside/topics/docs/functions/pics.md deleted file mode 100644 index 9ae1f1c..0000000 --- a/Writerside/topics/docs/functions/pics.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -comments: true ---- -# 图床 - -小明的OJ增强脚本图床可以让用户在小明的OJ增强脚本讨论区、短消息范围内快速发送图片并提供给永久图片存储、代理服务。 - -使用方式: - -1. 复制一张图片 -2. 在任何一个讨论(或短消息)的发送框中右键粘贴或者在键盘上点击ctrl+v,即可上传。 - -注意事项: - -1. 由于服务器位置关系,上传、显示过程可能比较缓慢。 -2. 禁止上传违反用户协议、公序良俗和其他另行通知的不得上传的内容。 -3. 视情况管理组会删除部分用户上传的不符合规定的图片。 -4. 如果多次上传问题图片,可能会被禁止使用该功能。 - -*** - -## Image hosting - -The discussion section and short messages support image uploads. This feature is useful for sharing images, such as screenshots, with other users. - -To upload an image, paste the image into a text field. The image will be automatically uploaded to the server. - -Please note that your image should obey our TOS. -You should not upload any inappropriate images, such as NSFW content, to the server. -If your image violates our TOS, it will be removed. -Repeated violations may result in a ban. - - -If you get an error message, please contact an administrator. \ No newline at end of file diff --git a/Writerside/topics/docs/functions/rating.md b/Writerside/topics/docs/functions/rating.md deleted file mode 100644 index 366ddfe..0000000 --- a/Writerside/topics/docs/functions/rating.md +++ /dev/null @@ -1,44 +0,0 @@ -# 用户评分 - -计算方式:小明的OJ增强脚本的用户评分是基于使用者在小明的OJ (xmoj.tech) 上的正确率计算获得。详细的说,就是用户在小明的OJ上的提交正确率*100,即AC提交数 / 总提交数 * 100(包含等待、忽略等情况)。 - -用户评分和可以相对客观地评价用户在小明的OJ上做题吸收情况,有利于用户之间的横向促进和比较。 - -颜色特征: - -1. 对于用户评分在500分以上的(正确率50%以上的),用户名将显示红色。 -2. 对于用户评分在400分到500分的(包含400分、500分),用户名显示黄色。 -3. 对于用户评分在300分到400分的(包含300分不包含400分),用户名将显示绿色。 -4. 对于用户评分在300分以下的,用户名将显示蓝色。 - -与洛谷(luogu.com.cn)用户咕值的差别和相同点: - -1. 小明的OJ增强脚本用户评分不考虑对于社区贡献和使用频次,相对既有长效客观性。 -2. 小明的OJ增强脚本用户评分实时显示,不具有延迟性。 - -*** - -## Rating System - -Like Luogu, XMOJ-Script has a rating system. The rating system is used to determine the color of your username. - -## How is Rating Calculated? -> Please note that this may change in the future. - -Currently, your rating equals your AC rate, i.e., -The number of accepted submissions divided by the total number of submissions. The rating is then multiplied by 1000 -to get the final rating value. -Ratings are cached on the client side for one day. - - -## Rating Colors - -The color of a username in XMOJ-Script is determined by the user's rating. The rating system assigns different colors based on the rating value: - -> Please note that this may change in the future. -- **Red**: Assigned if the rating is greater than 500. -- **Yellow**: Assigned if the rating is between 400 and 500 (inclusive). -- **Green**: Assigned if the rating is between 300 and 400 (inclusive). -- **Blue**: Assigned if the rating is less than 300. - -This system helps visually distinguish users based on their ratings. \ No newline at end of file diff --git a/Writerside/topics/docs/index.md b/Writerside/topics/docs/index.md deleted file mode 100644 index 9e90ad6..0000000 --- a/Writerside/topics/docs/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# 小明的OJ增强脚本 帮助中心 - -![demo.png](demo.png) - -欢迎来到小明的OJ增强脚本用户帮助中心!欢迎您参与我们帮助中心的文档构建! - -本文档采用 [JetBrains Writerside](https://lp.jetbrains.com/writerside/) 构建,您贡献时请参照本仓库的基础架构! - -This documentation will help you get started with XMOJ-Script -and provide you with the information you need to use it effectively. diff --git a/Writerside/topics/docs/joinus.md b/Writerside/topics/docs/joinus.md deleted file mode 100644 index a3562c3..0000000 --- a/Writerside/topics/docs/joinus.md +++ /dev/null @@ -1,43 +0,0 @@ -# 贡献提示 - -你好!欢迎来到小明的OJ增强脚本! - -我们非常开心您能和我们在一起! - -我们相信你一定对为我们的脚本仓库做出贡献非常兴奋,但是,请先仔细阅读我们的贡献提示。 - -> 请注意,外部开发者应修改 `extern-contrib`内容,并 向`extern-contrib`提交 pull requests。 - -- 我们对于小明的OJ增强脚本的目标时 **稳定性大于功能性**。这意味着我们专注于在开发新功能前优先修复问题。通常,我们可以同时完成这两件事,但是问题修复比新功能更重要。 -- 我们在脚本中使用Bootstrap。所以请尽量使用Bootstrap而不是您自己写的CSS。 -- 不要使用Code Formatter -- 如果开发者没有同意,请不要使用额外的外部库。 -- 对于新功能,请先开启一个Issue与团队讨论具体功能之后再完成代码并PR。 -- 尊重原先的代码格式。变量名使用camelCase,function使用PascalCase,class使用TitleCase。原先的代码可能不符合这项规定但是新代码会。 -- 结尾使用Unix格式。 -- 提交你的PR之前,请先把本仓库的dev分支拉取到你的仓库中并自行修复任何冲突,我们不希望你破坏任何开发中的东西! -- 请耐心,我们是一个小团队,因此我们的审核速度可能比较慢 -- 请在提交PR和Issue的时候尊重开发者和其它用户! -- 尊重我们的决定,不要为我们拒绝了你的建议而伤心,生气。 - -# Contributing Guidelines - -Hi, there! Welcome to XMOJ-Script! - -We are happy to have you here with us! - -We believe that you must be excited to contribute to our repo, but first, please read the contribution guidelines! - -> Please be aware, due to tech issues, external contributins should be based on the `extern-contrib` branch and the pull request should be pointed to the `extern-contrib` branch。 - -- Our goal for `xmoj-script` is **stability before features**. This means we focus on squashing critical bugs before adding new features. Often, we can do both in tandem, but bugs will take priority over a new feature. -- We use Bootstrap in our project. Please use Bootstrap classes instead of writing your own CSS whenever possible. -- Do not run a code formatter. -- Do not use any external libraries without prior permission. -- For new features, open an issue first to discuss what you would like to change. -- Respect the original code style. Variables should be camelCase, functions should be PascalCase, and classes should be TitleCase. There is a bunch of old code that doesn't follow this rule, but new code should. -- Commit Unix line endings. -- Before Submitting your Pull Request, merge `dev` with your new branch and fix any conflicts. (Make sure you don't break anything in development!) -- Be patient. We are a small team and may not be able to review your PR immediately. -- Please be considerate towards the developers and other users when raising issues or presenting pull requests. -- Respect our decision(s), and do not be upset or abusive if your submission is not used. diff --git a/Writerside/topics/docs/q&a/discussion.md b/Writerside/topics/docs/q&a/discussion.md deleted file mode 100644 index 9a9b45b..0000000 --- a/Writerside/topics/docs/q&a/discussion.md +++ /dev/null @@ -1,11 +0,0 @@ -# 讨论区无法访问的正确解决姿势 - -1. 如果报错` "JSON解析错误:SyntaxError: Unexpected token '<', " - - - - diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg deleted file mode 100644 index 2bf46f5..0000000 --- a/Writerside/writerside.cfg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/Writerside/xd.tree b/Writerside/xd.tree deleted file mode 100644 index 96a8a26..0000000 --- a/Writerside/xd.tree +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/elxmoj.md b/apps/elxmoj.md new file mode 100644 index 0000000..7c3c38b --- /dev/null +++ b/apps/elxmoj.md @@ -0,0 +1,107 @@ +# ELXMOJ — 桌面客户端 + +**ELXMOJ** 是基于 [Electron](https://www.electronjs.org/) 构建的小明的OJ桌面客户端。它在原生应用窗口中打开 `www.xmoj.tech`,并**自动注入 XMOJ-Script 用户脚本**,让您无需安装浏览器扩展即可享受脚本的全部增强功能。 + +- 官网:[https://elxmoj.xmoj-bbs.me](https://elxmoj.xmoj-bbs.me) +- GitHub:[XMOJ-Script-dev/ELXMOJ](https://github.com/XMOJ-Script-dev/ELXMOJ) + +## 主要功能 + +| 功能 | 说明 | +|------|------| +| 🖥️ 原生桌面体验 | 独立窗口,无需打开浏览器 | +| 💉 自动注入脚本 | 启动时自动注入 `XMOJ.user.js`,无需 Tampermonkey | +| 🔄 脚本更新检测 | 每次启动可自动检查脚本是否有新版本 | +| ⚙️ 设置持久化 | 更新通道、启动行为等设置持久保存 | +| 🔍 启动自检 | 内置自检功能,快速排查运行问题 | +| 🌐 多平台支持 | 支持 Windows、macOS、Linux | + +## 下载安装 + +前往 [GitHub Releases](https://github.com/XMOJ-Script-dev/ELXMOJ/releases/latest) 下载最新版本,或直接点击下方对应平台的链接: + +### Windows + +| 安装包类型 | 下载链接 | +|-----------|---------| +| 安装程序(推荐) | [GitHub Releases →](https://github.com/XMOJ-Script-dev/ELXMOJ/releases/latest) | + +下载后双击 `.exe` 文件,按照安装向导完成安装(支持自定义安装目录)。 + +::: tip Windows 安全提示 +首次运行时,Windows SmartScreen 可能弹出警告"Windows 已保护你的电脑"。点击"**更多信息**" → "**仍要运行**"即可继续安装。这是因为应用尚未进行微软代码签名,不影响安全性。 +::: + +### macOS + +| 安装包类型 | 适用架构 | +|-----------|---------| +| DMG 镜像 / ZIP 压缩包 | Apple Silicon (M1/M2/M3) | + +前往 [GitHub Releases](https://github.com/XMOJ-Script-dev/ELXMOJ/releases/latest) 下载对应文件。打开 `.dmg` 文件,将 `ELXMOJ.app` 拖入"应用程序"文件夹。 + +::: tip macOS 安全提示 +首次打开时,macOS Gatekeeper 可能提示"无法验证开发者"。请前往**系统设置 → 隐私与安全性**,点击"**仍要打开**"授权运行。 +::: + +### Linux + +| 安装包类型 | 说明 | +|-----------|------| +| AppImage(推荐) | 单文件,无需安装,赋予执行权限后直接运行 | +| tar.gz 压缩包 | 手动解压后运行 | + +前往 [GitHub Releases](https://github.com/XMOJ-Script-dev/ELXMOJ/releases/latest) 下载对应文件。使用 AppImage 时需先赋予执行权限: + +```bash +chmod +x ELXMOJ-*-linux-x86_64.AppImage +./ELXMOJ-*-linux-x86_64.AppImage +``` + +## 应用设置 + +打开设置窗口:菜单栏 **ELXMOJ → 设置** + +### 更新通道 + +| 通道 | 脚本来源 | 适用场景 | +|------|---------|---------| +| **正式版**(默认) | `https://xmoj-bbs.me/XMOJ.user.js` | 日常使用,稳定版本 | +| **预览版** | `https://dev.xmoj-bbs.me/XMOJ.user.js` | 体验新功能,可能不稳定 | + +### 启动行为 + +- **启动时检查脚本更新**:每次启动 ELXMOJ 时自动联网检查脚本是否有新版本,发现新版本时弹窗提示 +- **自动注入 userscript**:启动后自动将 `XMOJ.user.js` 注入到页面,关闭此选项则以普通浏览器模式打开 XMOJ + +### 工具 + +| 操作 | 说明 | +|------|------| +| 立即检查更新 | 手动触发脚本版本检查 | +| 执行自检 | 检查应用运行环境,输出诊断信息 | +| 下载最新 App | 获取 ELXMOJ 应用本身的最新版下载链接 | + +## 菜单栏功能 + +ELXMOJ 在系统菜单栏中提供以下入口(位于 **ELXMOJ** 菜单): + +- **设置** — 打开设置窗口 +- **执行自检** — 运行启动自检 +- **检查脚本更新** — 手动检查脚本是否有新版本 + +## 常见问题 + +**Q:ELXMOJ 和直接在浏览器中使用脚本有什么区别?** + +ELXMOJ 是独立应用,无需安装 Tampermonkey,启动即用,适合不想在浏览器里安装扩展的用户。同时,ELXMOJ 作为专属客户端,未来可支持更多桌面端专属功能(如系统通知等)。 + +**Q:ELXMOJ 中的脚本版本和 Tampermonkey 中的版本一致吗?** + +是的,两者使用相同的 `XMOJ.user.js` 脚本文件,功能完全相同。ELXMOJ 从官网或预览版服务器获取更新。 + +**Q:启动后白屏或无法加载页面怎么办?** + +1. 检查网络连接是否正常,确认可以访问 `www.xmoj.tech` +2. 打开**设置 → 执行自检**,查看诊断输出 +3. 如问题持续,可在 [GitHub Issues](https://github.com/XMOJ-Script-dev/ELXMOJ/issues) 中反馈 diff --git a/apps/messages.md b/apps/messages.md new file mode 100644 index 0000000..0fe7e72 --- /dev/null +++ b/apps/messages.md @@ -0,0 +1,89 @@ +# 短消息在线看 + +**短消息在线看**是 XMOJ-Script 提供的一个独立网页应用,让您无需安装用户脚本,即可在任意浏览器(包括 **iOS Safari** 和移动端浏览器)中收发 XMOJ 站内短消息。 + +👉 访问地址:[https://xmoj-bbs.me/messages.html](https://xmoj-bbs.me/messages.html) + +## 功能特点 + +| 功能 | 说明 | +|------|------| +| 📱 跨平台 | 支持所有主流浏览器,包括 iOS Safari、Android 浏览器 | +| 🔐 无需安装脚本 | 纯网页应用,不依赖 Tampermonkey | +| 🔍 联系人搜索 | 实时搜索过滤联系人列表 | +| ✉️ 发送新消息 | 向任意用户发起新对话 | +| 💬 查看对话 | 以线程方式展示和收发消息 | +| 🖼️ 图片支持 | 在消息中粘贴图片自动上传发送 | +| 🏷️ 用户徽章 | 自动展示联系人的 Badge/Tag | +| 🌙 深色模式 | 支持浅色/深色/跟随系统三种主题 | +| ↕️ 自动滚动 | 查看对话时自动滚动到最新消息 | + +## 登录方式 + +短消息在线看提供两种登录方式,请根据您所在的设备选择: + +### 方式一:书签登录(仅限桌面浏览器) + +适用于 **Chrome / Firefox / Edge** 等桌面浏览器。 + +1. 访问 [https://xmoj-bbs.me/messages.html](https://xmoj-bbs.me/messages.html) +2. 将页面上的"🔖 登录到短消息在线看"链接拖拽到浏览器书签栏 +3. 在浏览器中打开 [www.xmoj.tech](https://www.xmoj.tech) 并确保已登录 +4. 点击书签栏中的"🔖 登录到短消息在线看"书签 +5. 浏览器将自动跳转并完成登录 + +::: tip 最简单的方式 +对于桌面用户,书签登录是最快捷的方式,无需手动查找 Cookie。 +::: + +### 方式二:会话登录(通用,支持移动端) + +需要手动获取 `PHPSESSID` Cookie,适用于**所有设备**(包括手机)。 + +**在桌面浏览器上获取 PHPSESSID:** + +1. 在浏览器中打开 [www.xmoj.tech](https://www.xmoj.tech) 并登录 +2. 按 F12 打开开发者工具 → 切换到"Application"(Chrome/Edge)或"存储"(Firefox)标签 +3. 展开左侧"Cookies" → 找到 `www.xmoj.tech` +4. 复制 `PHPSESSID` 的值 + +**在 iOS Safari 上获取(需配合 Mac):** + +1. 在 iPhone/iPad 的 Safari 上打开并登录 [www.xmoj.tech](https://www.xmoj.tech) +2. 在 Mac 上打开 Safari → 菜单栏"开发(Develop)" → 选择您的 iOS 设备 → 选择 xmoj.tech 页面 +3. 在 Web 检查器中找到并复制 `PHPSESSID` + +**填写登录信息:** + +1. 在短消息在线看的登录页,选择"**会话登录**"标签 +2. 输入您的 XMOJ 用户名和 `PHPSESSID` +3. 点击"登录" + +## 使用说明 + +### 查看消息 + +登录后,左侧(或顶部)显示联系人列表,点击联系人即可查看与该用户的完整对话记录。 + +### 搜索联系人 + +在联系人列表上方的搜索框中输入用户名,即可实时过滤联系人。 + +### 发送消息 + +- **在对话中回复**:在对话底部的输入框中输入内容,点击"发送"或按 Ctrl+Enter +- **发起新对话**:点击"发新消息"按钮,填写收件人用户名和消息内容 + +### 发送图片 + +在消息输入框中,按 Ctrl+V 粘贴图片,系统会自动上传并插入图片链接。 + +### 切换主题 + +点击右上角的主题切换按钮,可以在**浅色**、**深色**、**自动(跟随系统)** 三种模式间切换。 + +## 注意事项 + +- `PHPSESSID` 是您的登录凭据,**请勿泄露给他人** +- 该页面数据保存在浏览器本地存储中,清除浏览器数据会导致需要重新登录 +- 消息发送依赖 XMOJ 后端 API,网络异常时可能发送失败,请重试 diff --git a/community/badges.md b/community/badges.md new file mode 100644 index 0000000..b12ea8d --- /dev/null +++ b/community/badges.md @@ -0,0 +1,46 @@ +# 徽章 / Tag + +![徽章示例](/badge.png) + +**徽章(Badge / Tag)** 是显示在用户名旁的特殊标识,用于标记对社区有特殊贡献或特殊身份的用户。徽章具有自定义背景色、文字色和内容,由管理员手动颁发。 + +## 徽章显示位置 + +徽章会在以下页面随用户名一同显示: + +- 讨论区的帖子和回复作者名旁 +- 短消息的发件人 / 收件人旁 +- 用户个人资料页面 + +## 如何获得徽章? + +目前可通过以下方式获得徽章: + +| 途径 | 说明 | +|------|------| +| 🤝 邀请新用户 | 成功邀请他人安装并使用 XMOJ-Script | +| 💰 赞助项目 | 通过 [Open Collective](https://opencollective.com/xmoj-script-dev) 赞助开发 | +| 🛠️ 贡献代码 | 向 [XMOJ-Script 仓库](https://github.com/XMOJ-Script-dev/XMOJ-Script) 提交被合并的 PR | +| 🏆 特殊贡献 | 由管理员酌情颁发(如发现重大 Bug、提供宝贵建议等)| + +如果您认为自己符合获得徽章的条件但尚未收到,可以在讨论区联系管理员 @zhuchenrui2。 + +## 管理徽章展示 + +获得徽章后,可在以下页面自行管理展示方式: + +**[https://www.xmoj.tech/modifypage.php](https://www.xmoj.tech/modifypage.php)** + +在该页面中,您可以: +- 选择要展示哪些徽章 +- 调整多个徽章的显示顺序 +- 选择不显示任何徽章(完全隐藏) + +## 支持项目 + +如果 XMOJ-Script 对您有帮助,欢迎通过以下方式支持我们的持续开发: + +👉 [在 Open Collective 上赞助 XMOJ-Script-dev](https://opencollective.com/xmoj-script-dev) + +赞助者将获得专属徽章,并在项目中留名。所有赞助收入用于服务器运营和开发维护。 + diff --git a/community/contributing.md b/community/contributing.md new file mode 100644 index 0000000..a76280b --- /dev/null +++ b/community/contributing.md @@ -0,0 +1,74 @@ +# 贡献指南 + +欢迎为 XMOJ-Script 贡献代码!在开始之前,请仔细阅读本页内容。我们是一个小团队,非常欢迎来自社区的高质量 PR。 + +## 分支说明 + +| 分支 | 用途 | PR 目标 | +|------|------|---------| +| `master` | 稳定发布版 | ❌ 不接受外部 PR | +| `dev` | 日常开发 | ❌ 不接受外部 PR | +| `extern-contrib` | **外部贡献专用** | ✅ 外部开发者请提交到此分支 | + +::: warning 外部贡献者注意 +请务必将 Pull Request 提交到 **`extern-contrib`** 分支,直接向 `master` 或 `dev` 提交的 PR 将被关闭。 +::: + +## 贡献流程 + +```text +1. Fork XMOJ-Script-dev/XMOJ-Script +2. 从 extern-contrib 分支新建功能分支 + git checkout -b feature/your-feature extern-contrib +3. 编写代码并在本地测试 +4. 将最新的 extern-contrib 合并到你的分支,解决冲突 + git fetch origin && git merge origin/extern-contrib +5. 提交 Pull Request → extern-contrib 分支 +``` + +## 代码规范 + +### 命名约定 + +| 类型 | 风格 | 示例 | +|------|------|------| +| 变量 | `camelCase` | `userId`, `submitCount` | +| 函数 | `PascalCase` | `GetUserRating`, `SubmitCode` | +| 类 | `TitleCase` | `RatingSystem`, `ImageUploader` | + +> 旧代码中可能存在不符合规范的命名,但**新代码必须严格遵循**上述约定。 + +### 其他规范 + +- ❌ **不要**运行代码格式化工具(Prettier / clang-format 等),避免引入大量格式噪声 +- ❌ **不要**在未经核心开发者同意的情况下引入新的外部依赖库 +- ✅ 使用 **Bootstrap 5** 样式类,尽量避免编写自定义 CSS +- ✅ 使用 **Unix 换行符**(LF,`\n`),不要使用 Windows CRLF +- ✅ 提交 PR 前务必先将 `extern-contrib` 合并到你的分支并解决所有冲突 + +## 新功能开发 + +在动手写代码前,请先 [开一个 Issue](https://github.com/XMOJ-Script-dev/XMOJ-Script/issues/new/choose) 描述你的想法,等待核心开发者讨论并认可后再开始实现。 + +**核心原则:稳定 > 功能。** 新功能不能引入回归,不能降低脚本在主流浏览器上的兼容性。 + +## 行为准则 + +- 请**尊重**每一位开发者和社区成员 +- 请**耐心**等待 PR 审核,我们是业余项目,响应时间不固定 +- 请**理解**我们的决定,PR 被拒绝并不代表贡献不被珍视 +- 请遵守 [Code of Conduct](https://github.com/XMOJ-Script-dev/XMOJ-Script/blob/master/CODE_OF_CONDUCT.md) + +## 提交 Bug 或建议 + +发现 Bug 或有功能建议,欢迎在 [GitHub Issues](https://github.com/XMOJ-Script-dev/XMOJ-Script/issues) 中反馈。 + +提交 Bug 时请提供: + +- [ ] 问题的详细描述(实际行为 vs 预期行为) +- [ ] 可复现的最小步骤 +- [ ] 浏览器名称与版本(如 Chrome 124) +- [ ] Tampermonkey 版本 +- [ ] XMOJ-Script 版本(控制面板中可查看) +- [ ] 浏览器开发者工具 Console 截图(如有报错) + diff --git a/features/auto-handin.md b/features/auto-handin.md new file mode 100644 index 0000000..855f776 --- /dev/null +++ b/features/auto-handin.md @@ -0,0 +1,52 @@ +# 自动提交当年代码 + +## 功能介绍 + +「自动提交当年代码」功能允许您在竞赛 / 作业中,一键将曾经 AC 过的题目代码**批量重新提交**。适用于每年需要重新提交当年代码的考核场景,省去逐题手动查找和提交的麻烦。 + +## 使用方法 + +1. 登录后点击右上角**用户名** →「**插件设置**」 +2. 找到「**自动提交当年代码**」开关,将其**开启**并保存 +3. 前往「**竞赛 & 作业**」,进入目标比赛的题目列表页 +4. 页面上方将出现「**自动提交当年代码**」按钮 +5. 确认后点击按钮,脚本将自动遍历各题的历史提交,找到曾经 AC 的代码并重新提交 + +::: danger 操作前请仔细阅读 +点击按钮后,操作将**立即开始执行**且**无法中途取消**(当前版本限制)。请在完全了解后果后再使用。 +::: + +## 结果标记说明 + +由于批量重新提交具有明显特征,约有 **90%** 的概率被系统自动标记: + +| 标记类型 | 含义 | +|---------|------| +| 🟡 **疑似提交当年代码** | 系统检测到该提交的代码与往年 AC 代码高度相似 | + +带有此标记的提交在排行榜和提交记录中会有黄色警告显示。**请在清楚了解此后果的情况下再使用本功能。** + +## 注意事项 + +- **不保证 AC**:题目数据、时间限制或内存限制可能已变更,重新提交不一定能通过(可能出现 WA、TLE、MLE 等结果) +- **XMOJ-Script 不对重新提交的结果承担任何责任** +- 提交完成后请手动逐题检查状态 +- 如当年某题没有历史 AC 记录,该题将被跳过 + +## 常见问题 + +**Q:开启后进入比赛页面但没有看到按钮?** + +请确认: +- 当前页面是**比赛详情页 → 题目列表**,而非比赛列表页面 +- 插件设置已保存(点击保存按钮后刷新页面) +- 当前登录账号有该比赛的参赛权限 + +**Q:提交过程中可以停止吗?** + +目前版本**不支持**中途取消。建议在点击前确认题目列表,并仅在充分了解后果后操作。 + +**Q:会同时提交所有题目吗?** + +是的,脚本会遍历比赛中所有题目,对有历史 AC 记录的题目依次提交,整个过程为顺序执行。 + diff --git a/features/get-data.md b/features/get-data.md new file mode 100644 index 0000000..ecec5a4 --- /dev/null +++ b/features/get-data.md @@ -0,0 +1,52 @@ +# 获取测试点数据 + +::: warning 当前状态:存在已知 Bug +该功能目前存在已知 Bug,在部分场景下可能无法正常获取数据,正在修复中(大概率修不好)。如遇问题请在 [GitHub Issues](https://github.com/XMOJ-Script-dev/XMOJ-Script/issues) 反馈。 +::: + +## 功能介绍 + +当您的提交出现 **WA(Wrong Answer)**、**TLE(Time Limit Exceeded)** 或 **RE(Runtime Error)** 时,「获取测试点数据」功能可以让您直接查看该测试点的**输入数据**,在本地重现问题,大幅加速调试流程。 + +**适用场景:** +- 代码在本地测试通过,但提交后 WA — 可以获取让你 WA 的具体输入 +- 程序 TLE — 获取输入后可在本地用更大数据集测试复杂度 +- 程序 RE — 获取输入后可在本地精确复现崩溃情况 + +## 使用方法 + +1. 进入**状态页面**(提交记录列表),找到出现错误的那条提交 +2. 点击提交展开测试点详情 +3. 在出错的测试点行旁,点击「**获取数据**」按钮 +4. 稍等片刻,该测试点的输入数据将显示在弹出框中 +5. 复制输入数据到本地文件,在本地重现并调试 + + +## 本地调试建议 + +获取到测试点数据后,推荐按以下流程调试: + +```bash +# 1. 将输入数据保存为文件 +echo "(粘贴输入数据)" > input.txt + +# 2. 编译代码(以 C++ 为例) +g++ -O2 -o solution solution.cpp + +# 3. 用测试点数据运行 +./solution < input.txt + +# 4. 如需调试,加 -g 编译后用 gdb +g++ -g -o solution_debug solution.cpp +gdb ./solution_debug +``` + +::: tip 配合「复制测试样例」使用 +题面中的样例数据可通过 XMOJ-Script 的「复制测试样例」功能一键复制到剪贴板,快速填入本地测试文件。 +::: + +## 已知问题 + +- 部分比赛的测试点数据获取按钮显示但点击无响应 — 正在修复(大概率修不好) +- 数据量较大时加载时间较长属于正常现象,请耐心等待 + diff --git a/features/image-hosting.md b/features/image-hosting.md new file mode 100644 index 0000000..128697f --- /dev/null +++ b/features/image-hosting.md @@ -0,0 +1,47 @@ +# 图床 + +XMOJ-Script 为讨论区和短消息提供了内置**图片上传与托管**功能。图片上传后将存储在 XMOJ-Script 服务器,支持永久存储与 CDN 代理访问,无需使用任何第三方图床。 + +## 使用方法 + +1. 截图或复制任意图片到剪贴板(例如使用截图工具、或在网页上右键「复制图片」) +2. 打开任意**讨论区发帖框**或**短消息输入框** +3. 直接按 Ctrl+V(macOS:+V)粘贴 +4. 等待上传完成(输入框中会自动插入图片链接 `![](url)`) +5. 正常发送帖子 / 消息,其他用户即可查看图片 + +::: tip 也可右键粘贴 +在输入框内**右键 → 粘贴**同样可以触发图片上传,不必使用快捷键。 +::: + +## 支持的图片格式 + +| 格式 | 支持情况 | +|------|---------| +| PNG | ✅ 完整支持 | +| JPEG / JPG | ✅ 完整支持 | +| GIF | ✅ 完整支持(包含动图) | +| WebP | ✅ 完整支持 | +| BMP | ⚠️ 部分支持(建议转换为 PNG) | +| SVG | ❌ 不支持 | + +## 使用限制与规范 + +::: warning 请遵守以下规定 +- **内容规范**:禁止上传违反[用户协议](../legal/eula)、公序良俗或另行通知禁止的内容(包括但不限于 NSFW 内容、侮辱性图片) +- **管理权限**:管理组有权在无需通知的情况下删除违规图片 +- **封禁机制**:多次上传违规图片将导致该用户的图片上传功能被封禁 +- **速度说明**:由于服务器地理位置,图片上传和加载速度可能较慢,请耐心等待 +::: + +## 上传失败处理 + +| 现象 | 可能原因 | 解决方法 | +|------|---------|---------| +| 粘贴后无反应 | 图片未正确复制到剪贴板 | 重新复制图片;确认复制的是图片而非文件路径 | +| 上传进度一直转 | 网络连接慢或 VPN 干扰 | 检查网络;关闭代理后重试 | +| 显示服务器错误 | 服务端临时异常 | 等待几分钟后重试;如持续出错请在讨论区反馈 | +| 图片链接插入但显示损坏 | 上传中断或文件损坏 | 重新上传;检查原图是否完整 | + +如遇上述之外的错误,欢迎在[讨论区反馈版](https://www.xmoj-bbs.me)提问,说明错误信息截图和操作步骤。 + diff --git a/features/index.md b/features/index.md new file mode 100644 index 0000000..edf64f2 --- /dev/null +++ b/features/index.md @@ -0,0 +1,70 @@ +# 功能总览 + +XMOJ-Script 是一个功能丰富的浏览器用户脚本,覆盖**界面美化**、**竞赛辅助**、**数据获取**、**社区互动**等多个方面,目前共包含 **30+** 项独立功能。 + +> 所有功能均可在「插件设置」中按需开启或关闭,不影响 OJ 原有功能的使用。 + +## 界面增强 + +| 功能 | 说明 | +|------|------| +| Bootstrap 5 样式库 | 全面重构页面 CSS,使用 Bootstrap 5 组件,整体风格更现代 | +| 暗色模式 | 内置暗色主题,支持自动跟随系统;使用早期应用技术避免页面闪白(FOUC)| +| 界面动画 | 为导航、卡片、按钮等组件添加过渡动画,提升交互流畅感 | +| 中文翻译 | 将页面中残留的英文内容统一翻译为中文 | +| 重新排版 | 优化题目页、状态页、比赛页等核心页面的布局与可读性 | +| 状态单位显示 | 内存(KB / MB)和耗时(ms)自动补充单位,不再需要换算 | +| 对错符号替换 | 将题目前的 `AC` / `WA` 状态符号替换为直观的 ✓ / ✗ | +| 关键词替换 | 将特定关键词替换为更易理解的表述 | +| 去除多余提示 | 清除页面上重复出现的多余提示信息,减少干扰 | +| 链接按钮化 | 将方括号包裹的链接 `[文字](url)` 替换为样式统一的按钮 | +| 移除无用功能 | 隐藏平台上已下线或无法使用的功能入口,精简界面 | + +## 竞赛辅助 + +| 功能 | 说明 | +|------|------| +| ACM 排名查看与下载 | 在比赛页面直接查看 ACM 模式榜单,支持导出为文件 | +| 自动刷新比赛列表与排名 | 可设置刷新间隔,实时获取最新比赛与排名数据 | +| 界面倒计时 | 在比赛列表页面显示各比赛的精确剩余时间倒计时 | +| 一键打开所有题目 | 比赛题目列表页面一键在新标签页打开全部题目,节省逐个点击的时间 | +| [自动提交当年代码](./auto-handin) | 一键将历史已 AC 的代码批量重新提交到当年比赛,约 90% 概率获得当年标记 | +| 自动选择 O2 优化 | 代码提交界面自动勾选 O2 编译优化,无需每次手动选择 | +| 回放视频下载 | 在视频回放页面添加下载按钮,方便离线保存回放 | + +## 代码与提交 + +| 功能 | 说明 | +|------|------| +| [获取测试点数据](./get-data) | 提交出错后一键获取该测试点的输入数据,在本地复现并调试 | +| 代码比较 | 比较同一题目的不同提交版本,快速定位改动点 | +| 代码检查 | 提交前自动检测是否使用文件 IO、是否存在编译错误 | +| 自动刷新状态页 | 提交后状态页面结果自动实时刷新,无需手动刷新 | +| 复制测试样例 | 一键复制题面中的样例输入 / 输出到剪贴板 | +| 复制题目 / 题解内容 | 将题目或题解全文复制为纯文本或 Markdown 格式 | + +## 用户与账号 + +| 功能 | 说明 | +|------|------| +| [用户评分系统](./rating) | 基于 AC 提交率(0–1000 分)的彩色评分系统,在讨论区、排行榜等处显示 | +| [徽章 / Tag 系统](../community/badges) | 特定用户可获得专属徽章(Badge),显示于用户名旁边 | +| 自动跳转登录页 | 访问需要登录的页面时,自动重定向到登录界面 | +| 自动保存用户名密码 | 记住上次输入的登录信息,下次自动填充 | + +## 社区功能 + +| 功能 | 说明 | +|------|------| +| 讨论区 | 独立搭建的社区讨论服务,支持发帖、回复、@提及、图片上传 | +| 短消息 | 独立搭建的站内私信服务,支持用户间一对一私信 | +| [图床](./image-hosting) | 在讨论区 / 短消息输入框直接粘贴图片即可上传,支持永久存储 | + +## 其他功能 + +| 功能 | 说明 | +|------|------| +| 下载页面增强 | 在下载页面提供更多资源链接与说明 | +| 修复登录跳转 | 解决部分情况下登录后跳转失败的问题 | +| 学术模式 | 特殊学习模式(部分功能仍在开发中)| + diff --git a/features/rating.md b/features/rating.md new file mode 100644 index 0000000..53bca42 --- /dev/null +++ b/features/rating.md @@ -0,0 +1,71 @@ +# 用户评分 + +XMOJ-Script 内置了一套**用户评分系统**,用于直观展示用户在小明的OJ上的做题水平,并以彩色用户名的形式在社区中可见。 + +## 评分计算方式 + +> 注意:评分规则可能随版本迭代而调整。 + +用户评分基于**AC 提交率**(Accepted Rate)计算,公式如下: + +$$\text{评分} = \frac{\text{AC 提交数}}{\text{总提交数}} \times 1000$$ + +- **AC 提交数**:评测结果为 Accepted 的提交数量 +- **总提交数**:所有历史提交数量,**包含** WA、TLE、MLE、RE、CE 等各种结果,以及等待中(Pending)、已忽略(Ignored)等状态 + +**计算示例:** + +| 用户 | 总提交 | AC 提交 | 评分计算 | 最终评分 | +|------|--------|---------|---------|---------| +| 用户 A | 100 | 80 | 80/100 × 1000 | **800** 🔴 | +| 用户 B | 200 | 90 | 90/200 × 1000 | **450** 🟡 | +| 用户 C | 150 | 50 | 50/150 × 1000 | **333** 🟢 | +| 用户 D | 100 | 20 | 20/100 × 1000 | **200** 🔵 | + +::: info 客户端缓存 +评分数据**在浏览器本地缓存一天**。因此当天新增的提交记录不会立即影响评分,通常在次日访问时更新。 +::: + +## 评分颜色对照 + +根据评分高低,用户名将以不同颜色显示在讨论区、排行榜等处: + +| 颜色 | 评分区间 | 对应 AC 率 | 含义 | +|------|---------|-----------|------| +| 🔴 **红色** | ≥ 500 | 50% 及以上 | 优秀 — 提交质量高,命中率过半 | +| 🟡 **黄色** | 400 – 499 | 40%–49% | 良好 — 接近过半命中率 | +| 🟢 **绿色** | 300 – 399 | 30%–39% | 一般 — 仍有较大提升空间 | +| 🔵 **蓝色** | < 300 | 30% 以下 | 新手 — 建议多练习基础题目 | + +## 评分在哪里显示? + +彩色用户名会出现在以下位置: + +- **讨论区** — 帖子和回复的作者名旁 +- **排行榜** — 比赛排名列表中的用户名 +- **短消息** — 发件人 / 收件人的用户名 + +## 如何提高评分? + +评分由 AC 率决定,因此提高评分有两种方式: + +1. **提高 AC 数量** — 解决更多题目,提交更高质量的代码,减少调试性提交 +2. **减少无效提交** — 避免在没有充分思考的情况下反复提交,每次提交前先在本地测试 + +::: tip 小建议 +使用 XMOJ-Script 的[获取测试点数据](./get-data)功能,可以快速定位错误原因,减少「无意义 WA 提交」的次数,从而逐步提升评分。 +::: + +## 与洛谷「咕值」的比较 + +| 对比维度 | XMOJ-Script 评分 | 洛谷咕值 | +|---------|-----------------|---------| +| 计算依据 | 纯 AC 提交率 | 活跃度 + 社区贡献 + 练习频次 | +| 刷新频率 | 客户端每天缓存刷新 | 每日服务端计算 | +| 社区贡献 | **不计入** | 计入加分项 | +| 主观因素 | 极少 | 较多(活跃奖励等) | +| 适用平台 | 仅 XMOJ | 仅洛谷 | +| 主要价值 | 客观反映做题命中率 | 综合衡量平台参与程度 | + +XMOJ-Script 评分**相对纯粹**,不受社区活跃度和刷题频次影响,更能代表每次提交的平均质量。 + diff --git a/guide/installation.md b/guide/installation.md new file mode 100644 index 0000000..16b3dde --- /dev/null +++ b/guide/installation.md @@ -0,0 +1,122 @@ +# 安装指南 + +本页面将引导您完成 XMOJ-Script 的完整安装流程。 + +::: tip 快速安装(3 步) +1. 安装 [Tampermonkey](https://www.tampermonkey.net/) 浏览器扩展 +2. 在浏览器扩展管理页面开启**开发者模式**(Chrome / Edge 必须) +3. 点击 [安装 XMOJ-Script](https://github.com/XMOJ-Script-dev/XMOJ-Script/releases/latest/download/XMOJ.user.js) → 在弹出框中点击「安装」 +::: + +## 第一步:安装 Tampermonkey + +XMOJ-Script 是一个 **用户脚本(Userscript)**,需要借助 Tampermonkey 等用户脚本管理器来运行。 + +请根据您使用的浏览器,点击对应链接安装 Tampermonkey: + +| 浏览器 | 安装链接 | 备注 | +|--------|---------|------| +| Google Chrome | [Chrome 应用商店](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo) | 推荐 | +| Microsoft Edge | [Edge 加载项商店](https://microsoftedge.microsoft.com/addons/detail/tampermonkey/iikmkjmpaadaobahmlepeloendndfphd) | 推荐 | +| Mozilla Firefox | [Firefox 附加组件](https://addons.mozilla.org/firefox/addon/tampermonkey/) | 无需开发者模式 | +| Safari | [App Store](https://apps.apple.com/app/tampermonkey/id1482490089) | 需额外配置 | +| Opera | [Opera 插件商店](https://addons.opera.com/extensions/details/tampermonkey-beta/) | — | + +## 第二步:开启浏览器开发者模式 + +::: warning 重要:Chrome / Edge 必须完成此步骤 +由于 Google Chrome Manifest V3 政策,Tampermonkey 必须在**开发者模式**下才能完整运行用户脚本。**跳过此步骤会导致脚本无法工作。** + +详见 [Tampermonkey 官方说明 → Q209](https://www.tampermonkey.net/faq.php#Q209) +::: + +### Google Chrome + +1. 地址栏输入 `chrome://extensions` 并按 Enter +2. 找到页面**右上角**的「**开发者模式**」(Developer mode)开关 +3. 将其**打开**(开关变蓝色) + + ![Chrome 开发者模式](https://www.tampermonkey.net/images/faq/dev_mode_chrome.png) + +4. 刷新页面后生效 + +### Microsoft Edge + +1. 地址栏输入 `edge://extensions` 并按 Enter +2. 找到页面**左下角**的「**开发人员模式**」开关 +3. 将其**打开** + + ![Edge 开发者模式](https://www.tampermonkey.net/images/faq/dev_mode_edge.png) + +### Mozilla Firefox + +Firefox **无需**开启开发者模式,安装 Tampermonkey 后即可直接跳到第三步。 + +### Safari(macOS) + +1. 打开 Safari →「偏好设置」→「高级」选项卡 +2. 勾选「**在菜单栏中显示"开发"菜单**」 +3. 菜单栏出现「开发」菜单后,点击「**允许未签名的扩展**」 +4. 在 Safari 扩展列表中**启用** Tampermonkey + +::: details 如何确认开发者模式已生效? +点击浏览器右上角 Tampermonkey 图标 → **控制面板**。若页面正常打开且不显示「扩展无法完整运行」等警告横幅,说明开发者模式已正确配置。 +::: + +## 第三步:安装 XMOJ-Script + +⬇️ 安装 XMOJ-Script(最新版) + +点击上方按钮后,Tampermonkey 将弹出安装确认页面,确认信息无误后点击「**安装**」即可。 + +::: info 备用安装渠道 +- [ScriptCat 镜像站](https://scriptcat.org/zh-CN/script-show-page/1500/):国内访问更快 +- [GitHub Releases](https://github.com/XMOJ-Script-dev/XMOJ-Script/releases/latest):手动下载 `XMOJ.user.js` 后拖入 Tampermonkey 控制面板 +::: + +## 第四步:验证安装 + +1. 打开 [www.xmoj.tech](https://www.xmoj.tech) +2. 若页面样式明显变化(导航栏更新、Bootstrap 风格按钮),说明脚本已运行 +3. 登录后点击右上角用户名,若菜单中出现「**插件设置**」,则安装完成 ✅ + +## 更新脚本 + +XMOJ-Script 支持**自动更新**。Tampermonkey 会定期检查最新版并静默更新。 + +手动更新步骤: + +1. 点击 Tampermonkey 图标 →「**控制面板**」 +2. 找到 XMOJ-Script 条目,点击右侧「**更新**」按钮(或「检查更新」) + +## 常见问题 + +### 安装后访问 xmoj.tech 没有变化? + +按以下顺序逐项排查: + +| 检查项 | 说明 | +|--------|------| +| Tampermonkey 是否已启用 | 扩展图标不应显示灰色或带叉 | +| XMOJ-Script 脚本是否已启用 | 控制面板中脚本开关应为打开状态 | +| 开发者模式是否已开启 | Chrome / Edge 必须,见第二步 | +| 是否访问了正确的域名 | 确认是 `xmoj.tech` 而非其他域名 | +| 尝试硬刷新 | Ctrl+Shift+R(macOS:+Shift+R)| + +### 提示「此扩展程序未经 Chrome 网上应用店验证」? + +这是 Chrome 在启用开发者模式后对所有通过非商店途径安装的扩展显示的**标准安全提示**,属于正常现象。Tampermonkey 本身已通过 Chrome 商店审核,`.user.js` 是用户脚本的标准格式,不影响安全性。 + +### 安装页面显示乱码或加载失败? + +可能是网络问题导致 GitHub 资源访问缓慢。请: +- 尝试通过 [ScriptCat 镜像](https://scriptcat.org/zh-CN/script-show-page/1500/) 安装 +- 或稍后重试主安装链接 + +### 如何完全卸载脚本? + +1. 打开 Tampermonkey 控制面板 +2. 找到 XMOJ-Script 条目 +3. 点击右侧删除(垃圾桶)图标 +4. 确认删除即可,不影响浏览器本身 + diff --git a/index.md b/index.md new file mode 100644 index 0000000..ea73f8a --- /dev/null +++ b/index.md @@ -0,0 +1,64 @@ +--- +layout: home + +hero: + name: "XMOJ-Script" + text: "小明的OJ 增强脚本" + tagline: 功能强大的浏览器用户脚本,为小明的OJ带来全方位的界面优化与增强功能。支持 Chrome、Edge、Firefox、Safari。 + image: + src: /demo.png + alt: XMOJ-Script 演示截图 + actions: + - theme: brand + text: ⚡ 立即安装 + link: /guide/installation + - theme: alt + text: 📖 功能介绍 + link: /features/ + - theme: alt + text: GitHub + link: https://github.com/XMOJ-Script-dev/XMOJ-Script + +features: + - icon: 🏆 + title: 用户评分系统 + details: 基于 AC 提交率实时计算评分(0–1000),配合红/黄/绿/蓝彩色用户名,在讨论区、排行榜直观展示用户实力。 + link: /features/rating + linkText: 了解评分机制 + - icon: 🖼️ + title: 图床 & 图片上传 + details: 在讨论区或短消息输入框直接 Ctrl+V 粘贴截图即可上传,支持永久存储与 CDN 代理,无需第三方图床。 + link: /features/image-hosting + linkText: 查看使用方法 + - icon: 📊 + title: 获取测试点数据 + details: 提交出错时一键获取该测试点的输入数据,在本地复现错误,大幅加速调试流程,提升 AC 效率。 + link: /features/get-data + linkText: 查看使用方法 + - icon: 🔄 + title: 自动提交当年代码 + details: 在比赛中一键将历史已 AC 的代码批量重新提交,节省操作时间。适用于需要提交当年代码的考核场景。 + link: /features/auto-handin + linkText: 查看使用方法 + - icon: 🌙 + title: 暗色模式 + details: 内置暗色主题,支持自动跟随系统设置。使用早期应用技术规避 FOUC,夜间使用眼睛更舒适。 + - icon: 🎨 + title: 界面全面美化 + details: 全面采用 Bootstrap 5 样式库,重新排版布局、添加动画效果、中英互译、统一按钮风格,提供更现代的 OJ 使用体验。 + - icon: 💬 + title: 短消息在线看 + details: 独立网页应用,无需安装脚本,在任意设备(含 iOS Safari)收发 XMOJ 站内短消息,支持图片、搜索、深色模式。 + link: /apps/messages + linkText: 立即使用 + - icon: 🖥️ + title: ELXMOJ 桌面客户端 + details: 基于 Electron 的原生桌面应用,自动注入脚本,无需配置 Tampermonkey,支持 Windows / macOS / Linux。 + link: /apps/elxmoj + linkText: 下载客户端 + - icon: 🏅 + title: 比赛辅助工具集 + details: ACM 排名查看与导出、自动刷新比赛列表与排名、倒计时显示、一键打开所有题目、O2 优化自动勾选等。 + link: /features/ + linkText: 查看全部功能 +--- diff --git a/legal/eula.md b/legal/eula.md new file mode 100644 index 0000000..6aa7cf1 --- /dev/null +++ b/legal/eula.md @@ -0,0 +1,83 @@ +# 用户协议 + +### 小明的OJ讨论区用户服务协议 + +欢迎阅读《小明的OJ讨论区用户服务协议》(以下简称"本协议")。本协议阐述之条款和条件适用于您(以下简称"用户")使用小明的OJ讨论区的各种产品和服务。 + +#### 1. 服务协议的确认 + +1.1 小明的OJ增强脚本开发组同意按照本协议的规定及其不时发布的操作规则提供基于互联网移动网的小明的OJ讨论区、小明的OJ增强脚本开发组官方网站(web.xmoj-bbs.tech)等相关服务(以下简称"小明的OJ增强脚本开发组服务")。 + +1.2 小明的OJ增强脚本开发组服务使用人(以下简称"用户")应当基于了解本协议全部内容、在独立思考的基础上认可、同意本协议的全部条款并按照页面上的提示完成全部的注册程序,用户的注册、登录、使用等行为将视为完全接受本协议及小明的OJ增强脚本开发组公示的各项规则、规范。 + +1.3 小明的OJ增强脚本开发组享有对小明的OJ增强脚本开发组小明的OJ讨论区、小明的OJ增强脚本开发组官方网站上一切活动的监督、提示、检查、纠正等权利。 + +#### 2. 服务内容 + +2.1 小明的OJ增强脚本开发组服务的具体内容由小明的OJ增强脚本开发组根据实际情况提供,包括但不限于授权用户通过其帐号上传、搜索并向互相关联的用户推送相关信息、授权用户对其进行收录、分享等,小明的OJ增强脚本开发组有权对其提供的服务或产品形态进行升级或其他调整,均以小明的OJ讨论区网站内容更新的方式通知用户,不单独通知用户。 + +2.2 小明的OJ增强脚本开发组提供的小明的OJ增强脚本开发组服务中可能包括广告,用户同意在使用过程中显示小明的OJ增强脚本开发组和第三方供应商、合作伙伴提供的广告。 + +2.3 小明的OJ增强脚本开发组仅提供与小明的OJ增强脚本开发组服务相关的技术服务等,除此之外与相关网络服务有关的设备及所需费用均应由用户自行负担。 + +#### 3. 服务变更、中断或终止 + +3.1 鉴于网络服务的特殊性,用户同意,小明的OJ增强脚本开发组有权随时中断或终止部分或全部小明的OJ增强脚本开发组服务,小明的OJ增强脚本开发组将尽可能及时以合理方式通知用户,并尽可能在第一时间对此进行修复。但对因此导致用户不能发送和接受阅读信息、或接发错信息,小明的OJ增强脚本开发组不承担任何责任。 + +3.2 用户理解,小明的OJ增强脚本开发组需要定期或不定期地对平台或相关设备进行检修和维护,如因此类情况而造成服务在合理期间内的中断,小明的OJ增强脚本开发组将尽可能事先通知,但无需为此承担任何责任。 + +3.3 用户提供的个人资料不真实、用户违反法律法规国家政策或本协议规定的使用规则,小明的OJ增强脚本开发组有权随时中断或终止向用户提供本协议项下的服务,而无需对用户或任何第三方承担任何责任。 + +#### 4. 使用规则 + +4.1 用户在申请注册服务时,必须向小明的OJ提供准确的主体资料,如主体资料有任何变动,必须及时更新。 + +4.2 用户注册成功后,将获得一个小明的OJ账号及密码,该用户帐号和密码由用户负责保管;用户应当对该用户帐号所有行为负相关法律责任。 + +用户在使用小明的OJ增强脚本开发组服务过程中,必须遵循以下原则: + +- 遵守中国有关的法律和法规 +- 不得为任何非法目的而使用小明的OJ增强脚本开发组服务 +- 遵守所有与网络服务有关的网络协议、规定和程序 +- 不得利用小明的OJ和小明的OJ增强脚本开发组的服务系统进行任何可能对互联网的正常运转造成不利影响的行为 +- 不得利用小明的OJ增强脚本开发组网络服务系统进行任何不利于小明的OJ增强脚本开发组和小明的OJ系统的行为 + +4.3 用户不得使用小明的OJ增强脚本开发组服务制作、上传、发送、传播敏感信息和违反国家法律制度的信息,包括但不限于:反对宪法所确定的基本原则的;危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;损害国家荣誉和利益的;煽动民族仇恨、民族歧视,破坏民族团结的;散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;侮辱或者诽谤他人,侵害他人合法权益的;含有法律、行政法规禁止的其他内容的。 + +4.4 用户同意在任何情况下不使用其他用户的帐号或密码。 + +4.5 用户有权更改、删除在小明的OJ增强脚本开发组服务中的个人资料、注册信息及传送内容等,但需承担相关风险。 + +4.6 如因用户违反本协议中的任何条款,小明的OJ增强脚本开发组有权依据本协议终止对违约用户提供服务。 + +4.7 如用户注册帐号后长期不登录,小明的OJ增强脚本开发组有权回收该帐号,以免造成资源浪费。 + +#### 5. 知识产权 + +5.1 小明的OJ增强脚本开发组提供服务中所包含的任何文本、图片、标识、音频、视频资料均受著作权、商标权、专利权及其他财产权法律的保护。 + +5.2 未经相关权利人和小明的OJ增强脚本开发组的同意,上述资料均不得以任何方式被展示于其他任何第三方平台或被用于任何商业目的。 + +#### 6. 隐私保护 + +6.1 保护用户隐私和个人数据是小明的OJ增强脚本开发组的一项基本制度,小明的OJ增强脚本开发组将采取各种制度、安全技术和程序等措施来保护用户隐私和个人数据不被未经授权的访问、使用或泄漏,并保证不会将单个用户的注册资料向除合作单位以外的第三方公开或用于任何非法的用途,但法律要求、政府要求、维护公共利益或维护合法权益等情况除外。 + +6.2 用户在使用服务的过程中,需要提供一些必要的信息(如邮箱等),小明的OJ增强脚本开发组承诺将采取措施保护用户的个人信息安全。 + +#### 7. 免责声明 + +7.1 用户在使用小明的OJ增强脚本开发组服务的过程中应遵守国家法律法规及政策规定,对其所制作、上传、发送、传播的信息和内容承担任何法律责任,与小明的OJ增强脚本开发组无关。 + +7.2 小明的OJ增强脚本开发组提供服务中所包含的任何文本、图片、标识、音频、视频资料均为教学用途,不涉及任何实体物品的商业活动。 + +7.3 用户违反本协议的规定,导致或产生的任何第三方主张的任何索赔、要求或损失,包括合理的律师费,用户同意赔偿小明的OJ增强脚本开发组,使之免受损害。 + +#### 8. 其他条款 + +8.1 小明的OJ增强脚本开发组有权随时修改本协议的任何条款,一旦本协议内容发生变动,将在平台上公布修改后的协议内容。用户不同意上述修改内容,有权选择停止使用服务,继续使用则视为接受修改。 + +8.2 本协议所定的任何条款无论因何种原因部分或全部无效或不具有执行力,本协议的其余条款仍应有效并具备约束力。 + +8.3 本协议的订立、执行和解释及纠纷的解决均应适用中华人民共和国法律并受中华人民共和国法院管辖。 + +8.4 本协议的版权归小明的OJ增强脚本开发组所有,本协议各项条款内容的最终解释权及修改权归小明的OJ增强脚本开发组所有。 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ed22139 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3015 @@ +{ + "name": "xmoj-script-docs", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "xmoj-script-docs", + "version": "1.0.0", + "devDependencies": { + "markdown-it-mathjax3": "^4.3.2", + "vitepress": "1.6.3" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.17.0.tgz", + "integrity": "sha512-nuhHZdTiCtRzJEe9VSNzyqE9cOQMt01UWBzymFnjbgwrxxZpbGHQde6Oa/y9zyspTCjbUtb7Q5HQek1CLiLyeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.51.0.tgz", + "integrity": "sha512-PKrKlIla1U2J7mFcIQn6N3pWP4oySmkxShnbbDsj/H7818gKbET5KsUwsVoNjWIxHKTJMCTcQ7ekAJ8Ea23NMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.51.0.tgz", + "integrity": "sha512-U+HCY1K16Km91pIRL1kN6bW6BbGFAF/WhkRSCx4wyl1aFpbrlhSFQs/dAwWbmyBiHWwVWhl7stWHQ1pum5EfMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.51.0.tgz", + "integrity": "sha512-YPJ3dEuZLCRp846Az94t6Z2gwSNRazP+SmBco7p6SCa4fYrtIE820PDXYZshbNrj2Z8Qfbmv7BQ1Lecl5L3G/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.51.0.tgz", + "integrity": "sha512-/gEwLlR7fQ7YjOW+ADRZ0NxLDtpTC61FSzlZ01Gdl1kTJfU0Rq3Y/TYqwxGxlQGcUiXtGzrpjxXWh3Y0TZD6NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.51.0.tgz", + "integrity": "sha512-nRwUN1Y2cKyOAFZyIBagkEfZSIhP05nWhT4Rjwl84lcjECssYggftrAODrZ4leakXxSGjhxs/AdaAFEIBqwVFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.51.0.tgz", + "integrity": "sha512-pybzYCG7VoQKppo+z5iZOKpW8XqtFxhsAIRgEaNboCnfypKukiBHJAwB+pmr7vMZXBsOHwklGYWwCG82e8qshA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.51.0.tgz", + "integrity": "sha512-DWVIlj6RqcvdhwP0gBU9OpOQPnHdcAk9jlT+z8rsNb2+liWv4eUlfQZ7saGBraFsnygEHD3PtdppIHvqwBAb5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.51.0.tgz", + "integrity": "sha512-bA25s12iUDJi/X8M7tWlPRT8GeOhls/yDbdoUqinz27lNqsOlcM1UrAxIKdIZ6lm3sXit+ewPIz1pS2x6rXu8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.51.0.tgz", + "integrity": "sha512-zj+RcE5e0NE0/ew6oEOTgOplPHry+w2oi7h0Y87lhdq4E0d7xLS31KVB8kKfCGkrG7AYtZvrcyvLOKS5d0no4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.51.0.tgz", + "integrity": "sha512-/HDgccfye1Rq3bPxaSCsvSEBHzSMmtpM9ZRGRtAuC62Cv+ql/76IWnxjGTDXtqIJ+/j7ZlFYAzq9fkp95wF2SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.51.0.tgz", + "integrity": "sha512-nJdW+WBwGlXWMJbxxB7/AJPvNq0lLJSudXmIQCJbmH8jsOXQhRpAtoCD4ceLyJKv3ze9JbQu4Gqu5JDLckuFcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.51.0.tgz", + "integrity": "sha512-bsBgRI/1h1mjS3eCyfGau78yGZVmiDLmT1aU6dMnk75/T0SgKqnSKNpQ53xKoDYVChGDcNnpHXWpoUSo8MH1+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.51.0.tgz", + "integrity": "sha512-zPrIDVPpmKWgrjmWOqpqrhqAhNjvVkjoj+mqw2NBPxEOuKNzP0H+Qz5NJLLTOepBVj1UFedFaF3AUgxLsB9ukQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "dev": true, + "license": "MIT", + "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" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.79", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.79.tgz", + "integrity": "sha512-aNyO7Fd1qej9oQfIyohYFRv0lhQLaZ+6UkK1c1qwax0MDPUOZOdq65MlU500kow97pD/W+b2u1And3e25eE24Q==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.33.tgz", + "integrity": "sha512-3PZLQwFw4Za3TC8t0FvTy3wI16Kt+pmwcgNZca4Pj9iWL2E72a/gZlpBtAJvEdDMdCxdG/qq0C7PN0bsJuv0Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.33", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.33.tgz", + "integrity": "sha512-PXq0yrfCLzzL07rbXO4awtXY1Z06LG2eu6Adg3RJFa/j3Cii217XxxLXG22N330gw7GmALCY0Z8RgXEviwgpjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.33", + "@vue/shared": "3.5.33" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.33.tgz", + "integrity": "sha512-UTUvRO9cY+rROrx/pvN9P5Z7FgA6QGfokUCfhQE4EnmUj3rVnK+CHI0LsEO1pg+I7//iRYMUfcNcCPe7tg0CoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.33", + "@vue/compiler-dom": "3.5.33", + "@vue/compiler-ssr": "3.5.33", + "@vue/shared": "3.5.33", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.10", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.33.tgz", + "integrity": "sha512-IErjYdnj1qIupG5xxiVIYiiRvDhGWV4zuh/RCrwfYpuL+HWQzeU6lCk/nF9r7olWMnjKxCAkOctT2qFWFkzb1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.33", + "@vue/shared": "3.5.33" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.33.tgz", + "integrity": "sha512-p8UfIqyIhb0rYGlSgSBV+lPhF2iUSBcRy7enhTmPqKWadHy9kcOFYF1AejYBP9P+avnd3OBbD49DU4pLWX/94A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.33" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.33.tgz", + "integrity": "sha512-UpFF45RI9//a7rvq7RdOQblb4tup7hHG9QsmIrxkFQLzQ7R8/iNQ5LE15NhLZ1/WcHMU2b47u6P33CPUelHyIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.33", + "@vue/shared": "3.5.33" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.33.tgz", + "integrity": "sha512-IOxMsAOwquhfITgmOgaPYl7/j8gKUxUFoflRc+u4LxyD3+783xne8vNta1PONVCvCV9A0w7hkyEepINDqfO0tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.33", + "@vue/runtime-core": "3.5.33", + "@vue/shared": "3.5.33", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.33.tgz", + "integrity": "sha512-0xylq/8/h44lVG0pZFknv1XIdEgymq2E9n59uTWJBG+dIgiT0TMCSsxrN7nO16Z0MU0MPjFcguBbZV8Itk52Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.33", + "@vue/shared": "3.5.33" + }, + "peerDependencies": { + "vue": "3.5.33" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.33.tgz", + "integrity": "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "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 + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.9.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.10.tgz", + "integrity": "sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6" + } + }, + "node_modules/algoliasearch": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.51.0.tgz", + "integrity": "sha512-u3XS8HaTzt5YN90KPsOXMRjYJUMVD1dtr6yi4NXQluMbZ5IjQNBu1MEabdAxFhYtEuexqomPMSmRIhQJUd3QSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.17.0", + "@algolia/client-abtesting": "5.51.0", + "@algolia/client-analytics": "5.51.0", + "@algolia/client-common": "5.51.0", + "@algolia/client-insights": "5.51.0", + "@algolia/client-personalization": "5.51.0", + "@algolia/client-query-suggestions": "5.51.0", + "@algolia/client-search": "5.51.0", + "@algolia/ingestion": "1.51.0", + "@algolia/monitoring": "1.51.0", + "@algolia/recommend": "5.51.0", + "@algolia/requester-browser-xhr": "5.51.0", + "@algolia/requester-fetch": "5.51.0", + "@algolia/requester-node-http": "5.51.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", + "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "css-select": "^4.3.0", + "css-what": "^6.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.3.1", + "domutils": "^2.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "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" + } + }, + "node_modules/escape-goat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/focus-trap": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", + "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.4.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/juice": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/juice/-/juice-8.1.0.tgz", + "integrity": "sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio": "1.0.0-rc.10", + "commander": "^6.1.0", + "mensch": "^0.3.4", + "slick": "^1.12.2", + "web-resource-inliner": "^6.0.1" + }, + "bin": { + "juice": "bin/juice" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it-mathjax3": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz", + "integrity": "sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "juice": "^8.0.0", + "mathjax-full": "^3.2.0" + } + }, + "node_modules/mathjax-full": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.1.tgz", + "integrity": "sha512-aUz9o16MGZdeiIBwZjAfUBTiJb7LRqzZEl1YOZ8zQMGYIyh1/nxRebxKxjDe9L+xcZCr2OHdzoFBMcd6VnLv9Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esm": "^3.2.25", + "mhchemparser": "^4.1.0", + "mj-context-menu": "^0.6.1", + "speech-rule-engine": "^4.0.6" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mensch": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", + "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/mhchemparser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz", + "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mj-context-menu": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz", + "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.29.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.1.tgz", + "integrity": "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/slick": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", + "dev": true, + "license": "MIT (http://mootools.net/license.txt)", + "engines": { + "node": "*" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speech-rule-engine": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.1.4.tgz", + "integrity": "sha512-i/VCLG1fvRc95pMHRqG4aQNscv+9aIsqA2oI7ZQS51sTdUcDHYX6cpT8/tqZ+enjs1tKVwbRBWgxut9SWn+f9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xmldom/xmldom": "0.9.10", + "commander": "13.1.0", + "wicked-good-xpath": "1.3.0" + }, + "bin": { + "sre": "bin/sre" + } + }, + "node_modules/speech-rule-engine/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/valid-data-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", + "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.3.tgz", + "integrity": "sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.33.tgz", + "integrity": "sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.33", + "@vue/compiler-sfc": "3.5.33", + "@vue/runtime-dom": "3.5.33", + "@vue/server-renderer": "3.5.33", + "@vue/shared": "3.5.33" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/web-resource-inliner": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", + "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "escape-goat": "^3.0.0", + "htmlparser2": "^5.0.0", + "mime": "^2.4.6", + "node-fetch": "^2.6.0", + "valid-data-url": "^3.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web-resource-inliner/node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/fb55/htmlparser2?sponsor=1" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wicked-good-xpath": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz", + "integrity": "sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d579994 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "xmoj-script-docs", + "version": "1.0.0", + "private": true, + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + }, + "devDependencies": { + "markdown-it-mathjax3": "^4.3.2", + "vitepress": "1.6.3" + } +} diff --git a/Writerside/images/badge.png b/public/badge.png similarity index 100% rename from Writerside/images/badge.png rename to public/badge.png diff --git a/Writerside/images/demo.png b/public/demo.png similarity index 100% rename from Writerside/images/demo.png rename to public/demo.png diff --git a/Writerside/images/logo.png b/public/logo.png similarity index 100% rename from Writerside/images/logo.png rename to public/logo.png diff --git a/qa/discussion.md b/qa/discussion.md new file mode 100644 index 0000000..d2d64b1 --- /dev/null +++ b/qa/discussion.md @@ -0,0 +1,96 @@ +# 常见问题 + +## 脚本安装问题 + +安装相关问题请优先查阅[安装指南 → 常见问题](../guide/installation#常见问题)章节,涵盖了安装后无效果、开发者模式等最常见情况。 + +--- + +## 讨论区 / 短消息问题 + +### JSON 解析错误 + +**错误提示:** +``` +JSON解析错误:SyntaxError: Unexpected token '<', "F12
打开浏览器开发者工具,切换到「**Console**」选项卡 +2. 复制完整的错误信息(包括错误类型、文件名和行号) +3. 在 [GitHub Issues](https://github.com/XMOJ-Script-dev/XMOJ-Script/issues) 中搜索是否有相同问题 +4. 如无已有 Issue,[新建 Issue](https://github.com/XMOJ-Script-dev/XMOJ-Script/issues/new/choose) 并提供: + - 错误信息完整截图 + - 浏览器名称与版本 + - Tampermonkey 版本 + - XMOJ-Script 版本 + - 触发错误的操作步骤 + +--- + +## 功能请求 + +有想要的新功能?请在 [GitHub Issues](https://github.com/XMOJ-Script-dev/XMOJ-Script/issues/new/choose) 提交 Feature Request,描述你的使用场景和期望行为。 + +> 在提交前请先搜索一下,避免重复。 + +--- + +## 其他问题 + +如遇文档中未提及的问题,欢迎在以下渠道寻求帮助: + +- 💬 [讨论区](https://www.xmoj-bbs.me) — 适合日常使用问题和经验交流 +- 🐛 [GitHub Issues](https://github.com/XMOJ-Script-dev/XMOJ-Script/issues) — 适合 Bug 报告和功能建议 +