diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index d54802d..2a9849d 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -7,6 +7,7 @@ on: - 'v*' pull_request: branches: [ main ] + workflow_dispatch: jobs: build: diff --git a/.forgejo/workflows/docs.yml b/.forgejo/workflows/docs.yml new file mode 100644 index 0000000..9f9c5bc --- /dev/null +++ b/.forgejo/workflows/docs.yml @@ -0,0 +1,42 @@ +name: Deploy docs + +on: + push: + branches: + - main + paths: + - docs/** + - .forgejo/workflows/docs.yml + workflow_dispatch: + +jobs: + deploy: + runs-on: docker + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: https://github.com/pnpm/action-setup@v4 + with: + version: latest + + - name: Build + run: | + cd docs + pnpm install + pnpm run docs:build + + - name: Deploy to Remote + run: | + if [ ! -d ~/.ssh ]; then + mkdir -p ~/.ssh + fi + chmod 700 ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + echo "${{ secrets.SSH_KNOWN_HOSTS }}" >> ~/.ssh/known_hosts + chmod 644 ~/.ssh/known_hosts + dnf install -y rsync + rsync -av --delete -e "ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=yes -p ${{ secrets.SSH_PORT }}" docs/.vitepress/dist/ ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }}:${{ secrets.WEB_ROOT }}/sub-cli + rm -rf ~/.ssh diff --git a/README.md b/README.md index e1aff43..ecd5b55 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ See [releases](https://git.owu.one/starset-mirror/sub-cli/releases) for binaries ## Usage ```shell -./sub-cli --help +./sub-cli help ``` ## License diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..20647d2 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,5 @@ +# Vitepress GitIgnore + +.vitepress/cache/ +.vitepress/dist/ +node_modules/ diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 0000000..b9be037 --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,57 @@ +import { defineConfig } from 'vitepress' +import { zhHansThemeConfig } from '../zh-Hans/config' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Sub-CLI", + description: "The Subtitle Manipulation CLI", + locales: { + root: { + label: 'English', + lang: 'en' + }, + 'zh-Hans': { + label: '简体中文', + lang: 'zh-Hans', + themeConfig: zhHansThemeConfig + }, + }, + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Home', link: '/' }, + ], + + sidebar: [ + { + text: 'Introduction', + items: [ + { text: 'Getting Started', link: '/getting-started' }, + { text: 'Installation Guide', link: '/installation' } + ] + }, + { + text: 'Usage', + items: [ + { text: 'Command Examples', link: '/examples' }, + { text: 'Command Reference', link: '/commands' } + ] + }, + { + text: 'Project', + items: [ + { text: 'Provide Feedback', link: '/feedback' } + ] + } + ], + + editLink: { + pattern: 'https://git.owu.one/wholetrans/sub-cli/edit/main/docs/:path', + text: 'Edit on Owu Git' + }, + + socialLinks: [ + { icon: 'forgejo', link: 'https://git.owu.one/wholetrans/sub-cli' } + ] + }, +}) diff --git a/docs/commands.md b/docs/commands.md new file mode 100644 index 0000000..6198ac5 --- /dev/null +++ b/docs/commands.md @@ -0,0 +1,228 @@ +--- +title: Command Reference +description: Detailed documentation for all Sub-CLI commands +--- + +# Command Reference + +This page provides detailed documentation for all available Sub-CLI commands, their options, and usage. + +## Global Options + +These options are available across all Sub-CLI commands: + +``` +help Display help information for a command +``` + +## convert + +The `convert` command transforms subtitle files between different formats, preserving as much information as possible while adapting to the target format's capabilities. + +### Usage + +``` +sub-cli convert +``` + +### Arguments + +| Argument | Description | +|----------|-------------| +| `` | Path to the source subtitle file | +| `` | Path to the target subtitle file to be created | + +### Supported Format Conversions + +| Source Format | Target Format | Notes | +|---------------|---------------|-------| +| SRT (.srt) | SRT, VTT, LRC, TXT | - | +| VTT (.vtt) | SRT, VTT, LRC, TXT | - | +| LRC (.lrc) | SRT, VTT, LRC, TXT | - | +| TXT (.txt) | — | TXT can only be a target format, not a source format | + +### Feature Preservation + +The conversion process aims to preserve as many features as possible, but some format-specific features may be lost or adapted: + +#### SRT Features +- **Preserved**: Text content, timeline (start and end times), basic styling (bold, italic, underline) +- **Lost in some formats**: HTML styling tags when converting to formats like LRC or TXT + +#### VTT Features +- **Preserved**: Text content, timeline, title, CSS styling (when target supports it) +- **Lost in some formats**: Positioning, alignment, and advanced styling when converting to SRT or LRC + +#### LRC Features +- **Preserved**: Text content, timeline, metadata (title, artist, album) +- **Structure limitation**: LRC only supports start timestamps (no end timestamps), unlike SRT and VTT +- **Adapted when converting from LRC**: When converting to SRT/VTT, the single timestamp per line in LRC is converted to start+end time pairs. End times are calculated by: + - Using the next entry's start time as the current entry's end time + - For the last entry, a default duration (typically 3-5 seconds) is added to create an end time +- **Lost when converting to LRC**: When other formats are converted to LRC, any end timestamp information is discarded + +#### TXT Features +- **Output only**: Plain text format contains only the text content without any timing or styling + +### Technical Details + +The converter uses an intermediate representation that attempts to preserve as much format-specific data as possible. The conversion happens in two steps: +1. Convert source format to intermediate representation +2. Convert intermediate representation to target format + +This approach minimizes information loss and ensures the most accurate conversion possible. + +### Examples + +```bash +# Convert from SRT to WebVTT +sub-cli convert subtitles.srt subtitles.vtt + +# Convert from LRC to plain text (strips timing info) +sub-cli convert lyrics.lrc transcript.txt + +# Convert from WebVTT to SRT +sub-cli convert subtitles.vtt subtitles.srt +``` + +## sync + +The `sync` command applies the timing/timestamps from a source subtitle file to a target subtitle file while preserving the target file's content. + +### Usage + +``` +sub-cli sync +``` + +### Arguments + +| Argument | Description | +|----------|-------------| +| `` | Path to the source subtitle file with the reference timeline | +| `` | Path to the target subtitle file to be synchronized | + +### Supported Formats + +Currently, synchronization only works between files of the same format: +- SRT to SRT +- LRC to LRC + +### Behavior Details + +#### For LRC Files: + +- **When entry counts match**: The source timeline is directly applied to the target content. +- **When entry counts differ**: The source timeline is scaled to match the target content using linear interpolation. +- **Preserved from target**: All content text and metadata (artist, title, etc.). +- **Modified in target**: Only timestamps are updated. + +#### For SRT Files: + +- **When entry counts match**: Both start and end times from the source are directly applied to the target entries. +- **When entry counts differ**: A scaled approach is used: + - Start times are taken from proportionally matched source entries + - End times are calculated based on source entry durations + - The timing relationship between entries is preserved +- **Preserved from target**: All subtitle text content. +- **Modified in target**: Timestamps are updated and entry numbers are standardized (sequential from 1). + +### Edge Cases + +- If the source file has no timing information, the target remains unchanged. +- If source duration calculations result in negative values, a default 3-second duration is applied. +- The command displays a warning when entry counts differ but proceeds with the scaled synchronization. +- Format-specific features from the target file (such as styling, alignment, metadata) are preserved. The sync operation only replaces timestamps, not any other formatting or content features. + +### Examples + +```bash +# Synchronize an SRT file using another SRT file as reference +sub-cli sync reference.srt target.srt + +# Synchronize an LRC file using another LRC file as reference +sub-cli sync reference.lrc target.lrc +``` + +## fmt + +The `fmt` command standardizes and formats subtitle files according to their format-specific conventions. + +### Usage + +``` +sub-cli fmt +``` + +### Arguments + +| Argument | Description | +|----------|-------------| +| `` | Path to the subtitle file to format | + +### Supported Formats + +| Format | Extension | Formatting Actions | +|--------|-----------|-------------------| +| SRT | `.srt` | Standardizes entry numbering (sequential from 1)
Formats timestamps in `00:00:00,000` format
Ensures proper spacing between entries | +| LRC | `.lrc` | Organizes metadata tags
Standardizes timestamp format `[mm:ss.xx]`
Ensures proper content alignment | +| VTT | `.vtt` | Validates WEBVTT header
Standardizes cue identifiers
Formats timestamps in `00:00:00.000` format
Organizes styling information | + +### Format-Specific Details + +#### SRT Formatting +The formatter parses the SRT file, extracts all entries, ensures sequential numbering from 1, and writes the file back with consistent formatting. This preserves all content and timing information while standardizing the structure. + +#### LRC Formatting +For LRC files, the formatter preserves all metadata and content but standardizes the format of timestamps and ensures proper alignment. This makes the file easier to read and more compatible with different LRC parsers. + +#### VTT Formatting +When formatting WebVTT files, the command ensures proper header format, sequential cue identifiers, and standard timestamp formatting. All VTT-specific features like styling, positioning, and comments are preserved. + +### Examples + +```bash +# Format an SRT file +sub-cli fmt subtitles.srt + +# Format an LRC file +sub-cli fmt lyrics.lrc + +# Format a VTT file +sub-cli fmt subtitles.vtt +``` + +## version + +Displays the current version of Sub-CLI. + +### Usage + +``` +sub-cli version +``` + +## help + +Displays general help information or help for a specific command. + +### Usage + +``` +sub-cli help [command] +``` + +### Arguments + +| Argument | Description | +|----------|-------------| +| `[command]` | (Optional) Specific command to get help for | + +### Examples + +```bash +# Display general help +sub-cli help + +# Display help for the convert command +sub-cli help convert diff --git a/docs/examples.md b/docs/examples.md new file mode 100644 index 0000000..dd8fde9 --- /dev/null +++ b/docs/examples.md @@ -0,0 +1,63 @@ +--- +title: Command Examples +description: Practical examples of Sub-CLI commands in action +--- + +# Command Examples + +This page provides practical examples of Sub-CLI commands for common subtitle manipulation tasks. + +## Format Conversion Examples + +Convert between various subtitle formats: + +```bash +# Convert from SRT to WebVTT +sub-cli convert subtitles.srt subtitles.vtt + +# Convert from LRC to SRT +sub-cli convert lyrics.lrc subtitles.srt + +# Convert from WebVTT to plain text (stripping timestamps) +sub-cli convert subtitles.vtt plain_text.txt + +# Convert from SRT to LRC +sub-cli convert subtitles.srt lyrics.lrc +``` + +## Synchronization Examples + +Synchronize timelines between subtitle files: + +```bash +# Synchronize an SRT file using another SRT file as reference +sub-cli sync reference.srt target.srt + +# Synchronize an LRC file using another LRC file as reference +sub-cli sync reference.lrc target.lrc +``` + +Note: Synchronization works between files of the same format. If the number of entries differs between source and target files, Sub-CLI will display a warning and scale the timeline appropriately. + +## Formatting Examples + +Format subtitle files for consistent styling: + +```bash +# Format an SRT file +sub-cli fmt subtitles.srt + +# Format an LRC file +sub-cli fmt lyrics.lrc + +# Format a WebVTT file +sub-cli fmt subtitles.vtt +``` + +Formatting ensures: +- Sequential entry numbering +- Consistent timestamp formatting +- Proper spacing and line breaks +- Format-specific standard compliance + +These examples demonstrate the versatility of Sub-CLI for handling various subtitle manipulation tasks. For detailed information on each command and all available options, see the [Command Reference](/commands) page. diff --git a/docs/feedback.md b/docs/feedback.md new file mode 100644 index 0000000..b928291 --- /dev/null +++ b/docs/feedback.md @@ -0,0 +1,82 @@ +--- +title: Provide Feedback +description: Help improve Sub-CLI by sharing your experience and suggestions +--- + +# Provide Feedback + +Your feedback is invaluable to the continued development and improvement of Sub-CLI. We welcome all types of feedback, including bug reports, feature requests, usability suggestions, and general comments. + +## Ways to Provide Feedback + +### Issues + +The best way to report bugs or request features is through our issue tracker: + +1. Visit the [Sub-CLI Issues](https://git.owu.one/wholetrans/sub-cli/issues) page +2. Click on "New Issue" +3. Provide as much detail as possible +4. Submit the issue + +### Email + +If you prefer, you can send feedback directly via email to: + +`hello@wholetrans.org` (example email) + +### Community Channels + +Join our community to discuss Sub-CLI, share your experience, and get help: + +::: info + +Currently there's no dedicated channel for Sub-CLI. You can join our `#general` room for general questions and discussions. + +::: + +- Matrix Space: [#wholetrans:mtx.owu.one](https://matrix.to/room/#wholetrans:mtx.owu.one) + +You can find more contact information in our [About](https://wholetrans.org/about) page. + + +## Reporting Bugs + +When reporting bugs, please include: + +1. **Sub-CLI Version**: Output of `sub-cli version` +2. **Operating System**: Your OS name and version +3. **Steps to Reproduce**: Detailed steps to reproduce the issue +4. **Expected Behavior**: What you expected to happen +5. **Actual Behavior**: What actually happened +6. **Additional Context**: Any other relevant information, such as command output, error messages, or screenshots + +## Feature Requests + +When requesting new features, please include: + +1. **Use Case**: Describe the specific scenario or problem you're trying to solve +2. **Proposed Solution**: Your idea for implementing the feature +3. **Alternatives Considered**: Any alternative solutions you've considered +4. **Additional Context**: Any other relevant information that might help us understand the request + +## Contribution Guidelines + +Interested in contributing to Sub-CLI? We welcome contributions of all kinds, from code improvements to documentation updates. + +### Code Contributions + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Submit a pull request + +### Documentation Contributions + +Found an error or omission in our documentation? Have an idea for improvement? We welcome: + +- Documentation fixes and improvements +- Examples and tutorials + +## Thank You! + +Your feedback and contributions help make Sub-CLI better for everyone. We appreciate your time and effort in helping us improve the tool. diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 0000000..d3a1ca1 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,47 @@ +--- +title: Getting Started +description: Introduction to the Sub-CLI tool and its capabilities +--- + +# Getting Started with Sub-CLI + +Sub-CLI is a command-line tool designed for subtitle manipulation and generation. Whether you need to convert subtitle formats, synchronize timelines, format subtitle files, Sub-CLI provides a robust set of features for all your subtitle needs. + +## What Can Sub-CLI Do? + +- **Convert** between various subtitle formats (SRT, VTT, LRC, TXT) +- **Synchronize** timelines between subtitle files +- **Format** subtitle files to ensure consistent styling + +## Key Features + +- **Format Flexibility**: Support for multiple subtitle formats including SRT, VTT, LRC, and plain text +- **Timeline Synchronization**: Easily align subtitles with audio/video content +- **Format-Specific Feature Preservation**: Maintains format-specific features during conversion +- **Clean Command Interface**: Simple, intuitive commands for efficient workflow + +## Quick Navigation + +Ready to dive in? Here's where to go next: + +- [Installation Guide](/installation) - Download and set up Sub-CLI on your system +- [Command Examples](/examples) - See practical examples of Sub-CLI in action +- [Command Reference](/commands) - Detailed documentation for all available commands +- [Provide Feedback](/feedback) - Help us improve Sub-CLI by sharing your experience + +## Basic Usage + +Once installed, you can start using Sub-CLI with simple commands like: + +```bash +# Convert a subtitle from one format to another +sub-cli convert input.srt output.vtt + +# Synchronize timelines between two subtitle files +sub-cli sync source.srt target.srt + +# Format a subtitle file +sub-cli fmt subtitle.srt +``` + +Check out the [Command Examples](/examples) page for more detailed usage scenarios. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..b4953da --- /dev/null +++ b/docs/index.md @@ -0,0 +1,27 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Sub-CLI" + # text: "The Subtitle Manipulation CLI" + tagline: "The Subtitle Manipulation CLI" + actions: + - theme: brand + text: Getting Started + link: /getting-started + - theme: alt + text: Command Reference + link: /commands + +features: + - title: One-Stop Workflow + details: (WIP) From raw audio/video to multi-language, styled subtitles + - title: Interactive and Automated + details: (Coming Soon) Integrate to your workflow with pre-configured arguments, or simply launch a TUI and tune your settings + - title: Batch Processing + details: (Coming Soon) Process multiple files utilizing every device you have at your desired concurrency + - title: Out of the Box Integration + details: (Coming Soon) Choose from various providers with one account when you prefer cloud processing +--- + diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..8d51d4c --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,107 @@ +--- +title: Installation Guide +description: How to download and install Sub-CLI on your system +--- + +# Installation Guide + +Follow these simple steps to get Sub-CLI up and running on your computer. + +## Download the Right Version + +Sub-CLI is available for various operating systems and architectures. Visit the [Releases](https://git.owu.one/wholetrans/sub-cli/releases) page to download the appropriate version for your system. + +### Understanding Which Version to Download + +The release files are named following this pattern: + +``` +sub-cli-[OS]-[ARCHITECTURE][.exe] +``` + +Where: +- **OS** is your operating system (windows, darwin, linux) +- **ARCHITECTURE** is your computer's processor type (amd64, arm64) +- The `.exe` extension is only present for Windows versions + +### Which Version Do I Need? + +Here's a simple guide to help you choose: + +| Operating System | Processor Type | Download File | +|------------------|----------------|---------------| +| Windows | Intel/AMD (most PCs) | `sub-cli-windows-amd64.exe` | +| Windows | ARM (Surface Pro X, etc.) | `sub-cli-windows-arm64.exe` | +| macOS | Intel Mac | `sub-cli-darwin-amd64` | +| macOS | Apple Silicon (M series processors) | `sub-cli-darwin-arm64` | +| Linux | Intel/AMD (most PCs/servers) | `sub-cli-linux-amd64` | +| Linux | ARM (Raspberry Pi, ARM-based VPS, etc.) | `sub-cli-linux-arm64` | + +If you're unsure about your system architecture, most modern computers use amd64 (also known as x86_64) architecture. + +## Installation Steps + +::: tip + +For temporary use, place the sub-cli binary in the current directory or any location you prefer, without adding it to the PATH. + +::: + +### Windows + +1. Download the appropriate `.exe` file from the Releases page +2. Move the file to a location of your choice (e.g., `C:\Users\[username]\bin\`) +3. (Optional) Add the folder to your PATH environment variable to run Sub-CLI from any location: + - Right-click on "This PC" and select "Properties" + - Click on "Advanced system settings" + - Click on "Environment Variables" + - Under "System variables", find the "Path" variable, select it and click "Edit" + - Click "New" and add the path to the folder containing the Sub-CLI executable + - Click "OK" on all dialog boxes to save the changes + +### macOS (Darwin) + +1. Download the appropriate file from the Releases page +2. Open Terminal +3. Make the file executable with the command: + ```bash + chmod +x path/to/downloaded/sub-cli-darwin-[architecture] + ``` +4. (Optional) Move it to a location in your PATH for easier access: + ```bash + sudo mv path/to/downloaded/sub-cli-darwin-[architecture] ~/.local/bin/sub-cli + ``` + +### Linux + +1. Download the appropriate file from the Releases page +2. Open Terminal +3. Make the file executable with the command: + ```bash + chmod +x path/to/downloaded/sub-cli-linux-[architecture] + ``` +4. (Optional) Move it to a location in your PATH for easier access: + ```bash + sudo mv path/to/downloaded/sub-cli-linux-[architecture] ~/.local/bin/sub-cli + ``` + +## Verifying Installation + +To verify that Sub-CLI is installed correctly, open a command prompt or terminal and run: + +```bash +sub-cli version +``` + +You should see the current version number of Sub-CLI displayed. + +## Troubleshooting + +If you encounter any issues during installation: + +- Make sure you've downloaded the correct version for your operating system and architecture +- Ensure the file has executable permissions (on macOS and Linux) +- Verify that the file is in a location accessible by your command prompt or terminal +- If you've added it to PATH, try restarting your command prompt or terminal + +For further assistance, please visit our [feedback page](/feedback) to report the issue. diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..2f2da99 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,11 @@ +{ + "devDependencies": { + "vitepress": "^2.0.0-alpha.5" + }, + "packageManager": "pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6", + "scripts": { + "docs:dev": "vitepress dev .", + "docs:build": "vitepress build .", + "docs:preview": "vitepress preview ." + } +} \ No newline at end of file diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml new file mode 100644 index 0000000..528eac1 --- /dev/null +++ b/docs/pnpm-lock.yaml @@ -0,0 +1,1596 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + vitepress: + specifier: ^2.0.0-alpha.5 + version: 2.0.0-alpha.5(@algolia/client-search@5.23.4)(postcss@8.5.3)(search-insights@2.17.3) + +packages: + + '@algolia/autocomplete-core@1.17.9': + resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==} + + '@algolia/autocomplete-plugin-algolia-insights@1.17.9': + resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.17.9': + resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.17.9': + resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.23.4': + resolution: {integrity: sha512-WIMT2Kxy+FFWXWQxIU8QgbTioL+SGE24zhpj0kipG4uQbzXwONaWt7ffaYLjfge3gcGSgJVv+1VlahVckafluQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-analytics@5.23.4': + resolution: {integrity: sha512-4B9gChENsQA9kFmFlb+x3YhBz2Gx3vSsm81FHI1yJ3fn2zlxREHmfrjyqYoMunsU7BybT/o5Nb7ccCbm/vfseA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@5.23.4': + resolution: {integrity: sha512-bsj0lwU2ytiWLtl7sPunr+oLe+0YJql9FozJln5BnIiqfKOaseSDdV42060vUy+D4373f2XBI009K/rm2IXYMA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-insights@5.23.4': + resolution: {integrity: sha512-XSCtAYvJ/hnfDHfRVMbBH0dayR+2ofVZy3jf5qyifjguC6rwxDsSdQvXpT0QFVyG+h8UPGtDhMPoUIng4wIcZA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-personalization@5.23.4': + resolution: {integrity: sha512-l/0QvqgRFFOf7BnKSJ3myd1WbDr86ftVaa3PQwlsNh7IpIHmvVcT83Bi5zlORozVGMwaKfyPZo6O48PZELsOeA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-query-suggestions@5.23.4': + resolution: {integrity: sha512-TB0htrDgVacVGtPDyENoM6VIeYqR+pMsDovW94dfi2JoaRxfqu/tYmLpvgWcOknP6wLbr8bA+G7t/NiGksNAwQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-search@5.23.4': + resolution: {integrity: sha512-uBGo6KwUP6z+u6HZWRui8UJClS7fgUIAiYd1prUqCbkzDiCngTOzxaJbEvrdkK0hGCQtnPDiuNhC5MhtVNN4Eg==} + engines: {node: '>= 14.0.0'} + + '@algolia/ingestion@1.23.4': + resolution: {integrity: sha512-Si6rFuGnSeEUPU9QchYvbknvEIyCRK7nkeaPVQdZpABU7m4V/tsiWdHmjVodtx3h20VZivJdHeQO9XbHxBOcCw==} + engines: {node: '>= 14.0.0'} + + '@algolia/monitoring@1.23.4': + resolution: {integrity: sha512-EXGoVVTshraqPJgr5cMd1fq7Jm71Ew6MpGCEaxI5PErBpJAmKdtjRIzs6JOGKHRaWLi+jdbJPYc2y8RN4qcx5Q==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@5.23.4': + resolution: {integrity: sha512-1t6glwKVCkjvBNlng2itTf8fwaLSqkL4JaMENgR3WTGR8mmW2akocUy/ZYSQcG4TcR7qu4zW2UMGAwLoWoflgQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@5.23.4': + resolution: {integrity: sha512-UUuizcgc5+VSY8hqzDFVdJ3Wcto03lpbFRGPgW12pHTlUQHUTADtIpIhkLLOZRCjXmCVhtr97Z+eR6LcRYXa3Q==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-fetch@5.23.4': + resolution: {integrity: sha512-UhDg6elsek6NnV5z4VG1qMwR6vbp+rTMBEnl/v4hUyXQazU+CNdYkl++cpdmLwGI/7nXc28xtZiL90Es3I7viQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-node-http@5.23.4': + resolution: {integrity: sha512-jXGzGBRUS0oywQwnaCA6mMDJO7LoC3dYSLsyNfIqxDR4SNGLhtg3je0Y31lc24OA4nYyKAYgVLtjfrpcpsWShg==} + engines: {node: '>= 14.0.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@docsearch/css@3.9.0': + resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==} + + '@docsearch/js@3.9.0': + resolution: {integrity: sha512-4bKHcye6EkLgRE8ze0vcdshmEqxeiJM77M0JXjef7lrYZfSlMunrDOCqyLjiZyo1+c0BhUqA2QpFartIjuHIjw==} + + '@docsearch/react@3.9.0': + resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==} + peerDependencies: + '@types/react': '>= 16.8.0 < 20.0.0' + react: '>= 16.8.0 < 20.0.0' + react-dom: '>= 16.8.0 < 20.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + + '@esbuild/aix-ppc64@0.25.3': + resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.3': + resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.3': + resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.3': + resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.3': + resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.3': + resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.3': + resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.3': + resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.3': + resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.3': + resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.3': + resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.3': + resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.3': + resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.3': + resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.3': + resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.3': + resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.3': + resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.3': + resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.3': + resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.3': + resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.3': + resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.3': + resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.3': + resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.3': + resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.3': + resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@iconify-json/simple-icons@1.2.33': + resolution: {integrity: sha512-nL5/UmI9x5PQ/AHv6bOaL2pH6twEdEz4pI89efB/K7HFn5etQnxMtGx9DFlOg/sRA2/yFpX8KXvc95CSDv5bJA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@rollup/rollup-android-arm-eabi@4.40.0': + resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.40.0': + resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.40.0': + resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.40.0': + resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.40.0': + resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.40.0': + resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.40.0': + resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.40.0': + resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.40.0': + resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.40.0': + resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.40.0': + resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': + resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.40.0': + resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.40.0': + resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.40.0': + resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.40.0': + resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.40.0': + resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.40.0': + resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.40.0': + resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.40.0': + resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==} + cpu: [x64] + os: [win32] + + '@shikijs/core@3.3.0': + resolution: {integrity: sha512-CovkFL2WVaHk6PCrwv6ctlmD4SS1qtIfN8yEyDXDYWh4ONvomdM9MaFw20qHuqJOcb8/xrkqoWQRJ//X10phOQ==} + + '@shikijs/engine-javascript@3.3.0': + resolution: {integrity: sha512-XlhnFGv0glq7pfsoN0KyBCz9FJU678LZdQ2LqlIdAj6JKsg5xpYKay3DkazXWExp3DTJJK9rMOuGzU2911pg7Q==} + + '@shikijs/engine-oniguruma@3.3.0': + resolution: {integrity: sha512-l0vIw+GxeNU7uGnsu6B+Crpeqf+WTQ2Va71cHb5ZYWEVEPdfYwY5kXwYqRJwHrxz9WH+pjSpXQz+TJgAsrkA5A==} + + '@shikijs/langs@3.3.0': + resolution: {integrity: sha512-zt6Kf/7XpBQKSI9eqku+arLkAcDQ3NHJO6zFjiChI8w0Oz6Jjjay7pToottjQGjSDCFk++R85643WbyINcuL+g==} + + '@shikijs/themes@3.3.0': + resolution: {integrity: sha512-tXeCvLXBnqq34B0YZUEaAD1lD4lmN6TOHAhnHacj4Owh7Ptb/rf5XCDeROZt2rEOk5yuka3OOW2zLqClV7/SOg==} + + '@shikijs/transformers@3.3.0': + resolution: {integrity: sha512-PIknEyxfkT7i7at/78ynVmuZEv4+7IcS37f6abxMjQ0pVIPEya8n+KNl7XtfbhNL+U9ElR3UzfSzuD5l5Iu+nw==} + + '@shikijs/types@3.3.0': + resolution: {integrity: sha512-KPCGnHG6k06QG/2pnYGbFtFvpVJmC3uIpXrAiPrawETifujPBv0Se2oUxm5qYgjCvGJS9InKvjytOdN+bGuX+Q==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitejs/plugin-vue@5.2.3': + resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@7.7.5': + resolution: {integrity: sha512-HYV3tJGARROq5nlVMJh5KKHk7GU8Au3IrrmNNqr978m0edxgpHgYPDoNUGrvEgIbObz09SQezFR3A1EVmB5WZg==} + + '@vue/devtools-kit@7.7.5': + resolution: {integrity: sha512-S9VAVJYVAe4RPx2JZb9ZTEi0lqTySz2CBeF0wHT5D3dkTLnT9yMMGegKNl4b2EIELwLSkcI9bl2qp0/jW+upqA==} + + '@vue/devtools-shared@7.7.5': + resolution: {integrity: sha512-QBjG72RfpM0DKtpns2RZOxBltO226kOAls9e4Lri6YxS2gWTgL0H+wj1R2K76lxxIeOrqo4+2Ty6RQnzv+WSTQ==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@13.1.0': + resolution: {integrity: sha512-PAauvdRXZvTWXtGLg8cPUFjiZEddTqmogdwYpnn60t08AA5a8Q4hZokBnpTOnVNqySlFlTcRYIC8OqreV4hv3Q==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/integrations@13.1.0': + resolution: {integrity: sha512-wJ6aANdUs4SOpVabChQK+uLIwxRTUAEmn1DJnflGG7Wq6yaipiRmp6as/Md201FjJnquQt8MecIPbFv8HSBeDA==} + 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 + vue: ^3.5.0 + 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 + + '@vueuse/metadata@13.1.0': + resolution: {integrity: sha512-+TDd7/a78jale5YbHX9KHW3cEDav1lz1JptwDvep2zSG8XjCsVE+9mHIzjTOaPbHUAk5XiE4jXLz51/tS+aKQw==} + + '@vueuse/shared@13.1.0': + resolution: {integrity: sha512-IVS/qRRjhPTZ6C2/AM3jieqXACGwFZwWTdw5sNTSKk2m/ZpkuuN+ri+WCVUP8TqaKwJYt/KuMwmXspMAw8E6ew==} + peerDependencies: + vue: ^3.5.0 + + algoliasearch@5.23.4: + resolution: {integrity: sha512-QzAKFHl3fm53s44VHrTdEo0TkpL3XVUYQpnZy1r6/EHvMAyIg+O4hwprzlsNmcCHTNyVcF2S13DAUn7XhkC6qg==} + engines: {node: '>= 14.0.0'} + + birpc@2.3.0: + resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + esbuild@0.25.3: + resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} + engines: {node: '>=18'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + fdir@6.4.4: + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + focus-trap@7.6.4: + resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + minisearch@7.1.2: + resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + oniguruma-parser@0.11.2: + resolution: {integrity: sha512-F7Ld4oDZJCI5/wCZ8AOffQbqjSzIRpKH7I/iuSs1SkhZeCj0wS6PMZ4W6VA16TWHrAo0Y9bBKEJOe7tvwcTXnw==} + + oniguruma-to-es@4.2.0: + resolution: {integrity: sha512-MDPs6KSOLS0tKQ7joqg44dRIRZUyotfTy0r+7oEEs6VwWWP0+E2PPDYWMFN0aqOjRyWHBYq7RfKw9GQk2S2z5g==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.26.5: + resolution: {integrity: sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==} + + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.40.0: + resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + + shiki@3.3.0: + resolution: {integrity: sha512-j0Z1tG5vlOFGW8JVj0Cpuatzvshes7VJy5ncDmmMaYcmnGW0Js1N81TOW98ivTFNZfKRn9uwEg/aIm638o368g==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + tinyglobby@0.2.13: + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + engines: {node: '>=12.0.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@6.3.2: + resolution: {integrity: sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitepress@2.0.0-alpha.5: + resolution: {integrity: sha512-fhuGpJ4CETS/lrAHjKu3m88HwesZvAjZLFeIRr9Jejmewyogn1tm2L6lsVg7PWxPmOGoMfihzl3+L6jg6hrTnA==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)': + dependencies: + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4) + '@algolia/client-search': 5.23.4 + algoliasearch: 5.23.4 + + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)': + dependencies: + '@algolia/client-search': 5.23.4 + algoliasearch: 5.23.4 + + '@algolia/client-abtesting@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/client-analytics@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/client-common@5.23.4': {} + + '@algolia/client-insights@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/client-personalization@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/client-query-suggestions@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/client-search@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/ingestion@1.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/monitoring@1.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/recommend@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + '@algolia/requester-browser-xhr@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + + '@algolia/requester-fetch@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + + '@algolia/requester-node-http@5.23.4': + dependencies: + '@algolia/client-common': 5.23.4 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@docsearch/css@3.9.0': {} + + '@docsearch/js@3.9.0(@algolia/client-search@5.23.4)(search-insights@2.17.3)': + dependencies: + '@docsearch/react': 3.9.0(@algolia/client-search@5.23.4)(search-insights@2.17.3) + preact: 10.26.5 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.9.0(@algolia/client-search@5.23.4)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.23.4)(algoliasearch@5.23.4) + '@docsearch/css': 3.9.0 + algoliasearch: 5.23.4 + optionalDependencies: + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + + '@esbuild/aix-ppc64@0.25.3': + optional: true + + '@esbuild/android-arm64@0.25.3': + optional: true + + '@esbuild/android-arm@0.25.3': + optional: true + + '@esbuild/android-x64@0.25.3': + optional: true + + '@esbuild/darwin-arm64@0.25.3': + optional: true + + '@esbuild/darwin-x64@0.25.3': + optional: true + + '@esbuild/freebsd-arm64@0.25.3': + optional: true + + '@esbuild/freebsd-x64@0.25.3': + optional: true + + '@esbuild/linux-arm64@0.25.3': + optional: true + + '@esbuild/linux-arm@0.25.3': + optional: true + + '@esbuild/linux-ia32@0.25.3': + optional: true + + '@esbuild/linux-loong64@0.25.3': + optional: true + + '@esbuild/linux-mips64el@0.25.3': + optional: true + + '@esbuild/linux-ppc64@0.25.3': + optional: true + + '@esbuild/linux-riscv64@0.25.3': + optional: true + + '@esbuild/linux-s390x@0.25.3': + optional: true + + '@esbuild/linux-x64@0.25.3': + optional: true + + '@esbuild/netbsd-arm64@0.25.3': + optional: true + + '@esbuild/netbsd-x64@0.25.3': + optional: true + + '@esbuild/openbsd-arm64@0.25.3': + optional: true + + '@esbuild/openbsd-x64@0.25.3': + optional: true + + '@esbuild/sunos-x64@0.25.3': + optional: true + + '@esbuild/win32-arm64@0.25.3': + optional: true + + '@esbuild/win32-ia32@0.25.3': + optional: true + + '@esbuild/win32-x64@0.25.3': + optional: true + + '@iconify-json/simple-icons@1.2.33': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@rollup/rollup-android-arm-eabi@4.40.0': + optional: true + + '@rollup/rollup-android-arm64@4.40.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.40.0': + optional: true + + '@rollup/rollup-darwin-x64@4.40.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.40.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.40.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.40.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.40.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.40.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.40.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.40.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.40.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.40.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.40.0': + optional: true + + '@shikijs/core@3.3.0': + dependencies: + '@shikijs/types': 3.3.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.3.0': + dependencies: + '@shikijs/types': 3.3.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.2.0 + + '@shikijs/engine-oniguruma@3.3.0': + dependencies: + '@shikijs/types': 3.3.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.3.0': + dependencies: + '@shikijs/types': 3.3.0 + + '@shikijs/themes@3.3.0': + dependencies: + '@shikijs/types': 3.3.0 + + '@shikijs/transformers@3.3.0': + dependencies: + '@shikijs/core': 3.3.0 + '@shikijs/types': 3.3.0 + + '@shikijs/types@3.3.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@types/estree@1.0.7': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + + '@ungap/structured-clone@1.3.0': {} + + '@vitejs/plugin-vue@5.2.3(vite@6.3.2)(vue@3.5.13)': + dependencies: + vite: 6.3.2 + vue: 3.5.13 + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.27.0 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.27.0 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@7.7.5': + dependencies: + '@vue/devtools-kit': 7.7.5 + + '@vue/devtools-kit@7.7.5': + dependencies: + '@vue/devtools-shared': 7.7.5 + 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 + + '@vue/devtools-shared@7.7.5': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13)': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13 + + '@vue/shared@3.5.13': {} + + '@vueuse/core@13.1.0(vue@3.5.13)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.1.0 + '@vueuse/shared': 13.1.0(vue@3.5.13) + vue: 3.5.13 + + '@vueuse/integrations@13.1.0(focus-trap@7.6.4)(vue@3.5.13)': + dependencies: + '@vueuse/core': 13.1.0(vue@3.5.13) + '@vueuse/shared': 13.1.0(vue@3.5.13) + vue: 3.5.13 + optionalDependencies: + focus-trap: 7.6.4 + + '@vueuse/metadata@13.1.0': {} + + '@vueuse/shared@13.1.0(vue@3.5.13)': + dependencies: + vue: 3.5.13 + + algoliasearch@5.23.4: + dependencies: + '@algolia/client-abtesting': 5.23.4 + '@algolia/client-analytics': 5.23.4 + '@algolia/client-common': 5.23.4 + '@algolia/client-insights': 5.23.4 + '@algolia/client-personalization': 5.23.4 + '@algolia/client-query-suggestions': 5.23.4 + '@algolia/client-search': 5.23.4 + '@algolia/ingestion': 1.23.4 + '@algolia/monitoring': 1.23.4 + '@algolia/recommend': 5.23.4 + '@algolia/requester-browser-xhr': 5.23.4 + '@algolia/requester-fetch': 5.23.4 + '@algolia/requester-node-http': 5.23.4 + + birpc@2.3.0: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + comma-separated-tokens@2.0.3: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + csstype@3.1.3: {} + + dequal@2.0.3: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + emoji-regex-xs@1.0.0: {} + + entities@4.5.0: {} + + esbuild@0.25.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.3 + '@esbuild/android-arm': 0.25.3 + '@esbuild/android-arm64': 0.25.3 + '@esbuild/android-x64': 0.25.3 + '@esbuild/darwin-arm64': 0.25.3 + '@esbuild/darwin-x64': 0.25.3 + '@esbuild/freebsd-arm64': 0.25.3 + '@esbuild/freebsd-x64': 0.25.3 + '@esbuild/linux-arm': 0.25.3 + '@esbuild/linux-arm64': 0.25.3 + '@esbuild/linux-ia32': 0.25.3 + '@esbuild/linux-loong64': 0.25.3 + '@esbuild/linux-mips64el': 0.25.3 + '@esbuild/linux-ppc64': 0.25.3 + '@esbuild/linux-riscv64': 0.25.3 + '@esbuild/linux-s390x': 0.25.3 + '@esbuild/linux-x64': 0.25.3 + '@esbuild/netbsd-arm64': 0.25.3 + '@esbuild/netbsd-x64': 0.25.3 + '@esbuild/openbsd-arm64': 0.25.3 + '@esbuild/openbsd-x64': 0.25.3 + '@esbuild/sunos-x64': 0.25.3 + '@esbuild/win32-arm64': 0.25.3 + '@esbuild/win32-ia32': 0.25.3 + '@esbuild/win32-x64': 0.25.3 + + estree-walker@2.0.2: {} + + fdir@6.4.4(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + focus-trap@7.6.4: + dependencies: + tabbable: 6.2.0 + + fsevents@2.3.3: + optional: true + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.0.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hookable@5.5.3: {} + + html-void-elements@3.0.0: {} + + is-what@4.1.16: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + mark.js@8.11.1: {} + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + minisearch@7.1.2: {} + + mitt@3.0.1: {} + + nanoid@3.3.11: {} + + oniguruma-parser@0.11.2: {} + + oniguruma-to-es@4.2.0: + dependencies: + emoji-regex-xs: 1.0.0 + oniguruma-parser: 0.11.2 + regex: 6.0.1 + regex-recursion: 6.0.2 + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.2: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.26.5: {} + + property-information@7.0.0: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + + rfdc@1.4.1: {} + + rollup@4.40.0: + dependencies: + '@types/estree': 1.0.7 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.40.0 + '@rollup/rollup-android-arm64': 4.40.0 + '@rollup/rollup-darwin-arm64': 4.40.0 + '@rollup/rollup-darwin-x64': 4.40.0 + '@rollup/rollup-freebsd-arm64': 4.40.0 + '@rollup/rollup-freebsd-x64': 4.40.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.40.0 + '@rollup/rollup-linux-arm-musleabihf': 4.40.0 + '@rollup/rollup-linux-arm64-gnu': 4.40.0 + '@rollup/rollup-linux-arm64-musl': 4.40.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.40.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0 + '@rollup/rollup-linux-riscv64-gnu': 4.40.0 + '@rollup/rollup-linux-riscv64-musl': 4.40.0 + '@rollup/rollup-linux-s390x-gnu': 4.40.0 + '@rollup/rollup-linux-x64-gnu': 4.40.0 + '@rollup/rollup-linux-x64-musl': 4.40.0 + '@rollup/rollup-win32-arm64-msvc': 4.40.0 + '@rollup/rollup-win32-ia32-msvc': 4.40.0 + '@rollup/rollup-win32-x64-msvc': 4.40.0 + fsevents: 2.3.3 + + search-insights@2.17.3: {} + + shiki@3.3.0: + dependencies: + '@shikijs/core': 3.3.0 + '@shikijs/engine-javascript': 3.3.0 + '@shikijs/engine-oniguruma': 3.3.0 + '@shikijs/langs': 3.3.0 + '@shikijs/themes': 3.3.0 + '@shikijs/types': 3.3.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + speakingurl@14.0.1: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + tabbable@6.2.0: {} + + tinyglobby@0.2.13: + dependencies: + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + + trim-lines@3.0.1: {} + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + vite@6.3.2: + dependencies: + esbuild: 0.25.3 + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.3 + rollup: 4.40.0 + tinyglobby: 0.2.13 + optionalDependencies: + fsevents: 2.3.3 + + vitepress@2.0.0-alpha.5(@algolia/client-search@5.23.4)(postcss@8.5.3)(search-insights@2.17.3): + dependencies: + '@docsearch/css': 3.9.0 + '@docsearch/js': 3.9.0(@algolia/client-search@5.23.4)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.33 + '@shikijs/core': 3.3.0 + '@shikijs/transformers': 3.3.0 + '@shikijs/types': 3.3.0 + '@vitejs/plugin-vue': 5.2.3(vite@6.3.2)(vue@3.5.13) + '@vue/devtools-api': 7.7.5 + '@vue/shared': 3.5.13 + '@vueuse/core': 13.1.0(vue@3.5.13) + '@vueuse/integrations': 13.1.0(focus-trap@7.6.4)(vue@3.5.13) + focus-trap: 7.6.4 + mark.js: 8.11.1 + minisearch: 7.1.2 + shiki: 3.3.0 + vite: 6.3.2 + vue: 3.5.13 + optionalDependencies: + postcss: 8.5.3 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jiti + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - tsx + - typescript + - universal-cookie + - yaml + + vue@3.5.13: + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13) + '@vue/shared': 3.5.13 + + zwitch@2.0.4: {} diff --git a/docs/zh-Hans/commands.md b/docs/zh-Hans/commands.md new file mode 100644 index 0000000..c509a4f --- /dev/null +++ b/docs/zh-Hans/commands.md @@ -0,0 +1,229 @@ +--- +title: 命令参考 +description: 所有Sub-CLI命令的详细文档 +--- + +# 命令参考 + +本页面提供了所有可用Sub-CLI命令的详细文档、选项和用法。 + +## 全局选项 + +这些选项在所有Sub-CLI命令中都可用: + +``` +help 显示命令的帮助信息 +``` + +## convert + +`convert` 命令将字幕文件在不同格式之间转换,尽可能保留信息,同时适应目标格式的功能。 + +### 用法 + +``` +sub-cli convert <源文件> <目标文件> +``` + +### 参数 + +| 参数 | 描述 | +|----------|-------------| +| `<源文件>` | 源字幕文件的路径 | +| `<目标文件>` | 要创建的目标字幕文件的路径 | + +### 支持的格式转换 + +| 源格式 | 目标格式 | 注意 | +|---------------|---------------|-------| +| SRT (.srt) | SRT, VTT, LRC, TXT | - | +| VTT (.vtt) | SRT, VTT, LRC, TXT | - | +| LRC (.lrc) | SRT, VTT, LRC, TXT | - | +| TXT (.txt) | — | TXT只能作为目标格式,不能作为源格式 | + +### 功能保留 + +转换过程旨在尽可能保留更多功能,但某些特定于格式的功能可能会丢失或适应: + +#### SRT功能 +- **保留**: 文本内容、时间线(开始和结束时间)、基本样式(粗体、斜体、下划线) +- **在某些格式中丢失**: 转换为LRC或TXT等格式时的HTML样式标签 + +#### VTT功能 +- **保留**: 文本内容、时间线、标题、CSS样式(当目标格式支持时) +- **在某些格式中丢失**: 转换为SRT或LRC时的定位、对齐和高级样式 + +#### LRC功能 +- **保留**: 文本内容、时间线、元数据(标题、艺术家、专辑) +- **结构限制**: LRC只支持开始时间戳(没有结束时间戳),不像SRT和VTT +- **从LRC转换时的适应**: 当转换为SRT/VTT时,LRC中每行的单一时间戳会转换为开始+结束时间对。结束时间的计算方式为: + - 使用下一个条目的开始时间作为当前条目的结束时间 + - 对于最后一个条目,添加默认时长(通常3-5秒)来创建结束时间 +- **转换为LRC时丢失**: 当其他格式转换为LRC时,任何结束时间戳信息都会被丢弃 + +#### TXT功能 +- **仅输出**: 纯文本格式只包含没有任何时间或样式的文本内容 + +### 技术细节 + +转换器使用中间表示法,尽可能保留特定格式的数据。转换分两步进行: +1. 将源格式转换为中间表示 +2. 将中间表示转换为目标格式 + +这种方法最大限度地减少信息丢失,确保尽可能准确的转换。 + +### 示例 + +```bash +# 从SRT转换为WebVTT +sub-cli convert subtitles.srt subtitles.vtt + +# 从LRC转换为纯文本(去除时间信息) +sub-cli convert lyrics.lrc transcript.txt + +# 从WebVTT转换为SRT +sub-cli convert subtitles.vtt subtitles.srt +``` + +## sync + +`sync` 命令将源字幕文件的时间/时间戳应用到目标字幕文件,同时保留目标文件的内容。 + +### 用法 + +``` +sub-cli sync <源文件> <目标文件> +``` + +### 参数 + +| 参数 | 描述 | +|----------|-------------| +| `<源文件>` | 带有参考时间线的源字幕文件的路径 | +| `<目标文件>` | 要同步的目标字幕文件的路径 | + +### 支持的格式 + +目前,同步仅适用于相同格式的文件之间: +- SRT到SRT +- LRC到LRC + +### 行为详情 + +#### 对于LRC文件: + +- **当条目数匹配时**: 源时间线直接应用于目标内容。 +- **当条目数不同时**: 源时间线使用线性插值进行缩放以匹配目标内容。 +- **从目标保留**: 所有内容文本和元数据(艺术家、标题等)。 +- **在目标中修改**: 只更新时间戳。 + +#### 对于SRT文件: + +- **当条目数匹配时**: 源的开始和结束时间直接应用于目标条目。 +- **当条目数不同时**: 使用缩放方法: + - 开始时间取自按比例匹配的源条目 + - 结束时间根据源条目时长计算 + - 保持条目之间的时间关系 +- **从目标保留**: 所有字幕文本内容。 +- **在目标中修改**: 更新时间戳并标准化条目编号(从1开始顺序编号)。 + +### 边缘情况 + +- 如果源文件没有时间信息,目标保持不变。 +- 如果源时长计算导致负值,会应用默认的3秒时长。 +- 当条目数不同时,命令会显示警告但会继续进行缩放同步。 +- 目标文件中的特定格式功能(如样式、对齐方式、元数据)会被保留。同步操作只替换时间戳,不会更改任何其他格式或内容功能。 + +### 示例 + +```bash +# 使用另一个SRT文件作为参考来同步SRT文件 +sub-cli sync reference.srt target.srt + +# 使用另一个LRC文件作为参考来同步LRC文件 +sub-cli sync reference.lrc target.lrc +``` + +## fmt + +`fmt` 命令根据其特定格式的约定标准化和格式化字幕文件。 + +### 用法 + +``` +sub-cli fmt <文件> +``` + +### 参数 + +| 参数 | 描述 | +|----------|-------------| +| `<文件>` | 要格式化的字幕文件的路径 | + +### 支持的格式 + +| 格式 | 扩展名 | 格式化操作 | +|--------|-----------|-------------------| +| SRT | `.srt` | 标准化条目编号(从1开始顺序)
格式化时间戳为`00:00:00,000`格式
确保条目之间适当的间距 | +| LRC | `.lrc` | 组织元数据标签
标准化时间戳格式`[mm:ss.xx]`
确保正确的内容对齐 | +| VTT | `.vtt` | 验证WEBVTT头
标准化提示标识符
格式化时间戳为`00:00:00.000`格式
组织样式信息 | + +### 格式特定详情 + +#### SRT格式化 +格式化器解析SRT文件,提取所有条目,确保从1开始的顺序编号,并以一致的格式将文件写回。这保留了所有内容和时间信息,同时标准化结构。 + +#### LRC格式化 +对于LRC文件,格式化器保留所有元数据和内容,但标准化时间戳的格式并确保正确对齐。这使文件更易于阅读,并与不同的LRC解析器更兼容。 + +#### VTT格式化 +格式化WebVTT文件时,命令确保适当的头格式、顺序提示标识符和标准时间戳格式。所有VTT特定功能(如样式、定位和注释)都被保留。 + +### 示例 + +```bash +# 格式化SRT文件 +sub-cli fmt subtitles.srt + +# 格式化LRC文件 +sub-cli fmt lyrics.lrc + +# 格式化VTT文件 +sub-cli fmt subtitles.vtt +``` + +## version + +显示Sub-CLI的当前版本。 + +### 用法 + +``` +sub-cli version +``` + +## help + +显示一般帮助信息或特定命令的帮助。 + +### 用法 + +``` +sub-cli help [命令] +``` + +### 参数 + +| 参数 | 描述 | +|----------|-------------| +| `[命令]` | (可选)要获取帮助的特定命令 | + +### 示例 + +```bash +# 显示一般帮助 +sub-cli help + +# 显示convert命令的帮助 +sub-cli help convert +``` diff --git a/docs/zh-Hans/config.ts b/docs/zh-Hans/config.ts new file mode 100644 index 0000000..030edfa --- /dev/null +++ b/docs/zh-Hans/config.ts @@ -0,0 +1,67 @@ +export const zhHansThemeConfig = { + nav: [ + { text: '首页', link: '/zh-Hans/' }, + ], + sidebar: [ + { + text: '介绍', + items: [ + { text: '快速开始', link: '/zh-Hans/getting-started' }, + { text: '安装指南', link: '/zh-Hans/installation' } + ] + }, + { + text: '使用', + items: [ + { text: '命令示例', link: '/zh-Hans/examples' }, + { text: '命令参考', link: '/zh-Hans/commands' } + ] + }, + { + text: '项目', + items: [ + { text: '提供反馈', link: '/zh-Hans/feedback' } + ] + } + ], + + // from https://github.com/vuejs/vitepress + editLink: { + pattern: 'https://git.owu.one/wholetrans/sub-cli/edit/main/docs/:path', + text: '在 Owu Git 编辑此页面' + }, + + footer: { + message: 'Sub-CLI 基于 AGPL-3.0 许可发布', + copyright: `版权所有 © 2024-${new Date().getFullYear()} WholeTrans` + }, + + docFooter: { + prev: '上一页', + next: '下一页' + }, + + outline: { + label: '页面导航' + }, + + lastUpdated: { + text: '最后更新于' + }, + + notFound: { + title: '页面未找到', + quote: '但如果你不改变方向,并且继续寻找,你可能最终会到达你所前往的地方。', + linkLabel: '前往首页', + linkText: '回到首页' + }, + + langMenuLabel: '切换语言', + returnToTopLabel: '返回顶部', + sidebarMenuLabel: '菜单', + darkModeSwitchLabel: '主题', + lightModeSwitchTitle: '切换到浅色模式', + darkModeSwitchTitle: '切换到深色模式', + skipToContentLabel: '跳转到内容' +} + diff --git a/docs/zh-Hans/examples.md b/docs/zh-Hans/examples.md new file mode 100644 index 0000000..9c7f3f1 --- /dev/null +++ b/docs/zh-Hans/examples.md @@ -0,0 +1,63 @@ +--- +title: 命令示例 +description: Sub-CLI命令实际应用的实用示例 +--- + +# 命令示例 + +本页面提供了Sub-CLI命令在常见字幕处理任务中的实用示例。 + +## 格式转换示例 + +在各种字幕格式之间进行转换: + +```bash +# 从SRT转换为WebVTT +sub-cli convert subtitles.srt subtitles.vtt + +# 从LRC转换为SRT +sub-cli convert lyrics.lrc subtitles.srt + +# 从WebVTT转换为纯文本(去除时间戳) +sub-cli convert subtitles.vtt plain_text.txt + +# 从SRT转换为LRC +sub-cli convert subtitles.srt lyrics.lrc +``` + +## 同步示例 + +在字幕文件之间同步时间轴: + +```bash +# 使用另一个SRT文件作为参考来同步SRT文件 +sub-cli sync reference.srt target.srt + +# 使用另一个LRC文件作为参考来同步LRC文件 +sub-cli sync reference.lrc target.lrc +``` + +注意:同步功能仅适用于相同格式的文件之间。如果源文件和目标文件之间的条目数不同,Sub-CLI将显示警告并适当地缩放时间轴。 + +## 格式化示例 + +格式化字幕文件以确保样式一致: + +```bash +# 格式化SRT文件 +sub-cli fmt subtitles.srt + +# 格式化LRC文件 +sub-cli fmt lyrics.lrc + +# 格式化WebVTT文件 +sub-cli fmt subtitles.vtt +``` + +格式化确保: +- 顺序条目编号 +- 一致的时间戳格式 +- 适当的间距和换行 +- 格式特定的标准合规性 + +这些示例展示了Sub-CLI在处理各种字幕操作任务方面的多功能性。有关每个命令和所有可用选项的详细信息,请参阅[命令参考](/zh-Hans/commands)页面。 diff --git a/docs/zh-Hans/feedback.md b/docs/zh-Hans/feedback.md new file mode 100644 index 0000000..a5b945a --- /dev/null +++ b/docs/zh-Hans/feedback.md @@ -0,0 +1,81 @@ +--- +title: 提供反馈 +description: 分享您的体验和建议,帮助改进Sub-CLI +--- + +# 提供反馈 + +您的反馈对Sub-CLI的持续开发和改进非常宝贵。我们欢迎各种类型的反馈,包括错误报告、功能请求、可用性建议和一般评论。 + +## 提供反馈的方式 + +### 问题追踪 + +报告错误或请求功能的最佳方式是通过我们的问题追踪器: + +1. 访问[Sub-CLI Issues](https://git.owu.one/wholetrans/sub-cli/issues)页面 +2. 点击"New Issue" +3. 尽可能详细地填写相关信息 +4. 提交工单 + +### 电子邮件 + +如果您愿意,可以直接通过电子邮件发送反馈: + +`hello@wholetrans.org`(示例邮箱) + +### 社区渠道 + +加入我们的社区讨论Sub-CLI,分享您的经验并获取帮助: + +::: info + +目前没有专门的Sub-CLI频道。您可以加入我们的`#general`聊天室进行一般性问题讨论。 + +::: + +- Matrix空间:[#wholetrans:mtx.owu.one](https://matrix.to/room/#wholetrans:mtx.owu.one) + +您可以在我们的[关于](https://wholetrans.org/about)页面找到更多联系信息。 + +## 报告错误 + +报告错误时,请包括: + +1. **Sub-CLI版本**:`sub-cli version`的输出 +2. **操作系统**:您的操作系统名称和版本 +3. **重现步骤**:重现问题的详细步骤 +4. **预期行为**:您期望发生的情况 +5. **实际行为**:实际发生的情况 +6. **附加上下文**:任何其他相关信息,如命令输出、错误消息或截图 + +## 功能请求 + +请求新功能时,请包括: + +1. **使用场景**:描述您尝试解决的特定场景或问题 +2. **建议解决方案**:您对实现该功能的想法 +3. **考虑的替代方案**:您考虑过的任何替代解决方案 +4. **附加上下文**:任何其他可能帮助我们理解请求的相关信息 + +## 贡献指南 + +有兴趣为Sub-CLI做贡献?我们欢迎各种形式的贡献,从代码改进到文档更新。 + +### 代码贡献 + +1. Fork存储库 +2. 创建功能分支 +3. 进行更改 +4. 提交拉取请求 + +### 文档贡献 + +在我们的文档中发现错误或遗漏?有改进的想法?我们欢迎: + +- 文档修复和改进 +- 示例和教程 + +## 谢谢! + +您的反馈和贡献有助于使Sub-CLI对每个人都更好。我们感谢您花时间和精力帮助我们改进工具。 diff --git a/docs/zh-Hans/getting-started.md b/docs/zh-Hans/getting-started.md new file mode 100644 index 0000000..01d8626 --- /dev/null +++ b/docs/zh-Hans/getting-started.md @@ -0,0 +1,47 @@ +--- +title: 快速开始 +description: Sub-CLI 介绍及其功能 +--- + +# Sub-CLI 快速开始 + +Sub-CLI 是一款专为字幕处理和生成设计的命令行工具。无论您需要转换字幕格式、同步时间轴还是格式化字幕文件,Sub-CLI 都能为您的所有字幕需求提供功能支持。 + +## Sub-CLI 能做什么? + +- **转换**:在多种字幕格式之间转换(SRT、VTT、LRC、TXT) +- **同步**:字幕文件之间的时间轴同步 +- **格式化**:确保字幕文件具有一致的样式 + +## 主要特点 + +- **格式灵活性**:支持多种字幕格式,包括 SRT、VTT、LRC 和纯文本 +- **时间轴同步**:轻松将字幕与音频/视频内容对齐 +- **格式特定功能保留**:在转换过程中保持格式特定的功能 +- **简洁的命令界面**:简单、直观的命令,提高工作效率 + +## 快速导航 + +准备开始使用?以下是下一步去向: + +- [安装指南](/zh-Hans/installation) - 下载并设置 Sub-CLI +- [命令示例](/zh-Hans/examples) - 查看 Sub-CLI 实际应用的示例 +- [命令参考](/zh-Hans/commands) - 所有可用命令的详细文档 +- [提供反馈](/zh-Hans/feedback) - 分享您的体验,帮助我们改进 Sub-CLI + +## 基本用法 + +安装后,您可以使用简单的命令开始使用 Sub-CLI: + +```bash +# 将字幕从一种格式转换为另一种格式 +sub-cli convert input.srt output.vtt + +# 在两个字幕文件之间同步时间轴 +sub-cli sync source.srt target.srt + +# 格式化字幕文件 +sub-cli fmt subtitle.srt +``` + +查看[命令示例](/zh-Hans/examples)页面获取更多详细使用场景。 diff --git a/docs/zh-Hans/index.md b/docs/zh-Hans/index.md new file mode 100644 index 0000000..2553d0b --- /dev/null +++ b/docs/zh-Hans/index.md @@ -0,0 +1,26 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Sub-CLI" + # text: "字幕处理命令行工具" + tagline: "字幕处理命令行工具" + actions: + - theme: brand + text: 快速开始 + link: /zh-Hans/getting-started + - theme: alt + text: 命令参考 + link: /zh-Hans/commands + +features: + - title: 一站式工作流 + details: (开发中) Sub-CLI 能够全程参与从原始音频/视频(生肉)到多语言、带完整样式字幕的生产工作流 + - title: 自动化,但亦可交互 + details: (即将推出) 你可以用预先调校好的参数将 Sub-CLI 集成到您的工作流中,也可以启动 TUI 并根据交互式界面完成任务。 + - title: 批量处理 + details: (即将推出) 按照你期望的并发度,利用每一台你想利用的设备批量处理多个文件。 + - title: 开箱即用的集成 + details: (即将推出) 注册 Sub-CLI 账户,即可同时接入多个提供商,利用云服务处理你的媒体文件。 +--- diff --git a/docs/zh-Hans/installation.md b/docs/zh-Hans/installation.md new file mode 100644 index 0000000..4d6ae10 --- /dev/null +++ b/docs/zh-Hans/installation.md @@ -0,0 +1,107 @@ +--- +title: 安装指南 +description: 如何在您的系统上下载并安装 Sub-CLI +--- + +# 安装指南 + +按照以下简单步骤,在您的计算机上安装并运行 Sub-CLI。 + +## 下载正确的版本 + +Sub-CLI 适用于各种操作系统和架构。访问[发布页](https://git.owu.one/wholetrans/sub-cli/releases)下载适合您系统的版本。 + +### 了解应下载哪个版本 + +发布文件的命名遵循以下模式: + +``` +sub-cli-[操作系统]-[架构][.exe] +``` + +其中: +- **操作系统**是您的操作系统(windows, darwin, linux) +- **架构**是您计算机的处理器类型(amd64, arm64) +- `.exe`扩展名仅适用于Windows版本 + +### 我需要哪个版本? + +以下是一个简单的选择指南: + +| 操作系统 | 处理器类型 | 下载文件 | +|------------------|----------------|---------------| +| Windows | Intel/AMD(大多数PC) | `sub-cli-windows-amd64.exe` | +| Windows | ARM(如Surface Pro X等) | `sub-cli-windows-arm64.exe` | +| macOS | Intel Mac | `sub-cli-darwin-amd64` | +| macOS | Apple Silicon(M系列处理器) | `sub-cli-darwin-arm64` | +| Linux | Intel/AMD(大多数PC/服务器) | `sub-cli-linux-amd64` | +| Linux | ARM(树莓派,基于ARM的VPS等) | `sub-cli-linux-arm64` | + +如果您不确定系统架构,大多数现代计算机使用amd64(也称为x86_64)架构。 + +## 安装步骤 + +::: tip + +如果只想临时使用,您只需将 sub-cli 放在当前目录或你期望的位置,无需将其加入环境变量。 + +::: + +### Windows + +1. 从发布页面下载适合的`.exe`文件 +2. 将文件移动到您选择的位置(例如,`C:\Users\[用户名]\bin\`) +3. (可选)将该文件夹添加到PATH环境变量中,以便从任何位置运行Sub-CLI: + - 右键点击"此电脑"并选择"属性" + - 点击"高级系统设置" + - 点击"环境变量" + - 在"系统变量"下,找到"Path"变量,选择它并点击"编辑" + - 点击"新建"并添加包含Sub-CLI可执行文件的文件夹路径 + - 点击所有对话框上的"确定"保存更改 + +### macOS (Darwin) + +1. 从发布页面下载适合的文件 +2. 打开终端 +3. 使用以下命令使文件可执行: + ```bash + chmod +x path/to/downloaded/sub-cli-darwin-[架构] + ``` +4. (可选)将其移动到PATH中的位置以便更容易访问: + ```bash + sudo mv path/to/downloaded/sub-cli-darwin-[架构] ~/.local/bin/sub-cli + ``` + +### Linux + +1. 从发布页面下载适合的文件 +2. 打开终端 +3. 使用以下命令使文件可执行: + ```bash + chmod +x path/to/downloaded/sub-cli-linux-[架构] + ``` +4. (可选)将其移动到PATH中的位置以便更容易访问: + ```bash + sudo mv path/to/downloaded/sub-cli-linux-[架构] ~/.local/bin/sub-cli + ``` + +## 验证安装 + +要验证Sub-CLI是否正确安装,打开命令提示符或终端并运行: + +```bash +sub-cli version +``` + +您应该看到显示的Sub-CLI当前版本号。 + +## 故障排除 + +如果在安装过程中遇到任何问题: + +- 确保您已下载适合您操作系统和架构的正确版本 +- 确保文件具有可执行权限(在macOS和Linux上) +- 验证文件位于命令提示符或终端可访问的位置 +- 如果您已将其添加到PATH中,尝试重启命令提示符或终端 + +如需进一步帮助,请访问我们的[反馈页面](/zh-Hans/feedback)报告问题。