commit 5c1399bb96d075ba88066e069ef2e855aa49c9e6 Author: bluish <734499798@qq.com> Date: Wed Jan 7 16:24:34 2026 +0000 first commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c944400 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.js linguist-language=astro \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..2fc026d --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# GitHub 赞助配置 +# 这将在项目页面显示"Sponsor"按钮 + +# 爱发电(推荐国内用户) +custom: ['https://afdian.com/a/cuteleaf'] + +# 如果之后开通 GitHub Sponsors,取消下面的注释 +# github: [CuteLeaf] + +# 其他平台示例(按需添加) +# patreon: username +# ko_fi: username +# open_collective: project-name \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/01-bug_report.yml b/.github/ISSUE_TEMPLATE/01-bug_report.yml new file mode 100644 index 0000000..5e97dab --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-bug_report.yml @@ -0,0 +1,58 @@ +name: Bug Report +description: Create a report to help us improve +title: "[Bug]: " +labels: ["bug"] +assignees: + - CuteLeaf +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: textarea + id: bug-description + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + id: to-reproduce + attributes: + label: To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + validations: + required: true + - type: dropdown + id: os + attributes: + label: OS + multiple: true + options: + - Windows + - macOS + - Linux + - Android + - iOS + - type: input + id: browser + attributes: + label: Browser + placeholder: e.g. chrome, safari + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/02-feature_request.yml b/.github/ISSUE_TEMPLATE/02-feature_request.yml new file mode 100644 index 0000000..5ba8520 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-feature_request.yml @@ -0,0 +1,41 @@ +name: Feature Request +description: Suggest an idea for this project +title: "[Feature]: " +labels: ["enhancement"] +assignees: + - CuteLeaf +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this feature request! + - type: textarea + id: related-problem + attributes: + label: Is your feature request related to a problem? + description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + validations: + required: true + - type: textarea + id: solution + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Describe alternatives you've considered + description: A clear and concise description of any alternative solutions or features you've considered. + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + - type: markdown + attributes: + value: | + **Disclaimer** + + Please note that this feature request is at the discretion of the repository owner, @saicaca, and its implementation is not guaranteed. diff --git a/.github/ISSUE_TEMPLATE/03-custom_issue.yml b/.github/ISSUE_TEMPLATE/03-custom_issue.yml new file mode 100644 index 0000000..945b721 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03-custom_issue.yml @@ -0,0 +1,11 @@ +name: Custom Issue +description: Describe your issue here. +title: "[Other]: " +body: + - type: textarea + id: issue-description + attributes: + label: Issue Description + description: Please describe your issue. + validations: + required: true diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..6f36d0a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + groups: + patch-updates: + patterns: + - "*" + update-types: + - "patch" + minor-updates: + patterns: + - "*" + update-types: + - "minor" + pull-request-branch-name: + separator: "-" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major"] diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..2465212 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,37 @@ +## Type of change + +- [ ] Bug fix (a non-breaking change that fixes an issue) +- [ ] New feature (a non-breaking change that adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Other (please describe): + +## Checklist + +- [ ] I have read the [**CONTRIBUTING**](https://github.com/CuteLeaf/Firefly/blob/master/CONTRIBUTING.md) document. +- [ ] I have checked to ensure that this Pull Request is not for personal changes. +- [ ] I have performed a self-review of my own code. +- [ ] My changes generate no new warnings. + +## Related Issue + + + + +## Changes + + + + +## How To Test + + + + +## Screenshots (if applicable) + + + + +## Additional Notes + + diff --git a/.github/workflows/biome.yml b/.github/workflows/biome.yml new file mode 100644 index 0000000..53f1047 --- /dev/null +++ b/.github/workflows/biome.yml @@ -0,0 +1,20 @@ +name: Code quality + +on: + push: + branches: [ master ] # Adjust branches as needed + pull_request: + branches: [ master ] # Adjust branches as needed + +jobs: + quality: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Setup Biome + uses: biomejs/setup-biome@f382a98e582959e6aaac8e5f8b17b31749018780 # v2.5.0 + with: + version: latest + - name: Run Biome + run: biome ci ./src --reporter=github diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..3fb1004 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,67 @@ +name: Build and Check + +on: + push: + branches: [ master ] # Adjust branches as needed + pull_request: + branches: [ master ] # Adjust branches as needed + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + check: + strategy: + matrix: + node: [ 22, 23 ] + runs-on: ubuntu-latest + name: Astro Check for Node.js ${{ matrix.node }} + steps: + - name: Setup Node.js + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 + with: + node-version: ${{ matrix.node }} # Use LTS + + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Setup pnpm + uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + with: + run_install: false # Disable auto-install + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run Astro Check + run: pnpm astro check + + build: + strategy: + matrix: + node: [ 22, 23 ] + runs-on: ubuntu-latest + name: Astro Build for Node.js ${{ matrix.node }} # Corrected job name + steps: + - name: Setup Node.js + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 + with: + node-version: ${{ matrix.node }} + + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Setup pnpm + uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + with: + run_install: false # Disable auto-install + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run Astro Build + run: pnpm astro build diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..11ab3f7 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,47 @@ +name: Deploy to Pages Branch + +on: + # 每次推送到 `master` 分支时触发这个"工作流程" + # 如果你使用了别的分支名,请按需将 `master` 替换成你的分支名 + push: + branches: [ master ] + # 允许你在 GitHub 上的 Actions 标签中手动触发此"工作流程" + workflow_dispatch: + +# 需要写入权限来推送到pages分支 +permissions: + contents: write + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout your repository using git + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.14.4 + run_install: false + + - name: Install dependencies + run: pnpm install --no-frozen-lockfile + + - name: Build site + run: pnpm run build + + - name: Create .nojekyll file + run: touch dist/.nojekyll + + - name: Deploy to pages branch + uses: JamesIves/github-pages-deploy-action@v4 + with: + branch: pages # 部署到pages分支 + folder: dist # Astro默认构建输出目录 + clean: true # 清理目标分支中的旧文件 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6683403 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# build output +dist/ + +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +.vercel + +package-lock.json +bun.lockb +yarn.lock + +# ide +.idea +*.iml + +# docs +Docs-Firefly/ + +cache/ +package/ +.obsidian/ \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..6baea02 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +manage-package-manager-versions = true \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..405f774 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,20 @@ +# Contributing + +Thank you for your interest in contributing! + +## Before You Start + +If you plan to make major changes (especially new features or design changes), please open an issue or discussion before starting work. This helps ensure your effort aligns with the project's direction. + +## Submitting Code + +Please keep each pull request focused on a single purpose. Avoid mixing unrelated changes in one PR, as this can make reviewing and merging code more difficult. + +Please use the [Conventional Commits](https://www.conventionalcommits.org/) format for your commit messages whenever possible. This keeps our history clear and consistent. + +Before submitting code, please run the appropriate commands to check for errors and format your code. + +```bash +pnpm check +pnpm format +``` \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d6685ce --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2024 saicaca +Copyright (c) 2025 CuteLeaf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..802fc6c --- /dev/null +++ b/README.en.md @@ -0,0 +1,284 @@ + +Firefly + +
+ +# Firefly +> A Fresh and Beautiful Astro Blog Theme Template +> +> ![Node.js >= 22](https://img.shields.io/badge/node.js-%3E%3D22-brightgreen) +![pnpm >= 9](https://img.shields.io/badge/pnpm-%3E%3D9-blue) +![Astro](https://img.shields.io/badge/Astro-5.16.6-orange) +![TypeScript](https://img.shields.io/badge/TypeScript-5.9.2-blue) +> +> [![Stars](https://img.shields.io/github/stars/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/stargazers) +[![Forks](https://img.shields.io/github/forks/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/network/members) +[![Issues](https://img.shields.io/github/issues/CuteLeaf/Firefly)](https://github.com/CuteLeaf/Firefly/issues) +> +> ![GitHub License](https://img.shields.io/github/license/CuteLeaf/Firefly) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CuteLeaf/Firefly) +[![Afdian Sponsor](https://img.shields.io/badge/Afdian-Sponsor%20Author-ff69b4.svg)](https://afdian.com/a/cuteleaf) +
+ + +--- +🚀 Quick Guide: +[**🖥️Live Demo**](https://firefly.cuteleaf.cn/) / +[**📝Documentation**](https://docs-firefly.cuteleaf.cn/) / +[**🍀My Blog**](https://blog.cuteleaf.cn) + +📖 README: +**[简体中文](README.md)** | **[繁體中文](docs/README.zh-TW.md)** | **[English](README.en.md)** | **[日本語](docs/README.ja.md)** | **[Русский](docs/README.ru.md)** + +⚡ Static Site Generation: Ultra-fast loading speed and SEO optimization based on Astro + +🎨 Modern Design: Clean and beautiful interface with customizable theme colors + +📱 Mobile-Friendly: Perfect responsive experience with mobile-specific optimizations + +🔧 Highly Configurable: Most features can be customized through configuration files + +firefly + +>[!TIP] +>In important layouts, Firefly innovatively adds dual sidebars, article grid (multi-column) layout, masonry layout, +> +>Includes site statistics, calendar component, table of contents and other widgets to enrich the sidebar, +> +>While also retaining fuwari layout system, freely switchable in the configuration file. +> +>**For more layout configurations and demos, please see: [Firefly Layout System Details](https://firefly.cuteleaf.cn/posts/firefly-layout-system/)** + +## ✨ Features + +### Core Features + +- [x] **Astro + Tailwind CSS** - Ultra-fast static site generation based on modern tech stack +- [x] **Smooth Animations** - Swup page transition animations for silky smooth browsing experience +- [x] **Responsive Design** - Perfect adaptation for desktop, tablet and mobile devices +- [x] **Multi-language Support** - i18n internationalization, supports Simplified Chinese, Traditional Chinese, English, Japanese, Russian +- [x] **Full-text Search** - Client-side search based on Pagefind, supports article content indexing. Also supports MeiliSearch search engine + +### Personalization +- [x] **Sidebar** - Supports single sidebar, dual sidebar configuration, freely switchable in frontend +- [x] **Article Layout** - Supports list (single column) and grid (multi-column/masonry) layout, freely switchable in frontend +- [x] **Font Management** - Custom font support with rich font selector +- [x] **Footer Configuration** - HTML content injection, fully customizable +- [x] **Navbar Customization** - Logo, title, links fully customizable +- [x] **Wallpaper Mode Switching** - Banner wallpaper, fullscreen wallpaper, solid background, freely switchable in frontend +- [x] **Theme Color Customization** - 360° hue adjustment, supports light/dark/system three modes, freely switchable in frontend + +### Page Components +- [x] **Guestbook** - Supports guestbook page with integrated comment system +- [x] **Announcement Bar** - Top announcement notification, supports closing and custom styles +- [x] **Mascot** - Supports both Spine and Live2D animation engines +- [x] **Site Statistics** - Displays article, category, tag counts, total word count, running time, last update time +- [x] **Site Calendar** - Displays current month calendar and published articles for the month +- [x] **Sponsor Page** - Multiple payment methods, payment QR codes, sponsor list, in-article sponsor button +- [x] **Share Poster** - Supports generating beautiful article share posters containing article summary, QR code, etc. +- [x] **Sakura Effect** - Supports sakura effect, fullscreen sakura animation +- [x] **Friend Links** - Beautiful friend link display cards +- [x] **Ad Component** - Supports custom sidebar advertising content +- [x] **Bangumi** - Display anime and game tracking based on Bangumi API +- [x] **Comment System** - Integrates Twikoo, Waline, Giscus, Disqus, Artalk comment systems +- [x] **Visit Counter** - Supports calling Waline, Twikoo built-in visit tracking +- [x] **Music Player** - Based on APlayer, supports local music and Meting API online music + +### Content Enhancement +- [x] **Image Lightbox** - Fancybox image preview functionality +- [x] **Floating TOC** - Dynamically displays article table of contents, supports anchor jumping, shown when sidebar TOC is hidden +- [x] **Email Protection** - Prevent automated crawlers from directly scraping email addresses to avoid spam +- [x] **Sidebar TOC** - Dynamically displays article table of contents, supports anchor jumping +- [x] **Enhanced Code Blocks** - Based on Expressive Code, supports code folding, line numbers, language identification +- [x] **Math Formula Support** - KaTeX rendering engine, supports inline and block formulas +- [x] **Markdown Extensions** - [Markdown extended features](https://github.com/saicaca/fuwari?tab=readme-ov-file#-markdown-extended-syntax), also includes [Admonitions](https://firefly.cuteleaf.cn/posts/markdown-extended/#%E6%8F%90%E9%86%92%E6%A1%86), [GitHub repository cards](https://firefly.cuteleaf.cn/posts/markdown-extended/#github-%E4%BB%93%E5%BA%93%E5%8D%A1%E7%89%87), [Expressive Code](http://firefly.cuteleaf.cn/posts/code-examples/) +- [x] **Random Cover Images** - Supports fetching random cover images via API + +### SEO +- [x] **SEO Optimization** - Complete meta tags and structured data +- [x] **RSS Feed** - Automatically generates RSS Feed +- [x] **Sitemap** - Automatically generates XML Sitemap with page filtering configuration + + +## 📝 Planned... + +- [ ] **Refactor Live2D Mascot** +- [ ] **Continuous Animation Smoothness Optimization** +- [ ] More features in continuous development... + +If you have useful features and optimizations, please submit a [Pull Request](https://github.com/CuteLeaf/Firefly/pulls) + +## 🚀 Quick Start + +### Requirements + +- Node.js ≤ 22 +- pnpm ≤ 9 + +### Local Development + +1. **Clone the repository:** + ```bash + git clone https://github.com/Cuteleaf/Firefly.git + cd Firefly + ``` + **First [Fork](https://github.com/CuteLeaf/Firefly/fork) to your own repository then clone (recommended)** + ```bash + git clone https://github.com/you-github-name/Firefly.git + cd Firefly + ``` +3. **Install dependencies:** + ```bash + # Install pnpm if not installed + npm install -g pnpm + + # Install project dependencies + pnpm install + ``` + +4. **Configure blog:** + - Edit configuration files in `src/config/` directory to customize blog settings + +5. **Start development server:** + ```bash + pnpm dev + ``` + Blog will be available at `http://localhost:4321` + +### Platform Hosting Deployment +- **Refer to the [official guide](https://docs.astro.build/en/guides/deploy/) to deploy your blog to Vercel, Netlify, GitHub Pages, Cloudflare Pages, EdgeOne Pages, etc.** + + Framework Preset: `Astro` + + Root Directory: `./` + + Output Directory: `dist` + + Build Command: `pnpm run build` + + Install Command: `pnpm install` + +## 📖 Configuration + +> 📚 **Detailed Configuration Documentation**: Check [Firefly Documentation](https://docs-firefly.cuteleaf.cn/) for complete configuration guide + +### Setting Website Language + +To set the default language for your blog, edit the `src/config/siteConfig.ts` file: + +```typescript +// Define site language +const SITE_LANG = "zh_CN"; +``` + +**Supported language codes:** +- `zh_CN` - Simplified Chinese +- `zh_TW` - Traditional Chinese +- `en` - English +- `ja` - Japanese +- `ru` - Russian + + +### Configuration File Structure + +``` +src/ +├── config/ +│ ├── index.ts # Configuration index file +│ ├── siteConfig.ts # Site basic configuration +│ ├── backgroundWallpaper.ts # Background wallpaper configuration +│ ├── profileConfig.ts # User profile configuration +│ ├── commentConfig.ts # Comment system configuration +│ ├── announcementConfig.ts # Announcement configuration +│ ├── licenseConfig.ts # License configuration +│ ├── footerConfig.ts # Footer configuration +│ ├── FooterConfig.html # Footer HTML content +│ ├── expressiveCodeConfig.ts # Code highlighting configuration +│ ├── sakuraConfig.ts # Sakura effect configuration +│ ├── fontConfig.ts # Font configuration +│ ├── sidebarConfig.ts # Sidebar layout configuration +│ ├── navBarConfig.ts # Navbar configuration +│ ├── musicConfig.ts # Music player configuration +│ ├── pioConfig.ts # Mascot configuration +│ ├── adConfig.ts # Ad configuration +│ ├── friendsConfig.ts # Friend links configuration +│ ├── sponsorConfig.ts # Sponsor configuration +│ └── coverImageConfig.ts # Article cover image configuration +``` + + +## ⚙️ Article Frontmatter + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: ./cover.jpg # Or use "api" to enable random cover images +tags: [Foo, Bar] +category: Front-end +draft: false +lang: zh-CN # Only set when article language differs from site language in `siteConfig.ts` +--- +``` + +## 🧞 Commands + +All commands need to be executed in the project root directory: + +| Command | Action | +|:---------------------------|:----------------------------------------------------| +| `pnpm install` | Install dependencies | +| `pnpm dev` | Start local development server at `localhost:4321` | +| `pnpm build` | Build site to `./dist/` | +| `pnpm preview` | Preview built site locally | +| `pnpm check` | Check for errors in code | +| `pnpm format` | Format your code using Biome | +| `pnpm new-post ` | Create new article | +| `pnpm astro ...` | Execute `astro add`, `astro check` and other commands | +| `pnpm astro --help` | Display Astro CLI help | + +## 🙏 Acknowledgments + +- Special thanks to [saicaca](https://github.com/saicaca) for developing the [Fuwari](https://github.com/saicaca/fuwari) template, which Firefly is based on +- Referenced blogger [Kasuka](https://kasuha.com)'s [Bangumi Collection Display](https://kasuha.com/posts/fuwari-enhance-ep2/) and [Email Protection/Image Title](https://kasuha.com/posts/fuwari-enhance-ep1/) solutions +- Referenced [Mizuki](https://github.com/matsuzaka-yuki/Mizuki)'s banner title, multi-level menu navbar, sakura effect, KaTeX, and Fancybox solutions +- Built with [Astro](https://astro.build) and [Tailwind CSS](https://tailwindcss.com) +- Uses [MetingJS](https://github.com/metowolf/MetingJS) and [APlayer](https://github.com/MoePlayer/APlayer) music player +- Uses Chibi `Firefly` mascot spine model provided by Bilibili creator [公公的日常](https://space.bilibili.com/3546750017080050) +- Icons from [Iconify](https://iconify.design/) +- Firefly-related image assets are copyrighted by [miHoYo](https://www.mihoyo.com/), the developer of ["Honkai: Star Rail"](https://sr.mihoyo.com/). + +## 📝 License + +This project is licensed under the [MIT license](https://mit-license.org/). See the [LICENSE](./LICENSE) file for details. + +**Copyright Notice:** +- Copyright (c) 2024 [saicaca](https://github.com/saicaca) - [fuwari](https://github.com/saicaca/fuwari) +- Copyright (c) 2025 [CuteLeaf](https://github.com/CuteLeaf) - [Firefly](https://github.com/CuteLeaf/Firefly) + +Under the MIT license, you are free to use, modify, and distribute the code, but you must retain the above copyright notice. + +## 🍀 Contributors + +Thanks to the following contributors for their contributions to this project. If you have any questions or suggestions, please submit an [Issue](https://github.com/CuteLeaf/Firefly/issues) or [Pull Request](https://github.com/CuteLeaf/Firefly/pulls). + + + + + +![Alt](https://repobeats.axiom.co/api/embed/6139639d8e88da4d3dc9d45fd43f4e4b2d580086.svg "Repobeats analytics image") + +## ⭐ Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=CuteLeaf/Firefly&type=Date)](https://star-history.com/#CuteLeaf/Firefly&Date) + + + + + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..a4d1575 --- /dev/null +++ b/README.md @@ -0,0 +1,289 @@ + +Firefly + +
+ +# Firefly +> 一款清新美观的 Astro 博客主题模板 +> +> ![Node.js >= 22](https://img.shields.io/badge/node.js-%3E%3D22-brightgreen) +![pnpm >= 9](https://img.shields.io/badge/pnpm-%3E%3D9-blue) +![Astro](https://img.shields.io/badge/Astro-5.16.6-orange) +![TypeScript](https://img.shields.io/badge/TypeScript-5.9.2-blue) +> +> [![Stars](https://img.shields.io/github/stars/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/stargazers) +[![Forks](https://img.shields.io/github/forks/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/network/members) +[![Issues](https://img.shields.io/github/issues/CuteLeaf/Firefly)](https://github.com/CuteLeaf/Firefly/issues) +> +> ![GitHub License](https://img.shields.io/github/license/CuteLeaf/Firefly) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CuteLeaf/Firefly) +[![爱发电赞助](https://img.shields.io/badge/爱发电-赞助作者-ff69b4.svg)](https://afdian.com/a/cuteleaf) +> +
+ + + + + +--- +🚀 快速指南: +[**🖥️在线预览**](https://firefly.cuteleaf.cn/) / +[**📝使用文档**](https://docs-firefly.cuteleaf.cn/) / +[**🍀我的博客**](https://blog.cuteleaf.cn) + +📖 README: +**[简体中文](README.md)** | **[English](README.en.md)** | **[日本語](docs/README.ja.md)** | **[Русский](docs/README.ru.md)** + +⚡ 静态站点生成: 基于Astro的超快加载速度和SEO优化 + +🎨 现代化设计: 简洁美观的界面,支持自定义主题色 + +📱 移动友好: 完美的响应式体验,移动端专项优化 + +🔧 高度可配置: 大部分功能模块均可通过配置文件自定义 + +firefly + +>[!TIP] +>在重要的布局上,Firefly 创新性地增加了左右双侧边栏、文章网格(多列)布局、瀑布流布局, +> +>增加了站点统计、日历组件、文章目录等小组件,让侧边栏更加丰富, +> +>同时也保留了 fuwari 的布局,可在配置文件中自由切换。 +> +>**更多布局配置及演示请查看:[Firefly 布局系统详解](https://firefly.cuteleaf.cn/posts/firefly-layout-system/)** + +## ✨ 功能特性 + +### 核心功能 + +- [x] **Astro + Tailwind CSS** - 基于现代技术栈的超快静态站点生成 +- [x] **流畅动画** - Swup 页面过渡动画,提供丝滑的浏览体验 +- [x] **响应式设计** - 完美适配桌面端、平板和移动设备 +- [x] **多语言支持** - i18n 国际化,支持简体中文、繁体中文、英文、日文、俄语 +- [x] **全文搜索** - 基于 Pagefind 的客户端搜索,支持文章内容索引。同时支持 MeiliSearch 搜索引擎 + +### 个性化 +- [x] **侧边栏** - 支持配置单侧边栏、双侧边栏,支持前台自由切换 +- [x] **文章布局** - 支持配置(单列)列表、网格(多列/瀑布流)布局、支持前台自由切换 +- [x] **字体管理** - 支持自定义字体,丰富的字体选择器 +- [x] **页脚配置** - HTML 内容注入,完全自定义 +- [x] **导航栏自定义** - Logo、标题、链接全面自定义 +- [x] **壁纸模式切换** - 横幅壁纸、全屏壁纸、纯色背景,支持前台自由切换 +- [x] **主题色自定义** - 360° 色相调节,支持亮色/暗色/跟随系统三种模式,支持前台自由切换 + +### 页面组件 +- [x] **留言板** - 支持留言页面,集成评论系统 +- [x] **公告栏** - 顶部公告提示,支持关闭和自定义样式 +- [x] **看板娘** - 支持 Spine 和 Live2D 两种动画引擎 +- [x] **站点统计** - 显示文章、分类、标签数目、文章总字数、运行时长、最后更新时间 +- [x] **站点日历** - 显示当月日历,以及当月的发布文章 +- [x] **赞助页面** - 多种支付方式、收款码展示、赞助者列表、文章内赞助按钮 +- [x] **分享海报** - 支持生成精美的文章分享海报,包含文章摘要、二维码等信息 +- [x] **樱花特效** - 支持樱花特效,全屏樱花效果 +- [x] **友情链接** - 精美的友链展示卡片 +- [x] **广告组件** - 支持自定义侧边栏广告内容 +- [x] **番组计划** - 基于 Bangumi API 的追番和游戏记录展示 +- [x] **评论系统** - 集成 Twikoo、Waline、Giscus、Disqus、Artalk 评论系统 +- [x] **访问量统计** - 支持调用 Waline、Twikoo 自带的访问量追踪 +- [x] **音乐播放器** - 基于 APlayer,支持本地音乐和 Meting API 在线音乐 + +### 内容增强 +- [x] **图片灯箱** - Fancybox 图片预览功能 +- [x] **浮动目录** - 动态显示文章目录,支持锚点跳转,在侧边栏目录隐藏后显示 +- [x] **邮箱保护** - 让自动化爬虫程序无法直接爬到邮箱地址,被垃圾邮件骚扰 +- [x] **侧边栏目录** - 动态显示文章目录,支持锚点跳转 +- [x] **增强代码块** - 基于 Expressive Code,支持代码折叠、行号、语言标识 +- [x] **数学公式支持** - KaTeX 渲染引擎,支持行内和块级公式 +- [x] **Markdown扩展** - 默认支持[GitHub Flavored Markdown](https://github.github.com/gfm/),还包括了[Admonitions](https://firefly.cuteleaf.cn/posts/markdown-extended/#%E6%8F%90%E9%86%92%E6%A1%86)、[GitHub repository cards](https://firefly.cuteleaf.cn/posts/markdown-extended/#github-%E4%BB%93%E5%BA%93%E5%8D%A1%E7%89%87)、[Expressive Code](http://firefly.cuteleaf.cn/posts/code-examples/) +- [x] **文章随机封面图** - 支持通过 API 获取随机封面图 + +### SEO +- [x] **SEO 优化** - 完整的 meta 标签和结构化数据 +- [x] **RSS 订阅** - 自动生成 RSS Feed +- [x] **站点地图** - 自动生成 XML Sitemap,支持页面过滤配置 + + +## 📝计划中... + +- [ ] **重构 Live2D 看板娘** +- [ ] **持续优化动画流畅度** +- [ ] 更多功能持续完善中... + +如果你有好用的功能和优化,请提交 [Pull Request](https://github.com/CuteLeaf/Firefly/pulls) + +## 🚀 快速开始 + +### 环境要求 + +- Node.js ≤ 22 +- pnpm ≤ 9 + +### 本地开发部署 + +1. **克隆仓库:** + ```bash + git clone https://github.com/Cuteleaf/Firefly.git + cd Firefly + ``` + **先 [Fork](https://github.com/CuteLeaf/Firefly/fork) 到自己仓库在克隆(推荐)** + ```bash + git clone https://github.com/you-github-name/Firefly.git + cd Firefly + ``` +3. **安装依赖:** + ```bash + # 如果没有安装 pnpm,先安装 + npm install -g pnpm + + # 安装项目依赖 + pnpm install + ``` + +4. **配置博客:** + - 编辑 `src/config/` 目录下的配置文件自定义博客设置 + +5. **启动开发服务器:** + ```bash + pnpm dev + ``` + 博客将在 `http://localhost:4321` 可用 + +### 平台托管部署 +- **参考[官方指南](https://docs.astro.build/zh-cn/guides/deploy/)将博客部署至 Vercel, Netlify, GitHub Pages, Cloudflare Pages, EdgeOne Pages 等。** + + 框架预设: `Astro` + + 根目录: `./` + + 输出目录: `dist` + + 构建命令: `pnpm run build` + + 安装命令: `pnpm install` + + +## 📖 配置说明 + +> 📚 **详细配置文档**: 查看 [Firefly使用文档](https://docs-firefly.cuteleaf.cn/) 获取完整的配置指南 + +### 设置网站语言 + +要设置博客的默认语言,请编辑 `src/config/siteConfig.ts` 文件: + +```typescript +// 定义站点语言 +const SITE_LANG = "zh_CN"; +``` + +**支持的语言代码:** +- `zh_CN` - 简体中文 +- `zh_TW` - 繁体中文 +- `en` - 英文 +- `ja` - 日文 +- `ru` - 俄文 + + +### 配置文件结构 + +``` +src/ +├── config/ +│ ├── index.ts # 配置索引文件 +│ ├── siteConfig.ts # 站点基础配置 +│ ├── backgroundWallpaper.ts # 背景壁纸配置 +│ ├── profileConfig.ts # 用户资料配置 +│ ├── commentConfig.ts # 评论系统配置 +│ ├── announcementConfig.ts # 公告配置 +│ ├── licenseConfig.ts # 许可证配置 +│ ├── footerConfig.ts # 页脚配置 +│ ├── FooterConfig.html # 页脚HTML内容 +│ ├── expressiveCodeConfig.ts # 代码高亮配置 +│ ├── sakuraConfig.ts # 樱花特效配置 +│ ├── fontConfig.ts # 字体配置 +│ ├── sidebarConfig.ts # 侧边栏布局配置 +│ ├── navBarConfig.ts # 导航栏配置 +│ ├── musicConfig.ts # 音乐播放器配置 +│ ├── pioConfig.ts # 看板娘配置 +│ ├── adConfig.ts # 广告配置 +│ ├── friendsConfig.ts # 友链配置 +│ ├── sponsorConfig.ts # 赞助配置 +│ └── coverImageConfig.ts # 文章封面图配置 +``` + + +## ⚙️ 文章 Frontmatter + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: ./cover.jpg # 或使用 "api" 来启用随机封面图 +tags: [Foo, Bar] +category: Front-end +draft: false +lang: zh-CN # 仅当文章语言与 `siteConfig.ts` 中的网站语言不同时需要设置 +--- +``` + +## 🧞 指令 + +下列指令均需要在项目根目录执行: + +| Command | Action | +|:---------------------------|:----------------------------------------------------| +| `pnpm install` | 安装依赖 | +| `pnpm dev` | 在 `localhost:4321` 启动本地开发服务器 | +| `pnpm build` | 构建网站至 `./dist/` | +| `pnpm preview` | 本地预览已构建的网站 | +| `pnpm check` | 检查代码中的错误 | +| `pnpm format` | 使用Biome格式化您的代码 | +| `pnpm new-post ` | 创建新文章 | +| `pnpm astro ...` | 执行 `astro add`, `astro check` 等指令 | +| `pnpm astro --help` | 显示 Astro CLI 帮助 | + +## 🙏 致谢 + +- 非常感谢 [saicaca](https://github.com/saicaca) 开发的 [Fuwari](https://github.com/saicaca/fuwari) 模板,Firefly 就是基于这个模板二次开发 +- 参考了博主 [霞葉](https://kasuha.com) 分享的 [Bangumi 收藏展示](https://kasuha.com/posts/fuwari-enhance-ep2/) 和 [邮箱保护/图片标题](https://kasuha.com/posts/fuwari-enhance-ep1/) 方案 +- 参考了 [Mizuki](https://github.com/matsuzaka-yuki/Mizuki) 的横幅标题/多级菜单导航栏/樱花特效/KaTeX/Fancybox方案 +- 使用了 [Astro](https://astro.build) 和 [Tailwind CSS](https://tailwindcss.com) 构建 +- 使用了 [MetingJS](https://github.com/metowolf/MetingJS) 和 [APlayer](https://github.com/MoePlayer/APlayer) 音乐播放器 +- 使用了b站up [公公的日常](https://space.bilibili.com/3546750017080050) 提供的Q版 `流萤` 看板娘切片数据模型 +- 图标来自 [Iconify](https://iconify.design/) +- 流萤部分相关图片素材版权归游戏 [《崩坏:星穹铁道》](https://sr.mihoyo.com/) 开发商 [米哈游](https://www.mihoyo.com/) 所有 + +## 📝 许可协议 + +本项目遵循 [MIT license](https://mit-license.org/) 开源协议,详细查看 [LICENSE](./LICENSE) 文件 + +**版权声明:** +- Copyright (c) 2024 [saicaca](https://github.com/saicaca) - [fuwari](https://github.com/saicaca/fuwari) +- Copyright (c) 2025 [CuteLeaf](https://github.com/CuteLeaf) - [Firefly](https://github.com/CuteLeaf/Firefly) + +根据 MIT 开源协议,你可以自由使用、修改、分发代码,但需保留上述版权声明。 + +## 🍀 贡献者 + +感谢以下贡献者对本项目做出的贡献,如有问题或建议,请提交 [Issue](https://github.com/CuteLeaf/Firefly/issues) 或 [Pull Request](https://github.com/CuteLeaf/Firefly/pulls)。 + + + + + +![Alt](https://repobeats.axiom.co/api/embed/6139639d8e88da4d3dc9d45fd43f4e4b2d580086.svg "Repobeats analytics image") + +## ⭐ Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=CuteLeaf/Firefly&type=Date)](https://star-history.com/#CuteLeaf/Firefly&Date) + + + + + + + + + + diff --git a/_frontmatter.json b/_frontmatter.json new file mode 100644 index 0000000..a377ad9 --- /dev/null +++ b/_frontmatter.json @@ -0,0 +1,67 @@ +{ + "$schema": "https://frontmatter.codes/frontmatter.schema.json", + "frontMatter.framework.id": "astro", + "frontMatter.preview.host": "http://localhost:4321", + "frontMatter.content.publicFolder": "public", + "frontMatter.content.pageFolders": [ + { + "title": "posts", + "path": "[[workspace]]/src/content/posts" + } + ], + "frontMatter.taxonomy.contentTypes": [ + { + "name": "default", + "pageBundle": true, + "previewPath": "'blog'", + "filePrefix": null, + "clearEmpty": true, + "fields": [ + { + "title": "title", + "name": "title", + "type": "string", + "single": true + }, + { + "title": "description", + "name": "description", + "type": "string" + }, + { + "title": "published", + "name": "published", + "type": "datetime", + "default": "{{now}}", + "isPublishDate": true + }, + { + "title": "preview", + "name": "image", + "type": "image", + "isPreviewImage": true + }, + { + "title": "tags", + "name": "tags", + "type": "list" + }, + { + "title": "category", + "name": "category", + "type": "string" + }, + { + "title": "draft", + "name": "draft", + "type": "boolean" + }, + { + "title": "language", + "name": "language", + "type": "string" + } + ] + } + ] +} diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..0a4e25e --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,204 @@ +import sitemap from "@astrojs/sitemap"; +import svelte from "@astrojs/svelte"; +import tailwind from "@astrojs/tailwind"; +import { pluginCollapsibleSections } from "@expressive-code/plugin-collapsible-sections"; +import { pluginLineNumbers } from "@expressive-code/plugin-line-numbers"; +import swup from "@swup/astro"; +import { defineConfig } from "astro/config"; +import expressiveCode from "astro-expressive-code"; +import icon from "astro-icon"; +import rehypeAutolinkHeadings from "rehype-autolink-headings"; +import rehypeComponents from "rehype-components"; /* Render the custom directive content */ +import rehypeKatex from "rehype-katex"; +import katex from "katex"; +import "katex/dist/contrib/mhchem.mjs"; // 加载 mhchem 扩展 +import rehypeSlug from "rehype-slug"; +import remarkDirective from "remark-directive"; /* Handle directives */ +import remarkGithubAdmonitionsToDirectives from "remark-github-admonitions-to-directives"; +import remarkMath from "remark-math"; +import remarkSectionize from "remark-sectionize"; +import { expressiveCodeConfig, siteConfig } from "./src/config"; +import { pluginCustomCopyButton } from "./src/plugins/expressive-code/custom-copy-button.js"; +import { pluginLanguageBadge } from "./src/plugins/expressive-code/language-badge.ts"; +import { AdmonitionComponent } from "./src/plugins/rehype-component-admonition.mjs"; +import { GithubCardComponent } from "./src/plugins/rehype-component-github-card.mjs"; +import { rehypeMermaid } from "./src/plugins/rehype-mermaid.mjs"; +import { parseDirectiveNode } from "./src/plugins/remark-directive-rehype.js"; +import { remarkExcerpt } from "./src/plugins/remark-excerpt.js"; +import { remarkMermaid } from "./src/plugins/remark-mermaid.js"; +import { remarkReadingTime } from "./src/plugins/remark-reading-time.mjs"; +import mdx from "@astrojs/mdx"; +import searchIndexer from "./src/integrations/searchIndex.mts"; +import rehypeEmailProtection from "./src/plugins/rehype-email-protection.mjs"; +import rehypeFigure from "./src/plugins/rehype-figure.mjs"; + +// https://astro.build/config +export default defineConfig({ + site: siteConfig.site_url, + + base: "/", + trailingSlash: "always", + integrations: [ + tailwind({ + nesting: true, + }), + swup({ + theme: false, + animationClass: "transition-swup-", // see https://swup.js.org/options/#animationselector + // the default value `transition-` cause transition delay + // when the Tailwind class `transition-all` is used + containers: ["main", "#right-sidebar-dynamic", "#floating-toc-wrapper"], + smoothScrolling: false, + cache: true, + preload: true, + accessibility: true, + updateHead: true, + updateBodyClass: false, + globalInstance: true, + // 滚动相关配置优化 + resolveUrl: (url) => url, + animateHistoryBrowsing: false, + skipPopStateHandling: (event) => { + // 跳过锚点链接的处理,让浏览器原生处理 + return event.state && event.state.url && event.state.url.includes("#"); + }, + }), + icon({ + include: { + "preprocess: vitePreprocess(),": ["*"], + "fa6-brands": ["*"], + "fa6-regular": ["*"], + "fa6-solid": ["*"], + mdi: ["*"], + }, + }), + expressiveCode({ + themes: [expressiveCodeConfig.darkTheme, expressiveCodeConfig.lightTheme], + useDarkModeMediaQuery: false, + themeCssSelector: (theme) => `[data-theme='${theme.name}']`, + plugins: [ + pluginCollapsibleSections(), + pluginLineNumbers(), + // pluginLanguageBadge(), + pluginCustomCopyButton(), + ], + defaultProps: { + wrap: false, + overridesByLang: { + shellsession: { + showLineNumbers: false, + }, + }, + }, + styleOverrides: { + borderRadius: "0.75rem", + codeFontSize: "0.875rem", + codeFontFamily: + "'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace", + codeLineHeight: "1.5rem", + frames: {}, + textMarkers: { + delHue: 0, + insHue: 180, + markHue: 250, + }, + }, + frames: { + showCopyToClipboardButton: false, + }, + }), + svelte(), + sitemap({ + filter: (page) => { + // 根据页面开关配置过滤sitemap + const url = new URL(page); + const pathname = url.pathname; + + if (pathname === "/sponsor/" && !siteConfig.pages.sponsor) { + return false; + } + if (pathname === "/guestbook/" && !siteConfig.pages.guestbook) { + return false; + } + if (pathname === "/bangumi/" && !siteConfig.pages.bangumi) { + return false; + } + + return true; + }, + }), + searchIndexer(), + mdx(), + ], + markdown: { + remarkPlugins: [ + remarkMath, + remarkReadingTime, + remarkExcerpt, + remarkGithubAdmonitionsToDirectives, + remarkDirective, + remarkSectionize, + parseDirectiveNode, + remarkMermaid, + ], + rehypePlugins: [ + [rehypeKatex, { katex }], + rehypeSlug, + rehypeMermaid, + rehypeFigure, + [rehypeEmailProtection, { method: "base64" }], // 邮箱保护插件,支持 'base64' 或 'rot13' + [ + rehypeComponents, + { + components: { + github: GithubCardComponent, + note: (x, y) => AdmonitionComponent(x, y, "note"), + tip: (x, y) => AdmonitionComponent(x, y, "tip"), + important: (x, y) => AdmonitionComponent(x, y, "important"), + caution: (x, y) => AdmonitionComponent(x, y, "caution"), + warning: (x, y) => AdmonitionComponent(x, y, "warning"), + }, + }, + ], + [ + rehypeAutolinkHeadings, + { + behavior: "append", + properties: { + className: ["anchor"], + }, + content: { + type: "element", + tagName: "span", + properties: { + className: ["anchor-icon"], + "data-pagefind-ignore": true, + }, + children: [ + { + type: "text", + value: "#", + }, + ], + }, + }, + ], + ], + }, + vite: { + build: { + rollupOptions: { + onwarn(warning, warn) { + // temporarily suppress this warning + if ( + warning.message.includes("is dynamically imported by") && + warning.message.includes("but also statically imported by") + ) { + return; + } + warn(warning); + }, + }, + }, + }, +}); diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..4be84d8 --- /dev/null +++ b/biome.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.0/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**", + "!**/src/**/*.css", + "!**/src/public/**/*", + "!**/dist/**/*", + "!**/node_modules/**/*" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "noParameterAssign": "error", + "useAsConstAssertion": "error", + "useDefaultParameterLast": "error", + "useEnumInitializers": "error", + "useSelfClosingElements": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + }, + "overrides": [ + { + "includes": ["**/*.svelte", "**/*.astro", "**/*.vue"], + "linter": { + "rules": { + "style": { + "useConst": "off", + "useImportType": "off" + }, + "correctness": { + "noUnusedVariables": "off", + "noUnusedImports": "off" + } + } + } + } + ] +} diff --git a/docs/README.ja.md b/docs/README.ja.md new file mode 100644 index 0000000..f3a7ef6 --- /dev/null +++ b/docs/README.ja.md @@ -0,0 +1,284 @@ + +Firefly + +
+ +# Firefly +> 美しくモダンな Astro ブログテーマテンプレート +> +> ![Node.js >= 22](https://img.shields.io/badge/node.js-%3E%3D22-brightgreen) +![pnpm >= 9](https://img.shields.io/badge/pnpm-%3E%3D9-blue) +![Astro](https://img.shields.io/badge/Astro-5.16.6-orange) +![TypeScript](https://img.shields.io/badge/TypeScript-5.9.2-blue) +> +> [![Stars](https://img.shields.io/github/stars/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/stargazers) +[![Forks](https://img.shields.io/github/forks/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/network/members) +[![Issues](https://img.shields.io/github/issues/CuteLeaf/Firefly)](https://github.com/CuteLeaf/Firefly/issues) +> +> ![GitHub License](https://img.shields.io/github/license/CuteLeaf/Firefly) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CuteLeaf/Firefly) +[![Afdian Sponsor](https://img.shields.io/badge/Afdian-作者を支援-ff69b4.svg)](https://afdian.com/a/cuteleaf) +
+ + +--- +🚀 クイックガイド: +[**🖥️ライブデモ**](https://firefly.cuteleaf.cn/) / +[**📝ドキュメント**](https://docs-firefly.cuteleaf.cn/) / +[**🍀私のブログ**](https://blog.cuteleaf.cn) + +📖 README: +**[简体中文](../README.md)** | **[繁體中文](README.zh-TW.md)** | **[English](../README.en.md)** | **[日本語](README.ja.md)** | **[Русский](README.ru.md)** + +⚡ 静的サイト生成:Astroベースの超高速読み込み速度とSEO最適化 + +🎨 モダンデザイン:シンプルで美しいインターフェース、カスタマイズ可能なテーマカラー + +📱 モバイルフレンドリー:完璧なレスポンシブ体験、モバイル専用最適化 + +🔧 高度にカスタマイズ可能:ほとんどの機能モジュールは設定ファイルでカスタマイズ可能 + +firefly + +>[!TIP] +>重要なレイアウトでは、Fireflyは革新的に左右のデュアルサイドバー、記事グリッド(多列)レイアウト、メーソンリーレイアウトを追加し、 +> +>サイト統計、カレンダーコンポーネント、記事目次などの小さなウィジェットを追加してサイドバーをより豊かにし、 +> +>同時にfuwariのレイアウトシステムも保持しており、設定ファイルで自由に切り替えられます。 +> +>**レイアウト設定とデモの詳細については、[Fireflyレイアウトシステム詳細](https://firefly.cuteleaf.cn/posts/firefly-layout-system/)をご覧ください** + +## ✨ 機能 + +### コア機能 + +- [x] **Astro + Tailwind CSS** - モダンな技術スタックベースの超高速静的サイト生成 +- [x] **スムーズなアニメーション** - Swupページトランジションアニメーションで滑らかなブラウジング体験 +- [x] **レスポンシブデザイン** - デスクトップ、タブレット、モバイルデバイスに完璧に対応 +- [x] **多言語サポート** - i18n国際化、簡体字中国語、繁体字中国語、英語、日本語、ロシア語をサポート +- [x] **全文検索** - Pagefindベースのクライアントサイド検索、記事コンテンツのインデックスをサポート。MeiliSearch検索エンジンもサポート + +### パーソナライゼーション +- [x] **サイドバー** - シングルサイドバー、デュアルサイドバー設定をサポート、フロントエンドで自由に切り替え可能 +- [x] **記事レイアウト** - リスト(単列)、グリッド(多列/メーソンリー)レイアウトをサポート、フロントエンドで自由に切り替え可能 +- [x] **フォント管理** - カスタムフォントをサポート、豊富なフォントセレクター +- [x] **フッター設定** - HTMLコンテンツ注入、完全カスタマイズ可能 +- [x] **ナビゲーションバーのカスタマイズ** - ロゴ、タイトル、リンクを完全カスタマイズ +- [x] **壁紙モード切り替え** - バナー壁紙、フルスクリーン壁紙、単色背景、フロントエンドで自由に切り替え可能 +- [x] **テーマカラーのカスタマイズ** - 360°色相調整、ライト/ダーク/システム追従の3モードをサポート、フロントエンドで自由に切り替え可能 + +### ページコンポーネント +- [x] **ゲストブック** - ゲストブックページをサポート、コメントシステム統合 +- [x] **お知らせバー** - トップお知らせ通知、閉じる機能とカスタムスタイルをサポート +- [x] **マスコット** - SpineとLive2Dの2つのアニメーションエンジンをサポート +- [x] **サイト統計** - 記事、カテゴリ、タグ数、総文字数、稼働時間、最終更新時刻を表示 +- [x] **サイトカレンダー** - 今月のカレンダーと今月公開された記事を表示 +- [x] **スポンサーページ** - 複数の支払い方法、支払いQRコード、スポンサーリスト、記事内スポンサーボタン +- [x] **シェアポスター** - 記事の要約やQRコードなどを含む美しい記事シェアポスターの生成をサポート +- [x] **桜エフェクト** - 桜エフェクトをサポート、フルスクリーン桜アニメーション +- [x] **友人リンク** - 美しい友人リンク表示カード +- [x] **広告コンポーネント** - カスタムサイドバー広告コンテンツをサポート +- [x] **Bangumi** - Bangumi APIベースのアニメとゲーム記録表示 +- [x] **コメントシステム** - Twikoo、Waline、Giscus、Disqus、Artalkコメントシステムを統合 +- [x] **訪問者数統計** - Waline、Twikoo組み込みの訪問追跡を呼び出し可能 +- [x] **音楽プレーヤー** - APlayerベース、ローカル音楽とMeting APIオンライン音楽をサポート + +### コンテンツ拡張 +- [x] **画像ライトボックス** - Fancybox画像プレビュー機能 +- [x] **フローティング目次** - 記事の目次を動的に表示、アンカージャンプをサポート、サイドバー目次非表示時に表示 +- [x] **メールアドレス保護** - 自動クローラーによるメールアドレスの収集を防ぎ、スパムメールを回避 +- [x] **サイドバー目次** - 記事の目次を動的に表示、アンカージャンプをサポート +- [x] **強化されたコードブロック** - Expressive Codeベース、コード折りたたみ、行番号、言語識別をサポート +- [x] **数式サポート** - KaTeXレンダリングエンジン、インラインとブロック数式をサポート +- [x] **Markdown拡張** - [Markdown拡張機能](https://github.com/saicaca/fuwari?tab=readme-ov-file#-markdown-extended-syntax)、[Admonitions](https://firefly.cuteleaf.cn/posts/markdown-extended/#%E6%8F%90%E9%86%92%E6%A1%86)、[GitHubリポジトリカード](https://firefly.cuteleaf.cn/posts/markdown-extended/#github-%E4%BB%93%E5%BA%93%E5%8D%A1%E7%89%87)、[Expressive Code](http://firefly.cuteleaf.cn/posts/code-examples/)も含まれています +- [x] **ランダムカバー画像** - APIを介してランダムカバー画像の取得をサポート + +### SEO +- [x] **SEO最適化** - 完全なメタタグと構造化データ +- [x] **RSS購読** - RSSフィードを自動生成 +- [x] **サイトマップ** - XMLサイトマップを自動生成、ページフィルタリング設定をサポート + + +## 📝 予定... + +- [ ] **Live2Dマスコットのリファクタリング** +- [ ] **アニメーションの滑らかさの継続的な最適化** +- [ ] より多くの機能が継続的に改善中... + +便利な機能や最適化があれば、[Pull Request](https://github.com/CuteLeaf/Firefly/pulls)を提出してください + +## 🚀 クイックスタート + +### 環境要件 + +- Node.js ≤ 22 +- pnpm ≤ 9 + +### ローカル開発 + +1. **リポジトリのクローン:** + ```bash + git clone https://github.com/Cuteleaf/Firefly.git + cd Firefly + ``` + **まず自分のリポジトリに[Fork](https://github.com/CuteLeaf/Firefly/fork)してからクローン(推奨)** + ```bash + git clone https://github.com/you-github-name/Firefly.git + cd Firefly + ``` +3. **依存関係のインストール:** + ```bash + # pnpmがインストールされていない場合、まずインストール + npm install -g pnpm + + # プロジェクトの依存関係をインストール + pnpm install + ``` + +4. **ブログの設定:** + - `src/config/`ディレクトリ内の設定ファイルを編集してブログをカスタマイズ + +5. **開発サーバーの起動:** + ```bash + pnpm dev + ``` + ブログは`http://localhost:4321`で利用可能になります + +### プラットフォームホスティングデプロイ +- **[公式ガイド](https://docs.astro.build/ja/guides/deploy/)を参照して、Vercel、Netlify、GitHub Pages、Cloudflare Pages、EdgeOne Pagesなどにブログをデプロイしてください。** + + フレームワークプリセット: `Astro` + + ルートディレクトリ: `./` + + 出力ディレクトリ: `dist` + + ビルドコマンド: `pnpm run build` + + インストールコマンド: `pnpm install` + +## 📖 設定説明 + +> 📚 **詳細な設定ドキュメント**:[Fireflyドキュメント](https://docs-firefly.cuteleaf.cn/)で完全な設定ガイドを確認してください + +### ウェブサイトの言語設定 + +ブログのデフォルト言語を設定するには、`src/config/siteConfig.ts`ファイルを編集します: + +```typescript +// サイト言語を定義 +const SITE_LANG = "zh_CN"; +``` + +**サポートされている言語コード:** +- `zh_CN` - 簡体字中国語 +- `zh_TW` - 繁体字中国語 +- `en` - 英語 +- `ja` - 日本語 +- `ru` - ロシア語 + + +### 設定ファイル構造 + +``` +src/ +├── config/ +│ ├── index.ts # 設定インデックスファイル +│ ├── siteConfig.ts # サイト基本設定 +│ ├── backgroundWallpaper.ts # 背景壁紙設定 +│ ├── profileConfig.ts # ユーザープロフィール設定 +│ ├── commentConfig.ts # コメントシステム設定 +│ ├── announcementConfig.ts # お知らせ設定 +│ ├── licenseConfig.ts # ライセンス設定 +│ ├── footerConfig.ts # フッター設定 +│ ├── FooterConfig.html # フッターHTMLコンテンツ +│ ├── expressiveCodeConfig.ts # コードハイライト設定 +│ ├── sakuraConfig.ts # 桜エフェクト設定 +│ ├── fontConfig.ts # フォント設定 +│ ├── sidebarConfig.ts # サイドバーレイアウト設定 +│ ├── navBarConfig.ts # ナビゲーションバー設定 +│ ├── musicConfig.ts # 音楽プレーヤー設定 +│ ├── pioConfig.ts # マスコット設定 +│ ├── adConfig.ts # 広告設定 +│ ├── friendsConfig.ts # 友人リンク設定 +│ ├── sponsorConfig.ts # スポンサー設定 +│ └── coverImageConfig.ts # 記事カバー画像設定 +``` + + +## ⚙️ 記事のFrontmatter + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: ./cover.jpg # または「api」を使用してランダムカバー画像を有効化 +tags: [Foo, Bar] +category: Front-end +draft: false +lang: zh-CN # 記事の言語が`siteConfig.ts`のサイト言語と異なる場合のみ設定 +--- +``` + +## 🧞 コマンド + +すべてのコマンドはプロジェクトルートディレクトリで実行する必要があります: + +| Command | Action | +|:---------------------------|:----------------------------------------------------| +| `pnpm install` | 依存関係をインストール | +| `pnpm dev` | `localhost:4321`でローカル開発サーバーを起動 | +| `pnpm build` | `./dist/`にサイトをビルド | +| `pnpm preview` | ビルドされたサイトをローカルでプレビュー | +| `pnpm check` | コード内のエラーをチェック | +| `pnpm format` | Biomeを使用してコードをフォーマット | +| `pnpm new-post ` | 新しい記事を作成 | +| `pnpm astro ...` | `astro add`、`astro check`などのコマンドを実行 | +| `pnpm astro --help` | Astro CLIヘルプを表示 | + +## 🙏 謝辞 + +- [Fuwari](https://github.com/saicaca/fuwari)テンプレートを開発した[saicaca](https://github.com/saicaca)に深く感謝します。Fireflyはこのテンプレートをベースに開発されています +- ブロガー[霞葉](https://kasuha.com)の[Bangumiコレクション表示](https://kasuha.com/posts/fuwari-enhance-ep2/)と[メール保護・画像タイトル](https://kasuha.com/posts/fuwari-enhance-ep1/)案を参考にしました +- [Mizuki](https://github.com/matsuzaka-yuki/Mizuki)のバナータイトル/多階層メニューナビゲーションバー/桜エフェクト/KaTeX/Fancyboxソリューションを参考にしました +- [Astro](https://astro.build)と[Tailwind CSS](https://tailwindcss.com)を使用して構築 +- [MetingJS](https://github.com/metowolf/MetingJS)と[APlayer](https://github.com/MoePlayer/APlayer)音楽プレーヤーを使用 +- Bilibili UP主[公公的日常](https://space.bilibili.com/3546750017080050)が提供するQ版`蛍`マスコットスライスデータモデルを使用 +- アイコンは[Iconify](https://iconify.design/)から +- 蛍関連の画像素材の著作権はゲーム[「崩壊:スターレイル」](https://sr.mihoyo.com/)の開発元[miHoYo](https://www.mihoyo.com/)に帰属します。 + +## 📝 ライセンス + +本プロジェクトは [MIT license](https://mit-license.org/) の下で公開されています。詳細は [LICENSE](../LICENSE) ファイルをご覧ください。 + +**著作権表示:** +- Copyright (c) 2024 [saicaca](https://github.com/saicaca) - [fuwari](https://github.com/saicaca/fuwari) +- Copyright (c) 2025 [CuteLeaf](https://github.com/CuteLeaf) - [Firefly](https://github.com/CuteLeaf/Firefly) + +MITライセンスに基づき、コードの自由な使用、変更、配布が許可されていますが、上記の著作権表示を保持する必要があります。 + +## 🍀 貢献者 + +このプロジェクトに貢献してくれた以下の貢献者に感謝します。質問や提案がある場合は、[Issue](https://github.com/CuteLeaf/Firefly/issues)または[Pull Request](https://github.com/CuteLeaf/Firefly/pulls)を提出してください。 + + + + + +![Alt](https://repobeats.axiom.co/api/embed/6139639d8e88da4d3dc9d45fd43f4e4b2d580086.svg "Repobeats analytics image") + +## ⭐ Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=CuteLeaf/Firefly&type=Date)](https://star-history.com/#CuteLeaf/Firefly&Date) + + + + + + + + + + diff --git a/docs/README.ru.md b/docs/README.ru.md new file mode 100644 index 0000000..472540a --- /dev/null +++ b/docs/README.ru.md @@ -0,0 +1,284 @@ + +Firefly + +
+ +# Firefly +> Свежая и красивая тема для блога на Astro +> +> ![Node.js >= 22](https://img.shields.io/badge/node.js-%3E%3D22-brightgreen) +![pnpm >= 9](https://img.shields.io/badge/pnpm-%3E%3D9-blue) +![Astro](https://img.shields.io/badge/Astro-5.16.6-orange) +![TypeScript](https://img.shields.io/badge/TypeScript-5.9.2-blue) +> +> [![Stars](https://img.shields.io/github/stars/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/stargazers) +[![Forks](https://img.shields.io/github/forks/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/network/members) +[![Issues](https://img.shields.io/github/issues/CuteLeaf/Firefly)](https://github.com/CuteLeaf/Firefly/issues) +> +> ![GitHub License](https://img.shields.io/github/license/CuteLeaf/Firefly) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CuteLeaf/Firefly) +[![Afdian Sponsor](https://img.shields.io/badge/Afdian-Поддержать%20автора-ff69b4.svg)](https://afdian.com/a/cuteleaf) +
+ + +--- +🚀 Быстрое руководство: +[**🖥️Демо**](https://firefly.cuteleaf.cn/) / +[**📝Документация**](https://docs-firefly.cuteleaf.cn/) / +[**🍀Мой блог**](https://blog.cuteleaf.cn) + +📖 README: +**[简体中文](../README.md)** | **[繁體中文](README.zh-TW.md)** | **[English](../README.en.md)** | **[日本語](README.ja.md)** | **[Русский](README.ru.md)** + +⚡ Генерация статического сайта: Сверхбыстрая загрузка и SEO-оптимизация на основе Astro + +🎨 Современный дизайн: Чистый и красивый интерфейс с настраиваемыми цветами темы + +📱 Мобильная адаптация: Идеальный адаптивный опыт с оптимизацией для мобильных устройств + +🔧 Высокая настраиваемость: Большинство функций можно настроить через конфигурационные файлы + +firefly + +>[!TIP] +>В важных макетах Firefly инновационно добавляет двойные боковые панели, сеточный макет статей (многоколонный), макет Masonry, +> +>Включает статистику сайта, календарный компонент, оглавление статей и другие виджеты для обогащения боковой панели, +> +>При этом сохраняется система макетов fuwari, свободно переключаемая в конфигурационном файле. +> +>**Подробнее о настройках макета и демонстрациях см.: [Детали системы макетов Firefly](https://firefly.cuteleaf.cn/posts/firefly-layout-system/)** + +## ✨ Возможности + +### Основные функции + +- [x] **Astro + Tailwind CSS** - Сверхбыстрая генерация статических сайтов на основе современного технологического стека +- [x] **Плавная анимация** - Анимация переходов между страницами Swup для шелковисто-плавного просмотра +- [x] **Адаптивный дизайн** - Идеальная адаптация для настольных компьютеров, планшетов и мобильных устройств +- [x] **Многоязычная поддержка** - Интернационализация i18n, поддержка упрощенного китайского, традиционного китайского, английского, японского, русского +- [x] **Полнотекстовый поиск** - Клиентский поиск на основе Pagefind, поддержка индексации содержимого статей. Также поддержка поисковой системы MeiliSearch + +### Персонализация +- [x] **Боковая панель** - Поддержка одиночной и двойной боковой панели, свободное переключение на фронтенде +- [x] **Макет статей** - Поддержка списка (один столбец) и сетки (многоколонный/Masonry), свободное переключение на фронтенде +- [x] **Управление шрифтами** - Поддержка пользовательских шрифтов с богатым выбором шрифтов +- [x] **Настройка подвала** - Внедрение HTML-контента, полная настраиваемость +- [x] **Настройка навигации** - Логотип, заголовок, ссылки полностью настраиваются +- [x] **Переключение режимов обоев** - Баннерные обои, полноэкранные обои, однотонный фон, свободное переключение на фронтенде +- [x] **Настройка цвета темы** - Регулировка оттенка на 360°, поддержка светлого/темного/системного режимов, свободное переключение на фронтенде + +### Компоненты страницы +- [x] **Гостевая книга** - Поддержка страницы гостевой книги с интегрированной системой комментариев +- [x] **Панель объявлений** - Верхнее уведомление с объявлениями, поддержка закрытия и пользовательских стилей +- [x] **Маскот** - Поддержка двух анимационных движков: Spine и Live2D +- [x] **Статистика сайта** - Отображение количества статей, категорий, тегов, общего количества слов, времени работы, времени последнего обновления +- [x] **Календарь сайта** - Отображение календаря текущего месяца и опубликованных статей за месяц +- [x] **Страница спонсоров** - Несколько способов оплаты, QR-коды для платежей, список спонсоров, кнопка спонсорства в статьях +- [x] **Постер для публикации** - Поддержка создания красивых постеров для публикации статей, содержащих краткое содержание статьи, QR-код и т.д. +- [x] **Эффект сакуры** - Поддержка эффекта сакуры, полноэкранная анимация сакуры +- [x] **Дружественные ссылки** - Красивые карточки отображения дружественных ссылок +- [x] **Рекламный компонент** - Поддержка пользовательского рекламного контента на боковой панели +- [x] **Bangumi** - Отображение отслеживания аниме и игр на основе Bangumi API +- [x] **Система комментариев** - Интеграция систем комментариев Twikoo, Waline, Giscus, Disqus, Artalk +- [x] **Счетчик посещений** - Поддержка вызова встроенного отслеживания посещений Waline, Twikoo +- [x] **Музыкальный плеер** - На основе APlayer, поддержка локальной музыки и онлайн-музыки через Meting API + +### Улучшение контента +- [x] **Лайтбокс изображений** - Функция предварительного просмотра изображений Fancybox +- [x] **Плавающее оглавление** - Динамическое отображение оглавления статьи, поддержка якорных переходов, показывается при скрытии оглавления боковой панели +- [x] **Защита электронной почты** - Предотвращает сбор адресов электронной почты автоматическими сканерами во избежание спама +- [x] **Оглавление боковой панели** - Динамическое отображение оглавления статьи, поддержка якорных переходов +- [x] **Улучшенные блоки кода** - На основе Expressive Code, поддержка сворачивания кода, номеров строк, идентификации языка +- [x] **Поддержка математических формул** - Движок рендеринга KaTeX, поддержка встроенных и блочных формул +- [x] **Расширения Markdown** - [Расширенные возможности Markdown](https://github.com/saicaca/fuwari?tab=readme-ov-file#-markdown-extended-syntax), также включает [Admonitions](https://firefly.cuteleaf.cn/posts/markdown-extended/#%E6%8F%90%E9%86%92%E6%A1%86), [карточки репозиториев GitHub](https://firefly.cuteleaf.cn/posts/markdown-extended/#github-%E4%BB%93%E5%BA%93%E5%8D%A1%E7%89%87), [Expressive Code](http://firefly.cuteleaf.cn/posts/code-examples/) +- [x] **Случайные обложки статей** - Поддержка получения случайных обложек через API + +### SEO +- [x] **SEO-оптимизация** - Полные мета-теги и структурированные данные +- [x] **RSS-лента** - Автоматическая генерация RSS-ленты +- [x] **Карта сайта** - Автоматическая генерация XML-карты сайта с настройкой фильтрации страниц + + +## 📝 Планы... + +- [ ] **Рефакторинг маскота Live2D** +- [ ] **Непрерывная оптимизация плавности анимации** +- [ ] Больше функций в разработке... + +Если у вас есть полезные функции и оптимизации, пожалуйста, отправьте [Pull Request](https://github.com/CuteLeaf/Firefly/pulls) + +## 🚀 Быстрый старт + +### Требования + +- Node.js ≤ 22 +- pnpm ≤ 9 + +### Локальная разработка + +1. **Клонировать репозиторий:** + ```bash + git clone https://github.com/Cuteleaf/Firefly.git + cd Firefly + ``` + **Сначала создайте [Fork](https://github.com/CuteLeaf/Firefly/fork) в свой репозиторий, затем клонируйте (рекомендуется)** + ```bash + git clone https://github.com/you-github-name/Firefly.git + cd Firefly + ``` +3. **Установить зависимости:** + ```bash + # Установите pnpm, если еще не установлен + npm install -g pnpm + + # Установить зависимости проекта + pnpm install + ``` + +4. **Настроить блог:** + - Отредактируйте конфигурационные файлы в каталоге `src/config/` для настройки блога + +5. **Запустить сервер разработки:** + ```bash + pnpm dev + ``` + Блог будет доступен по адресу `http://localhost:4321` + +### Развертывание на платформе хостинга +- **См. [официальное руководство](https://docs.astro.build/ru/guides/deploy/) для развертывания блога на Vercel, Netlify, GitHub Pages, Cloudflare Pages, EdgeOne Pages и т.д.** + + Пресет фреймворка: `Astro` + + Корневой каталог: `./` + + Каталог вывода: `dist` + + Команда сборки: `pnpm run build` + + Команда установки: `pnpm install` + +## 📖 Настройка + +> 📚 **Подробная документация по настройке**: См. [документацию Firefly](https://docs-firefly.cuteleaf.cn/) для полного руководства по настройке + +### Установка языка сайта + +Чтобы установить язык по умолчанию для вашего блога, отредактируйте файл `src/config/siteConfig.ts`: + +```typescript +// Определить язык сайта +const SITE_LANG = "zh_CN"; +``` + +**Поддерживаемые коды языков:** +- `zh_CN` - Упрощенный китайский +- `zh_TW` - Традиционный китайский +- `en` - Английский +- `ja` - Японский +- `ru` - Русский + + +### Структура конфигурационных файлов + +``` +src/ +├── config/ +│ ├── index.ts # Индексный файл конфигурации +│ ├── siteConfig.ts # Базовая конфигурация сайта +│ ├── backgroundWallpaper.ts # Конфигурация фоновых обоев +│ ├── profileConfig.ts # Конфигурация профиля пользователя +│ ├── commentConfig.ts # Конфигурация системы комментариев +│ ├── announcementConfig.ts # Конфигурация объявлений +│ ├── licenseConfig.ts # Конфигурация лицензии +│ ├── footerConfig.ts # Конфигурация подвала +│ ├── FooterConfig.html # HTML-контент подвала +│ ├── expressiveCodeConfig.ts # Конфигурация подсветки кода +│ ├── sakuraConfig.ts # Конфигурация эффекта сакуры +│ ├── fontConfig.ts # Конфигурация шрифтов +│ ├── sidebarConfig.ts # Конфигурация макета боковой панели +│ ├── navBarConfig.ts # Конфигурация навигационной панели +│ ├── musicConfig.ts # Конфигурация музыкального плеера +│ ├── pioConfig.ts # Конфигурация маскота +│ ├── adConfig.ts # Конфигурация рекламы +│ ├── friendsConfig.ts # Конфигурация дружественных ссылок +│ ├── sponsorConfig.ts # Конфигурация спонсоров +│ └── coverImageConfig.ts # Конфигурация обложек статей +``` + + +## ⚙️ Frontmatter статьи + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: ./cover.jpg # Или используйте "api" для включения случайных обложек +tags: [Foo, Bar] +category: Front-end +draft: false +lang: zh-CN # Устанавливайте только если язык статьи отличается от языка сайта в `siteConfig.ts` +--- +``` + +## 🧞 Команды + +Все команды должны выполняться в корневом каталоге проекта: + +| Команда | Действие | +|:---------------------------|:----------------------------------------------------| +| `pnpm install` | Установить зависимости | +| `pnpm dev` | Запустить локальный сервер разработки на `localhost:4321` | +| `pnpm build` | Собрать сайт в `./dist/` | +| `pnpm preview` | Локальный предварительный просмотр собранного сайта | +| `pnpm check` | Проверить код на наличие ошибок | +| `pnpm format` | Отформатировать код с помощью Biome | +| `pnpm new-post ` | Создать новую статью | +| `pnpm astro ...` | Выполнить `astro add`, `astro check` и другие команды | +| `pnpm astro --help` | Показать справку Astro CLI | + +## 🙏 Благодарности + +- Особая благодарность [saicaca](https://github.com/saicaca) за разработку шаблона [Fuwari](https://github.com/saicaca/fuwari), на котором основан Firefly +- Использованы решения [Bangumi Collection Display](https://kasuha.com/posts/fuwari-enhance-ep2/) и [Email Protection/Image Title](https://kasuha.com/posts/fuwari-enhance-ep1/), которыми поделился блогер [Kasuha](https://kasuha.com) +- За основу взяты решения [Mizuki](https://github.com/matsuzaka-yuki/Mizuki) для заголовка баннера, многоуровневой панели навигации меню, эффекта сакуры, KaTeX и Fancybox +- Построено с использованием [Astro](https://astro.build) и [Tailwind CSS](https://tailwindcss.com) +- Использует музыкальный плеер [MetingJS](https://github.com/metowolf/MetingJS) и [APlayer](https://github.com/MoePlayer/APlayer) +- Использует модель маскота в стиле Чиби `Firefly` spine, предоставленную создателем Bilibili [公公的日常](https://space.bilibili.com/3546750017080050) +- Иконки от [Iconify](https://iconify.design/) +- Авторские права на изображения Firefly принадлежат компании [miHoYo](https://www.mihoyo.com/), разработчику игры ["Honkai: Star Rail"](https://sr.mihoyo.com/). + +## 📝 Лицензия + +Этот проект распространяется под лицензией [MIT license](https://mit-license.org/), подробности см. в файле [LICENSE](../LICENSE). + +**Уведомление об авторских правах:** +- Copyright (c) 2024 [saicaca](https://github.com/saicaca) - [fuwari](https://github.com/saicaca/fuwari) +- Copyright (c) 2025 [CuteLeaf](https://github.com/CuteLeaf) - [Firefly](https://github.com/CuteLeaf/Firefly) + +В соответствии с лицензией MIT вы можете свободно использовать, изменять и распространять код, но обязаны сохранять вышеуказанное уведомление об авторских правах. + +## 🍀 Участники + +Спасибо следующим участникам за их вклад в этот проект. Если у вас есть вопросы или предложения, пожалуйста, отправьте [Issue](https://github.com/CuteLeaf/Firefly/issues) или [Pull Request](https://github.com/CuteLeaf/Firefly/pulls). + + + + + +![Alt](https://repobeats.axiom.co/api/embed/6139639d8e88da4d3dc9d45fd43f4e4b2d580086.svg "Repobeats analytics image") + +## ⭐ История звезд + +[![Star History Chart](https://api.star-history.com/svg?repos=CuteLeaf/Firefly&type=Date)](https://star-history.com/#CuteLeaf/Firefly&Date) + + + + + + + + + + diff --git a/docs/README.zh-TW.md b/docs/README.zh-TW.md new file mode 100644 index 0000000..0713809 --- /dev/null +++ b/docs/README.zh-TW.md @@ -0,0 +1,284 @@ + +Firefly + +
+ +# Firefly +> 一款清新美觀的 Astro 部落格主題模板 +> +> ![Node.js >= 22](https://img.shields.io/badge/node.js-%3E%3D22-brightgreen) +![pnpm >= 9](https://img.shields.io/badge/pnpm-%3E%3D9-blue) +![Astro](https://img.shields.io/badge/Astro-5.16.6-orange) +![TypeScript](https://img.shields.io/badge/TypeScript-5.9.2-blue) +> +> [![Stars](https://img.shields.io/github/stars/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/stargazers) +[![Forks](https://img.shields.io/github/forks/CuteLeaf/Firefly?style=social)](https://github.com/CuteLeaf/Firefly/network/members) +[![Issues](https://img.shields.io/github/issues/CuteLeaf/Firefly)](https://github.com/CuteLeaf/Firefly/issues) +> +> ![GitHub License](https://img.shields.io/github/license/CuteLeaf/Firefly) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CuteLeaf/Firefly) +[![愛發電贊助](https://img.shields.io/badge/愛發電-贊助作者-ff69b4.svg)](https://afdian.com/a/cuteleaf) +
+ + +--- +🚀 快速指南: +[**🖥️線上預覽**](https://firefly.cuteleaf.cn/) / +[**📝使用文檔**](https://docs-firefly.cuteleaf.cn/) / +[**🍀我的部落格**](https://blog.cuteleaf.cn) + +📖 README: +**[简体中文](../README.md)** | **[繁體中文](README.zh-TW.md)** | **[English](../README.en.md)** | **[日本語](README.ja.md)** | **[Русский](README.ru.md)** + +⚡ 靜態站點生成: 基於Astro的超快載入速度和SEO優化 + +🎨 現代化設計: 簡潔美觀的介面,支援自訂主題色 + +📱 行動裝置友善: 完美的響應式體驗,行動端專項優化 + +🔧 高度可配置: 大部分功能模組均可透過配置檔案自訂 + +firefly + +>[!TIP] +>在重要的版面配置上,Firefly創新性地增加了左右雙側邊欄、文章網格(多列)版面配置, +> +>增加了站點統計、日曆元件、文章目錄等小元件,讓側邊欄更加豐富, +> +>同時也保留了 fuwari 的版面配置系統,可在配置檔案中自由切換。 +> +>**更多版面配置及示範請查看:[Firefly 版面配置系統詳解](https://firefly.cuteleaf.cn/posts/firefly-layout-system/)** + +## ✨ 功能特性 + +### 核心功能 + +- [x] **Astro + Tailwind CSS** - 基於現代技術堆疊的超快靜態站點生成 +- [x] **流暢動畫** - Swup 頁面過渡動畫,提供絲滑的瀏覽體驗 +- [x] **響應式設計** - 完美適配桌面端、平板和行動裝置 +- [x] **多語言支援** - i18n 國際化,支援簡體中文、繁體中文、英文、日文、俄語 +- [x] **全文搜尋** - 基於 Pagefind 的客戶端搜尋,支援文章內容索引。同時支援 MeiliSearch 搜尋引擎 + +### 個性化 +- [x] **側邊欄** - 支援配置單側邊欄、雙側邊欄,支援前台自由切換 +- [x] **文章版面配置** - 支援配置(單列)列表、網格(多列/瀑布流)版面配置,支援前台自由切換 +- [x] **字型管理** - 支援自訂字型,豐富的字型選擇器 +- [x] **頁尾配置** - HTML 內容注入,完全自訂 +- [x] **導覽列自訂** - Logo、標題、連結全面自訂 +- [x] **桌布模式切換** - 橫幅桌布、全螢幕桌布、純色背景,支援前台自由切換 +- [x] **主題色自訂** - 360° 色相調節,支援亮色/暗色/跟隨系統三種模式,支援前台自由切換 + +### 頁面元件 +- [x] **留言板** - 支援留言頁面,整合留言系統 +- [x] **公告欄** - 頂部公告提示,支援關閉和自訂樣式 +- [x] **看板娘** - 支援 Spine 和 Live2D 兩種動畫引擎 +- [x] **站點統計** - 顯示文章、分類、標籤數目、文章總字數、執行時長、最後更新時間 +- [x] **站點日曆** - 顯示當月日曆,以及當月的發布文章 +- [x] **贊助頁面** - 多種支付方式、收款碼展示、贊助者列表、文章內贊助按鈕 +- [x] **分享海報** - 支援生成精美的文章分享海報,包含文章摘要、二維碼等資訊 +- [x] **櫻花特效** - 支援櫻花特效,全螢幕櫻花效果 +- [x] **友情連結** - 精美的友鏈展示卡片 +- [x] **廣告元件** - 支援自訂側邊欄廣告內容 +- [x] **番組計畫** - 基於 Bangumi API 的追番和遊戲記錄展示 +- [x] **留言系統** - 整合 Twikoo、Waline、Giscus、Disqus、Artalk 留言系統 +- [x] **訪問量統計** - 支援呼叫 Waline、Twikoo 自帶的訪問量追蹤 +- [x] **音樂播放器** - 基於 APlayer,支援本地音樂和 Meting API 線上音樂 + +### 內容增強 +- [x] **圖片燈箱** - Fancybox 圖片預覽功能 +- [x] **浮動目錄** - 動態顯示文章目錄,支援錨點跳轉,在側邊欄目錄隱藏後顯示 +- [x] **信箱保護** - 讓自動化爬蟲程式無法直接爬取信箱地址,避免垃圾郵件騷擾 +- [x] **側邊欄目錄** - 動態顯示文章目錄,支援錨點跳轉 +- [x] **增強程式碼區塊** - 基於 Expressive Code,支援程式碼摺疊、行號、語言標識 +- [x] **數學公式支援** - KaTeX 渲染引擎,支援行內和區塊級公式 +- [x] **Markdown擴充** - 預設支援[GitHub Flavored Markdown](https://github.github.com/gfm/),還包括了[Admonitions](https://firefly.cuteleaf.cn/posts/markdown-extended/#%E6%8F%90%E9%86%92%E6%A1%86)、[GitHub repository cards](https://firefly.cuteleaf.cn/posts/markdown-extended/#github-%E4%BB%93%E5%BA%93%E5%8D%A1%E7%89%87)、[Expressive Code](http://firefly.cuteleaf.cn/posts/code-examples/) +- [x] **文章隨機封面圖** - 支援透過 API 獲取隨機封面圖 + +### SEO +- [x] **SEO 優化** - 完整的 meta 標籤和結構化資料 +- [x] **RSS 訂閱** - 自動生成 RSS Feed +- [x] **站點地圖** - 自動生成 XML Sitemap,支援頁面篩選配置 + + +## 📝計畫中... + +- [ ] **重構 Live2D 看板娘** +- [ ] **持續優化動畫流暢度** +- [ ] 更多功能持續完善中... + +如果你有好用的功能和優化,請提交 [Pull Request](https://github.com/CuteLeaf/Firefly/pulls) + +## 🚀 快速開始 + +### 環境要求 + +- Node.js ≤ 22 +- pnpm ≤ 9 + +### 本地開發部署 + +1. **克隆儲存庫:** + ```bash + git clone https://github.com/Cuteleaf/Firefly.git + cd Firefly + ``` + **先 [Fork](https://github.com/CuteLeaf/Firefly/fork) 到自己儲存庫再克隆(推薦)** + ```bash + git clone https://github.com/you-github-name/Firefly.git + cd Firefly + ``` +3. **安裝依賴:** + ```bash + # 如果沒有安裝 pnpm,先安裝 + npm install -g pnpm + + # 安裝專案依賴 + pnpm install + ``` + +4. **配置部落格:** + - 編輯 `src/config/` 目錄下的配置檔案自訂部落格設定 + +5. **啟動開發伺服器:** + ```bash + pnpm dev + ``` + 部落格將在 `http://localhost:4321` 可用 + +### 平台託管部署 +- **參考[官方指南](https://docs.astro.build/zh-cn/guides/deploy/)將部落格部署至 Vercel, Netlify, GitHub Pages, Cloudflare Pages, EdgeOne Pages 等。** + + 框架預設: `Astro` + + 根目錄: `./` + + 輸出目錄: `dist` + + 建置命令: `pnpm run build` + + 安裝命令: `pnpm install` + +## 📖 配置說明 + +> 📚 **詳細配置文檔**: 查看 [Firefly使用文檔](https://docs-firefly.cuteleaf.cn/) 獲取完整的配置指南 + +### 設定網站語言 + +要設定部落格的預設語言,請編輯 `src/config/siteConfig.ts` 檔案: + +```typescript +// 定義站點語言 +const SITE_LANG = "zh_CN"; +``` + +**支援的語言代碼:** +- `zh_CN` - 簡體中文 +- `zh_TW` - 繁體中文 +- `en` - 英文 +- `ja` - 日文 +- `ru` - 俄文 + + +### 配置檔案結構 + +``` +src/ +├── config/ +│ ├── index.ts # 配置索引檔案 +│ ├── siteConfig.ts # 站點基礎配置 +│ ├── backgroundWallpaper.ts # 背景桌布配置 +│ ├── profileConfig.ts # 使用者資料配置 +│ ├── commentConfig.ts # 留言系統配置 +│ ├── announcementConfig.ts # 公告配置 +│ ├── licenseConfig.ts # 授權配置 +│ ├── footerConfig.ts # 頁尾配置 +│ ├── FooterConfig.html # 頁尾HTML內容 +│ ├── expressiveCodeConfig.ts # 程式碼高亮配置 +│ ├── sakuraConfig.ts # 櫻花特效配置 +│ ├── fontConfig.ts # 字型配置 +│ ├── sidebarConfig.ts # 側邊欄版面配置配置 +│ ├── navBarConfig.ts # 導覽列配置 +│ ├── musicConfig.ts # 音樂播放器配置 +│ ├── pioConfig.ts # 看板娘配置 +│ ├── adConfig.ts # 廣告配置 +│ ├── friendsConfig.ts # 友鏈配置 +│ ├── sponsorConfig.ts # 贊助配置 +│ └── coverImageConfig.ts # 文章隨機封面圖配置 +``` + + +## ⚙️ 文章 Frontmatter + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: ./cover.jpg # 或使用 "api" 來啟用隨機封面圖 +tags: [Foo, Bar] +category: Front-end +draft: false +lang: zh-CN # 僅當文章語言與 `siteConfig.ts` 中的網站語言不同時需要設定 +--- +``` + +## 🧞 指令 + +下列指令均需要在專案根目錄執行: + +| Command | Action | +|:---------------------------|:----------------------------------------------------| +| `pnpm install` | 安裝依賴 | +| `pnpm dev` | 在 `localhost:4321` 啟動本地開發伺服器 | +| `pnpm build` | 建置網站至 `./dist/` | +| `pnpm preview` | 本地預覽已建置的網站 | +| `pnpm check` | 檢查程式碼中的錯誤 | +| `pnpm format` | 使用 Biome 格式化您的程式碼 | +| `pnpm new-post ` | 建立新文章 | +| `pnpm astro ...` | 執行 `astro add`, `astro check` 等指令 | +| `pnpm astro --help` | 顯示 Astro CLI 說明 | + +## 🙏 致謝 + +- 非常感謝 [saicaca](https://github.com/saicaca) 開發的 [Fuwari](https://github.com/saicaca/fuwari) 模板,Firefly 就是基於這個模板二次開發 +- 參考了部落格主 [霞葉](https://kasuha.com) 分享的 [Bangumi 收藏展示頁面方案](https://kasuha.com/posts/fuwari-enhance-ep2/) +- 參考了 [Mizuki](https://github.com/matsuzaka-yuki/Mizuki) 的橫幅標題/多級選單導覽列/櫻花特效/KaTeX/Fancybox方案 +- 使用了 [Astro](https://astro.build) 和 [Tailwind CSS](https://tailwindcss.com) 建置 +- 使用了 [MetingJS](https://github.com/metowolf/MetingJS) 和 [APlayer](https://github.com/MoePlayer/APlayer) 音樂播放器 +- 使用了b站up [公公的日常](https://space.bilibili.com/3546750017080050) 提供的Q版 `流螢` 看板娘切片資料模型 +- 圖示來自 [Iconify](https://iconify.design/) +- 流螢部分相關圖片素材版權歸遊戲 [《崩壞:星穹鐵道》](https://sr.mihoyo.com/) 開發商 [米哈遊](https://www.mihoyo.com/) 所有 + +## 📝 許可協議 + +本專案遵循 [MIT license](https://mit-license.org/) 開源協議,詳細查看 [LICENSE](../LICENSE) 文件 + +**版權聲明:** +- Copyright (c) 2024 [saicaca](https://github.com/saicaca) - [fuwari](https://github.com/saicaca/fuwari) +- Copyright (c) 2025 [CuteLeaf](https://github.com/CuteLeaf) - [Firefly](https://github.com/CuteLeaf/Firefly) + +根據 MIT 開源協議,你可以自由使用、修改、分發程式碼,但需保留上述版權聲明。 + +## 🍀 貢獻者 + +感謝以下貢獻者對本專案做出的貢獻,如有問題或建議,請提交 [Issue](https://github.com/CuteLeaf/Firefly/issues) 或 [Pull Request](https://github.com/CuteLeaf/Firefly/pulls)。 + + + + + +![Alt](https://repobeats.axiom.co/api/embed/6139639d8e88da4d3dc9d45fd43f4e4b2d580086.svg "Repobeats analytics image") + +## ⭐ Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=CuteLeaf/Firefly&type=Date)](https://star-history.com/#CuteLeaf/Firefly&Date) + + + + + + + + + + diff --git a/docs/images/1.webp b/docs/images/1.webp new file mode 100644 index 0000000..44bb058 Binary files /dev/null and b/docs/images/1.webp differ diff --git a/docs/images/1131.png b/docs/images/1131.png new file mode 100644 index 0000000..01d3fd8 Binary files /dev/null and b/docs/images/1131.png differ diff --git a/docs/images/sponsor/afdian.png b/docs/images/sponsor/afdian.png new file mode 100644 index 0000000..6083e4e Binary files /dev/null and b/docs/images/sponsor/afdian.png differ diff --git a/docs/images/sponsor/alipay.png b/docs/images/sponsor/alipay.png new file mode 100644 index 0000000..3603644 Binary files /dev/null and b/docs/images/sponsor/alipay.png differ diff --git a/docs/images/sponsor/wechat.png b/docs/images/sponsor/wechat.png new file mode 100644 index 0000000..09482e1 Binary files /dev/null and b/docs/images/sponsor/wechat.png differ diff --git a/package.json b/package.json new file mode 100644 index 0000000..223cf61 --- /dev/null +++ b/package.json @@ -0,0 +1,91 @@ +{ + "name": "firefly", + "type": "module", + "version": "6.3.5", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "check": "astro check", + "build": "astro build", + "preview": "astro preview", + "astro": "astro", + "type-check": "tsc --noEmit --isolatedDeclarations", + "new-post": "node scripts/new-post.js", + "format": "biome format --write ./src", + "lint": "biome check --write ./src", + "preinstall": "npx only-allow pnpm", + "index:meili": "npx tsx src/scripts/index-to-meilisearch.mts" + }, + "dependencies": { + "@astrojs/check": "^0.9.6", + "@astrojs/mdx": "^4.3.13", + "@astrojs/rss": "^4.0.14", + "@astrojs/sitemap": "^3.6.0", + "@astrojs/svelte": "7.2.4", + "@astrojs/tailwind": "^6.0.2", + "@expressive-code/core": "^0.41.5", + "@expressive-code/plugin-collapsible-sections": "^0.41.5", + "@expressive-code/plugin-line-numbers": "^0.41.5", + "@fancyapps/ui": "^6.1.7", + "@fontsource-variable/jetbrains-mono": "^5.2.6", + "@fontsource/roboto": "^5.2.9", + "@iconify-json/fa6-brands": "^1.2.6", + "@iconify-json/fa6-regular": "^1.2.4", + "@iconify-json/fa6-solid": "^1.2.4", + "@iconify-json/material-symbols": "^1.2.50", + "@iconify-json/simple-icons": "^1.2.64", + "@iconify/svelte": "^4.2.0", + "@swup/astro": "^1.7.0", + "@tailwindcss/typography": "^0.5.16", + "astro": "5.16.6", + "astro-expressive-code": "^0.41.5", + "astro-icon": "^1.1.5", + "dayjs": "^1.11.19", + "glob": "^11.1.0", + "gray-matter": "^4.0.3", + "hastscript": "^9.0.1", + "katex": "^0.16.27", + "markdown-it": "^14.1.0", + "marked": "^16.4.2", + "mdast-util-to-string": "^4.0.0", + "meilisearch": "^0.54.0", + "node-html-parser": "^7.0.1", + "overlayscrollbars": "^2.13.0", + "pagefind": "^1.4.0", + "photoswipe": "^5.4.4", + "qrcode": "^1.5.4", + "reading-time": "^1.5.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-components": "^0.3.0", + "rehype-katex": "^7.0.1", + "rehype-slug": "^6.0.0", + "remark-directive": "^3.0.1", + "remark-directive-rehype": "^0.4.2", + "remark-github-admonitions-to-directives": "^1.0.5", + "remark-math": "^6.0.0", + "remark-sectionize": "^2.1.0", + "sanitize-html": "^2.17.0", + "satori": "^0.18.2", + "sharp": "^0.34.5", + "stylus": "^0.64.0", + "svelte": "^5.46.1", + "tailwindcss": "^3.4.19", + "typescript": "^5.9.2", + "unist-util-visit": "^5.0.0" + }, + "devDependencies": { + "@astrojs/ts-plugin": "^1.10.6", + "@biomejs/biome": "2.3.10", + "@iconify-json/mdi": "^1.2.3", + "@rollup/plugin-yaml": "^4.1.2", + "@types/hast": "^3.0.4", + "@types/markdown-it": "^14.1.2", + "@types/mdast": "^4.0.4", + "@types/qrcode": "^1.5.6", + "@types/sanitize-html": "^2.16.0", + "postcss-import": "^16.1.1", + "postcss-nesting": "^13.0.2", + "wrangler": "^4.54.0" + }, + "packageManager": "pnpm@9.14.4" +} diff --git a/pagefind.yml b/pagefind.yml new file mode 100644 index 0000000..fdb9528 --- /dev/null +++ b/pagefind.yml @@ -0,0 +1,6 @@ +exclude_selectors: + - "span.katex" + - "span.katex-display" + - "[data-pagefind-ignore]" + - ".search-panel" + - "#search-panel" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..abaf1f1 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,11467 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@astrojs/check': + specifier: ^0.9.6 + version: 0.9.6(prettier@3.7.4)(typescript@5.9.3) + '@astrojs/mdx': + specifier: ^4.3.13 + version: 4.3.13(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/rss': + specifier: ^4.0.14 + version: 4.0.14 + '@astrojs/sitemap': + specifier: ^3.6.0 + version: 3.6.0 + '@astrojs/svelte': + specifier: 7.2.4 + version: 7.2.4(@types/node@25.0.3)(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(jiti@1.21.7)(stylus@0.64.0)(svelte@5.46.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + '@astrojs/tailwind': + specifier: ^6.0.2 + version: 6.0.2(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(tailwindcss@3.4.19(yaml@2.8.2)) + '@expressive-code/core': + specifier: ^0.41.5 + version: 0.41.5 + '@expressive-code/plugin-collapsible-sections': + specifier: ^0.41.5 + version: 0.41.5 + '@expressive-code/plugin-line-numbers': + specifier: ^0.41.5 + version: 0.41.5 + '@fancyapps/ui': + specifier: ^6.1.7 + version: 6.1.7 + '@fontsource-variable/jetbrains-mono': + specifier: ^5.2.6 + version: 5.2.8 + '@fontsource/roboto': + specifier: ^5.2.9 + version: 5.2.9 + '@iconify-json/fa6-brands': + specifier: ^1.2.6 + version: 1.2.6 + '@iconify-json/fa6-regular': + specifier: ^1.2.4 + version: 1.2.4 + '@iconify-json/fa6-solid': + specifier: ^1.2.4 + version: 1.2.4 + '@iconify-json/material-symbols': + specifier: ^1.2.50 + version: 1.2.50 + '@iconify-json/simple-icons': + specifier: ^1.2.64 + version: 1.2.64 + '@iconify/svelte': + specifier: ^4.2.0 + version: 4.2.0(svelte@5.46.1) + '@swup/astro': + specifier: ^1.7.0 + version: 1.7.0 + '@tailwindcss/typography': + specifier: ^0.5.16 + version: 0.5.19(tailwindcss@3.4.19(yaml@2.8.2)) + astro: + specifier: 5.16.6 + version: 5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + astro-expressive-code: + specifier: ^0.41.5 + version: 0.41.5(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)) + astro-icon: + specifier: ^1.1.5 + version: 1.1.5 + dayjs: + specifier: ^1.11.19 + version: 1.11.19 + glob: + specifier: ^11.1.0 + version: 11.1.0 + gray-matter: + specifier: ^4.0.3 + version: 4.0.3 + hastscript: + specifier: ^9.0.1 + version: 9.0.1 + katex: + specifier: ^0.16.27 + version: 0.16.27 + markdown-it: + specifier: ^14.1.0 + version: 14.1.0 + marked: + specifier: ^16.4.2 + version: 16.4.2 + mdast-util-to-string: + specifier: ^4.0.0 + version: 4.0.0 + meilisearch: + specifier: ^0.54.0 + version: 0.54.0 + node-html-parser: + specifier: ^7.0.1 + version: 7.0.1 + overlayscrollbars: + specifier: ^2.13.0 + version: 2.13.0 + pagefind: + specifier: ^1.4.0 + version: 1.4.0 + photoswipe: + specifier: ^5.4.4 + version: 5.4.4 + qrcode: + specifier: ^1.5.4 + version: 1.5.4 + reading-time: + specifier: ^1.5.0 + version: 1.5.0 + rehype-autolink-headings: + specifier: ^7.1.0 + version: 7.1.0 + rehype-components: + specifier: ^0.3.0 + version: 0.3.0 + rehype-katex: + specifier: ^7.0.1 + version: 7.0.1 + rehype-slug: + specifier: ^6.0.0 + version: 6.0.0 + remark-directive: + specifier: ^3.0.1 + version: 3.0.1 + remark-directive-rehype: + specifier: ^0.4.2 + version: 0.4.2 + remark-github-admonitions-to-directives: + specifier: ^1.0.5 + version: 1.0.5 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 + remark-sectionize: + specifier: ^2.1.0 + version: 2.1.0 + sanitize-html: + specifier: ^2.17.0 + version: 2.17.0 + satori: + specifier: ^0.18.2 + version: 0.18.3 + sharp: + specifier: ^0.34.5 + version: 0.34.5 + stylus: + specifier: ^0.64.0 + version: 0.64.0 + svelte: + specifier: ^5.46.1 + version: 5.46.1 + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19(yaml@2.8.2) + typescript: + specifier: ^5.9.2 + version: 5.9.3 + unist-util-visit: + specifier: ^5.0.0 + version: 5.0.0 + devDependencies: + '@astrojs/ts-plugin': + specifier: ^1.10.6 + version: 1.10.6 + '@biomejs/biome': + specifier: 2.3.10 + version: 2.3.10 + '@iconify-json/mdi': + specifier: ^1.2.3 + version: 1.2.3 + '@rollup/plugin-yaml': + specifier: ^4.1.2 + version: 4.1.2(rollup@2.79.2) + '@types/hast': + specifier: ^3.0.4 + version: 3.0.4 + '@types/markdown-it': + specifier: ^14.1.2 + version: 14.1.2 + '@types/mdast': + specifier: ^4.0.4 + version: 4.0.4 + '@types/qrcode': + specifier: ^1.5.6 + version: 1.5.6 + '@types/sanitize-html': + specifier: ^2.16.0 + version: 2.16.0 + postcss-import: + specifier: ^16.1.1 + version: 16.1.1(postcss@8.5.6) + postcss-nesting: + specifier: ^13.0.2 + version: 13.0.2(postcss@8.5.6) + +packages: + + '@adobe/css-tools@4.3.3': + resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + + '@astrojs/check@0.9.6': + resolution: {integrity: sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + + '@astrojs/compiler@2.13.0': + resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} + + '@astrojs/internal-helpers@0.7.5': + resolution: {integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==} + + '@astrojs/language-server@2.16.2': + resolution: {integrity: sha512-J3hVx/mFi3FwEzKf8ExYXQNERogD6RXswtbU+TyrxoXRBiQoBO5ooo7/lRWJ+rlUKUd7+rziMPI9jYB7TRlh0w==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true + + '@astrojs/markdown-remark@6.3.10': + resolution: {integrity: sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==} + + '@astrojs/mdx@4.3.13': + resolution: {integrity: sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + peerDependencies: + astro: ^5.0.0 + + '@astrojs/prism@3.3.0': + resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/rss@4.0.14': + resolution: {integrity: sha512-KCe1imDcADKOOuO/wtKOMDO/umsBD6DWF+94r5auna1jKl5fmlK9vzf+sjA3EyveXA/FoB3khtQ/u/tQgETmTw==} + + '@astrojs/sitemap@3.6.0': + resolution: {integrity: sha512-4aHkvcOZBWJigRmMIAJwRQXBS+ayoP5z40OklTXYXhUDhwusz+DyDl+nSshY6y9DvkVEavwNcFO8FD81iGhXjg==} + + '@astrojs/svelte@7.2.4': + resolution: {integrity: sha512-Zz1UziJ+0bBGIc+ema4F9j963sLBN6fFfohU0RM1WXA7AsLoowaQc157QaBhetxcFu60mvVqmo/RAmZzpuQerA==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + peerDependencies: + astro: ^5.0.0 + svelte: ^5.1.16 + typescript: ^5.3.3 + + '@astrojs/tailwind@6.0.2': + resolution: {integrity: sha512-j3mhLNeugZq6A8dMNXVarUa8K6X9AW+QHU9u3lKNrPLMHhOQ0S7VeWhHwEeJFpEK1BTKEUY1U78VQv2gN6hNGg==} + peerDependencies: + astro: ^3.0.0 || ^4.0.0 || ^5.0.0 + tailwindcss: ^3.0.24 + + '@astrojs/telemetry@3.3.0': + resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/ts-plugin@1.10.6': + resolution: {integrity: sha512-Ke5CNwxn/ozsh6THJKuayUlBToa3uiPDi2oSwcXmTdeiJ0PGr+UkdQJf9hdMgBjbIka9fhnSn3UhYamfNfJ73A==} + + '@astrojs/yaml2ts@0.2.2': + resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.5': + resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.28.3': + resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': + resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-class-properties@7.12.1': + resolution: {integrity: sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-flow@7.27.1': + resolution: {integrity: sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.28.0': + resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.28.5': + resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.28.3': + resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.28.4': + resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.28.0': + resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.28.5': + resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-flow-strip-types@7.27.1': + resolution: {integrity: sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.28.5': + resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.28.5': + resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.28.4': + resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.28.5': + resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.28.0': + resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.28.4': + resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.28.5': + resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-flow@7.27.1': + resolution: {integrity: sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-react@7.28.5': + resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@biomejs/biome@2.3.10': + resolution: {integrity: sha512-/uWSUd1MHX2fjqNLHNL6zLYWBbrJeG412/8H7ESuK8ewoRoMPUgHDebqKrPTx/5n6f17Xzqc9hdg3MEqA5hXnQ==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.3.10': + resolution: {integrity: sha512-M6xUjtCVnNGFfK7HMNKa593nb7fwNm43fq1Mt71kpLpb+4mE7odO8W/oWVDyBVO4ackhresy1ZYO7OJcVo/B7w==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.3.10': + resolution: {integrity: sha512-Vae7+V6t/Avr8tVbFNjnFSTKZogZHFYl7MMH62P/J1kZtr0tyRQ9Fe0onjqjS2Ek9lmNLmZc/VR5uSekh+p1fg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.3.10': + resolution: {integrity: sha512-B9DszIHkuKtOH2IFeeVkQmSMVUjss9KtHaNXquYYWCjH8IstNgXgx5B0aSBQNr6mn4RcKKRQZXn9Zu1rM3O0/A==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@2.3.10': + resolution: {integrity: sha512-hhPw2V3/EpHKsileVOFynuWiKRgFEV48cLe0eA+G2wO4SzlwEhLEB9LhlSrVeu2mtSn205W283LkX7Fh48CaxA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@2.3.10': + resolution: {integrity: sha512-QTfHZQh62SDFdYc2nfmZFuTm5yYb4eO1zwfB+90YxUumRCR171tS1GoTX5OD0wrv4UsziMPmrePMtkTnNyYG3g==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@2.3.10': + resolution: {integrity: sha512-wwAkWD1MR95u+J4LkWP74/vGz+tRrIQvr8kfMMJY8KOQ8+HMVleREOcPYsQX82S7uueco60L58Wc6M1I9WA9Dw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@2.3.10': + resolution: {integrity: sha512-o7lYc9n+CfRbHvkjPhm8s9FgbKdYZu5HCcGVMItLjz93EhgJ8AM44W+QckDqLA9MKDNFrR8nPbO4b73VC5kGGQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.3.10': + resolution: {integrity: sha512-pHEFgq7dUEsKnqG9mx9bXihxGI49X+ar+UBrEIj3Wqj3UCZp1rNgV+OoyjFgcXsjCWpuEAF4VJdkZr3TrWdCbQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@capsizecss/unpack@3.0.1': + resolution: {integrity: sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==} + engines: {node: '>=18'} + + '@csstools/selector-resolve-nested@3.1.0': + resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + + '@emmetio/css-parser@0.4.1': + resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} + + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} + + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} + + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@expressive-code/core@0.41.5': + resolution: {integrity: sha512-II5TEy5eOoXiqPwqtpSqwamUd7lZS3YH3ofxR1ZyQMmygqORZn8/7SzgfF8G0kB7uKCBzFZT6RgKgCuHcJuPpA==} + + '@expressive-code/plugin-collapsible-sections@0.41.5': + resolution: {integrity: sha512-n1a+9K+vfBgBEh4f8IVHX1Jkx3sIdmiPbNehxS9oewU+0YGPzRE4KGQmMvis92mTPcFh5dZ/A/CU+0ImDN5QXg==} + + '@expressive-code/plugin-frames@0.41.5': + resolution: {integrity: sha512-qU0cvAQGfRLX7XwGf3/+hqIVmAc/mNNTlqVLR0iBfJF6EKvtP3R7/uAlPrAxnxQxn0meTazCz8D+PsPyOpHKrQ==} + + '@expressive-code/plugin-line-numbers@0.41.5': + resolution: {integrity: sha512-WjUYYjIyTYyze8SsW2ERZ3zSxl3rW95aPTe9EumoWVggfQbBt3Sp51saUHnuNAJpeJCRS/wjF5JNsEzFhqflig==} + + '@expressive-code/plugin-shiki@0.41.5': + resolution: {integrity: sha512-gw6OWvnmDmvcKJ5AZSzl2VkuixJMQ/zWSwPLFNzitqCa8aPfIFunb0K8IIOsE43LELgOWkie9lRFspOxwDVwrg==} + + '@expressive-code/plugin-text-markers@0.41.5': + resolution: {integrity: sha512-0DSiTsjWFEz6/iuLOGNNy2GaeCW41OwnVJMKx1tS+XKeQxAL89UkZP3egWNzxjWNHNMzEv3ZWWWYqbonEQlv/Q==} + + '@fancyapps/ui@6.1.7': + resolution: {integrity: sha512-KHOvuy90JBFDgbNa2V1N9Jg7PE/lSQMXN9VbhR+WQSIxIEi4PV7kndeao7ezir5WeJ8OZRyDelNKJVLicXfBIg==} + + '@fontsource-variable/jetbrains-mono@5.2.8': + resolution: {integrity: sha512-WBA9elru6Jdp5df2mES55wuOO0WIrn3kpXnI4+W2ek5u3ZgLS9XS4gmIlcQhiZOWEKl95meYdvK7xI+ETLCq/Q==} + + '@fontsource/roboto@5.2.9': + resolution: {integrity: sha512-ZTkyHiPk74B/aj8BZWbsxD5Yu+Lq+nR64eV4wirlrac2qXR7jYk2h6JlLYuOuoruTkGQWNw2fMuKNavw7/rg0w==} + + '@iconify-json/fa6-brands@1.2.6': + resolution: {integrity: sha512-twL3X4KWcxAhbc1vz/mIDsVr+CAItk1/EIfxKUVQtpv6O4eydk5KNYqTZWdvJNHGInUgd6vKg21aWfVgb5DXEg==} + + '@iconify-json/fa6-regular@1.2.4': + resolution: {integrity: sha512-fnUS/MLj3ZAp29oRsC8/aY8Wau7NIg7VesTz3jCcE6VJBzcz95Yxp/Dl5yHvkP+aQxrNw5Lj3nrOXB4nQh+oNA==} + + '@iconify-json/fa6-solid@1.2.4': + resolution: {integrity: sha512-LmDNNdJVyvF5mPm1yxWvL8KjCc/E8LzoqnF1LNTVpyY2ZJRUlGOWuPIThdbuFBF2IovgttkIyumhyqfmlHdwKg==} + + '@iconify-json/material-symbols@1.2.50': + resolution: {integrity: sha512-71tjHR70h46LHtBFab3fAd2V/wPTO7JMV5lKnRn3IcF303LaFgAlO0BZeTJDcmCv9d0snRZmnoLZAJVD7/eisw==} + + '@iconify-json/mdi@1.2.3': + resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==} + + '@iconify-json/simple-icons@1.2.64': + resolution: {integrity: sha512-SMmm//tjZBvHnT0EAzZLnBTL6bukSkncM0pwkOXjr0FsAeCqjQtqoxBR0Mp+PazIJjXJKHm1Ju0YgnCIPOodJg==} + + '@iconify/svelte@4.2.0': + resolution: {integrity: sha512-fEl0T7SAPonK7xk6xUlRPDmFDZVDe2Z7ZstlqeDS/sS8ve2uyU+Qa8rTWbIqzZJlRvONkK5kVXiUf9nIc+6OOQ==} + peerDependencies: + svelte: '>4.0.0' + + '@iconify/tools@4.2.0': + resolution: {integrity: sha512-WRxPva/ipxYkqZd1+CkEAQmd86dQmrwH0vwK89gmp2Kh2WyyVw57XbPng0NehP3x4V1LzLsXUneP1uMfTMZmUA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@pagefind/darwin-arm64@1.4.0': + resolution: {integrity: sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.4.0': + resolution: {integrity: sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==} + cpu: [x64] + os: [darwin] + + '@pagefind/freebsd-x64@1.4.0': + resolution: {integrity: sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.4.0': + resolution: {integrity: sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.4.0': + resolution: {integrity: sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-x64@1.4.0': + resolution: {integrity: sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==} + cpu: [x64] + os: [win32] + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/plugin-alias@3.1.9': + resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-commonjs@17.1.0': + resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.30.0 + + '@rollup/plugin-json@4.1.0': + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-node-resolve@11.2.1': + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/plugin-yaml@4.1.2': + resolution: {integrity: sha512-RpupciIeZMUqhgFE97ba0s98mOFS7CWzN3EJNhJkqSv9XLlWYtwVdtE6cDw6ASOF/sZVFS7kRJXftaqM2Vakdw==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.53.5': + resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.5': + resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.5': + resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.5': + resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.5': + resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.5': + resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.5': + resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.5': + resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.5': + resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.5': + resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.5': + resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.5': + resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.5': + resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.5': + resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.5': + resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.5': + resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.5': + resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.5': + resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.5': + resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.5': + resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.5': + resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.5': + resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} + cpu: [x64] + os: [win32] + + '@shikijs/core@3.20.0': + resolution: {integrity: sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==} + + '@shikijs/engine-javascript@3.20.0': + resolution: {integrity: sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==} + + '@shikijs/engine-oniguruma@3.20.0': + resolution: {integrity: sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==} + + '@shikijs/langs@3.20.0': + resolution: {integrity: sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==} + + '@shikijs/themes@3.20.0': + resolution: {integrity: sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==} + + '@shikijs/types@3.20.0': + resolution: {integrity: sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@shuding/opentype.js@1.4.0-beta.0': + resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} + engines: {node: '>= 8.0.0'} + hasBin: true + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@sveltejs/acorn-typescript@1.0.8': + resolution: {integrity: sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 + + '@sveltejs/vite-plugin-svelte@5.1.1': + resolution: {integrity: sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.0.0 + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@swup/a11y-plugin@5.0.0': + resolution: {integrity: sha512-t0pVWAVea+Imjj05n9QMPfqZhw9i5rx7BV/l3Ejeic+X3Qs0VZwVvEJIcdqireCVJgAJGZAPlmgbiuaj5UHJaQ==} + peerDependencies: + swup: ^4.0.0 + + '@swup/astro@1.7.0': + resolution: {integrity: sha512-OxZskzeYkEZ4+McbwJKyD018sHNlrKQLdtHzlmNjivrzQY/dB7ncnWqDs3d4IkA7Y+ydNjpwBqpR/asjDhTiag==} + + '@swup/body-class-plugin@3.3.0': + resolution: {integrity: sha512-4h/6mAgDd0+ml8Gc2kX8tikIR0HZZLF+WTnfm0JTVrGDw74bgEBenbsaWFfIS+gn4RWKZdWBUOfaZ+Im5J7Gvw==} + peerDependencies: + swup: ^4.6.0 + + '@swup/browserslist-config@1.0.1': + resolution: {integrity: sha512-/3nBqG7LqmK1uqaCSTA6s2NwQBDQXNyLAFBzlX6uaxqjIQcAZyq6K+sgcQ40oj02Vn/2mLSkeL9DOfP7BPOwVA==} + + '@swup/debug-plugin@4.1.0': + resolution: {integrity: sha512-R+RP4hjoeXrO+wowSswaTM4P05lu6iDg6UwdbQn0wfJ082KiUpH+DDwHYNOatxusKVExFuhLec+X9IbyAyiv8w==} + peerDependencies: + swup: ^4.0.0 + + '@swup/fade-theme@2.0.2': + resolution: {integrity: sha512-x2XLIzAk8akrmVkozrlv0cU8wWnzt8MC164F1801qdffzY7mOi1v2mHl5Db9pqrP3BZ4UqC+5683/hQJ4obYEA==} + peerDependencies: + swup: ^4.0.0 + + '@swup/forms-plugin@3.6.0': + resolution: {integrity: sha512-pRN6OR5wR27LvJqQOlCgu1fP9Z0ZsGauxWOE6nRCtjP1+98wlGTMiMsQ+jGvvs+IOK9IDTJQ7jvprnJAZaw9zw==} + peerDependencies: + swup: ^4.6.0 + + '@swup/fragment-plugin@1.2.0': + resolution: {integrity: sha512-pn8NsIlvM3xYn4XCWOp3T9m5jEjt2dszSqiZUQmf1/77b/K8o/zes2RFjpZOwJiB8TtcuMvnXCml3cZuSA2J4w==} + peerDependencies: + swup: ^4.6.0 + + '@swup/head-plugin@2.3.1': + resolution: {integrity: sha512-kdv60fO9c0/3+K40f7Fj/uV34nSuuPeCsld83J5uVVFizOmoovA737C5M1Iqac5Spf2GLU7q+mhN6AbohSIBjA==} + peerDependencies: + swup: ^4.6.0 + + '@swup/overlay-theme@2.0.2': + resolution: {integrity: sha512-nfk5jrEru0lbFzlOzkT/f77sUwVHM/iUzlPMAT/KkWecn4/YuT4Y+lgIY3Se9VtD8TbSFrXYoHJea4GMZPJRAg==} + peerDependencies: + swup: ^4.0.0 + + '@swup/parallel-plugin@0.4.0': + resolution: {integrity: sha512-un37RpdFz2vuJV1r9Hr0nCl5qgloN/Z3SczC3wi1XfkiHtzZ8kFTcm5pIW5rUkDVwtCTil44mlAA/STouBEgDw==} + peerDependencies: + swup: ^4.6.0 + + '@swup/plugin@3.0.1': + resolution: {integrity: sha512-A9yiJeKTmQ9kac2Eo3MbMWW+Tiw23W5OSzAHVTCfW6n5zze6dexY3FLEUSDTcvRgciknvXfMZ9JTnebbvCKKWw==} + hasBin: true + + '@swup/plugin@4.0.0': + resolution: {integrity: sha512-3Kq31BJxnzoPg643YxGoWQggoU6VPKZpdE5CqqmP7wwkpCYTzkRmrfcQ29mGhsSS7xfS7D33iZoBiwY+wPoo2A==} + + '@swup/preload-plugin@3.2.11': + resolution: {integrity: sha512-dq50u+d8L+63/pU6dUDnypuBoF49ubjRzRJqitGem2K7wRn7xccxRSvdyeGKdA2vNvzGDAmLfwVTZdSotvvDrw==} + peerDependencies: + swup: ^4.0.0 + + '@swup/prettier-config@1.1.0': + resolution: {integrity: sha512-EF4DMdIGieEsuY2XK0PuLf7Uw7yUQOMbA6IdCMvvRvKXj03WLLpnNIFfFp+6hmMtXRSUE88VBpRyp6Giiu1Pbg==} + + '@swup/progress-plugin@3.2.0': + resolution: {integrity: sha512-Ur+D4+aee9swR6pn7JbEyGMwVP1BTcN5ygjlno7IaSQ/vMZbuJ73po1RkKlIi86p+/PZ+1kynkH4K4eMZuHKKg==} + peerDependencies: + swup: ^4.0.0 + + '@swup/route-name-plugin@4.1.0': + resolution: {integrity: sha512-1tw3WeExEKwI3pVMXTptCGxFUDOSEpc63D741eeUCjjGW/f9q7ekuqEaPQd5YJ6POpzDjdt1jjuC9yv54CbeXA==} + peerDependencies: + swup: ^4.0.0 + + '@swup/scripts-plugin@2.1.0': + resolution: {integrity: sha512-JSMFsFCN9gn4q3m1Ccv0gq3gwRoZl6UGALOQO3OeQ8wOIq9vPC5dcUD3CMBuaPanksjR4GC8ZoukIjHrlT52fg==} + peerDependencies: + swup: ^4.2.0 + + '@swup/scroll-plugin@3.3.2': + resolution: {integrity: sha512-jwngTz8LZza8p7ZWqaqQIzkH8x4hwyPh8RbrJSwTKussx24YUQuV9sgjDCzvJ16k/aYk9NCCvqLbb+4TcT3jqA==} + peerDependencies: + swup: ^4.2.0 + + '@swup/slide-theme@2.0.2': + resolution: {integrity: sha512-CLFD+Nd/wIDLMOfg7D7sOX2d1AyhZsoLXT+G6xB4ARELaP1j+nQGDjyuRvgAESMW+GA1EL43y/BcXOAKTjzrsg==} + peerDependencies: + swup: ^4.0.0 + + '@swup/theme@2.1.0': + resolution: {integrity: sha512-nwAzx+GYySIYs6uSCFYGNdpLWv2z/mEryRD1gvmIqsaSP2N7sVd4mKAboraJAzIzbasRhTsTQzyN1LfLeti3AA==} + peerDependencies: + swup: ^4.0.0 + + '@tailwindcss/typography@0.5.19': + resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/fontkit@2.0.8': + resolution: {integrity: sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==} + + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/katex@0.16.7': + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + '@types/node@25.0.3': + resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/qrcode@1.5.6': + resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} + + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + + '@types/sanitize-html@2.16.0': + resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==} + + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@volar/kit@2.4.27': + resolution: {integrity: sha512-ilZoQDMLzqmSsImJRWx4YiZ4FcvvPrPnFVmL6hSsIWB6Bn3qc7k88J9yP32dagrs5Y8EXIlvvD/mAFaiuEOACQ==} + peerDependencies: + typescript: '*' + + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} + + '@volar/language-server@2.4.27': + resolution: {integrity: sha512-SymGNkErcHg8GjiG65iQN8sLkhqu1pwKhFySmxeBuYq5xFYagKBW36eiNITXQTdvT0tutI1GXcXdq/FdE/IyjA==} + + '@volar/language-service@2.4.27': + resolution: {integrity: sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw==} + + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} + + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} + + '@vscode/emmet-helper@2.11.0': + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + astro-expressive-code@0.41.5: + resolution: {integrity: sha512-6jfABbPO0fkRD1ROAPBQtJR2p7gjbmk/GjfblOpo5Z7F+gwhL7+s8bEhLz9GdW10yfbn+gJvwEf7f9Lu2clh2A==} + peerDependencies: + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 + + astro-icon@1.1.5: + resolution: {integrity: sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==} + + astro@5.16.6: + resolution: {integrity: sha512-6mF/YrvwwRxLTu+aMEa5pwzKUNl5ZetWbTyZCs9Um0F12HUmxUiF5UHiZPy4rifzU3gtpM3xP2DfdmkNX9eZRg==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asyncro@3.0.0: + resolution: {integrity: sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==} + + autoprefixer@10.4.22: + resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-polyfill-corejs2@0.4.14: + resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.5: + resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-transform-async-to-promises@0.8.18: + resolution: {integrity: sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==} + + babel-plugin-transform-replace-expressions@0.2.0: + resolution: {integrity: sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-64@1.0.0: + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + + base64-js@0.0.8: + resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} + engines: {node: '>= 0.4'} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + baseline-browser-mapping@2.9.6: + resolution: {integrity: sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg==} + hasBin: true + + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brotli-size@4.0.0: + resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} + engines: {node: '>= 10.16.0'} + + brotli@1.3.3: + resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001760: + resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + 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==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.1.2: + resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} + engines: {node: '>=20.18.1'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + core-js-compat@3.47.0: + resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-background-parser@0.1.0: + resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} + + css-box-shadow@1.0.0-3: + resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} + + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + + css-declaration-sorter@6.4.1: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + + css-gradient-parser@0.0.17: + resolution: {integrity: sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==} + engines: {node: '>=16'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-selector-parser@3.3.0: + resolution: {integrity: sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==} + + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@5.2.14: + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@3.1.0: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano@5.1.15: + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + dayjs@1.11.19: + resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delegate-it@6.3.0: + resolution: {integrity: sha512-WAa6cA61M5mfDR31PBgMNQQ3LY1q++TxnZzcm7E9XV8ODBPxDutxH0toTR/BXqIkLaVuU7ntFe1uOqDllhA22A==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + deterministic-object-hash@2.0.2: + resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} + engines: {node: '>=18'} + + devalue@5.6.1: + resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dfa@1.2.0: + resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.1: + resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + + emmet@2.4.11: + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} + + emoji-regex-xs@2.0.1: + resolution: {integrity: sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==} + engines: {node: '>=10.0.0'} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrap@2.2.1: + resolution: {integrity: sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + expressive-code@0.41.5: + resolution: {integrity: sha512-iXl9BgDogQgzgE/WRSrcyU8upOcRZrXPMiu6tegEHML57YLQ65S0E3/sjAXmMZy0GXoPs60s9jbwoMo/mdEQOg==} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fast-xml-parser@5.3.3: + resolution: {integrity: sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==} + hasBin: true + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fflate@0.7.4: + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + + figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filesize@6.4.0: + resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} + engines: {node: '>= 0.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + focus-options-polyfill@1.6.0: + resolution: {integrity: sha512-uyrAmLZrPnUItQY5wTdg31TO9GGZRGsh/jmohUg9oLmLi/sw5y7LlTV/mwyd6rvbxIOGwmRiv6LcTS8w7Bk9NQ==} + + fontace@0.3.1: + resolution: {integrity: sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==} + + fontkit@2.0.4: + resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + hasBin: true + + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + + gzip-size@3.0.0: + resolution: {integrity: sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==} + engines: {node: '>=0.12.0'} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + h3@1.15.4: + resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hex-rgb@4.3.0: + resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} + engines: {node: '>=6'} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + + jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + katex@0.16.27: + resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==} + hasBin: true + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + linebreak@1.1.0: + resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + maxmin@2.1.0: + resolution: {integrity: sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==} + engines: {node: '>=0.12'} + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + meilisearch@0.54.0: + resolution: {integrity: sha512-b1bwJAEfj8C6hgSN88+/LvW3pe3nWC+thBS2seAbPZGakf/vzsLqppgZquiomzCr2GhU7U7H289625qhYe3rbw==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + microbundle@0.15.1: + resolution: {integrity: sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==} + hasBin: true + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + + morphdom@2.7.7: + resolution: {integrity: sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-html-parser@7.0.1: + resolution: {integrity: sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA==} + + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + opencollective-postinstall@2.0.3: + resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} + hasBin: true + + overlayscrollbars@2.13.0: + resolution: {integrity: sha512-uQGpLESrbFDLTWucWAKX9ceIANj7detMwH/2yJ315Llt72ZcWN3P6ckMotoqVv2Mk29R/pnhDtgYjy4K+kwAyQ==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@6.2.0: + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} + engines: {node: '>=18'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-queue@8.1.1: + resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} + engines: {node: '>=18'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + + pagefind@1.4.0: + resolution: {integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==} + hasBin: true + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-css-color@0.2.1: + resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + + parse-srcset@1.0.2: + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + photoswipe@5.4.4: + resolution: {integrity: sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA==} + engines: {node: '>= 0.12.0'} + + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-calc@8.2.4: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + + postcss-colormin@5.3.1: + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-convert-values@5.1.3: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-comments@5.1.2: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-duplicates@5.1.0: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-empty@5.1.1: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-overridden@5.1.0: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-import@16.1.1: + resolution: {integrity: sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-merge-longhand@5.1.7: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-rules@5.1.4: + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-font-values@5.1.0: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-gradients@5.1.1: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-params@5.1.4: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-selectors@5.2.1: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules@4.3.1: + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-nesting@13.0.2: + resolution: {integrity: sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-normalize-charset@5.1.0: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-display-values@5.1.0: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-positions@5.1.1: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-repeat-style@5.1.1: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-string@5.1.0: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-timing-functions@5.1.0: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-unicode@5.1.1: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-url@5.1.0: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-whitespace@5.1.1: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-ordered-values@5.1.3: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-initial@5.1.2: + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-transforms@5.1.0: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-svgo@5.1.0: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-unique-selectors@5.1.1: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@3.0.1: + resolution: {integrity: sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==} + engines: {node: '>=0.10.0'} + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + qrcode@1.5.4: + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} + hasBin: true + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + reading-time@1.5.0: + resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.13.0: + resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + hasBin: true + + rehype-autolink-headings@7.1.0: + resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + + rehype-components@0.3.0: + resolution: {integrity: sha512-yl2bUkZi+sU0gxwVCun7IkjiDLPczSs1SKMKHmjlSLkk4mMryBd/aYba5J8suhJdquBEKSw6ZNxU3MvVQ9xqoQ==} + + rehype-expressive-code@0.41.5: + resolution: {integrity: sha512-SzKJyu7heDpkt+XE/AqeWsYMSMocE/5mpJXD6CMgstqJHSE9bxGNcLp3zL9Wne3M5iBsS4GJyOD2syV77kRveA==} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-directive-rehype@0.4.2: + resolution: {integrity: sha512-T6e+IG+BwqU4++MK54vFb+KDFjs3a+tHeK6E0T0ctR1FSyngolfDtAEzqxHWlRzQZqGi2sB4DFXry6oqH87D/g==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + remark-directive@3.0.1: + resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-github-admonitions-to-directives@1.0.5: + resolution: {integrity: sha512-MSRzDs51HGbUrHJ0es8POuxwJiUycWw4aYCTN2RZhdOm5UvyqdB8ApWoGBj9QAiPSHKw2HWl1hd5rRzWxVfNew==} + + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-sectionize@2.1.0: + resolution: {integrity: sha512-R/pHt1RLYrEqrbwOVXx8HnvvwOg+mxg8pE4kIWpIYE3/CuZhU8/PAx/0y1BbHWUA0jmTLTeWpUlDrS/B0pyd0g==} + + remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + + request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + restructure@3.0.2: + resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup-plugin-bundle-size@1.0.3: + resolution: {integrity: sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==} + + rollup-plugin-postcss@4.0.2: + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: 8.x + + rollup-plugin-terser@7.0.2: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + + rollup-plugin-typescript2@0.32.1: + resolution: {integrity: sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==} + peerDependencies: + rollup: '>=1.26.3' + typescript: '>=2.4.0' + + rollup-plugin-visualizer@5.14.0: + resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + rolldown: 1.x + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.53.5: + resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sanitize-html@2.17.0: + resolution: {integrity: sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==} + + satori@0.18.3: + resolution: {integrity: sha512-T3DzWNmnrfVmk2gCIlAxLRLbGkfp3K7TyRva+Byyojqu83BNvnMeqVeYRdmUw4TKCsyH4RiQ/KuF/I4yEzgR5A==} + engines: {node: '>=16'} + + sax@1.4.3: + resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + + scrl@2.0.0: + resolution: {integrity: sha512-BbbVXxrOn58Ge4wjOORIRVZamssQu08ISLL/AC2z9aATIsKqZLESwZVW5YR0Yz0C7qqDRHb4yNXJlQ8yW0SGHw==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs-live@0.0.5: + resolution: {integrity: sha512-IR5+gA7f+v/V8ao7ZKE4TQpbG6ABeGxQhwL0seIbOXvHdoFAHw3MEiUICrhUfuroRREKL0n7HDA5b/R5it8KHg==} + peerDependencies: + shelljs: ^0.8.4 + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + shiki@3.20.0: + resolution: {integrity: sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@8.0.2: + resolution: {integrity: sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==} + engines: {node: '>=14.0.0', npm: '>=6.0.0'} + hasBin: true + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smol-toml@1.5.2: + resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} + engines: {node: '>= 18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + stream-replace-string@2.0.0: + resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.codepointat@0.2.1: + resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + + strnum@2.1.2: + resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} + + style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + stylehacks@5.1.1: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + stylus@0.64.0: + resolution: {integrity: sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==} + engines: {node: '>=16'} + hasBin: true + + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svelte2tsx@0.7.45: + resolution: {integrity: sha512-cSci+mYGygYBHIZLHlm/jYlEc1acjAHqaQaDFHdEBpUueM9kSTnPpvPtSl5VkJOU1qSJ7h1K+6F/LIUYiqC8VA==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + + svelte@5.46.1: + resolution: {integrity: sha512-ynjfCHD3nP2el70kN5Pmg37sSi0EjOm9FgHYQdC4giWG/hzO3AatzXXJJgP305uIhGQxSufJLuYWtkY8uK/8RA==} + engines: {node: '>=18'} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + svgo@4.0.0: + resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==} + engines: {node: '>=16'} + hasBin: true + + swup-morph-plugin@1.3.0: + resolution: {integrity: sha512-vTqWYA5ZFkWMo54K8jlol5OCvboqRsELLfM1PUkS2IiL+1dDDChzMHa4ZBI5+yfl7bZUCWgd8EmuhMd/i/o+Qg==} + peerDependencies: + swup: ^4.6.0 + + swup@4.8.2: + resolution: {integrity: sha512-Art2vB4idZ7EFZQhhA47ZifkmZMPgcAwE6z28BhorbTYCO8jcovcc5MasX49GGdXYJWO43DTut7iZb5yrQdEfA==} + + tailwindcss@3.4.19: + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@7.5.2: + resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + engines: {node: '>=18'} + + terser@5.44.1: + resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} + engines: {node: '>=10'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tosource@2.0.0-alpha.3: + resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==} + engines: {node: '>=10'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + + typesafe-path@0.2.2: + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} + + typescript-auto-import-cache@0.3.6: + resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + undici@7.16.0: + resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + engines: {node: '>=20.18.1'} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + + unicode-properties@1.4.1: + resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} + engines: {node: '>=4'} + + unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.6.0: + resolution: {integrity: sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==} + + unist-util-find-after@4.0.1: + resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-map@3.1.3: + resolution: {integrity: sha512-4/mDauoxqZ6geK97lJ6n2kDk6JK88Vh+hWMSJqyaaP/7eqN1dDhjcjnNxKNm3YU6Sw7PVJtcFMUbnmHvYzb6Vg==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unstorage@1.17.3: + resolution: {integrity: sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + update-browserslist-db@1.2.2: + resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + 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 + + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + volar-service-css@0.0.67: + resolution: {integrity: sha512-zV7C6enn9T9tuvQ6iSUyYEs34iPXR69Pf9YYWpbFYPWzVs22w96BtE8p04XYXbmjU6unt5oFt+iLL77bMB5fhA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-emmet@0.0.67: + resolution: {integrity: sha512-UDBL5x7KptmuJZNCCXMlCndMhFult/tj+9jXq3FH1ZGS1E4M/1U5hC06pg1c6e4kn+vnR6bqmvX0vIhL4f98+A==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-html@0.0.67: + resolution: {integrity: sha512-ljREMF79JbcjNvObiv69HK2HCl5UT7WTD10zi6CRFUHMbPfiF2UZ42HGLsEGSzaHGZz6H4IFjSS/qfENRLUviQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-prettier@0.0.67: + resolution: {integrity: sha512-B4KnPJPNWFTkEDa6Fn08i5PpO6T1CecmLLTFZoXz2eI4Fxwba/3nDaaVSsEP7e/vEe+U5YqV9fBzayJT71G5xg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + + volar-service-typescript-twoslash-queries@0.0.67: + resolution: {integrity: sha512-LD2R7WivDYp1SPgZrxx/0222xVTitDjm36oKo5+bfYG5kEgnw+BOPVHdwmvpJKg/RfssfxDI1ouwD4XkEDEfbA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-typescript@0.0.67: + resolution: {integrity: sha512-rfQBy36Rm1PU9vLWHk8BYJ4r2j/CI024vocJcH4Nb6K2RTc2Irmw6UOVY5DdGiPRV5r+e10wLMK5njj/EcL8sA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-yaml@0.0.67: + resolution: {integrity: sha512-jkdP/RF6wPIXEE3Ktnd81oJPn7aAvnVSiaqQHThC2Hrvo6xd9pEcqtbBUI+YfqVgvcMtXAkbtNO61K2GPhAiuA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + vscode-css-languageservice@6.3.9: + resolution: {integrity: sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA==} + + vscode-html-languageservice@5.6.1: + resolution: {integrity: sha512-5Mrqy5CLfFZUgkyhNZLA1Ye5g12Cb/v6VM7SxUzZUaRKWMDz4md+y26PrfRTSU0/eQAl3XpO9m2og+GGtDMuaA==} + + vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml-language-server@1.19.2: + resolution: {integrity: sha512-9F3myNmJzUN/679jycdMxqtydPSDRAarSj3wPiF7pchEPnO9Dg07Oc+gIYLqXR4L+g+FSEVXXv2+mr54StLFOg==} + hasBin: true + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} + engines: {node: '>= 14'} + hasBin: true + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + yocto-spinner@0.2.3: + resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} + engines: {node: '>=18.19'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + + zod-to-json-schema@3.25.0: + resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} + peerDependencies: + zod: ^3.25 || ^4 + + zod-to-ts@1.2.0: + resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} + peerDependencies: + typescript: ^4.9.4 || ^5.0.2 + zod: ^3 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@adobe/css-tools@4.3.3': {} + + '@alloc/quick-lru@5.2.0': {} + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.0.2 + + '@antfu/utils@8.1.1': {} + + '@astrojs/check@0.9.6(prettier@3.7.4)(typescript@5.9.3)': + dependencies: + '@astrojs/language-server': 2.16.2(prettier@3.7.4)(typescript@5.9.3) + chokidar: 4.0.3 + kleur: 4.1.5 + typescript: 5.9.3 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + + '@astrojs/compiler@2.13.0': {} + + '@astrojs/internal-helpers@0.7.5': {} + + '@astrojs/language-server@2.16.2(prettier@3.7.4)(typescript@5.9.3)': + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/kit': 2.4.27(typescript@5.9.3) + '@volar/language-core': 2.4.27 + '@volar/language-server': 2.4.27 + '@volar/language-service': 2.4.27 + fast-glob: 3.3.3 + muggle-string: 0.4.1 + volar-service-css: 0.0.67(@volar/language-service@2.4.27) + volar-service-emmet: 0.0.67(@volar/language-service@2.4.27) + volar-service-html: 0.0.67(@volar/language-service@2.4.27) + volar-service-prettier: 0.0.67(@volar/language-service@2.4.27)(prettier@3.7.4) + volar-service-typescript: 0.0.67(@volar/language-service@2.4.27) + volar-service-typescript-twoslash-queries: 0.0.67(@volar/language-service@2.4.27) + volar-service-yaml: 0.0.67(@volar/language-service@2.4.27) + vscode-html-languageservice: 5.6.1 + vscode-uri: 3.1.0 + optionalDependencies: + prettier: 3.7.4 + transitivePeerDependencies: + - typescript + + '@astrojs/markdown-remark@6.3.10': + dependencies: + '@astrojs/internal-helpers': 0.7.5 + '@astrojs/prism': 3.3.0 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.1 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + shiki: 3.20.0 + smol-toml: 1.5.2 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))': + dependencies: + '@astrojs/markdown-remark': 6.3.10 + '@mdx-js/mdx': 3.1.1 + acorn: 8.15.0 + astro: 5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + es-module-lexer: 1.7.0 + estree-util-visit: 2.0.0 + hast-util-to-html: 9.0.5 + piccolore: 0.1.3 + rehype-raw: 7.0.0 + remark-gfm: 4.0.1 + remark-smartypants: 3.0.2 + source-map: 0.7.6 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@3.3.0': + dependencies: + prismjs: 1.30.0 + + '@astrojs/rss@4.0.14': + dependencies: + fast-xml-parser: 5.3.3 + piccolore: 0.1.3 + + '@astrojs/sitemap@3.6.0': + dependencies: + sitemap: 8.0.2 + stream-replace-string: 2.0.0 + zod: 3.25.76 + + '@astrojs/svelte@7.2.4(@types/node@25.0.3)(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(jiti@1.21.7)(stylus@0.64.0)(svelte@5.46.1)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)': + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)) + astro: 5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + svelte: 5.46.1 + svelte2tsx: 0.7.45(svelte@5.46.1)(typescript@5.9.3) + typescript: 5.9.3 + vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@astrojs/tailwind@6.0.2(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2))(tailwindcss@3.4.19(yaml@2.8.2))': + dependencies: + astro: 5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + autoprefixer: 10.4.22(postcss@8.5.6) + postcss: 8.5.6 + postcss-load-config: 4.0.2(postcss@8.5.6) + tailwindcss: 3.4.19(yaml@2.8.2) + transitivePeerDependencies: + - ts-node + + '@astrojs/telemetry@3.3.0': + dependencies: + ci-info: 4.3.1 + debug: 4.4.3 + dlv: 1.1.3 + dset: 3.1.4 + is-docker: 3.0.0 + is-wsl: 3.1.0 + which-pm-runs: 1.1.0 + transitivePeerDependencies: + - supports-color + + '@astrojs/ts-plugin@1.10.6': + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/language-core': 2.4.27 + '@volar/typescript': 2.4.27 + semver: 7.7.3 + vscode-languageserver-textdocument: 1.0.12 + + '@astrojs/yaml2ts@0.2.2': + dependencies: + yaml: 2.8.2 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.5 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.3 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.28.3': + dependencies: + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-class-properties@7.12.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.5) + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) + core-js-compat: 3.47.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-flow@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.5) + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.28.5 + esutils: 2.0.3 + + '@babel/preset-react@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.28.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@biomejs/biome@2.3.10': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.3.10 + '@biomejs/cli-darwin-x64': 2.3.10 + '@biomejs/cli-linux-arm64': 2.3.10 + '@biomejs/cli-linux-arm64-musl': 2.3.10 + '@biomejs/cli-linux-x64': 2.3.10 + '@biomejs/cli-linux-x64-musl': 2.3.10 + '@biomejs/cli-win32-arm64': 2.3.10 + '@biomejs/cli-win32-x64': 2.3.10 + + '@biomejs/cli-darwin-arm64@2.3.10': + optional: true + + '@biomejs/cli-darwin-x64@2.3.10': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.3.10': + optional: true + + '@biomejs/cli-linux-arm64@2.3.10': + optional: true + + '@biomejs/cli-linux-x64-musl@2.3.10': + optional: true + + '@biomejs/cli-linux-x64@2.3.10': + optional: true + + '@biomejs/cli-win32-arm64@2.3.10': + optional: true + + '@biomejs/cli-win32-x64@2.3.10': + optional: true + + '@capsizecss/unpack@3.0.1': + dependencies: + fontkit: 2.0.4 + + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@ctrl/tinycolor@4.2.0': {} + + '@emmetio/abbreviation@2.3.3': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-abbreviation@2.1.8': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-parser@0.4.1': + dependencies: + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 + + '@emmetio/html-matcher@1.3.0': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} + + '@emnapi/runtime@1.7.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@expressive-code/core@0.41.5': + dependencies: + '@ctrl/tinycolor': 4.2.0 + hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hastscript: 9.0.1 + postcss: 8.5.6 + postcss-nested: 6.2.0(postcss@8.5.6) + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 + + '@expressive-code/plugin-collapsible-sections@0.41.5': + dependencies: + '@expressive-code/core': 0.41.5 + + '@expressive-code/plugin-frames@0.41.5': + dependencies: + '@expressive-code/core': 0.41.5 + + '@expressive-code/plugin-line-numbers@0.41.5': + dependencies: + '@expressive-code/core': 0.41.5 + + '@expressive-code/plugin-shiki@0.41.5': + dependencies: + '@expressive-code/core': 0.41.5 + shiki: 3.20.0 + + '@expressive-code/plugin-text-markers@0.41.5': + dependencies: + '@expressive-code/core': 0.41.5 + + '@fancyapps/ui@6.1.7': {} + + '@fontsource-variable/jetbrains-mono@5.2.8': {} + + '@fontsource/roboto@5.2.9': {} + + '@iconify-json/fa6-brands@1.2.6': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/fa6-regular@1.2.4': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/fa6-solid@1.2.4': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/material-symbols@1.2.50': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/mdi@1.2.3': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/simple-icons@1.2.64': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/svelte@4.2.0(svelte@5.46.1)': + dependencies: + '@iconify/types': 2.0.0 + svelte: 5.46.1 + + '@iconify/tools@4.2.0': + dependencies: + '@iconify/types': 2.0.0 + '@iconify/utils': 2.3.0 + cheerio: 1.1.2 + domhandler: 5.0.3 + extract-zip: 2.0.1 + local-pkg: 1.1.2 + pathe: 2.0.3 + svgo: 3.3.2 + tar: 7.5.2 + transitivePeerDependencies: + - supports-color + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.3.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 8.1.1 + '@iconify/types': 2.0.0 + debug: 4.4.3 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.2 + mlly: 1.8.0 + transitivePeerDependencies: + - supports-color + + '@img/colour@1.0.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.7.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.15.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@oslojs/encoding@1.1.0': {} + + '@pagefind/darwin-arm64@1.4.0': + optional: true + + '@pagefind/darwin-x64@1.4.0': + optional: true + + '@pagefind/freebsd-x64@1.4.0': + optional: true + + '@pagefind/linux-arm64@1.4.0': + optional: true + + '@pagefind/linux-x64@1.4.0': + optional: true + + '@pagefind/windows-x64@1.4.0': + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/plugin-alias@3.1.9(rollup@2.79.2)': + dependencies: + rollup: 2.79.2 + slash: 3.0.0 + + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.5)(rollup@2.79.2)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-commonjs@17.1.0(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.11 + rollup: 2.79.2 + + '@rollup/plugin-json@4.1.0(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + + '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.11 + rollup: 2.79.2 + + '@rollup/plugin-yaml@4.1.2(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@2.79.2) + js-yaml: 4.1.1 + tosource: 2.0.0-alpha.3 + optionalDependencies: + rollup: 2.79.2 + + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.2 + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@rollup/pluginutils@5.3.0(rollup@2.79.2)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 2.79.2 + + '@rollup/rollup-android-arm-eabi@4.53.5': + optional: true + + '@rollup/rollup-android-arm64@4.53.5': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.5': + optional: true + + '@rollup/rollup-darwin-x64@4.53.5': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.5': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.5': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.5': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.5': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.5': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.5': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.5': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.5': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.5': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.5': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.5': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.5': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.5': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.5': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.5': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.5': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.5': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.5': + optional: true + + '@shikijs/core@3.20.0': + dependencies: + '@shikijs/types': 3.20.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.20.0': + dependencies: + '@shikijs/types': 3.20.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 + + '@shikijs/engine-oniguruma@3.20.0': + dependencies: + '@shikijs/types': 3.20.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.20.0': + dependencies: + '@shikijs/types': 3.20.0 + + '@shikijs/themes@3.20.0': + dependencies: + '@shikijs/types': 3.20.0 + + '@shikijs/types@3.20.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@shuding/opentype.js@1.4.0-beta.0': + dependencies: + fflate: 0.7.4 + string.prototype.codepointat: 0.2.1 + + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.12 + + '@sveltejs/acorn-typescript@1.0.8(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)) + debug: 4.4.3 + svelte: 5.46.1 + vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)) + debug: 4.4.3 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.21 + svelte: 5.46.1 + vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)) + transitivePeerDependencies: + - supports-color + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@swup/a11y-plugin@5.0.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + focus-options-polyfill: 1.6.0 + swup: 4.8.2 + + '@swup/astro@1.7.0': + dependencies: + '@swup/a11y-plugin': 5.0.0(swup@4.8.2) + '@swup/body-class-plugin': 3.3.0(swup@4.8.2) + '@swup/debug-plugin': 4.1.0(swup@4.8.2) + '@swup/fade-theme': 2.0.2(swup@4.8.2) + '@swup/forms-plugin': 3.6.0(swup@4.8.2) + '@swup/fragment-plugin': 1.2.0(swup@4.8.2) + '@swup/head-plugin': 2.3.1(swup@4.8.2) + '@swup/overlay-theme': 2.0.2(swup@4.8.2) + '@swup/parallel-plugin': 0.4.0(swup@4.8.2) + '@swup/preload-plugin': 3.2.11(swup@4.8.2) + '@swup/progress-plugin': 3.2.0(swup@4.8.2) + '@swup/route-name-plugin': 4.1.0(swup@4.8.2) + '@swup/scripts-plugin': 2.1.0(swup@4.8.2) + '@swup/scroll-plugin': 3.3.2(swup@4.8.2) + '@swup/slide-theme': 2.0.2(swup@4.8.2) + swup: 4.8.2 + swup-morph-plugin: 1.3.0(swup@4.8.2) + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/body-class-plugin@3.3.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/browserslist-config@1.0.1': {} + + '@swup/debug-plugin@4.1.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/fade-theme@2.0.2(swup@4.8.2)': + dependencies: + '@swup/theme': 2.1.0(swup@4.8.2) + swup: 4.8.2 + + '@swup/forms-plugin@3.6.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/fragment-plugin@1.2.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/head-plugin@2.3.1(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/overlay-theme@2.0.2(swup@4.8.2)': + dependencies: + '@swup/theme': 2.1.0(swup@4.8.2) + swup: 4.8.2 + + '@swup/parallel-plugin@0.4.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 3.0.1 + swup: 4.8.2 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/plugin@3.0.1': + dependencies: + '@swup/browserslist-config': 1.0.1 + '@swup/prettier-config': 1.1.0 + chalk: 5.6.2 + microbundle: 0.15.1 + prettier: 2.8.8 + shelljs: 0.8.5 + shelljs-live: 0.0.5(shelljs@0.8.5) + swup: 4.8.2 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/plugin@4.0.0': + dependencies: + swup: 4.8.2 + + '@swup/preload-plugin@3.2.11(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/prettier-config@1.1.0': {} + + '@swup/progress-plugin@3.2.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/route-name-plugin@4.1.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 3.0.1 + swup: 4.8.2 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/scripts-plugin@2.1.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/scroll-plugin@3.3.2(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + scrl: 2.0.0 + swup: 4.8.2 + + '@swup/slide-theme@2.0.2(swup@4.8.2)': + dependencies: + '@swup/theme': 2.1.0(swup@4.8.2) + swup: 4.8.2 + + '@swup/theme@2.1.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@tailwindcss/typography@0.5.19(tailwindcss@3.4.19(yaml@2.8.2))': + dependencies: + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.19(yaml@2.8.2) + + '@trysound/sax@0.2.0': {} + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.8': {} + + '@types/fontkit@2.0.8': + dependencies: + '@types/node': 25.0.3 + + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/katex@0.16.7': {} + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + + '@types/mdx@2.0.13': {} + + '@types/ms@2.1.0': {} + + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 + + '@types/node@17.0.45': {} + + '@types/node@25.0.3': + dependencies: + undici-types: 7.16.0 + + '@types/parse-json@4.0.2': {} + + '@types/qrcode@1.5.6': + dependencies: + '@types/node': 25.0.3 + + '@types/resolve@1.17.1': + dependencies: + '@types/node': 25.0.3 + + '@types/sanitize-html@2.16.0': + dependencies: + htmlparser2: 8.0.2 + + '@types/sax@1.2.7': + dependencies: + '@types/node': 17.0.45 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 25.0.3 + optional: true + + '@ungap/structured-clone@1.3.0': {} + + '@volar/kit@2.4.27(typescript@5.9.3)': + dependencies: + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 + typesafe-path: 0.2.2 + typescript: 5.9.3 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-core@2.4.27': + dependencies: + '@volar/source-map': 2.4.27 + + '@volar/language-server@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-service@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/source-map@2.4.27': {} + + '@volar/typescript@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vscode/emmet-helper@2.11.0': + dependencies: + emmet: 2.4.11 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + '@vscode/l10n@0.0.18': {} + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv-draft-04@1.0.0(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-regex@2.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@2.2.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-iterate@2.0.1: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + astring@1.9.0: {} + + astro-expressive-code@0.41.5(astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2)): + dependencies: + astro: 5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2) + rehype-expressive-code: 0.41.5 + + astro-icon@1.1.5: + dependencies: + '@iconify/tools': 4.2.0 + '@iconify/types': 2.0.0 + '@iconify/utils': 2.3.0 + transitivePeerDependencies: + - supports-color + + astro@5.16.6(@types/node@25.0.3)(jiti@1.21.7)(rollup@2.79.2)(stylus@0.64.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.2): + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/internal-helpers': 0.7.5 + '@astrojs/markdown-remark': 6.3.10 + '@astrojs/telemetry': 3.3.0 + '@capsizecss/unpack': 3.0.1 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.3.0(rollup@2.79.2) + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + boxen: 8.0.1 + ci-info: 4.3.1 + clsx: 2.1.1 + common-ancestor-path: 1.0.1 + cookie: 1.1.1 + cssesc: 3.0.0 + debug: 4.4.3 + deterministic-object-hash: 2.0.2 + devalue: 5.6.1 + diff: 5.2.0 + dlv: 1.1.3 + dset: 3.1.4 + es-module-lexer: 1.7.0 + esbuild: 0.25.12 + estree-walker: 3.0.3 + flattie: 1.1.1 + fontace: 0.3.1 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.1 + magic-string: 0.30.21 + magicast: 0.5.1 + mrmime: 2.0.1 + neotraverse: 0.6.18 + p-limit: 6.2.0 + p-queue: 8.1.1 + package-manager-detector: 1.6.0 + piccolore: 0.1.3 + picomatch: 4.0.3 + prompts: 2.4.2 + rehype: 13.0.2 + semver: 7.7.3 + shiki: 3.20.0 + smol-toml: 1.5.2 + svgo: 4.0.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tsconfck: 3.1.6(typescript@5.9.3) + ultrahtml: 1.6.0 + unifont: 0.6.0 + unist-util-visit: 5.0.0 + unstorage: 1.17.3 + vfile: 6.0.3 + vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)) + xxhash-wasm: 1.1.0 + yargs-parser: 21.1.1 + yocto-spinner: 0.2.3 + zod: 3.25.76 + zod-to-json-schema: 3.25.0(zod@3.25.76) + zod-to-ts: 1.2.0(typescript@5.9.3)(zod@3.25.76) + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - yaml + + async-function@1.0.0: {} + + async@3.2.6: {} + + asyncro@3.0.0: {} + + autoprefixer@10.4.22(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + caniuse-lite: 1.0.30001760 + fraction.js: 5.3.4 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axobject-query@4.1.0: {} + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.28.4 + cosmiconfig: 7.1.0 + resolve: 1.22.11 + + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) + core-js-compat: 3.47.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + babel-plugin-transform-async-to-promises@0.8.18: {} + + babel-plugin-transform-replace-expressions@0.2.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + base-64@1.0.0: {} + + base64-js@0.0.8: {} + + base64-js@1.5.1: {} + + baseline-browser-mapping@2.9.6: {} + + bcp-47-match@2.0.3: {} + + binary-extensions@2.3.0: {} + + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brotli-size@4.0.0: + dependencies: + duplexer: 0.1.1 + + brotli@1.3.3: + dependencies: + base64-js: 1.5.1 + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.6 + caniuse-lite: 1.0.30001760 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.2(browserslist@4.28.1) + + buffer-crc32@0.2.13: {} + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + camelcase@8.0.0: {} + + camelize@1.0.1: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.28.1 + caniuse-lite: 1.0.30001760 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001760: {} + + ccount@2.0.1: {} + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.1.2: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.0.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.16.0 + whatwg-mimetype: 4.0.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@3.0.0: {} + + ci-info@4.3.1: {} + + cli-boxes@3.0.0: {} + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@2.1.2: {} + + clsx@2.1.1: {} + + collapse-white-space@2.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colord@2.9.3: {} + + comma-separated-tokens@2.0.3: {} + + commander@11.1.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + common-ancestor-path@1.0.1: {} + + commondir@1.0.1: {} + + concat-map@0.0.1: {} + + concat-with-sourcemaps@1.1.0: + dependencies: + source-map: 0.6.1 + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + convert-source-map@2.0.0: {} + + cookie-es@1.2.2: {} + + cookie@1.1.1: {} + + core-js-compat@3.47.0: + dependencies: + browserslist: 4.28.1 + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + css-background-parser@0.1.0: {} + + css-box-shadow@1.0.0-3: {} + + css-color-keywords@1.0.0: {} + + css-declaration-sorter@6.4.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + css-gradient-parser@0.0.17: {} + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-selector-parser@3.3.0: {} + + css-to-react-native@3.2.0: + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@5.2.14(postcss@8.5.6): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.5.6) + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 8.2.4(postcss@8.5.6) + postcss-colormin: 5.3.1(postcss@8.5.6) + postcss-convert-values: 5.1.3(postcss@8.5.6) + postcss-discard-comments: 5.1.2(postcss@8.5.6) + postcss-discard-duplicates: 5.1.0(postcss@8.5.6) + postcss-discard-empty: 5.1.1(postcss@8.5.6) + postcss-discard-overridden: 5.1.0(postcss@8.5.6) + postcss-merge-longhand: 5.1.7(postcss@8.5.6) + postcss-merge-rules: 5.1.4(postcss@8.5.6) + postcss-minify-font-values: 5.1.0(postcss@8.5.6) + postcss-minify-gradients: 5.1.1(postcss@8.5.6) + postcss-minify-params: 5.1.4(postcss@8.5.6) + postcss-minify-selectors: 5.2.1(postcss@8.5.6) + postcss-normalize-charset: 5.1.0(postcss@8.5.6) + postcss-normalize-display-values: 5.1.0(postcss@8.5.6) + postcss-normalize-positions: 5.1.1(postcss@8.5.6) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.6) + postcss-normalize-string: 5.1.0(postcss@8.5.6) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.6) + postcss-normalize-unicode: 5.1.1(postcss@8.5.6) + postcss-normalize-url: 5.1.0(postcss@8.5.6) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.6) + postcss-ordered-values: 5.1.3(postcss@8.5.6) + postcss-reduce-initial: 5.1.2(postcss@8.5.6) + postcss-reduce-transforms: 5.1.0(postcss@8.5.6) + postcss-svgo: 5.1.0(postcss@8.5.6) + postcss-unique-selectors: 5.1.1(postcss@8.5.6) + + cssnano-utils@3.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + cssnano@5.1.15(postcss@8.5.6): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.5.6) + lilconfig: 2.1.0 + postcss: 8.5.6 + yaml: 1.10.2 + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dayjs@1.11.19: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decamelize@1.2.0: {} + + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 + + dedent-js@1.0.1: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + defu@6.1.4: {} + + delegate-it@6.3.0: + dependencies: + typed-query-selector: 2.12.0 + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-libc@2.1.2: {} + + deterministic-object-hash@2.0.2: + dependencies: + base-64: 1.0.0 + + devalue@5.6.1: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dfa@1.2.0: {} + + didyoumean@1.2.2: {} + + diff@5.2.0: {} + + dijkstrajs@1.0.3: {} + + direction@2.0.1: {} + + dlv@1.1.3: {} + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dset@3.1.4: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.1: {} + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.4 + + electron-to-chromium@1.5.267: {} + + emmet@2.4.11: + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 + + emoji-regex-xs@2.0.1: {} + + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + entities@2.2.0: {} + + entities@4.5.0: {} + + entities@6.0.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + esm-env@1.2.2: {} + + esprima@4.0.1: {} + + esrap@2.2.1: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.8 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@0.6.1: {} + + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + expressive-code@0.41.5: + dependencies: + '@expressive-code/core': 0.41.5 + '@expressive-code/plugin-frames': 0.41.5 + '@expressive-code/plugin-shiki': 0.41.5 + '@expressive-code/plugin-text-markers': 0.41.5 + + exsolve@1.0.8: {} + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend@3.0.2: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.4.3 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-uri@3.1.0: {} + + fast-xml-parser@5.3.3: + dependencies: + strnum: 2.1.2 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fflate@0.7.4: {} + + figures@1.7.0: + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + filesize@6.4.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + flattie@1.1.1: {} + + focus-options-polyfill@1.6.0: {} + + fontace@0.3.1: + dependencies: + '@types/fontkit': 2.0.8 + fontkit: 2.0.4 + + fontkit@2.0.4: + dependencies: + '@swc/helpers': 0.5.17 + brotli: 1.3.3 + clone: 2.1.2 + dfa: 1.2.0 + fast-deep-equal: 3.1.3 + restructure: 3.0.2 + tiny-inflate: 1.0.3 + unicode-properties: 1.4.1 + unicode-trie: 2.0.0 + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fraction.js@5.3.4: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + + generic-names@4.0.0: + dependencies: + loader-utils: 3.3.1 + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + github-slugger@2.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.1.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@15.15.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globalyzer@0.1.0: {} + + globrex@0.1.2: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + gray-matter@4.0.3: + dependencies: + js-yaml: 3.14.2 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + + gzip-size@3.0.0: + dependencies: + duplexer: 0.1.2 + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + h3@1.15.4: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.4 + radix3: 1.1.2 + ufo: 1.6.1 + uncrypto: 0.1.3 + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-heading-rank@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-select@6.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.3.0 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + 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.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + he@1.2.0: {} + + hex-rgb@4.3.0: {} + + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + htmlparser2@10.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 6.0.1 + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + http-cache-semantics@4.2.0: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + icss-replace-symbols@1.1.0: {} + + icss-utils@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + import-cwd@3.0.0: + dependencies: + import-from: 3.0.0 + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-from@3.0.0: + dependencies: + resolve-from: 5.0.0 + + import-meta-resolve@4.2.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inline-style-parser@0.2.7: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + interpret@1.4.0: {} + + iron-webcrypto@1.2.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-decimal@2.0.1: {} + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extendable@0.1.1: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@2.0.1: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-map@2.0.3: {} + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@5.0.0: {} + + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.8 + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + + jest-worker@26.6.2: + dependencies: + '@types/node': 25.0.3 + merge-stream: 2.0.0 + supports-color: 7.2.0 + + jiti@1.21.7: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@1.0.0: {} + + json5@2.2.3: {} + + jsonc-parser@2.3.1: {} + + jsonc-parser@3.3.1: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + katex@0.16.27: + dependencies: + commander: 8.3.0 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + kleur@4.1.5: {} + + kolorist@1.8.0: {} + + lilconfig@2.1.0: {} + + lilconfig@3.1.3: {} + + linebreak@1.1.0: + dependencies: + base64-js: 0.0.8 + unicode-trie: 2.0.0 + + lines-and-columns@1.2.4: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + loader-utils@3.3.1: {} + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + + locate-character@3.0.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.camelcase@4.3.0: {} + + lodash.debounce@4.0.8: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.uniq@4.5.0: {} + + lodash@4.17.21: {} + + longest-streak@3.1.0: {} + + lru-cache@10.4.3: {} + + lru-cache@11.2.4: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.5.1: + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + source-map-js: 1.2.1 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + markdown-extensions@2.0.0: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + markdown-table@3.0.4: {} + + marked@16.4.2: {} + + math-intrinsics@1.1.0: {} + + maxmin@2.1.0: + dependencies: + chalk: 1.1.3 + figures: 1.7.0 + gzip-size: 3.0.0 + pretty-bytes: 3.0.1 + + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-math@3.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + 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 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.14: {} + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + mdn-data@2.12.2: {} + + mdurl@2.0.0: {} + + meilisearch@0.54.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + microbundle@0.15.1: + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-proposal-class-properties': 7.12.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) + '@babel/preset-env': 7.28.5(@babel/core@7.28.5) + '@babel/preset-flow': 7.27.1(@babel/core@7.28.5) + '@babel/preset-react': 7.28.5(@babel/core@7.28.5) + '@rollup/plugin-alias': 3.1.9(rollup@2.79.2) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.5)(rollup@2.79.2) + '@rollup/plugin-commonjs': 17.1.0(rollup@2.79.2) + '@rollup/plugin-json': 4.1.0(rollup@2.79.2) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + asyncro: 3.0.0 + autoprefixer: 10.4.22(postcss@8.5.6) + babel-plugin-macros: 3.1.0 + babel-plugin-transform-async-to-promises: 0.8.18 + babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.28.5) + brotli-size: 4.0.0 + builtin-modules: 3.3.0 + camelcase: 6.3.0 + escape-string-regexp: 4.0.0 + filesize: 6.4.0 + gzip-size: 6.0.0 + kleur: 4.1.5 + lodash.merge: 4.6.2 + postcss: 8.5.6 + pretty-bytes: 5.6.0 + rollup: 2.79.2 + rollup-plugin-bundle-size: 1.0.3 + rollup-plugin-postcss: 4.0.2(postcss@8.5.6) + rollup-plugin-terser: 7.0.2(rollup@2.79.2) + rollup-plugin-typescript2: 0.32.1(rollup@2.79.2)(typescript@4.9.5) + rollup-plugin-visualizer: 5.14.0(rollup@2.79.2) + sade: 1.8.1 + terser: 5.44.1 + tiny-glob: 0.2.9 + tslib: 2.8.1 + typescript: 4.9.5 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-directive@3.0.2: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.7 + devlop: 1.1.0 + katex: 0.16.27 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + 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-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minipass@7.1.2: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + morphdom@2.7.7: {} + + mri@1.2.0: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + neotraverse@0.6.18: {} + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + + node-fetch-native@1.6.7: {} + + node-html-parser@7.0.1: + dependencies: + css-select: 5.2.2 + he: 1.2.0 + + node-mock-http@1.0.4: {} + + node-releases@2.0.27: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + number-is-nan@1.0.1: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + + ohash@2.0.11: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.4: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + opencollective-postinstall@2.0.3: {} + + overlayscrollbars@2.13.0: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-finally@1.0.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@6.2.0: + dependencies: + yocto-queue: 1.2.2 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-queue@8.1.1: + dependencies: + eventemitter3: 5.0.1 + p-timeout: 6.1.4 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + p-timeout@6.1.4: {} + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + package-manager-detector@1.6.0: {} + + pagefind@1.4.0: + optionalDependencies: + '@pagefind/darwin-arm64': 1.4.0 + '@pagefind/darwin-x64': 1.4.0 + '@pagefind/freebsd-x64': 1.4.0 + '@pagefind/linux-arm64': 1.4.0 + '@pagefind/linux-x64': 1.4.0 + '@pagefind/windows-x64': 1.4.0 + + pako@0.2.9: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-css-color@0.2.1: + dependencies: + color-name: 1.1.4 + hex-rgb: 4.3.0 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.2.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-latin@7.0.0: + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + parse-srcset@1.0.2: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.4 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + + path-type@4.0.0: {} + + pathe@2.0.3: {} + + pend@1.2.0: {} + + photoswipe@5.4.4: {} + + piccolore@0.1.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pify@2.3.0: {} + + pify@5.0.0: {} + + pirates@4.0.7: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + + pngjs@5.0.0: {} + + possible-typed-array-names@1.1.0: {} + + postcss-calc@8.2.4(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + + postcss-colormin@5.3.1(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-convert-values@5.1.3(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@5.1.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-duplicates@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-empty@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-overridden@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-import@15.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.11 + + postcss-import@16.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.11 + + postcss-js@4.1.0(postcss@8.5.6): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.6 + + postcss-load-config@3.1.4(postcss@8.5.6): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.5.6 + + postcss-load-config@4.0.2(postcss@8.5.6): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.2 + optionalDependencies: + postcss: 8.5.6 + + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 1.21.7 + postcss: 8.5.6 + yaml: 2.8.2 + + postcss-merge-longhand@5.1.7(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.5.6) + + postcss-merge-rules@5.1.4(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-minify-font-values@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@5.1.1(postcss@8.5.6): + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-params@5.1.4(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@5.2.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.1 + + postcss-modules-values@4.0.0(postcss@8.5.6): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + + postcss-modules@4.3.1(postcss@8.5.6): + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) + string-hash: 1.1.3 + + postcss-nested@6.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-nesting@13.0.2(postcss@8.5.6): + dependencies: + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.6 + postcss-selector-parser: 7.1.1 + + postcss-normalize-charset@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-normalize-display-values@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@5.1.1(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@5.1.0(postcss@8.5.6): + dependencies: + normalize-url: 6.1.0 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@5.1.3(postcss@8.5.6): + dependencies: + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@5.1.2(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + caniuse-api: 3.0.0 + postcss: 8.5.6 + + postcss-reduce-transforms@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + + postcss-unique-selectors@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@2.8.8: {} + + prettier@3.7.4: {} + + pretty-bytes@3.0.1: + dependencies: + number-is-nan: 1.0.1 + + pretty-bytes@5.6.0: {} + + prismjs@1.30.0: {} + + promise.series@0.2.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + property-information@6.5.0: {} + + property-information@7.1.0: {} + + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + punycode.js@2.3.1: {} + + qrcode@1.5.4: + dependencies: + dijkstrajs: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + + quansync@0.2.11: {} + + queue-microtask@1.2.3: {} + + radix3@1.1.2: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + reading-time@1.5.0: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.11 + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + + regjsgen@0.8.0: {} + + regjsparser@0.13.0: + dependencies: + jsesc: 3.1.0 + + rehype-autolink-headings@7.1.0: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.3.0 + hast-util-heading-rank: 3.0.0 + hast-util-is-element: 3.0.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + rehype-components@0.3.0: + dependencies: + hast-util-is-element: 3.0.0 + unist-util-visit: 5.0.0 + + rehype-expressive-code@0.41.5: + dependencies: + expressive-code: 0.41.5 + + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.7 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.27 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + rehype-slug@6.0.0: + dependencies: + '@types/hast': 3.0.4 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.1 + unist-util-visit: 5.0.0 + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-directive-rehype@0.4.2: + dependencies: + hastscript: 7.2.0 + unist-util-map: 3.1.3 + + remark-directive@3.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 3.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-github-admonitions-to-directives@1.0.5: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + transitivePeerDependencies: + - supports-color + + remark-math@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-sectionize@2.1.0: + dependencies: + unist-util-find-after: 4.0.1 + unist-util-visit: 4.1.2 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + request-light@0.5.8: {} + + request-light@0.7.0: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-main-filename@2.0.0: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restructure@3.0.2: {} + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.0.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + + reusify@1.1.0: {} + + rollup-plugin-bundle-size@1.0.3: + dependencies: + chalk: 1.1.3 + maxmin: 2.1.0 + + rollup-plugin-postcss@4.0.2(postcss@8.5.6): + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.5.6) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.5.6 + postcss-load-config: 3.1.4(postcss@8.5.6) + postcss-modules: 4.3.1(postcss@8.5.6) + promise.series: 0.2.0 + resolve: 1.22.11 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + + rollup-plugin-terser@7.0.2(rollup@2.79.2): + dependencies: + '@babel/code-frame': 7.27.1 + jest-worker: 26.6.2 + rollup: 2.79.2 + serialize-javascript: 4.0.0 + terser: 5.44.1 + + rollup-plugin-typescript2@0.32.1(rollup@2.79.2)(typescript@4.9.5): + dependencies: + '@rollup/pluginutils': 4.2.1 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + resolve: 1.22.11 + rollup: 2.79.2 + tslib: 2.8.1 + typescript: 4.9.5 + + rollup-plugin-visualizer@5.14.0(rollup@2.79.2): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.6 + yargs: 17.7.2 + optionalDependencies: + rollup: 2.79.2 + + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + + rollup@2.79.2: + optionalDependencies: + fsevents: 2.3.3 + + rollup@4.53.5: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.5 + '@rollup/rollup-android-arm64': 4.53.5 + '@rollup/rollup-darwin-arm64': 4.53.5 + '@rollup/rollup-darwin-x64': 4.53.5 + '@rollup/rollup-freebsd-arm64': 4.53.5 + '@rollup/rollup-freebsd-x64': 4.53.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.5 + '@rollup/rollup-linux-arm-musleabihf': 4.53.5 + '@rollup/rollup-linux-arm64-gnu': 4.53.5 + '@rollup/rollup-linux-arm64-musl': 4.53.5 + '@rollup/rollup-linux-loong64-gnu': 4.53.5 + '@rollup/rollup-linux-ppc64-gnu': 4.53.5 + '@rollup/rollup-linux-riscv64-gnu': 4.53.5 + '@rollup/rollup-linux-riscv64-musl': 4.53.5 + '@rollup/rollup-linux-s390x-gnu': 4.53.5 + '@rollup/rollup-linux-x64-gnu': 4.53.5 + '@rollup/rollup-linux-x64-musl': 4.53.5 + '@rollup/rollup-openharmony-arm64': 4.53.5 + '@rollup/rollup-win32-arm64-msvc': 4.53.5 + '@rollup/rollup-win32-ia32-msvc': 4.53.5 + '@rollup/rollup-win32-x64-gnu': 4.53.5 + '@rollup/rollup-win32-x64-msvc': 4.53.5 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-identifier@0.4.2: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + sanitize-html@2.17.0: + dependencies: + deepmerge: 4.3.1 + escape-string-regexp: 4.0.0 + htmlparser2: 8.0.2 + is-plain-object: 5.0.0 + parse-srcset: 1.0.2 + postcss: 8.5.6 + + satori@0.18.3: + dependencies: + '@shuding/opentype.js': 1.4.0-beta.0 + css-background-parser: 0.1.0 + css-box-shadow: 1.0.0-3 + css-gradient-parser: 0.0.17 + css-to-react-native: 3.2.0 + emoji-regex-xs: 2.0.1 + escape-html: 1.0.3 + linebreak: 1.1.0 + parse-css-color: 0.2.1 + postcss-value-parser: 4.2.0 + yoga-layout: 3.2.1 + + sax@1.4.3: {} + + scrl@2.0.0: {} + + scule@1.3.0: {} + + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + + semver@6.3.1: {} + + semver@7.7.3: {} + + serialize-javascript@4.0.0: + dependencies: + randombytes: 2.1.0 + + set-blocking@2.0.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shelljs-live@0.0.5(shelljs@0.8.5): + dependencies: + cross-spawn: 7.0.6 + shelljs: 0.8.5 + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shiki@3.20.0: + dependencies: + '@shikijs/core': 3.20.0 + '@shikijs/engine-javascript': 3.20.0 + '@shikijs/engine-oniguruma': 3.20.0 + '@shikijs/langs': 3.20.0 + '@shikijs/themes': 3.20.0 + '@shikijs/types': 3.20.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@4.1.0: {} + + sisteransi@1.0.5: {} + + sitemap@8.0.2: + dependencies: + '@types/node': 17.0.45 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.4.3 + + slash@3.0.0: {} + + smol-toml@1.5.2: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.6: {} + + sourcemap-codec@1.4.8: {} + + space-separated-tokens@2.0.2: {} + + sprintf-js@1.0.3: {} + + stable@0.1.8: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + stream-replace-string@2.0.0: {} + + string-hash@1.1.3: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string.prototype.codepointat@0.2.1: {} + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-bom-string@1.0.0: {} + + strnum@2.1.2: {} + + style-inject@0.3.0: {} + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + stylehacks@5.1.1(postcss@8.5.6): + dependencies: + browserslist: 4.28.1 + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + stylus@0.64.0: + dependencies: + '@adobe/css-tools': 4.3.3 + debug: 4.4.3 + glob: 10.5.0 + sax: 1.4.3 + source-map: 0.7.6 + transitivePeerDependencies: + - supports-color + + sucrase@3.35.1: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.15 + ts-interface-checker: 0.1.13 + + supports-color@2.0.0: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svelte2tsx@0.7.45(svelte@5.46.1)(typescript@5.9.3): + dependencies: + dedent-js: 1.0.1 + scule: 1.3.0 + svelte: 5.46.1 + typescript: 5.9.3 + + svelte@5.46.1: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + devalue: 5.6.1 + esm-env: 1.2.2 + esrap: 2.2.1 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.2.2 + css-tree: 2.3.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + + svgo@4.0.0: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.1.0 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.4.3 + + swup-morph-plugin@1.3.0(swup@4.8.2): + dependencies: + '@swup/plugin': 4.0.0 + morphdom: 2.7.7 + swup: 4.8.2 + + swup@4.8.2: + dependencies: + delegate-it: 6.3.0 + opencollective-postinstall: 2.0.3 + path-to-regexp: 6.3.0 + + tailwindcss@3.4.19(yaml@2.8.2): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.1.0(postcss@8.5.6) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2) + postcss-nested: 6.2.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.11 + sucrase: 3.35.1 + transitivePeerDependencies: + - tsx + - yaml + + tar@7.5.2: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + + terser@5.44.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tiny-glob@0.2.9: + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + + tiny-inflate@1.0.3: {} + + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tosource@2.0.0-alpha.3: {} + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + ts-interface-checker@0.1.13: {} + + tsconfck@3.1.6(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + tslib@2.8.1: {} + + type-fest@4.41.0: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typed-query-selector@2.12.0: {} + + typesafe-path@0.2.2: {} + + typescript-auto-import-cache@0.3.6: + dependencies: + semver: 7.7.3 + + typescript@4.9.5: {} + + typescript@5.9.3: {} + + uc.micro@2.1.0: {} + + ufo@1.6.1: {} + + ultrahtml@1.6.0: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + uncrypto@0.1.3: {} + + undici-types@7.16.0: {} + + undici@7.16.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-properties@1.4.1: + dependencies: + base64-js: 1.5.1 + unicode-trie: 2.0.0 + + unicode-property-aliases-ecmascript@2.2.0: {} + + unicode-trie@2.0.0: + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unifont@0.6.0: + dependencies: + css-tree: 3.1.0 + ofetch: 1.5.1 + ohash: 2.0.11 + + unist-util-find-after@4.0.1: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.11 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-map@3.1.3: + dependencies: + '@types/unist': 2.0.11 + + unist-util-modify-children@4.0.0: + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + universalify@2.0.1: {} + + unstorage@1.17.3: + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.4 + lru-cache: 10.4.3 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.1 + + update-browserslist-db@1.2.2(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + 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.3 + + vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.5 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.3 + fsevents: 2.3.3 + jiti: 1.21.7 + stylus: 0.64.0 + terser: 5.44.1 + yaml: 2.8.2 + + vitefu@1.1.1(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2)): + optionalDependencies: + vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(stylus@0.64.0)(terser@5.44.1)(yaml@2.8.2) + + volar-service-css@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-css-languageservice: 6.3.9 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-emmet@0.0.67(@volar/language-service@2.4.27): + dependencies: + '@emmetio/css-parser': 0.4.1 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.11.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-html@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-html-languageservice: 5.6.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-prettier@0.0.67(@volar/language-service@2.4.27)(prettier@3.7.4): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + prettier: 3.7.4 + + volar-service-typescript-twoslash-queries@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-typescript@0.0.67(@volar/language-service@2.4.27): + dependencies: + path-browserify: 1.0.1 + semver: 7.7.3 + typescript-auto-import-cache: 0.3.6 + vscode-languageserver-textdocument: 1.0.12 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-yaml@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-uri: 3.1.0 + yaml-language-server: 1.19.2 + optionalDependencies: + '@volar/language-service': 2.4.27 + + vscode-css-languageservice@6.3.9: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-html-languageservice@5.6.1: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-json-languageservice@4.1.8: + dependencies: + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-nls@5.2.0: {} + + vscode-uri@3.1.0: {} + + web-namespaces@2.0.1: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-module@2.0.1: {} + + which-pm-runs@1.1.0: {} + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + xxhash-wasm@1.1.0: {} + + y18n@4.0.3: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@5.0.0: {} + + yaml-language-server@1.19.2: + dependencies: + '@vscode/l10n': 0.0.18 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + lodash: 4.17.21 + prettier: 3.7.4 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + yaml: 2.7.1 + + yaml@1.10.2: {} + + yaml@2.7.1: {} + + yaml@2.8.2: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs-parser@21.1.1: {} + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yocto-queue@1.2.2: {} + + yocto-spinner@0.2.3: + dependencies: + yoctocolors: 2.1.2 + + yoctocolors@2.1.2: {} + + yoga-layout@3.2.1: {} + + zimmerframe@1.1.4: {} + + zod-to-json-schema@3.25.0(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod-to-ts@1.2.0(typescript@5.9.3)(zod@3.25.76): + dependencies: + typescript: 5.9.3 + zod: 3.25.76 + + zod@3.25.76: {} + + zwitch@2.0.4: {} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..632eeda --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,11 @@ +import postcssImport from 'postcss-import'; +import postcssNesting from 'tailwindcss/nesting/index.js'; +import tailwindcss from 'tailwindcss'; + +export default { + plugins: { + 'postcss-import': postcssImport, // to combine multiple css files + 'tailwindcss/nesting': postcssNesting, + tailwindcss: tailwindcss, + } +}; diff --git a/public/assets/css/APlayer.custom.css b/public/assets/css/APlayer.custom.css new file mode 100644 index 0000000..82a8302 --- /dev/null +++ b/public/assets/css/APlayer.custom.css @@ -0,0 +1,480 @@ +.aplayer.aplayer-fixed { + left: unset !important; + right: 2rem !important; + bottom: 2rem !important; + color: #000; + width: 100%; + background: transparent !important; + box-shadow: none !important; + transition: background 0.3s ease, box-shadow 0.3s ease; +} + +/* 展开状态时始终显示背景(包括 local 模式和 meting 模式) */ +.aplayer.aplayer-fixed:not(.aplayer-narrow) { + background: var(--card-bg, white) !important; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1) !important; +} + +.aplayer.aplayer-fixed:not(.aplayer-narrow) .aplayer-body { + background: var(--card-bg, white) !important; +} + +/* 暗色主题:展开状态时显示背景 */ +:root.dark .aplayer.aplayer-fixed:not(.aplayer-narrow) { + background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4) !important; +} + +:root.dark .aplayer.aplayer-fixed:not(.aplayer-narrow) .aplayer-body { + background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important; +} + +/* 收缩状态下鼠标悬浮时显示背景 */ +.aplayer.aplayer-fixed.aplayer-narrow:hover { + background: var(--card-bg, white) !important; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1) !important; +} + +/* 暗色主题悬浮效果 */ +:root.dark .aplayer.aplayer-fixed.aplayer-narrow:hover { + background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4) !important; +} + +:root.dark .aplayer.aplayer-fixed { + color: var(--btn-content, oklch(0.75 0.1 var(--hue))); +} + +.aplayer.aplayer-fixed .aplayer-body { + left: unset !important; + right: 2rem !important; + width: 400px !important; + bottom: 2rem !important; + max-width: calc(100% - 18px); + padding-right: 0 !important; + background: transparent !important; + transition: background 0.3s ease; +} + +.aplayer.aplayer-fixed .aplayer-miniswitcher { + right: unset; + left: -18px; + transform: rotate(180deg); + opacity: 0; + transition: opacity 0.2s ease; +} + +/* 触摸设备:始终显示 miniswitcher 和背景 */ +@media (hover: none) and (pointer: coarse) { + .aplayer.aplayer-fixed .aplayer-miniswitcher { + display: block; + opacity: 1; + /* 触摸设备上半透明背景 */ + background: rgba(200, 200, 200, 0.5) !important; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + } + + /* 触摸设备暗色主题:半透明背景 */ + :root.dark .aplayer.aplayer-fixed .aplayer-miniswitcher { + background: rgba(100, 100, 100, 0.5) !important; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + } + + /* 触摸设备上始终显示背景 */ + .aplayer.aplayer-fixed { + background: var(--card-bg, white) !important; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1) !important; + } + + :root.dark .aplayer.aplayer-fixed { + background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4) !important; + } +} + +/* 非触摸设备:默认隐藏,悬停时显示 */ +@media (hover: hover) { + .aplayer.aplayer-fixed .aplayer-miniswitcher { + display: none; + } + + /* 鼠标悬停在播放器上时显示 miniswitcher */ + .aplayer.aplayer-fixed:hover .aplayer-miniswitcher { + display: block; + opacity: 1; + } + + /* 收起状态下也支持悬停显示 */ + .aplayer.aplayer-fixed.aplayer-narrow:hover .aplayer-miniswitcher { + display: block; + opacity: 1; + } + + /* 列表展开状态时始终显示收缩按钮 */ + .aplayer.aplayer-fixed.aplayer-withlist:not(.aplayer-narrow) .aplayer-miniswitcher { + display: block !important; + opacity: 1 !important; + } +} + +/* 禁用初始化时的过渡动画,只在加载完成后恢复 */ +.aplayer.aplayer-fixed:not([data-initialized="true"]) .aplayer-body { + transition: none !important; +} + +.aplayer.aplayer-fixed:not([data-initialized="true"]) .aplayer-info { + transition: none !important; +} + +/* 缩小状态下禁用所有过渡动画 */ +.aplayer.aplayer-narrow .aplayer-body { + transition: none !important; +} + +.aplayer.aplayer-narrow .aplayer-info { + transition: none !important; +} + +/* ===== 移动端适配 ===== */ +@media (max-width: 768px) { + .aplayer.aplayer-fixed { + right: 0 !important; + bottom: 0rem !important; + } + .aplayer.aplayer-fixed .aplayer-body { + right: 0 !important; + bottom: 0rem !important; + } +} + +/* ===== 平板适配 ===== */ +@media (min-width: 641px) and (max-width: 1280px) { + .aplayer.aplayer-fixed { + right: 0.5rem !important; + bottom: 2rem !important; + } + .aplayer.aplayer-fixed .aplayer-body { + right: 0.5rem !important; + bottom: 2rem !important; + } +} + +/* 横屏模式适配 */ +@media (orientation: landscape) and (max-height: 640px) { + .aplayer.aplayer-fixed { + right: 0.5rem !important; + bottom: 2rem !important; + } + .aplayer.aplayer-fixed .aplayer-body { + right: 0.5rem !important; + bottom: 2rem !important; + } +} + +/* ===== 封面播放特效 ===== */ +/* 封面基础样式 - 默认正方形(触摸设备) */ +.aplayer .aplayer-pic { + transition: transform 0.3s ease, box-shadow 0.3s ease, border-radius 0.3s ease; + overflow: hidden; + position: relative; + aspect-ratio: 1; +} + +/* 确保封面图片适配 */ +.aplayer .aplayer-pic img { + width: 100%; + height: 100%; + object-fit: cover; +} + +/* 桌面端:圆形封面 */ +@media (hover: hover) { + .aplayer .aplayer-pic { + border-radius: 50%; + } + + .aplayer .aplayer-pic img { + border-radius: 50%; + } +} + +/* 缩小状态下禁用过渡动画 */ +.aplayer.aplayer-narrow .aplayer-pic { + transition: none !important; +} + +/* 旋转动画关键帧 */ +@keyframes aplayer-cover-rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* 亮色主题脉动动画 */ +@keyframes aplayer-cover-pulse { + 0%, 100% { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + } + 50% { + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25); + } +} + +/* 暗色主题脉动动画 */ +@keyframes aplayer-cover-pulse-dark { + 0%, 100% { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); + } + 50% { + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.6); + } +} + +/* 桌面端:播放状态旋转动画 */ +@media (hover: hover) { + /* 始终应用旋转动画,但通过 animation-play-state 控制播放/暂停 */ + .aplayer .aplayer-pic { + animation: aplayer-cover-rotate 20s linear infinite, + aplayer-cover-pulse 2s ease-in-out infinite; + animation-play-state: paused; + } + + /* 播放状态:恢复动画 */ + .aplayer[data-playing="true"] .aplayer-pic, + .aplayer.aplayer-playing .aplayer-pic { + animation-play-state: running; + } + + /* 暂停状态:暂停动画(保持当前位置) */ + .aplayer[data-playing="false"] .aplayer-pic, + .aplayer.aplayer-pause .aplayer-pic { + animation-play-state: paused; + } + + /* 暗色主题下的播放特效 */ + :root.dark .aplayer[data-playing="true"] .aplayer-pic, + :root.dark .aplayer.aplayer-playing .aplayer-pic { + animation: aplayer-cover-rotate 20s linear infinite, + aplayer-cover-pulse-dark 2s ease-in-out infinite; + animation-play-state: running; + } + + /* 暗色主题暂停状态 */ + :root.dark .aplayer[data-playing="false"] .aplayer-pic, + :root.dark .aplayer.aplayer-pause .aplayer-pic { + animation: aplayer-cover-rotate 20s linear infinite, + aplayer-cover-pulse-dark 2s ease-in-out infinite; + animation-play-state: paused; + } +} + +/* 触摸设备:无旋转动画,保持静态 */ +@media (hover: none) and (pointer: coarse) { + .aplayer .aplayer-pic { + animation: none !important; + } + + .aplayer[data-playing="true"] .aplayer-pic, + .aplayer.aplayer-playing .aplayer-pic, + .aplayer[data-playing="false"] .aplayer-pic, + .aplayer.aplayer-pause .aplayer-pic { + animation: none !important; + animation-play-state: paused !important; + } +} + +/* 桌面端:播放时隐藏暂停按钮,暂停时显示播放按钮 */ +@media (hover: hover) { + /* 播放状态时隐藏暂停按钮(封面在转,不需要暂停按钮) */ + .aplayer[data-playing="true"] .aplayer-pic .aplayer-pause, + .aplayer.aplayer-playing .aplayer-pic .aplayer-pause { + display: none !important; + } + + /* 播放状态时隐藏播放按钮(因为已经播放了) */ + .aplayer[data-playing="true"] .aplayer-pic .aplayer-play, + .aplayer.aplayer-playing .aplayer-pic .aplayer-play { + display: none !important; + } + + /* 暂停状态时隐藏暂停按钮,只显示播放按钮 */ + .aplayer[data-playing="false"] .aplayer-pic .aplayer-pause, + .aplayer.aplayer-pause .aplayer-pic .aplayer-pause, + .aplayer:not([data-playing="true"]):not(.aplayer-playing) .aplayer-pic .aplayer-pause { + display: none !important; + } + + /* 暂停状态时显示播放按钮(通过悬停显示) */ + .aplayer[data-playing="false"] .aplayer-pic:hover .aplayer-play, + .aplayer.aplayer-pause .aplayer-pic:hover .aplayer-play, + .aplayer:not([data-playing="true"]):not(.aplayer-playing) .aplayer-pic:hover .aplayer-play { + display: block !important; + } +} + +/* ===== 亮色主题适配 ===== */ + +/* ===== 暗色主题适配 ===== */ +:root.dark .aplayer { + background: var(--card-bg, oklch(0.23 0.015 var(--hue))); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4); +} + +:root.dark .aplayer.aplayer-withlist .aplayer-info { + border-bottom: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08)); +} + +:root.dark .aplayer.aplayer-fixed .aplayer-list { + border: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08)); + border-bottom: none; +} + +:root.dark .aplayer.aplayer-fixed .aplayer-body { + background: var(--card-bg, oklch(0.23 0.015 var(--hue))); +} + +:root.dark .aplayer.aplayer-fixed .aplayer-lrc { + text-shadow: -1px -1px 0 var(--card-bg, oklch(0.23 0.015 var(--hue))); +} + +:root.dark .aplayer.aplayer-fixed .aplayer-info { + border-top: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08)); +} + +:root.dark .aplayer .aplayer-info .aplayer-music .aplayer-author { + color: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar { + background: rgba(255, 255, 255, 0.2); +} + +:root.dark + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-loaded { + background: rgba(255, 255, 255, 0.3); +} + +:root.dark .aplayer .aplayer-info .aplayer-controller .aplayer-time { + color: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon + path { + fill: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon:hover + path { + fill: var(--btn-content, oklch(0.75 0.1 var(--hue))); +} + +:root.dark + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-volume-wrap + .aplayer-volume-bar-wrap + .aplayer-volume-bar { + background: rgba(255, 255, 255, 0.2); +} + +:root.dark .aplayer .aplayer-lrc:before { + background: linear-gradient( + 180deg, + var(--card-bg, oklch(0.23 0.015 var(--hue))) 0, + hsla(0, 0%, 100%, 0) + ); +} + +:root.dark .aplayer .aplayer-lrc:after { + background: linear-gradient( + 180deg, + hsla(0, 0%, 100%, 0) 0, + rgba(255, 255, 255, 0.1) + ); +} + +:root.dark .aplayer .aplayer-lrc p { + color: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark .aplayer .aplayer-list ol::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.2); +} + +:root.dark .aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover { + background-color: rgba(255, 255, 255, 0.3); +} + +:root.dark .aplayer .aplayer-list ol li { + border-top: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08)); +} + +:root.dark .aplayer .aplayer-list ol li:hover { + background: var(--btn-plain-bg-hover, oklch(0.3 0.035 var(--hue))); +} + +:root.dark .aplayer .aplayer-list ol li.aplayer-list-light { + background: var(--btn-plain-bg-hover, oklch(0.3 0.035 var(--hue))); +} + +:root.dark .aplayer .aplayer-list ol li .aplayer-list-index { + color: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark .aplayer .aplayer-list ol li .aplayer-list-author { + color: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark .aplayer .aplayer-notice { + background-color: var(--card-bg, oklch(0.23 0.015 var(--hue))); + color: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark .aplayer .aplayer-miniswitcher { + background: var(--btn-regular-bg, oklch(0.33 0.035 var(--hue))); + border-top: 1px solid var(--line-divider, #e5e7eb); + border-bottom: 1px solid var(--line-divider, #e5e7eb); + border-left: 1px solid var(--line-divider, #e5e7eb); +} + +:root.dark .aplayer .aplayer-miniswitcher .aplayer-icon path { + fill: var(--content-meta, rgba(255, 255, 255, 0.6)); +} + +:root.dark .aplayer .aplayer-miniswitcher .aplayer-icon:hover path { + fill: var(--btn-content, oklch(0.75 0.1 var(--hue))); +} + +:root.dark .aplayer .aplayer-info .aplayer-music .aplayer-title { + color: var(--btn-content, oklch(0.75 0.1 var(--hue))); +} + +:root.dark .aplayer .aplayer-list ol li .aplayer-list-title { + color: var(--btn-content, oklch(0.75 0.1 var(--hue))); +} diff --git a/public/assets/css/APlayer.min.css b/public/assets/css/APlayer.min.css new file mode 100644 index 0000000..12b5583 --- /dev/null +++ b/public/assets/css/APlayer.min.css @@ -0,0 +1,3 @@ +.aplayer{background:#fff;font-family:Arial,Helvetica,sans-serif;margin:5px;box-shadow:0 2px 2px 0 rgba(0,0,0,.07),0 1px 5px 0 rgba(0,0,0,.1);border-radius:2px;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;position:relative}.aplayer *{box-sizing:content-box}.aplayer svg{width:100%;height:100%}.aplayer svg circle,.aplayer svg path{fill:#fff}.aplayer.aplayer-withlist .aplayer-info{border-bottom:1px solid #e9e9e9}.aplayer.aplayer-withlist .aplayer-list{display:block}.aplayer.aplayer-withlist .aplayer-icon-order,.aplayer.aplayer-withlist .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu{display:inline}.aplayer.aplayer-withlrc .aplayer-pic{height:90px;width:90px}.aplayer.aplayer-withlrc .aplayer-info{margin-left:90px;height:90px;padding:10px 7px 0}.aplayer.aplayer-withlrc .aplayer-lrc{display:block}.aplayer.aplayer-narrow{width:66px}.aplayer.aplayer-narrow .aplayer-info,.aplayer.aplayer-narrow .aplayer-list{display:none}.aplayer.aplayer-narrow .aplayer-body,.aplayer.aplayer-narrow .aplayer-pic{height:66px;width:66px}.aplayer.aplayer-fixed{position:fixed;bottom:0;left:0;right:0;margin:0;z-index:99;overflow:visible;max-width:400px;box-shadow:none}.aplayer.aplayer-fixed .aplayer-list{margin-bottom:65px;border:1px solid #eee;border-bottom:none}.aplayer.aplayer-fixed .aplayer-body{position:fixed;bottom:0;left:0;right:0;margin:0;z-index:99;background:#fff;padding-right:18px;transition:all .3s ease;max-width:400px}.aplayer.aplayer-fixed .aplayer-lrc{display:block;position:fixed;bottom:10px;left:0;right:0;margin:0;z-index:98;pointer-events:none;text-shadow:-1px -1px 0 #fff}.aplayer.aplayer-fixed .aplayer-lrc:after,.aplayer.aplayer-fixed .aplayer-lrc:before{display:none}.aplayer.aplayer-fixed .aplayer-info{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;transition:all .3s ease;border-bottom:none;border-top:1px solid #e9e9e9}.aplayer.aplayer-fixed .aplayer-info .aplayer-music{width:calc(100% - 105px)}.aplayer.aplayer-fixed .aplayer-miniswitcher{display:block}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-info{display:block;-webkit-transform:scaleX(0);transform:scaleX(0)}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body{width:66px!important}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-miniswitcher .aplayer-icon{-webkit-transform:rotateY(0);transform:rotateY(0)}.aplayer.aplayer-fixed .aplayer-icon-back,.aplayer.aplayer-fixed .aplayer-icon-forward,.aplayer.aplayer-fixed .aplayer-icon-lrc,.aplayer.aplayer-fixed .aplayer-icon-play{display:inline-block}.aplayer.aplayer-fixed .aplayer-icon-back,.aplayer.aplayer-fixed .aplayer-icon-forward,.aplayer.aplayer-fixed .aplayer-icon-menu,.aplayer.aplayer-fixed .aplayer-icon-play{position:absolute;bottom:27px;width:20px;height:20px}.aplayer.aplayer-fixed .aplayer-icon-back{right:75px}.aplayer.aplayer-fixed .aplayer-icon-play{right:50px}.aplayer.aplayer-fixed .aplayer-icon-forward{right:25px}.aplayer.aplayer-fixed .aplayer-icon-menu{right:0}.aplayer.aplayer-arrow .aplayer-icon-loop,.aplayer.aplayer-arrow .aplayer-icon-order,.aplayer.aplayer-mobile .aplayer-icon-volume-down{display:none}.aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-loading-icon{display:block}.aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb{-webkit-transform:scale(1);transform:scale(1)}.aplayer .aplayer-body{position:relative}.aplayer .aplayer-icon{width:15px;height:15px;border:none;background-color:transparent;outline:none;cursor:pointer;opacity:.8;vertical-align:middle;padding:0;font-size:12px;margin:0;display:inline-block}.aplayer .aplayer-icon path{transition:all .2s ease-in-out}.aplayer .aplayer-icon-back,.aplayer .aplayer-icon-forward,.aplayer .aplayer-icon-lrc,.aplayer .aplayer-icon-order,.aplayer .aplayer-icon-play{display:none}.aplayer .aplayer-icon-lrc-inactivity svg{opacity:.4}.aplayer .aplayer-icon-forward{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.aplayer .aplayer-lrc-content{display:none}.aplayer .aplayer-pic{position:relative;float:left;height:66px;width:66px;background-size:cover;background-position:50%;transition:all .3s ease;cursor:pointer}.aplayer .aplayer-pic:hover .aplayer-button{opacity:1}.aplayer .aplayer-pic .aplayer-button{position:absolute;border-radius:50%;opacity:.8;text-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2);background:rgba(0,0,0,.2);transition:all .1s ease}.aplayer .aplayer-pic .aplayer-button path{fill:#fff}.aplayer .aplayer-pic .aplayer-hide{display:none}.aplayer .aplayer-pic .aplayer-play{width:26px;height:26px;border:2px solid #fff;bottom:50%;right:50%;margin:0 -15px -15px 0}.aplayer .aplayer-pic .aplayer-play svg{position:absolute;top:3px;left:4px;height:20px;width:20px}.aplayer .aplayer-pic .aplayer-pause{width:16px;height:16px;border:2px solid #fff;bottom:4px;right:4px}.aplayer .aplayer-pic .aplayer-pause svg{position:absolute;top:2px;left:2px;height:12px;width:12px}.aplayer .aplayer-info{margin-left:66px;padding:14px 7px 0 10px;height:66px;box-sizing:border-box}.aplayer .aplayer-info .aplayer-music{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:0 0 13px 5px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:default;padding-bottom:2px;height:20px}.aplayer .aplayer-info .aplayer-music .aplayer-title{font-size:14px}.aplayer .aplayer-info .aplayer-music .aplayer-author{font-size:12px;color:#666}.aplayer .aplayer-info .aplayer-controller{position:relative;display:flex}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap{margin:0 0 0 5px;padding:4px 0;cursor:pointer!important;flex:1}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap:hover .aplayer-bar .aplayer-played .aplayer-thumb{-webkit-transform:scale(1);transform:scale(1)}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar{position:relative;height:2px;width:100%;background:#cdcdcd}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded{position:absolute;left:0;top:0;bottom:0;background:#aaa;height:2px;transition:all .5s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played{position:absolute;left:0;top:0;bottom:0;height:2px}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:10px;width:10px;border-radius:50%;cursor:pointer;transition:all .3s ease-in-out;-webkit-transform:scale(0);transform:scale(0)}.aplayer .aplayer-info .aplayer-controller .aplayer-time{position:relative;right:0;bottom:4px;height:17px;color:#999;font-size:11px;padding-left:7px}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner{vertical-align:middle}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon{cursor:pointer;transition:all .2s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path{fill:#666}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-loop{margin-right:2px}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon:hover path{fill:#000}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu,.aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-menu,.aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-mode{display:none}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap{position:relative;display:inline-block;margin-left:3px;cursor:pointer!important}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap:hover .aplayer-volume-bar-wrap{height:40px}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap{position:absolute;bottom:15px;right:-3px;width:25px;height:0;z-index:99;overflow:hidden;transition:all .2s ease-in-out}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap.aplayer-volume-bar-wrap-active{height:40px}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar{position:absolute;bottom:0;right:10px;width:5px;height:35px;background:#aaa;border-radius:2.5px;overflow:hidden}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar .aplayer-volume{position:absolute;bottom:0;right:0;width:5px;transition:all .1s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon{display:none}.aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon svg{position:absolute;-webkit-animation:rotate 1s linear infinite;animation:rotate 1s linear infinite}.aplayer .aplayer-lrc{display:none;position:relative;height:30px;text-align:center;overflow:hidden;margin:-10px 0 7px}.aplayer .aplayer-lrc:before{top:0;height:10%;background:linear-gradient(180deg,#fff 0,hsla(0,0%,100%,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#00ffffff",GradientType=0)}.aplayer .aplayer-lrc:after,.aplayer .aplayer-lrc:before{position:absolute;z-index:1;display:block;overflow:hidden;width:100%;content:" "}.aplayer .aplayer-lrc:after{bottom:0;height:33%;background:linear-gradient(180deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.8));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00ffffff",endColorstr="#ccffffff",GradientType=0)}.aplayer .aplayer-lrc p{font-size:12px;color:#666;line-height:16px!important;height:16px!important;padding:0!important;margin:0!important;transition:all .5s ease-out;opacity:.4;overflow:hidden}.aplayer .aplayer-lrc p.aplayer-lrc-current{opacity:1;overflow:visible;height:auto!important;min-height:16px}.aplayer .aplayer-lrc.aplayer-lrc-hide{display:none}.aplayer .aplayer-lrc .aplayer-lrc-contents{width:100%;transition:all .5s ease-out;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:default}.aplayer .aplayer-list{overflow:auto;transition:all .5s ease;will-change:height;display:none;overflow:hidden}.aplayer .aplayer-list.aplayer-list-hide{max-height:0!important}.aplayer .aplayer-list ol{list-style-type:none;margin:0;padding:0;overflow-y:auto}.aplayer .aplayer-list ol::-webkit-scrollbar{width:5px}.aplayer .aplayer-list ol::-webkit-scrollbar-thumb{border-radius:3px;background-color:#eee}.aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover{background-color:#ccc}.aplayer .aplayer-list ol li{position:relative;height:32px;line-height:32px;padding:0 15px;font-size:12px;border-top:1px solid #e9e9e9;cursor:pointer;transition:all .2s ease;overflow:hidden;margin:0}.aplayer .aplayer-list ol li:first-child{border-top:none}.aplayer .aplayer-list ol li:hover{background:#efefef}.aplayer .aplayer-list ol li.aplayer-list-light{background:#e9e9e9}.aplayer .aplayer-list ol li.aplayer-list-light .aplayer-list-cur{display:inline-block}.aplayer .aplayer-list ol li .aplayer-list-cur{display:none;width:3px;height:22px;position:absolute;left:0;top:5px;cursor:pointer}.aplayer .aplayer-list ol li .aplayer-list-index{color:#666;margin-right:12px;cursor:pointer}.aplayer .aplayer-list ol li .aplayer-list-author{color:#666;float:right;cursor:pointer}.aplayer .aplayer-notice{opacity:0;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:12px;border-radius:4px;padding:5px 10px;transition:all .3s ease-in-out;overflow:hidden;color:#fff;pointer-events:none;background-color:#f4f4f5;color:#909399}.aplayer .aplayer-miniswitcher{display:none;position:absolute;top:0;right:0;bottom:0;height:100%;background:#e6e6e6;width:18px;border-radius:0 2px 2px 0}.aplayer .aplayer-miniswitcher .aplayer-icon{height:100%;width:100%;-webkit-transform:rotateY(180deg);transform:rotateY(180deg);transition:all .3s ease}.aplayer .aplayer-miniswitcher .aplayer-icon path{fill:#666}.aplayer .aplayer-miniswitcher .aplayer-icon:hover path{fill:#000}@-webkit-keyframes aplayer-roll{0%{left:0}to{left:-100%}}@keyframes aplayer-roll{0%{left:0}to{left:-100%}}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}} + +/*# sourceMappingURL=APlayer.min.css.map*/ \ No newline at end of file diff --git a/public/assets/css/APlayer.min.css.map b/public/assets/css/APlayer.min.css.map new file mode 100644 index 0000000..d63257f --- /dev/null +++ b/public/assets/css/APlayer.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://[name]/./src/css/index.scss"],"names":[],"mappings":"AAAA,SACE,gBACA,uCACA,WACA,kEACA,kBACA,gBACA,yBACG,sBACC,qBACI,iBACR,mBACA,iBAAmB,CACnB,WACE,sBAAwB,CAC1B,aACE,WACA,WAAa,CACb,sCAEE,SAAW,CACf,wCACE,+BAAiC,CACnC,wCACE,aAAe,CAGjB,wJACE,cAAgB,CAClB,sCACE,YACA,UAAY,CACd,uCACE,iBACA,YACA,kBAAwB,CAC1B,sCACE,aAAe,CACjB,wBACE,UAAY,CAGZ,4EACE,YAAc,CAChB,2EAEE,YACA,UAAY,CAChB,uBACE,eACA,SACA,OACA,QACA,SACA,WACA,iBACA,gBACA,eAAiB,CACjB,qCACE,mBACA,sBACA,kBAAoB,CACtB,qCACE,eACA,SACA,OACA,QACA,SACA,WACA,gBACA,mBACA,wBACA,eAAiB,CACnB,oCACE,cACA,eACA,YACA,OACA,QACA,SACA,WACA,oBACA,4BAA8B,CAC9B,qFACE,YAAc,CAClB,qCACE,4BACQ,oBACR,6BACQ,qBACR,wBACA,mBACA,4BAA8B,CAC9B,oDACE,wBAA0B,CAC9B,6CACE,aAAe,CACjB,oDACE,cACA,4BACQ,mBAAqB,CAC/B,oDACE,oBAAuB,CACzB,0EACE,6BACQ,oBAAsB,CAChC,0KAIE,oBAAsB,CACxB,2KAIE,kBACA,YACA,WACA,WAAa,CACf,0CACE,UAAY,CACd,0CACE,UAAY,CACd,6CACE,UAAY,CACd,0CACE,OAAS,CAGb,uIAEE,YAAc,CAChB,iFACE,aAAe,CACjB,yHACE,2BACQ,kBAAoB,CAC9B,uBACE,iBAAmB,CACrB,uBACE,WACA,YACA,YACA,6BACA,aACA,eACA,WACA,sBACA,UACA,eACA,SACA,oBAAsB,CACtB,4BACE,8BAAgC,CACpC,+IAKE,YAAc,CAChB,0CACE,UAAa,CACf,+BACE,iCACQ,wBAA0B,CACpC,8BACE,YAAc,CAChB,sBACE,kBACA,WACA,YACA,WACA,sBACA,wBACA,wBACA,cAAgB,CAChB,4CACE,SAAW,CACb,sCACE,kBACA,kBACA,WACA,qCACA,oCACA,0BACA,uBAA0B,CAC1B,2CACE,SAAW,CACf,oCACE,YAAc,CAChB,oCACE,WACA,YACA,sBACA,WACA,UACA,sBAAwB,CACxB,wCACE,kBACA,QACA,SACA,YACA,UAAY,CAChB,qCACE,WACA,YACA,sBACA,WACA,SAAW,CACX,yCACE,kBACA,QACA,SACA,YACA,UAAY,CAClB,uBACE,iBACA,wBACA,YACA,qBAAuB,CACvB,sCACE,gBACA,mBACA,uBACA,oBACA,yBACG,sBACC,qBACI,iBACR,eACA,mBACA,WAAa,CACb,qDACE,cAAgB,CAClB,sDACE,eACA,UAAY,CAChB,2CACE,kBACA,YAAc,CACd,6DACE,iBACA,cACA,yBACA,MAAQ,CACR,+GACE,2BACQ,kBAAoB,CAC9B,0EACE,kBACA,WACA,WACA,kBAAoB,CACpB,0FACE,kBACA,OACA,MACA,SACA,gBACA,WACA,uBAA0B,CAC5B,0FACE,kBACA,OACA,MACA,SACA,UAAY,CACZ,yGACE,kBACA,MACA,UACA,gBACA,mBACA,YACA,WACA,kBACA,eACA,+BACA,2BACQ,kBAAoB,CACpC,yDACE,kBACA,QACA,WACA,YACA,WACA,eACA,gBAAkB,CAClB,6EACE,qBAAuB,CACzB,uEACE,eACA,uBAA0B,CAC1B,4EACE,SAAW,CACb,yFACE,gBAAkB,CACpB,kFACE,SAAW,CAKf,yRACE,YAAc,CAClB,gEACE,kBACA,qBACA,gBACA,wBAA2B,CAC3B,+FACE,WAAa,CACf,yFACE,kBACA,YACA,WACA,WACA,SACA,WACA,gBACA,8BAAgC,CAChC,wHACE,WAAa,CACf,6GACE,kBACA,SACA,WACA,UACA,YACA,gBACA,oBACA,eAAiB,CACjB,6HACE,kBACA,SACA,QACA,UACA,uBAA0B,CAClC,iEACE,YAAc,CACd,qEACE,kBACA,4CACQ,mCAAqC,CACrD,sBACE,aACA,kBACA,YACA,kBACA,gBACA,kBAAoB,CACpB,6BAEE,MAKA,WAEA,4DACA,iHAAsH,CACxH,yDAVE,kBAEA,UACA,cACA,gBACA,WAEA,WAAa,CAa6G,4BAR1H,SAKA,WAEA,0EACA,mHAAwH,CAC1H,wBACE,eACA,WACA,2BACA,sBACA,oBACA,mBACA,4BACA,WACA,eAAiB,CACjB,4CACE,UACA,iBACA,sBACA,eAAiB,CACrB,uCACE,YAAc,CAChB,4CACE,WACA,4BACA,yBACG,sBACC,qBACI,iBACR,cAAgB,CACpB,uBACE,cACA,wBACA,mBACA,aACA,eAAiB,CACjB,yCACE,sBAAyB,CAC3B,0BACE,qBACA,SACA,UACA,eAAiB,CACjB,6CACE,SAAW,CACb,mDACE,kBACA,qBAAuB,CACzB,yDACE,qBAAuB,CACzB,6BACE,kBACA,YACA,iBACA,eACA,eACA,6BACA,eACA,wBACA,gBACA,QAAU,CACV,yCACE,eAAiB,CACnB,mCACE,kBAAoB,CACtB,gDACE,kBAAoB,CACpB,kEACE,oBAAsB,CAC1B,+CACE,aACA,UACA,YACA,kBACA,OACA,QACA,cAAgB,CAClB,iDACE,WACA,kBACA,cAAgB,CAClB,kDACE,WACA,YACA,cAAgB,CACxB,yBACE,UACA,kBACA,QACA,SACA,uCACQ,+BACR,eACA,kBACA,iBACA,+BACA,gBACA,WACA,oBACA,yBACA,aAAe,CACjB,+BACE,aACA,kBACA,MACA,QACA,SACA,YACA,mBACA,WACA,yBAA2B,CAC3B,6CACE,YACA,WACA,kCACQ,0BACR,uBAA0B,CAC1B,kDACE,SAAW,CACb,wDACE,SAAW,CAEnB,gCACE,GACE,MAAQ,CACV,GACE,UAAY,CAAE,CAElB,wBACE,GACE,MAAQ,CACV,GACE,UAAY,CAAE,CAElB,0BACE,GACE,4BACQ,mBAAqB,CAC/B,GACE,gCACQ,uBAA0B,CAAE,CAExC,kBACE,GACE,4BACQ,mBAAqB,CAC/B,GACE,gCACQ,uBAA0B,CAAE,C","file":"APlayer.min.css","sourcesContent":[".aplayer {\n background: #fff;\n font-family: Arial, Helvetica, sans-serif;\n margin: 5px;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1);\n border-radius: 2px;\n overflow: hidden;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n line-height: initial;\n position: relative; }\n .aplayer * {\n box-sizing: content-box; }\n .aplayer svg {\n width: 100%;\n height: 100%; }\n .aplayer svg path,\n .aplayer svg circle {\n fill: #fff; }\n .aplayer.aplayer-withlist .aplayer-info {\n border-bottom: 1px solid #e9e9e9; }\n .aplayer.aplayer-withlist .aplayer-list {\n display: block; }\n .aplayer.aplayer-withlist .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu {\n display: inline; }\n .aplayer.aplayer-withlist .aplayer-icon-order {\n display: inline; }\n .aplayer.aplayer-withlrc .aplayer-pic {\n height: 90px;\n width: 90px; }\n .aplayer.aplayer-withlrc .aplayer-info {\n margin-left: 90px;\n height: 90px;\n padding: 10px 7px 0 7px; }\n .aplayer.aplayer-withlrc .aplayer-lrc {\n display: block; }\n .aplayer.aplayer-narrow {\n width: 66px; }\n .aplayer.aplayer-narrow .aplayer-info {\n display: none; }\n .aplayer.aplayer-narrow .aplayer-list {\n display: none; }\n .aplayer.aplayer-narrow .aplayer-pic,\n .aplayer.aplayer-narrow .aplayer-body {\n height: 66px;\n width: 66px; }\n .aplayer.aplayer-fixed {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0;\n z-index: 99;\n overflow: visible;\n max-width: 400px;\n box-shadow: none; }\n .aplayer.aplayer-fixed .aplayer-list {\n margin-bottom: 65px;\n border: 1px solid #eee;\n border-bottom: none; }\n .aplayer.aplayer-fixed .aplayer-body {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0;\n z-index: 99;\n background: #fff;\n padding-right: 18px;\n transition: all 0.3s ease;\n max-width: 400px; }\n .aplayer.aplayer-fixed .aplayer-lrc {\n display: block;\n position: fixed;\n bottom: 10px;\n left: 0;\n right: 0;\n margin: 0;\n z-index: 98;\n pointer-events: none;\n text-shadow: -1px -1px 0 #fff; }\n .aplayer.aplayer-fixed .aplayer-lrc:before, .aplayer.aplayer-fixed .aplayer-lrc:after {\n display: none; }\n .aplayer.aplayer-fixed .aplayer-info {\n -webkit-transform: scaleX(1);\n transform: scaleX(1);\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n transition: all 0.3s ease;\n border-bottom: none;\n border-top: 1px solid #e9e9e9; }\n .aplayer.aplayer-fixed .aplayer-info .aplayer-music {\n width: calc(100% - 105px); }\n .aplayer.aplayer-fixed .aplayer-miniswitcher {\n display: block; }\n .aplayer.aplayer-fixed.aplayer-narrow .aplayer-info {\n display: block;\n -webkit-transform: scaleX(0);\n transform: scaleX(0); }\n .aplayer.aplayer-fixed.aplayer-narrow .aplayer-body {\n width: 66px !important; }\n .aplayer.aplayer-fixed.aplayer-narrow .aplayer-miniswitcher .aplayer-icon {\n -webkit-transform: rotateY(0);\n transform: rotateY(0); }\n .aplayer.aplayer-fixed .aplayer-icon-back,\n .aplayer.aplayer-fixed .aplayer-icon-play,\n .aplayer.aplayer-fixed .aplayer-icon-forward,\n .aplayer.aplayer-fixed .aplayer-icon-lrc {\n display: inline-block; }\n .aplayer.aplayer-fixed .aplayer-icon-back,\n .aplayer.aplayer-fixed .aplayer-icon-play,\n .aplayer.aplayer-fixed .aplayer-icon-forward,\n .aplayer.aplayer-fixed .aplayer-icon-menu {\n position: absolute;\n bottom: 27px;\n width: 20px;\n height: 20px; }\n .aplayer.aplayer-fixed .aplayer-icon-back {\n right: 75px; }\n .aplayer.aplayer-fixed .aplayer-icon-play {\n right: 50px; }\n .aplayer.aplayer-fixed .aplayer-icon-forward {\n right: 25px; }\n .aplayer.aplayer-fixed .aplayer-icon-menu {\n right: 0; }\n .aplayer.aplayer-mobile .aplayer-icon-volume-down {\n display: none; }\n .aplayer.aplayer-arrow .aplayer-icon-order,\n .aplayer.aplayer-arrow .aplayer-icon-loop {\n display: none; }\n .aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-loading-icon {\n display: block; }\n .aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .aplayer .aplayer-body {\n position: relative; }\n .aplayer .aplayer-icon {\n width: 15px;\n height: 15px;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n opacity: .8;\n vertical-align: middle;\n padding: 0;\n font-size: 12px;\n margin: 0;\n display: inline-block; }\n .aplayer .aplayer-icon path {\n transition: all .2s ease-in-out; }\n .aplayer .aplayer-icon-order,\n .aplayer .aplayer-icon-back,\n .aplayer .aplayer-icon-play,\n .aplayer .aplayer-icon-forward,\n .aplayer .aplayer-icon-lrc {\n display: none; }\n .aplayer .aplayer-icon-lrc-inactivity svg {\n opacity: 0.4; }\n .aplayer .aplayer-icon-forward {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg); }\n .aplayer .aplayer-lrc-content {\n display: none; }\n .aplayer .aplayer-pic {\n position: relative;\n float: left;\n height: 66px;\n width: 66px;\n background-size: cover;\n background-position: center;\n transition: all 0.3s ease;\n cursor: pointer; }\n .aplayer .aplayer-pic:hover .aplayer-button {\n opacity: 1; }\n .aplayer .aplayer-pic .aplayer-button {\n position: absolute;\n border-radius: 50%;\n opacity: 0.8;\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n background: rgba(0, 0, 0, 0.2);\n transition: all 0.1s ease; }\n .aplayer .aplayer-pic .aplayer-button path {\n fill: #fff; }\n .aplayer .aplayer-pic .aplayer-hide {\n display: none; }\n .aplayer .aplayer-pic .aplayer-play {\n width: 26px;\n height: 26px;\n border: 2px solid #fff;\n bottom: 50%;\n right: 50%;\n margin: 0 -15px -15px 0; }\n .aplayer .aplayer-pic .aplayer-play svg {\n position: absolute;\n top: 3px;\n left: 4px;\n height: 20px;\n width: 20px; }\n .aplayer .aplayer-pic .aplayer-pause {\n width: 16px;\n height: 16px;\n border: 2px solid #fff;\n bottom: 4px;\n right: 4px; }\n .aplayer .aplayer-pic .aplayer-pause svg {\n position: absolute;\n top: 2px;\n left: 2px;\n height: 12px;\n width: 12px; }\n .aplayer .aplayer-info {\n margin-left: 66px;\n padding: 14px 7px 0 10px;\n height: 66px;\n box-sizing: border-box; }\n .aplayer .aplayer-info .aplayer-music {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin: 0 0 13px 5px;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n cursor: default;\n padding-bottom: 2px;\n height: 20px; }\n .aplayer .aplayer-info .aplayer-music .aplayer-title {\n font-size: 14px; }\n .aplayer .aplayer-info .aplayer-music .aplayer-author {\n font-size: 12px;\n color: #666; }\n .aplayer .aplayer-info .aplayer-controller {\n position: relative;\n display: flex; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap {\n margin: 0 0 0 5px;\n padding: 4px 0;\n cursor: pointer !important;\n flex: 1; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap:hover .aplayer-bar .aplayer-played .aplayer-thumb {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar {\n position: relative;\n height: 2px;\n width: 100%;\n background: #cdcdcd; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: #aaa;\n height: 2px;\n transition: all 0.5s ease; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 2px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 10px;\n width: 10px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n -webkit-transform: scale(0);\n transform: scale(0); }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time {\n position: relative;\n right: 0;\n bottom: 4px;\n height: 17px;\n color: #999;\n font-size: 11px;\n padding-left: 7px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner {\n vertical-align: middle; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon {\n cursor: pointer;\n transition: all 0.2s ease; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path {\n fill: #666; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-loop {\n margin-right: 2px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon:hover path {\n fill: #000; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-mode {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-menu {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap {\n position: relative;\n display: inline-block;\n margin-left: 3px;\n cursor: pointer !important; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap:hover .aplayer-volume-bar-wrap {\n height: 40px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap {\n position: absolute;\n bottom: 15px;\n right: -3px;\n width: 25px;\n height: 0;\n z-index: 99;\n overflow: hidden;\n transition: all .2s ease-in-out; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap.aplayer-volume-bar-wrap-active {\n height: 40px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar {\n position: absolute;\n bottom: 0;\n right: 10px;\n width: 5px;\n height: 35px;\n background: #aaa;\n border-radius: 2.5px;\n overflow: hidden; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar .aplayer-volume {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 5px;\n transition: all 0.1s ease; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon svg {\n position: absolute;\n -webkit-animation: rotate 1s linear infinite;\n animation: rotate 1s linear infinite; }\n .aplayer .aplayer-lrc {\n display: none;\n position: relative;\n height: 30px;\n text-align: center;\n overflow: hidden;\n margin: -10px 0 7px; }\n .aplayer .aplayer-lrc:before {\n position: absolute;\n top: 0;\n z-index: 1;\n display: block;\n overflow: hidden;\n width: 100%;\n height: 10%;\n content: ' ';\n background: linear-gradient(to bottom, white 0%, rgba(255, 255, 255, 0) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#00ffffff',GradientType=0 ); }\n .aplayer .aplayer-lrc:after {\n position: absolute;\n bottom: 0;\n z-index: 1;\n display: block;\n overflow: hidden;\n width: 100%;\n height: 33%;\n content: ' ';\n background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ccffffff',GradientType=0 ); }\n .aplayer .aplayer-lrc p {\n font-size: 12px;\n color: #666;\n line-height: 16px !important;\n height: 16px !important;\n padding: 0 !important;\n margin: 0 !important;\n transition: all 0.5s ease-out;\n opacity: 0.4;\n overflow: hidden; }\n .aplayer .aplayer-lrc p.aplayer-lrc-current {\n opacity: 1;\n overflow: visible;\n height: initial !important;\n min-height: 16px; }\n .aplayer .aplayer-lrc.aplayer-lrc-hide {\n display: none; }\n .aplayer .aplayer-lrc .aplayer-lrc-contents {\n width: 100%;\n transition: all 0.5s ease-out;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n cursor: default; }\n .aplayer .aplayer-list {\n overflow: auto;\n transition: all 0.5s ease;\n will-change: height;\n display: none;\n overflow: hidden; }\n .aplayer .aplayer-list.aplayer-list-hide {\n max-height: 0 !important; }\n .aplayer .aplayer-list ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n overflow-y: auto; }\n .aplayer .aplayer-list ol::-webkit-scrollbar {\n width: 5px; }\n .aplayer .aplayer-list ol::-webkit-scrollbar-thumb {\n border-radius: 3px;\n background-color: #eee; }\n .aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover {\n background-color: #ccc; }\n .aplayer .aplayer-list ol li {\n position: relative;\n height: 32px;\n line-height: 32px;\n padding: 0 15px;\n font-size: 12px;\n border-top: 1px solid #e9e9e9;\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n margin: 0; }\n .aplayer .aplayer-list ol li:first-child {\n border-top: none; }\n .aplayer .aplayer-list ol li:hover {\n background: #efefef; }\n .aplayer .aplayer-list ol li.aplayer-list-light {\n background: #e9e9e9; }\n .aplayer .aplayer-list ol li.aplayer-list-light .aplayer-list-cur {\n display: inline-block; }\n .aplayer .aplayer-list ol li .aplayer-list-cur {\n display: none;\n width: 3px;\n height: 22px;\n position: absolute;\n left: 0;\n top: 5px;\n cursor: pointer; }\n .aplayer .aplayer-list ol li .aplayer-list-index {\n color: #666;\n margin-right: 12px;\n cursor: pointer; }\n .aplayer .aplayer-list ol li .aplayer-list-author {\n color: #666;\n float: right;\n cursor: pointer; }\n .aplayer .aplayer-notice {\n opacity: 0;\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n font-size: 12px;\n border-radius: 4px;\n padding: 5px 10px;\n transition: all .3s ease-in-out;\n overflow: hidden;\n color: #fff;\n pointer-events: none;\n background-color: #f4f4f5;\n color: #909399; }\n .aplayer .aplayer-miniswitcher {\n display: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n background: #e6e6e6;\n width: 18px;\n border-radius: 0 2px 2px 0; }\n .aplayer .aplayer-miniswitcher .aplayer-icon {\n height: 100%;\n width: 100%;\n -webkit-transform: rotateY(180deg);\n transform: rotateY(180deg);\n transition: all 0.3s ease; }\n .aplayer .aplayer-miniswitcher .aplayer-icon path {\n fill: #666; }\n .aplayer .aplayer-miniswitcher .aplayer-icon:hover path {\n fill: #000; }\n\n@-webkit-keyframes aplayer-roll {\n 0% {\n left: 0; }\n 100% {\n left: -100%; } }\n\n@keyframes aplayer-roll {\n 0% {\n left: 0; }\n 100% {\n left: -100%; } }\n\n@-webkit-keyframes rotate {\n 0% {\n -webkit-transform: rotate(0);\n transform: rotate(0); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n\n@keyframes rotate {\n 0% {\n -webkit-transform: rotate(0);\n transform: rotate(0); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/assets/css/highlight-github-dark.min.css b/public/assets/css/highlight-github-dark.min.css new file mode 100644 index 0000000..03b6da8 --- /dev/null +++ b/public/assets/css/highlight-github-dark.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} \ No newline at end of file diff --git a/public/assets/images/avatar.webp b/public/assets/images/avatar.webp new file mode 100644 index 0000000..79a0f30 Binary files /dev/null and b/public/assets/images/avatar.webp differ diff --git a/public/assets/images/cover.webp b/public/assets/images/cover.webp new file mode 100644 index 0000000..a548ec9 Binary files /dev/null and b/public/assets/images/cover.webp differ diff --git a/public/assets/images/d1.webp b/public/assets/images/d1.webp new file mode 100644 index 0000000..2cf44da Binary files /dev/null and b/public/assets/images/d1.webp differ diff --git a/public/assets/images/d2.webp b/public/assets/images/d2.webp new file mode 100644 index 0000000..796f9ad Binary files /dev/null and b/public/assets/images/d2.webp differ diff --git a/public/assets/images/favicon.ico b/public/assets/images/favicon.ico new file mode 100644 index 0000000..a35bfce Binary files /dev/null and b/public/assets/images/favicon.ico differ diff --git a/public/assets/images/firefly.png b/public/assets/images/firefly.png new file mode 100644 index 0000000..ac75fa3 Binary files /dev/null and b/public/assets/images/firefly.png differ diff --git a/public/assets/images/loading.gif b/public/assets/images/loading.gif new file mode 100644 index 0000000..a1021b8 Binary files /dev/null and b/public/assets/images/loading.gif differ diff --git a/public/assets/images/m1.webp b/public/assets/images/m1.webp new file mode 100644 index 0000000..3406982 Binary files /dev/null and b/public/assets/images/m1.webp differ diff --git a/public/assets/images/sakura.png b/public/assets/images/sakura.png new file mode 100644 index 0000000..1939aa1 Binary files /dev/null and b/public/assets/images/sakura.png differ diff --git a/public/assets/images/sponsor/afdian.png b/public/assets/images/sponsor/afdian.png new file mode 100644 index 0000000..6083e4e Binary files /dev/null and b/public/assets/images/sponsor/afdian.png differ diff --git a/public/assets/images/sponsor/alipay.png b/public/assets/images/sponsor/alipay.png new file mode 100644 index 0000000..3603644 Binary files /dev/null and b/public/assets/images/sponsor/alipay.png differ diff --git a/public/assets/images/sponsor/wechat.png b/public/assets/images/sponsor/wechat.png new file mode 100644 index 0000000..09482e1 Binary files /dev/null and b/public/assets/images/sponsor/wechat.png differ diff --git a/public/assets/js/APlayer.min.js b/public/assets/js/APlayer.min.js new file mode 100644 index 0000000..6ba17e3 --- /dev/null +++ b/public/assets/js/APlayer.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("APlayer",[],t):"object"==typeof exports?exports.APlayer=t():e.APlayer=t()}(window,function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var a=t[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=41)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=/mobile/i.test(window.navigator.userAgent),a={secondToTime:function(e){var t=Math.floor(e/3600),n=Math.floor((e-3600*t)/60),i=Math.floor(e-3600*t-60*n);return(t>0?[t,n,i]:[n,i]).map(function(e){return e<10?"0"+e:""+e}).join(":")},getElementViewLeft:function(e){var t=e.offsetLeft,n=e.offsetParent,i=document.body.scrollLeft+document.documentElement.scrollLeft;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;null!==n&&n!==e;)t+=n.offsetLeft,n=n.offsetParent;else for(;null!==n;)t+=n.offsetLeft,n=n.offsetParent;return t-i},getElementViewTop:function(e,t){for(var n,i=e.offsetTop,a=e.offsetParent;null!==a;)i+=a.offsetTop,a=a.offsetParent;return n=document.body.scrollTop+document.documentElement.scrollTop,t?i:i-n},isMobile:i,storage:{set:function(e,t){localStorage.setItem(e,t)},get:function(e){return localStorage.getItem(e)}},nameMap:{dragStart:i?"touchstart":"mousedown",dragMove:i?"touchmove":"mousemove",dragEnd:i?"touchend":"mouseup"},randomOrder:function(e){return function(e){for(var t=e.length-1;t>=0;t--){var n=Math.floor(Math.random()*(t+1)),i=e[n];e[n]=e[t],e[t]=i}return e}([].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t\n ',t+=r(n+s),t+='\n ',t+=r(e.name),t+='\n ',t+=r(e.artist),t+="\n\n"}),t}},function(e,t,n){"use strict";e.exports=n(15)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=g(n(33)),a=g(n(32)),r=g(n(31)),o=g(n(30)),s=g(n(29)),l=g(n(28)),u=g(n(27)),c=g(n(26)),p=g(n(25)),d=g(n(24)),h=g(n(23)),y=g(n(22)),f=g(n(21)),v=g(n(20)),m=g(n(19));function g(e){return e&&e.__esModule?e:{default:e}}var w={play:i.default,pause:a.default,volumeUp:r.default,volumeDown:o.default,volumeOff:s.default,orderRandom:l.default,orderList:u.default,menu:c.default,loopAll:p.default,loopOne:d.default,loopNone:h.default,loading:y.default,right:f.default,skip:v.default,lrc:m.default};t.default=w},function(e,t,n){"use strict";var i,a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":a(window))&&(i=window)}e.exports=i},function(e,t,n){"use strict";var i,a,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};void 0===(a="function"==typeof(i=function(){if("object"===("undefined"==typeof window?"undefined":r(window))&&void 0!==document.querySelectorAll&&void 0!==window.pageYOffset&&void 0!==history.pushState){var e=function(e,t,n,i){return n>i?t:e+(t-e)*((a=n/i)<.5?4*a*a*a:(a-1)*(2*a-2)*(2*a-2)+1);var a},t=function(t,n,i,a){n=n||500;var r=(a=a||window).scrollTop||window.pageYOffset;if("number"==typeof t)var o=parseInt(t);else var o=function(e,t){return"HTML"===e.nodeName?-t:e.getBoundingClientRect().top+t}(t,r);var s=Date.now(),l=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){window.setTimeout(e,15)};!function u(){var c=Date.now()-s;a!==window?a.scrollTop=e(r,o,c,n):window.scroll(0,e(r,o,c,n)),c>n?"function"==typeof i&&i(t):l(u)}()},n=function(e){if(!e.defaultPrevented){e.preventDefault(),location.hash!==this.hash&&window.history.pushState(null,null,this.hash);var n=document.getElementById(this.hash.substring(1));if(!n)return;t(n,500,function(e){location.replace("#"+e.id)})}};return document.addEventListener("DOMContentLoaded",function(){for(var e,t=document.querySelectorAll('a[href^="#"]:not([href="#"])'),i=t.length;e=t[--i];)e.addEventListener("click",n,!1)}),t}})?i.call(t,n,t,e):i)||(e.exports=a)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n1),n=0===this.audios.length;this.player.template.listOl.innerHTML+=(0,a.default)({theme:this.player.options.theme,audio:e,index:this.audios.length+1}),this.audios=this.audios.concat(e),t&&this.audios.length>1&&this.player.container.classList.add("aplayer-withlist"),this.player.randomOrder=r.default.randomOrder(this.audios.length),this.player.template.listCurs=this.player.container.querySelectorAll(".aplayer-list-cur"),this.player.template.listCurs[this.audios.length-1].style.backgroundColor=e.theme||this.player.options.theme,n&&("random"===this.player.options.order?this.switch(this.player.randomOrder[0]):this.switch(0))}},{key:"remove",value:function(e){if(this.player.events.trigger("listremove",{index:e}),this.audios[e])if(this.audios.length>1){var t=this.player.container.querySelectorAll(".aplayer-list li");t[e].remove(),this.audios.splice(e,1),this.player.lrc&&this.player.lrc.remove(e),e===this.index&&(this.audios[e]?this.switch(e):this.switch(e-1)),this.index>e&&this.index--;for(var n=e;nt&&!e.player.audio.paused&&(e.player.container.classList.remove("aplayer-loading"),i=!1),t=n)},100)}},{key:"enable",value:function(e){this["enable"+e+"Checker"]=!0,"fps"===e&&this.initfpsChecker()}},{key:"disable",value:function(e){this["enable"+e+"Checker"]=!1}},{key:"destroy",value:function(){var e=this;this.types.forEach(function(t){e["enable"+t+"Checker"]=!1,e[t+"Checker"]&&clearInterval(e[t+"Checker"])})}}]),e}();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n1?"one"===e.player.options.loop?(e.player.options.loop="none",e.player.template.loop.innerHTML=r.default.loopNone):"none"===e.player.options.loop?(e.player.options.loop="all",e.player.template.loop.innerHTML=r.default.loopAll):"all"===e.player.options.loop&&(e.player.options.loop="one",e.player.template.loop.innerHTML=r.default.loopOne):"one"===e.player.options.loop||"all"===e.player.options.loop?(e.player.options.loop="none",e.player.template.loop.innerHTML=r.default.loopNone):"none"===e.player.options.loop&&(e.player.options.loop="all",e.player.template.loop.innerHTML=r.default.loopAll)})}},{key:"initMenuButton",value:function(){var e=this;this.player.template.menu.addEventListener("click",function(){e.player.list.toggle()})}},{key:"initMiniSwitcher",value:function(){var e=this;this.player.template.miniSwitcher.addEventListener("click",function(){e.player.setMode("mini"===e.player.mode?"normal":"mini")})}},{key:"initSkipButton",value:function(){var e=this;this.player.template.skipBackButton.addEventListener("click",function(){e.player.skipBack()}),this.player.template.skipForwardButton.addEventListener("click",function(){e.player.skipForward()}),this.player.template.skipPlayButton.addEventListener("click",function(){e.player.toggle()})}},{key:"initLrcButton",value:function(){var e=this;this.player.template.lrcButton.addEventListener("click",function(){e.player.template.lrcButton.classList.contains("aplayer-icon-lrc-inactivity")?(e.player.template.lrcButton.classList.remove("aplayer-icon-lrc-inactivity"),e.player.lrc&&e.player.lrc.show()):(e.player.template.lrcButton.classList.add("aplayer-icon-lrc-inactivity"),e.player.lrc&&e.player.lrc.hide())})}}]),e}();t.default=s},function(e,t,n){var i=n(2);e.exports=function(e){"use strict";e=e||{};var t="",n=i.$each,a=e.lyrics,r=(e.$value,e.$index,i.$escape);return n(a,function(e,n){t+="\n \n"}),t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:this.player.audio.currentTime;if(this.index>this.current.length-1||e=this.current[this.index+1][0])for(var t=0;t=this.current[t][0]&&(!this.current[t+1]||e=200&&n.status<300||304===n.status?t.parsed[e]=t.parse(n.responseText):(t.player.notice("LRC file request fails: status "+n.status),t.parsed[e]=[["00:00","Not available"]]),t.container.innerHTML=(0,o.default)({lyrics:t.parsed[e]}),t.update(0),t.current=t.parsed[e])};var i=this.player.list.audios[e].lrc;n.open("get",i,!0),n.send(null)}else this.player.list.audios[e].lrc?this.parsed[e]=this.parse(this.player.list.audios[e].lrc):this.parsed[e]=[["00:00","Not available"]];this.container.innerHTML=(0,o.default)({lyrics:this.parsed[e]}),this.update(0),this.current=this.parsed[e]}},{key:"parse",value:function(e){if(e){for(var t=(e=e.replace(/([^\]^\n])\[/g,function(e,t){return t+"\n["})).split("\n"),n=[],i=t.length,a=0;a/g,"").replace(/^\s+|\s+$/g,"");if(r)for(var s=r.length,l=0;l]/;a.$escape=function(e){return function(e){var t=""+e,n=r.exec(t);if(!n)return e;var i="",a=void 0,o=void 0,s=void 0;for(a=n.index,o=0;a\n \n
',t+=s.play,t+='
\n \n \n
\n
\n\n
\n
\n
\n'):(t+='\n
\n
\n
',t+=s.play,t+='
\n
\n
\n
\n No audio\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n ',t+=s.loading,t+='\n \n
\n
\n
\n
\n \n 00:00 / 00:00\n \n \n ',t+=s.skip,t+='\n \n \n ',t+=s.play,t+='\n \n \n ',t+=s.skip,t+='\n \n
\n \n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n '},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t,n){"use strict";var i,a,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function l(e){if(i===setTimeout)return setTimeout(e,0);if((i===o||!i)&&setTimeout)return i=setTimeout,setTimeout(e,0);try{return i(e,0)}catch(t){try{return i.call(null,e,0)}catch(t){return i.call(this,e,0)}}}!function(){try{i="function"==typeof setTimeout?setTimeout:o}catch(e){i=o}try{a="function"==typeof clearTimeout?clearTimeout:s}catch(e){a=s}}();var u,c=[],p=!1,d=-1;function h(){p&&u&&(p=!1,u.length?c=u.concat(c):d=-1,c.length&&y())}function y(){if(!p){var e=l(h);p=!0;for(var t=c.length;t;){for(u=c,c=[];++d1)for(var n=1;n=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(35),t.setImmediate=setImmediate,t.clearImmediate=clearImmediate},function(e,t,n){"use strict";(function(t){var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=setTimeout;function a(){}function r(e){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],c(e,this)}function o(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,r._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var i;try{i=n(e._value)}catch(e){return void l(t.promise,e)}s(t.promise,i)}else(1===e._state?s:l)(t.promise,e._value)})):e._deferreds.push(t)}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===(void 0===t?"undefined":n(t))||"function"==typeof t)){var i=t.then;if(t instanceof r)return e._state=3,e._value=t,void u(e);if("function"==typeof i)return void c((a=i,o=t,function(){a.apply(o,arguments)}),e)}e._state=1,e._value=t,u(e)}catch(t){l(e,t)}var a,o}function l(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&r._immediateFn(function(){e._handled||r._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t1&&this.container.classList.add("aplayer-withlist"),r.default.isMobile&&this.container.classList.add("aplayer-mobile"),this.arrow=this.container.offsetWidth<=300,this.arrow&&this.container.classList.add("aplayer-arrow"),this.container=this.options.container,2===this.options.lrcType||!0===this.options.lrcType)for(var n=this.container.getElementsByClassName("aplayer-lrc-content"),i=0;i1?(e.notice("An audio error has occurred, player will skip forward in 2 seconds."),t=setTimeout(function(){e.skipForward(),e.paused||e.play()},2e3)):1===e.list.audios.length&&e.notice("An audio error has occurred.")}),this.events.on("listswitch",function(){t&&clearTimeout(t)}),this.on("ended",function(){"none"===e.options.loop?"list"===e.options.order?e.list.index0&&void 0!==arguments[0]?arguments[0]:this.list.audios[this.list.index].theme||this.options.theme,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.list.index;(!(arguments.length>2&&void 0!==arguments[2])||arguments[2])&&this.list.audios[t]&&(this.list.audios[t].theme=e),this.template.listCurs[t]&&(this.template.listCurs[t].style.backgroundColor=e),t===this.list.index&&(this.template.pic.style.backgroundColor=e,this.template.played.style.background=e,this.template.thumb.style.background=e,this.template.volume.style.background=e)}},{key:"seek",value:function(e){e=Math.max(e,0),e=Math.min(e,this.duration),this.audio.currentTime=e,this.bar.set("played",e/this.duration,"width"),this.template.ptime.innerHTML=r.default.secondToTime(e)}},{key:"setUIPlaying",value:function(){var e=this;if(this.paused&&(this.paused=!1,this.template.button.classList.remove("aplayer-play"),this.template.button.classList.add("aplayer-pause"),this.template.button.innerHTML="",setTimeout(function(){e.template.button.innerHTML=o.default.pause},100),this.template.skipPlayButton.innerHTML=o.default.pause),this.timer.enable("loading"),this.options.mutex)for(var t=0;t=.95?this.template.volumeButton.innerHTML=o.default.volumeUp:this.volume()>0?this.template.volumeButton.innerHTML=o.default.volumeDown:this.template.volumeButton.innerHTML=o.default.volumeOff}},{key:"volume",value:function(e,t){return e=parseFloat(e),isNaN(e)||(e=Math.max(e,0),e=Math.min(e,1),this.bar.set("volume",e,"height"),t||this.storage.set("volume",e),this.audio.volume=e,this.audio.muted&&(this.audio.muted=!1),this.switchVolumeIcon()),this.audio.muted?0:this.audio.volume}},{key:"on",value:function(e,t){this.events.on(e,t)}},{key:"toggle",value:function(){this.template.button.classList.contains("aplayer-play")?this.play():this.template.button.classList.contains("aplayer-pause")&&this.pause()}},{key:"switchAudio",value:function(e){this.list.switch(e)}},{key:"addAudio",value:function(e){this.list.add(e)}},{key:"removeAudio",value:function(e){this.list.remove(e)}},{key:"destroy",value:function(){m.splice(m.indexOf(this),1),this.pause(),this.container.innerHTML="",this.audio.src="",this.timer.destroy(),this.events.trigger("destroy")}},{key:"setMode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"normal";this.mode=e,"mini"===e?this.container.classList.add("aplayer-narrow"):"normal"===e&&this.container.classList.remove("aplayer-narrow")}},{key:"notice",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2e3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.8;this.template.notice.innerHTML=e,this.template.notice.style.opacity=i,this.noticeTime&&clearTimeout(this.noticeTime),this.events.trigger("noticeshow",{text:e}),n&&(this.noticeTime=setTimeout(function(){t.template.notice.style.opacity=0,t.events.trigger("noticehide")},n))}},{key:"prevIndex",value:function(){if(!(this.list.audios.length>1))return 0;if("list"===this.options.order)return this.list.index-1<0?this.list.audios.length-1:this.list.index-1;if("random"===this.options.order){var e=this.randomOrder.indexOf(this.list.index);return 0===e?this.randomOrder[this.randomOrder.length-1]:this.randomOrder[e-1]}}},{key:"nextIndex",value:function(){if(!(this.list.audios.length>1))return 0;if("list"===this.options.order)return(this.list.index+1)%this.list.audios.length;if("random"===this.options.order){var e=this.randomOrder.indexOf(this.list.index);return e===this.randomOrder.length-1?this.randomOrder[0]:this.randomOrder[e+1]}}},{key:"skipBack",value:function(){this.list.switch(this.prevIndex())}},{key:"skipForward",value:function(){this.list.switch(this.nextIndex())}},{key:"duration",get:function(){return isNaN(this.audio.duration)?0:this.audio.duration}}],[{key:"version",get:function(){return"1.10.1"}}]),e}();t.default=g},,function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(40);var i,a=n(38),r=(i=a)&&i.__esModule?i:{default:i};console.log("\n %c APlayer v1.10.1 af84efb %c http://aplayer.js.org \n","color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;"),t.default=r.default}]).default}); +//# sourceMappingURL=APlayer.min.js.map \ No newline at end of file diff --git a/public/assets/js/APlayer.min.js.map b/public/assets/js/APlayer.min.js.map new file mode 100644 index 0000000..5144f3f --- /dev/null +++ b/public/assets/js/APlayer.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/./src/js/utils.js","webpack://[name]/./src/template/list-item.art","webpack://[name]/./node_modules/art-template/lib/runtime.js","webpack://[name]/./src/js/icons.js","webpack://[name]/(webpack)/buildin/global.js","webpack://[name]/./node_modules/smoothscroll/smoothscroll.js","webpack://[name]/./src/js/list.js","webpack://[name]/./src/js/events.js","webpack://[name]/./src/js/timer.js","webpack://[name]/./src/js/controller.js","webpack://[name]/./src/template/lrc.art","webpack://[name]/./src/js/lrc.js","webpack://[name]/./src/js/storage.js","webpack://[name]/./src/js/bar.js","webpack://[name]/./node_modules/detect-node/index.js","webpack://[name]/./node_modules/art-template/lib/compile/runtime.js","webpack://[name]/./src/template/player.art","webpack://[name]/./src/js/template.js","webpack://[name]/./src/js/options.js","webpack://[name]/./src/assets/lrc.svg","webpack://[name]/./src/assets/skip.svg","webpack://[name]/./src/assets/right.svg","webpack://[name]/./src/assets/loading.svg","webpack://[name]/./src/assets/loop-none.svg","webpack://[name]/./src/assets/loop-one.svg","webpack://[name]/./src/assets/loop-all.svg","webpack://[name]/./src/assets/menu.svg","webpack://[name]/./src/assets/order-list.svg","webpack://[name]/./src/assets/order-random.svg","webpack://[name]/./src/assets/volume-off.svg","webpack://[name]/./src/assets/volume-down.svg","webpack://[name]/./src/assets/volume-up.svg","webpack://[name]/./src/assets/pause.svg","webpack://[name]/./src/assets/play.svg","webpack://[name]/./node_modules/process/browser.js","webpack://[name]/./node_modules/setimmediate/setImmediate.js","webpack://[name]/./node_modules/timers-browserify/main.js","webpack://[name]/./node_modules/promise-polyfill/lib/index.js","webpack://[name]/./src/js/player.js","webpack://[name]/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","isMobile","test","navigator","userAgent","utils","secondToTime","second","hour","Math","floor","min","sec","map","num","join","getElementViewLeft","element","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","document","body","scrollLeft","documentElement","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","getElementViewTop","noScrollTop","elementScrollTop","actualTop","offsetTop","scrollTop","storage","set","key","localStorage","setItem","getItem","nameMap","dragStart","dragMove","dragEnd","randomOrder","length","arr","randomIndex","random","itemAtIndex","shuffle","concat","Array","isArray","arr2","from","_toConsumableArray","item","default","$each","$imports","audio","$data","$escape","$value","$index","theme","index","$$out","artist","_play2","_interopRequireDefault","_pause2","_volumeUp2","_volumeDown2","_volumeOff2","_orderRandom2","_orderList2","_menu2","_loopAll2","_loopOne2","_loopNone2","_loading2","_right2","_skip2","_lrc2","obj","Icons","play","pause","volumeUp","volumeDown","volumeOff","orderRandom","orderList","menu","loopAll","loopOne","loopNone","loading","right","skip","lrc","g","_typeof","Symbol","iterator","constructor","this","Function","eval","e","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","querySelectorAll","pageYOffset","history","pushState","position","start","end","elapsed","duration","t","smoothScroll","el","callback","context","parseInt","nodeName","getBoundingClientRect","top","getTop","clock","Date","now","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","fn","setTimeout","step","scroll","linkHandler","ev","defaultPrevented","preventDefault","location","hash","node","getElementById","substring","replace","id","addEventListener","a","internal","_createClass","defineProperties","target","props","descriptor","writable","Constructor","protoProps","staticProps","_listItem2","_utils2","_smoothscroll2","List","player","instance","TypeError","_classCallCheck","audios","options","bindEvents","_this","template","list","tagName","toUpperCase","parentElement","audioIndex","getElementsByClassName","innerHTML","switch","toggle","events","trigger","classList","remove","listOl","add","contains","show","hide","toString","title","author","cover","pic","type","wasSingle","wasEmpty","container","listCurs","style","backgroundColor","order","splice","textContent","clear","backgroundImage","light","setAudio","update","dtime","src","bar","Events","audioEvents","playerEvents","push","data","indexOf","console","error","Timer","oRequestAnimationFrame","msRequestAnimationFrame","types","init","forEach","_this2","lastPlayPos","currentPlayPos","bufferingDetected","loadingChecker","setInterval","enableloadingChecker","currentTime","paused","initfpsChecker","_this3","clearInterval","_icons2","Controller","initPlayButton","initPlayBar","initOrderButton","initLoopButton","initMenuButton","initVolumeButton","initMiniSwitcher","initSkipButton","initLrcButton","thumbMove","percentage","clientX","changedTouches","barWrap","clientWidth","max","ptime","thumbUp","removeEventListener","seek","disableTimeupdate","volumeButton","muted","switchVolumeIcon","volume","clientY","volumeBar","fixed","clientHeight","volumeBarWrap","_this4","_this5","loop","_this6","_this7","miniSwitcher","setMode","mode","_this8","skipBackButton","skipBack","skipForwardButton","skipForward","skipPlayButton","_this9","lrcButton","lyrics","_lrc","Lrc","async","parsed","lrcWrap","arguments","transform","webkitTransform","getElementsByTagName","xhr","XMLHttpRequest","onreadystatechange","readyState","status","parse","responseText","notice","apiurl","open","send","lrc_s","lyric","match","p1","split","lyricLen","lrcTimes","lrcText","timeLen","j","oneTime","exec","lrcTime","filter","sort","b","_utils","Storage","storageName","JSON","stringify","Bar","elements","played","loaded","direction","parseFloat","global","process","detectNode","runtime","create","ESCAPE_REG","content","html","regexResult","result","lastIndex","char","charCodeAt","xmlEscape","len","_i","getObject","listFolded","listMaxHeight","include","icons","_player2","Template","querySelector","info","time","button","thumb","defaultOption","mini","narrow","autoplay","mutex","lrcType","showlrc","preload","listmaxheight","music","defaultKey","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","array","noop","nextTick","args","apply","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","setImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","getPrototypeOf","handle","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","event","port2","createElement","script","removeChild","appendChild","source","slice","attachEvent","task","clearImmediate","self","Timeout","clearFn","_id","_clearFn","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","setTimeoutFunc","Promise","_state","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","reject","promise","resolve","newValue","then","finale","thisArg","_unhandledRejectionFn","done","reason","ex","prom","all","remaining","res","val","race","values","err","warn","_promisePolyfill2","_options2","_template2","_bar2","_storage2","_controller2","_timer2","_events2","_list2","instances","APlayer","playedPromise","arrow","offsetWidth","lrcEle","width","display","controller","timer","initAudio","_loop","setUIPlaying","setUIPaused","buffered","skipTime","nextIndex","hls","destroy","customAudioType","url","Hls","isSupported","loadSource","attachMedia","canPlayType","color","background","enable","playPromise","catch","disable","nostorage","isNaN","text","opacity","noticeTime","prevIndex","_player","log"],"mappings":"CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,IACA,mBAAAG,eAAAC,IACAD,OAAA,aAAAH,GACA,iBAAAC,QACAA,QAAA,QAAAD,IAEAD,EAAA,QAAAC,IARA,CASCK,OAAA,WACD,mBCTA,IAAAC,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAP,QAGA,IAAAC,EAAAI,EAAAE,IACAC,EAAAD,EACAE,GAAA,EACAT,YAUA,OANAU,EAAAH,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAQ,GAAA,EAGAR,EAAAD,QA2CA,OAtCAM,EAAAM,EAAAF,EAGAJ,EAAAO,EAAAR,EAGAC,EAAAQ,EAAA,SAAAd,EAAAe,EAAAC,GACAV,EAAAW,EAAAjB,EAAAe,IACAG,OAAAC,eAAAnB,EAAAe,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAvB,GACAkB,OAAAC,eAAAnB,EAAA,cAAiDwB,OAAA,KAIjDlB,EAAAmB,EAAA,SAAAxB,GACA,IAAAe,EAAAf,KAAAyB,WACA,WAA2B,OAAAzB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAK,EAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDtB,EAAAyB,EAAA,IAIAzB,IAAA0B,EAAA,mCClEAd,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAW9C,IAAAS,EAAA,UAAAC,KAAA9B,OAAA+B,UAAAC,WACAC,GACAC,aAAA,SAAAC,GACA,IAGAC,EAAAC,KAAAC,MAAAH,EAAA,MACAI,EAAAF,KAAAC,OAAAH,EAAA,KAAAC,GAAA,IACAI,EAAAH,KAAAC,MAAAH,EAAA,KAAAC,EAAA,GAAAG,GACA,OAAAH,EAAA,GACAA,EACAG,EACAC,IAEAD,EACAC,IACAC,IAbA,SAAAC,GACA,OAAAA,EAAA,OAAAA,EAAA,GAAAA,IAYAC,KAAA,MAEAC,mBAAA,SAAAC,GACA,IAAAC,EAAAD,EAAAE,WACAC,EAAAH,EAAAI,aACAC,EAAAC,SAAAC,KAAAC,WAAAF,SAAAG,gBAAAD,WACA,GAAAF,SAAAI,mBAAAJ,SAAAK,sBAAAL,SAAAM,wBAMA,YAAAT,OAAAH,GACAC,GAAAE,EAAAD,WACAC,IAAAC,kBAPA,YAAAD,GACAF,GAAAE,EAAAD,WACAC,IAAAC,aAQA,OAAAH,EAAAI,GAEAQ,kBAAA,SAAAb,EAAAc,GAIA,IAHA,IAEAC,EAFAC,EAAAhB,EAAAiB,UACAd,EAAAH,EAAAI,aAEA,OAAAD,GACAa,GAAAb,EAAAc,UACAd,IAAAC,aAGA,OADAW,EAAAT,SAAAC,KAAAW,UAAAZ,SAAAG,gBAAAS,UACAJ,EAAAE,IAAAD,GAEA/B,WACAmC,SACAC,IAAA,SAAAC,EAAA9C,GACA+C,aAAAC,QAAAF,EAAA9C,IAEAF,IAAA,SAAAgD,GACA,OAAAC,aAAAE,QAAAH,KAGAI,SACAC,UAAA1C,EAAA,yBACA2C,SAAA3C,EAAA,wBACA4C,QAAA5C,EAAA,sBAEA6C,YAAA,SAAAC,GAUA,OATA,SAAAC,GACA,QAAAxE,EAAAwE,EAAAD,OAAA,EAAwCvE,GAAA,EAAQA,IAAA,CAChD,IAAAyE,EAAAxC,KAAAC,MAAAD,KAAAyC,UAAA1E,EAAA,IACA2E,EAAAH,EAAAC,GACAD,EAAAC,GAAAD,EAAAxE,GACAwE,EAAAxE,GAAA2E,EAEA,OAAAH,EAEAI,IAAAC,OAhFA,SAAAL,GACA,GAAAM,MAAAC,QAAAP,GAAA,CACA,QAAAxE,EAAA,EAAAgF,EAAAF,MAAAN,EAAAD,QAAiDvE,EAAAwE,EAAAD,OAAgBvE,IACjEgF,EAAAhF,GAAAwE,EAAAxE,GAEA,OAAAgF,EAEA,OAAAF,MAAAG,KAAAT,GAyEAU,CAAAJ,MAAAP,KAAAlC,IAAA,SAAA8C,EAAAnF,GACA,OAAAA,OAIAR,EAAA4F,QAAAvD,+ECvFC,GAAAwD,EAAAC,EAAAD,MAAAE,EAAAC,EAAAD,MAAAE,GAAAD,EAAAE,OAAAF,EAAAG,OAAAL,EAAAG,SAAAG,EAAAJ,EAAAI,MAAAC,EAAAL,EAAAK,aAAAR,EAAAE,EAAc,SAAAG,EAAAC,GAAdG,GAE4D,uEAF5DA,GAEuFL,EAAAC,EAAAE,UAFvFE,GAGqC,oDAHrCA,GAGyDL,EAAAE,EAAAE,GAHzDC,GAIqC,iDAJrCA,GAIsDL,EAAAC,EAAAnF,MAJtDuF,GAKsC,kDALtCA,GAKyDL,EAAAC,EAAAK,QALzDD,GAAA,sDCCDrG,EAAAD,QAAAM,EAAA,kCCAAY,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IACAgF,EAAAC,EADAnG,EAAA,KAGAoG,EAAAD,EADAnG,EAAA,KAGAqG,EAAAF,EADAnG,EAAA,KAGAsG,EAAAH,EADAnG,EAAA,KAGAuG,EAAAJ,EADAnG,EAAA,KAGAwG,EAAAL,EADAnG,EAAA,KAGAyG,EAAAN,EADAnG,EAAA,KAGA0G,EAAAP,EADAnG,EAAA,KAGA2G,EAAAR,EADAnG,EAAA,KAGA4G,EAAAT,EADAnG,EAAA,KAGA6G,EAAAV,EADAnG,EAAA,KAGA8G,EAAAX,EADAnG,EAAA,KAGA+G,EAAAZ,EADAnG,EAAA,KAGAgH,EAAAb,EADAnG,EAAA,KAGAiH,EAAAd,EADAnG,EAAA,KAEA,SAAAmG,EAAAe,GACA,OAAAA,KAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAE1C,IAAAC,GACAC,KAAAlB,EAAAZ,QACA+B,MAAAjB,EAAAd,QACAgC,SAAAjB,EAAAf,QACAiC,WAAAjB,EAAAhB,QACAkC,UAAAjB,EAAAjB,QACAmC,YAAAjB,EAAAlB,QACAoC,UAAAjB,EAAAnB,QACAqC,KAAAjB,EAAApB,QACAsC,QAAAjB,EAAArB,QACAuC,QAAAjB,EAAAtB,QACAwC,SAAAjB,EAAAvB,QACAyC,QAAAjB,EAAAxB,QACA0C,MAAAjB,EAAAzB,QACA2C,KAAAjB,EAAA1B,QACA4C,IAAAjB,EAAA3B,SAEA5F,EAAA4F,QAAA6B,gCCnDA,IAKAgB,EALAC,EAAA,mBAAAC,QAAA,iBAAAA,OAAAC,SAAA,SAAApB,GACA,cAAAA,GACC,SAAAA,GACD,OAAAA,GAAA,mBAAAmB,QAAAnB,EAAAqB,cAAAF,QAAAnB,IAAAmB,OAAA9G,UAAA,gBAAA2F,GAGAiB,EAAA,WACA,OAAAK,KADA,GAGA,IACAL,KAAAM,SAAA,cAAAA,KAAA,EAAAC,MAAA,QACC,MAAAC,GACD,gCAAA7I,OAAA,YAAAsI,EAAAtI,WACAqI,EAAArI,QAEAH,EAAAD,QAAAyI,wCCfAC,EAAA,mBAAAC,QAAA,iBAAAA,OAAAC,SAAA,SAAApB,GACA,cAAAA,GACC,SAAAA,GACD,OAAAA,GAAA,mBAAAmB,QAAAnB,EAAAqB,cAAAF,QAAAnB,IAAAmB,OAAA9G,UAAA,gBAAA2F,QAKA0B,KAAAC,EAAA,mBAAAC,EAMC,WAED,mCAAAhJ,OAAA,YAAAsI,EAAAtI,eAEA,IAAAmD,SAAA8F,uBAAA,IAAAjJ,OAAAkJ,kBAAA,IAAAC,QAAAC,UAAA,CAGA,IAQAC,EAAA,SAAAC,EAAAC,EAAAC,EAAAC,GACA,OAAAD,EAAAC,EACAF,EACAD,GAAAC,EAAAD,KANAI,EAMAF,EAAAC,GALA,KAAAC,SAAA,MAAAA,EAAA,MAAAA,EAAA,MADA,IAAAA,GAQAC,EAAA,SAAAC,EAAAH,EAAAI,EAAAC,GACAL,KAAA,IAEA,IAAAH,GADAQ,KAAA9J,QACA+D,WAAA/D,OAAAkJ,YACA,oBAAAU,EACA,IAAAL,EAAAQ,SAAAH,QAEA,IAAAL,EApBA,SAAA1G,EAAAyG,GACA,eAAAzG,EAAAmH,UACAV,EACAzG,EAAAoH,wBAAAC,IAAAZ,EAiBAa,CAAAP,EAAAN,GAEA,IAAAc,EAAAC,KAAAC,MACAC,EAAAvK,OAAAuK,uBAAAvK,OAAAwK,0BAAAxK,OAAAyK,6BAAA,SAAAC,GACA1K,OAAA2K,WAAAD,EAAA,MAEA,SAAAE,IACA,IAAApB,EAAAa,KAAAC,MAAAF,EACAN,IAAA9J,OACA8J,EAAA/F,UAAAsF,EAAAC,EAAAC,EAAAC,EAAAC,GAEAzJ,OAAA6K,OAAA,EAAAxB,EAAAC,EAAAC,EAAAC,EAAAC,IAEAD,EAAAC,EACA,mBAAAI,GACAA,EAAAD,GAGAW,EAAAK,GAGAA,IAEAE,EAAA,SAAAC,GACA,IAAAA,EAAAC,iBAAA,CACAD,EAAAE,iBACAC,SAAAC,OAAAzC,KAAAyC,MACAnL,OAAAmJ,QAAAC,UAAA,UAAAV,KAAAyC,MACA,IAAAC,EAAAjI,SAAAkI,eAAA3C,KAAAyC,KAAAG,UAAA,IACA,IAAAF,EACA,OACAzB,EAAAyB,EAAA,aAAAxB,GACAsB,SAAAK,QAAA,IAAA3B,EAAA4B,QAUA,OANArI,SAAAsI,iBAAA,8BAEA,IADA,IAAAC,EAAAC,EAAAxI,SAAA8F,iBAAA,gCACA7I,EAAAuL,EAAAhH,OAAqC+G,EAAAC,IAAAvL,IACrCsL,EAAAD,iBAAA,QAAAX,GAAA,KAGAnB,KA3EAX,EAAAzI,KAAAX,EAAAM,EAAAN,EAAAC,GAAAmJ,KAAAnJ,EAAAD,QAAAmJ,iCCRAjI,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAAAwK,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAoBAG,EAAAhG,EADAnG,EAAA,IAGAoM,EAAAjG,EADAnG,EAAA,IAGAqM,EAAAlG,EADAnG,EAAA,IAEA,SAAAmG,EAAAe,GACA,OAAAA,KAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAO1C,IAAAoF,EAAA,WACA,SAAAA,EAAAC,IANA,SAAAC,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAA8D,GACA9D,KAAA+D,SACA/D,KAAAzC,MAAA,EACAyC,KAAAmE,OAAAnE,KAAA+D,OAAAK,QAAAnH,MACA+C,KAAAqE,aAqKA,OAnKAnB,EAAAY,IAEAtI,IAAA,aACA9C,MAAA,WACA,IAAA4L,EAAAtE,KACAA,KAAA+D,OAAAQ,SAAAC,KAAAzB,iBAAA,iBAAA5C,GACA,IAAAiD,OAAA,EAEAA,EADA,OAAAjD,EAAAiD,OAAAqB,QAAAC,cACAvE,EAAAiD,OAEAjD,EAAAiD,OAAAuB,cAEA,IAAAC,EAAAvD,SAAA+B,EAAAyB,uBAAA,yBAAAC,WAAA,EACAF,IAAAN,EAAA/G,OACA+G,EAAAS,OAAAH,GACAN,EAAAP,OAAAnF,QAEA0F,EAAAP,OAAAiB,cAMAxJ,IAAA,OACA9C,MAAA,WACAsH,KAAA+D,OAAAkB,OAAAC,QAAA,YACAlF,KAAA+D,OAAAQ,SAAAC,KAAAW,UAAAC,OAAA,qBACApF,KAAA+D,OAAAQ,SAAAc,OAAAhK,UAAA,GAAA2E,KAAAzC,SAIA/B,IAAA,OACA9C,MAAA,WACAsH,KAAA+D,OAAAkB,OAAAC,QAAA,YACAlF,KAAA+D,OAAAQ,SAAAC,KAAAW,UAAAG,IAAA,wBAIA9J,IAAA,SACA9C,MAAA,WACAsH,KAAA+D,OAAAQ,SAAAC,KAAAW,UAAAI,SAAA,qBAGAvF,KAAAwF,OAFAxF,KAAAyF,UAOAjK,IAAA,MACA9C,MAAA,SAAAyL,GACAnE,KAAA+D,OAAAkB,OAAAC,QAAA,WAAuDf,WACvD,mBAAA/L,OAAAW,UAAA2M,SAAA7N,KAAAsM,KACAA,OAEAA,EAAApK,IAAA,SAAA8C,GAKA,OAJAA,EAAA5E,KAAA4E,EAAA5E,MAAA4E,EAAA8I,OAAA,aACA9I,EAAAY,OAAAZ,EAAAY,QAAAZ,EAAA+I,QAAA,eACA/I,EAAAgJ,MAAAhJ,EAAAgJ,OAAAhJ,EAAAiJ,IACAjJ,EAAAkJ,KAAAlJ,EAAAkJ,MAAA,SACAlJ,IAEA,IAAAmJ,IAAAhG,KAAAmE,OAAAlI,OAAA,GACAgK,EAAA,IAAAjG,KAAAmE,OAAAlI,OACA+D,KAAA+D,OAAAQ,SAAAc,OAAAP,YAAA,EAAAnB,EAAA7G,UACAQ,MAAA0C,KAAA+D,OAAAK,QAAA9G,MACAL,MAAAkH,EACA5G,MAAAyC,KAAAmE,OAAAlI,OAAA,IAEA+D,KAAAmE,OAAAnE,KAAAmE,OAAA5H,OAAA4H,GACA6B,GAAAhG,KAAAmE,OAAAlI,OAAA,GACA+D,KAAA+D,OAAAmC,UAAAf,UAAAG,IAAA,oBAEAtF,KAAA+D,OAAA/H,YAAA4H,EAAA9G,QAAAd,YAAAgE,KAAAmE,OAAAlI,QACA+D,KAAA+D,OAAAQ,SAAA4B,SAAAnG,KAAA+D,OAAAmC,UAAA3F,iBAAA,qBACAP,KAAA+D,OAAAQ,SAAA4B,SAAAnG,KAAAmE,OAAAlI,OAAA,GAAAmK,MAAAC,gBAAAlC,EAAA7G,OAAA0C,KAAA+D,OAAAK,QAAA9G,MACA2I,IACA,WAAAjG,KAAA+D,OAAAK,QAAAkC,MACAtG,KAAA+E,OAAA/E,KAAA+D,OAAA/H,YAAA,IAEAgE,KAAA+E,OAAA,OAMAvJ,IAAA,SACA9C,MAAA,SAAA6E,GAEA,GADAyC,KAAA+D,OAAAkB,OAAAC,QAAA,cAA0D3H,UAC1DyC,KAAAmE,OAAA5G,GACA,GAAAyC,KAAAmE,OAAAlI,OAAA,GACA,IAAAuI,EAAAxE,KAAA+D,OAAAmC,UAAA3F,iBAAA,oBACAiE,EAAAjH,GAAA6H,SACApF,KAAAmE,OAAAoC,OAAAhJ,EAAA,GACAyC,KAAA+D,OAAArE,KAAAM,KAAA+D,OAAArE,IAAA0F,OAAA7H,GACAA,IAAAyC,KAAAzC,QACAyC,KAAAmE,OAAA5G,GACAyC,KAAA+E,OAAAxH,GAEAyC,KAAA+E,OAAAxH,EAAA,IAGAyC,KAAAzC,SACAyC,KAAAzC,QAEA,QAAA7F,EAAA6F,EAA2C7F,EAAA8M,EAAAvI,OAAiBvE,IAC5D8M,EAAA9M,GAAAmN,uBAAA,yBAAA2B,YAAA9O,EAEA,IAAAsI,KAAAmE,OAAAlI,QACA+D,KAAA+D,OAAAmC,UAAAf,UAAAC,OAAA,oBAEApF,KAAA+D,OAAAQ,SAAA4B,SAAAnG,KAAA+D,OAAAmC,UAAA3F,iBAAA,0BAEAP,KAAAyG,WAMAjL,IAAA,SACA9C,MAAA,SAAA6E,GAEA,GADAyC,KAAA+D,OAAAkB,OAAAC,QAAA,cAA0D3H,eAC1D,IAAAA,GAAAyC,KAAAmE,OAAA5G,GAAA,CACAyC,KAAAzC,QACA,IAAAN,EAAA+C,KAAAmE,OAAAnE,KAAAzC,OACAyC,KAAA+D,OAAAQ,SAAAuB,IAAAM,MAAAM,gBAAAzJ,EAAA4I,MAAA,QAAA5I,EAAA4I,MAAA,QACA7F,KAAA+D,OAAAzG,MAAA0C,KAAAmE,OAAAnE,KAAAzC,OAAAD,OAAA0C,KAAA+D,OAAAK,QAAA9G,MAAA0C,KAAAzC,OAAA,GACAyC,KAAA+D,OAAAQ,SAAAoB,MAAAb,UAAA7H,EAAAhF,KACA+H,KAAA+D,OAAAQ,SAAAqB,OAAAd,UAAA7H,EAAAQ,OAAA,MAAAR,EAAAQ,OAAA,GACA,IAAAkJ,EAAA3G,KAAA+D,OAAAmC,UAAArB,uBAAA,yBACA8B,GACAA,EAAAxB,UAAAC,OAAA,sBAEApF,KAAA+D,OAAAmC,UAAA3F,iBAAA,oBAAAP,KAAAzC,OAAA4H,UAAAG,IAAA,uBACA,EAAAzB,EAAA/G,SAAA,GAAAkD,KAAAzC,MAAA,SAAAyC,KAAA+D,OAAAQ,SAAAc,QACArF,KAAA+D,OAAA6C,SAAA3J,GACA+C,KAAA+D,OAAArE,KAAAM,KAAA+D,OAAArE,IAAAqF,OAAA/E,KAAAzC,OACAyC,KAAA+D,OAAArE,KAAAM,KAAA+D,OAAArE,IAAAmH,OAAA,GACA,IAAA7G,KAAA+D,OAAAhD,WACAf,KAAA+D,OAAAQ,SAAAuC,MAAAhC,UAAAlB,EAAA9G,QAAAtD,aAAAwG,KAAA+D,OAAAhD,eAMAvF,IAAA,QACA9C,MAAA,WACAsH,KAAA+D,OAAAkB,OAAAC,QAAA,aACAlF,KAAAzC,MAAA,EACAyC,KAAA+D,OAAAmC,UAAAf,UAAAC,OAAA,oBACApF,KAAA+D,OAAAlF,QACAmB,KAAAmE,UACAnE,KAAA+D,OAAArE,KAAAM,KAAA+D,OAAArE,IAAA+G,QACAzG,KAAA+D,OAAA9G,MAAA8J,IAAA,GACA/G,KAAA+D,OAAAQ,SAAAc,OAAAP,UAAA,GACA9E,KAAA+D,OAAAQ,SAAAuB,IAAAM,MAAAM,gBAAA,GACA1G,KAAA+D,OAAAzG,MAAA0C,KAAA+D,OAAAK,QAAA9G,MAAA0C,KAAAzC,OAAA,GACAyC,KAAA+D,OAAAQ,SAAAoB,MAAAb,UAAA,WACA9E,KAAA+D,OAAAQ,SAAAqB,OAAAd,UAAA,GACA9E,KAAA+D,OAAAiD,IAAAzL,IAAA,oBACAyE,KAAA+D,OAAAQ,SAAAuC,MAAAhC,UAAAlB,EAAA9G,QAAAtD,aAAA,OAIAsK,EA3KA,GA6KA5M,EAAA4F,QAAAgH,gCC/MA1L,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAAAwK,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAwBA,IAAAyD,EAAA,WACA,SAAAA,KANA,SAAAjD,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAAiH,GACAjH,KAAAiF,UACAjF,KAAAkH,aACA,QACA,UACA,iBACA,iBACA,UACA,QACA,QACA,aACA,iBACA,YACA,oBACA,QACA,OACA,UACA,WACA,aACA,SACA,UACA,UACA,UACA,aACA,eACA,WAEAlH,KAAAmH,cACA,UACA,WACA,WACA,UACA,aACA,aACA,YACA,aACA,aACA,UACA,WAsCA,OAnCAjE,EAAA+D,IAEAzL,IAAA,KACA9C,MAAA,SAAAT,EAAAkJ,GACAnB,KAAA+F,KAAA9N,IAAA,mBAAAkJ,IACAnB,KAAAiF,OAAAhN,KACA+H,KAAAiF,OAAAhN,OAEA+H,KAAAiF,OAAAhN,GAAAmP,KAAAjG,OAKA3F,IAAA,UACA9C,MAAA,SAAAT,EAAAoP,GACA,GAAArH,KAAAiF,OAAAhN,IAAA+H,KAAAiF,OAAAhN,GAAAgE,OACA,QAAAvE,EAAA,EAAmCA,EAAAsI,KAAAiF,OAAAhN,GAAAgE,OAA8BvE,IACjEsI,KAAAiF,OAAAhN,GAAAP,GAAA2P,MAMA7L,IAAA,OACA9C,MAAA,SAAAT,GACA,WAAA+H,KAAAmH,aAAAG,QAAArP,GACA,UACiB,IAAA+H,KAAAkH,YAAAI,QAAArP,GACjB,SAEAsP,QAAAC,MAAA,uBAAAvP,GACA,UAIAgP,EA9EA,GAgFA/P,EAAA4F,QAAAmK,gCCzGA7O,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAAAwK,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAwBA,IAAAiE,EAAA,WACA,SAAAA,EAAA1D,IANA,SAAAC,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAAyH,GACAzH,KAAA+D,SACAzM,OAAAuK,sBACAvK,OAAAuK,uBAAAvK,OAAAyK,6BAAAzK,OAAAwK,0BAAAxK,OAAAoQ,wBAAApQ,OAAAqQ,yBAAA,SAAAxG,GACA7J,OAAA2K,WAAAd,EAAA,SAGAnB,KAAA4H,OAAA,WACA5H,KAAA6H,OA6DA,OA3DA3E,EAAAuE,IAEAjM,IAAA,OACA9C,MAAA,WACA,IAAA4L,EAAAtE,KACAA,KAAA4H,MAAAE,QAAA,SAAAjL,GACAyH,EAAA,OAAAzH,EAAA,kBAKArB,IAAA,qBACA9C,MAAA,WACA,IAAAqP,EAAA/H,KACAgI,EAAA,EACAC,EAAA,EACAC,GAAA,EACAlI,KAAAmI,eAAAC,YAAA,WACAL,EAAAM,uBACAJ,EAAAF,EAAAhE,OAAA9G,MAAAqL,YACAJ,GAAAD,IAAAD,GAAAD,EAAAhE,OAAA9G,MAAAsL,SACAR,EAAAhE,OAAAmC,UAAAf,UAAAG,IAAA,mBACA4C,GAAA,GAEAA,GAAAD,EAAAD,IAAAD,EAAAhE,OAAA9G,MAAAsL,SACAR,EAAAhE,OAAAmC,UAAAf,UAAAC,OAAA,mBACA8C,GAAA,GAEAF,EAAAC,IAEiB,QAIjBzM,IAAA,SACA9C,MAAA,SAAAqN,GACA/F,KAAA,SAAA+F,EAAA,cACA,QAAAA,GACA/F,KAAAwI,oBAKAhN,IAAA,UACA9C,MAAA,SAAAqN,GACA/F,KAAA,SAAA+F,EAAA,iBAIAvK,IAAA,UACA9C,MAAA,WACA,IAAA+P,EAAAzI,KACAA,KAAA4H,MAAAE,QAAA,SAAAjL,GACA4L,EAAA,SAAA5L,EAAA,cACA4L,EAAA5L,EAAA,YAAA6L,cAAAD,EAAA5L,EAAA,kBAKA4K,EAvEA,GAyEAvQ,EAAA4F,QAAA2K,gCClGArP,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAAAwK,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAoBAI,EAAAjG,EADAnG,EAAA,IAGAmR,EAAAhL,EADAnG,EAAA,IAEA,SAAAmG,EAAAe,GACA,OAAAA,KAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAO1C,IAAAkK,EAAA,WACA,SAAAA,EAAA7E,IANA,SAAAC,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAA4I,GACA5I,KAAA+D,SACA/D,KAAA6I,iBACA7I,KAAA8I,cACA9I,KAAA+I,kBACA/I,KAAAgJ,iBACAhJ,KAAAiJ,iBACArF,EAAA9G,QAAA3D,UACA6G,KAAAkJ,mBAEAlJ,KAAAmJ,mBACAnJ,KAAAoJ,iBACApJ,KAAAqJ,gBA0KA,OAxKAnG,EAAA0F,IAEApN,IAAA,iBACA9C,MAAA,WACA,IAAA4L,EAAAtE,KACAA,KAAA+D,OAAAQ,SAAAuB,IAAA/C,iBAAA,mBACAuB,EAAAP,OAAAiB,cAKAxJ,IAAA,cACA9C,MAAA,WACA,IAAAqP,EAAA/H,KACAsJ,EAAA,SAAAnJ,GACA,IAAAoJ,IAAApJ,EAAAqJ,SAAArJ,EAAAsJ,eAAA,GAAAD,SAAA5F,EAAA9G,QAAA5C,mBAAA6N,EAAAhE,OAAAQ,SAAAmF,UAAA3B,EAAAhE,OAAAQ,SAAAmF,QAAAC,YACAJ,EAAA5P,KAAAiQ,IAAAL,EAAA,GACAA,EAAA5P,KAAAE,IAAA0P,EAAA,GACAxB,EAAAhE,OAAAiD,IAAAzL,IAAA,SAAAgO,EAAA,SACAxB,EAAAhE,OAAArE,KAAAqI,EAAAhE,OAAArE,IAAAmH,OAAA0C,EAAAxB,EAAAhE,OAAAhD,UACAgH,EAAAhE,OAAAQ,SAAAsF,MAAA/E,UAAAlB,EAAA9G,QAAAtD,aAAA+P,EAAAxB,EAAAhE,OAAAhD,WAEA+I,EAAA,SAAAA,EAAA3J,GACA1F,SAAAsP,oBAAAnG,EAAA9G,QAAAlB,QAAAG,QAAA+N,GACArP,SAAAsP,oBAAAnG,EAAA9G,QAAAlB,QAAAE,SAAAwN,GACA,IAAAC,IAAApJ,EAAAqJ,SAAArJ,EAAAsJ,eAAA,GAAAD,SAAA5F,EAAA9G,QAAA5C,mBAAA6N,EAAAhE,OAAAQ,SAAAmF,UAAA3B,EAAAhE,OAAAQ,SAAAmF,QAAAC,YACAJ,EAAA5P,KAAAiQ,IAAAL,EAAA,GACAA,EAAA5P,KAAAE,IAAA0P,EAAA,GACAxB,EAAAhE,OAAAiD,IAAAzL,IAAA,SAAAgO,EAAA,SACAxB,EAAAhE,OAAAiG,KAAAjC,EAAAhE,OAAAiD,IAAAxO,IAAA,kBAAAuP,EAAAhE,OAAAhD,UACAgH,EAAAhE,OAAAkG,mBAAA,GAEAjK,KAAA+D,OAAAQ,SAAAmF,QAAA3G,iBAAAa,EAAA9G,QAAAlB,QAAAC,UAAA,WACAkM,EAAAhE,OAAAkG,mBAAA,EACAxP,SAAAsI,iBAAAa,EAAA9G,QAAAlB,QAAAE,SAAAwN,GACA7O,SAAAsI,iBAAAa,EAAA9G,QAAAlB,QAAAG,QAAA+N,QAKAtO,IAAA,mBACA9C,MAAA,WACA,IAAA+P,EAAAzI,KACAA,KAAA+D,OAAAQ,SAAA2F,aAAAnH,iBAAA,mBACA0F,EAAA1E,OAAA9G,MAAAkN,OACA1B,EAAA1E,OAAA9G,MAAAkN,OAAA,EACA1B,EAAA1E,OAAAqG,mBACA3B,EAAA1E,OAAAiD,IAAAzL,IAAA,SAAAkN,EAAA1E,OAAAsG,SAAA,YAEA5B,EAAA1E,OAAA9G,MAAAkN,OAAA,EACA1B,EAAA1E,OAAAqG,mBACA3B,EAAA1E,OAAAiD,IAAAzL,IAAA,wBAGA,IAAA+N,EAAA,SAAAnJ,GACA,IAAAoJ,EAAA,IAAApJ,EAAAmK,SAAAnK,EAAAsJ,eAAA,GAAAa,SAAA1G,EAAA9G,QAAA9B,kBAAAyN,EAAA1E,OAAAQ,SAAAgG,UAAA9B,EAAA1E,OAAAK,QAAAoG,QAAA/B,EAAA1E,OAAAQ,SAAAgG,UAAAE,aACAlB,EAAA5P,KAAAiQ,IAAAL,EAAA,GACAA,EAAA5P,KAAAE,IAAA0P,EAAA,GACAd,EAAA1E,OAAAsG,OAAAd,IAEAO,EAAA,SAAAA,EAAA3J,GACAsI,EAAA1E,OAAAQ,SAAAmG,cAAAvF,UAAAC,OAAA,kCACA3K,SAAAsP,oBAAAnG,EAAA9G,QAAAlB,QAAAG,QAAA+N,GACArP,SAAAsP,oBAAAnG,EAAA9G,QAAAlB,QAAAE,SAAAwN,GACA,IAAAC,EAAA,IAAApJ,EAAAmK,SAAAnK,EAAAsJ,eAAA,GAAAa,SAAA1G,EAAA9G,QAAA9B,kBAAAyN,EAAA1E,OAAAQ,SAAAgG,UAAA9B,EAAA1E,OAAAK,QAAAoG,QAAA/B,EAAA1E,OAAAQ,SAAAgG,UAAAE,aACAlB,EAAA5P,KAAAiQ,IAAAL,EAAA,GACAA,EAAA5P,KAAAE,IAAA0P,EAAA,GACAd,EAAA1E,OAAAsG,OAAAd,IAEAvJ,KAAA+D,OAAAQ,SAAAmG,cAAA3H,iBAAAa,EAAA9G,QAAAlB,QAAAC,UAAA,WACA4M,EAAA1E,OAAAQ,SAAAmG,cAAAvF,UAAAG,IAAA,kCACA7K,SAAAsI,iBAAAa,EAAA9G,QAAAlB,QAAAE,SAAAwN,GACA7O,SAAAsI,iBAAAa,EAAA9G,QAAAlB,QAAAG,QAAA+N,QAKAtO,IAAA,kBACA9C,MAAA,WACA,IAAAiS,EAAA3K,KACAA,KAAA+D,OAAAQ,SAAA+B,MAAAvD,iBAAA,mBACA,SAAA4H,EAAA5G,OAAAK,QAAAkC,OACAqE,EAAA5G,OAAAK,QAAAkC,MAAA,SACAqE,EAAA5G,OAAAQ,SAAA+B,MAAAxB,UAAA6D,EAAA7L,QAAAmC,aACqB,WAAA0L,EAAA5G,OAAAK,QAAAkC,QACrBqE,EAAA5G,OAAAK,QAAAkC,MAAA,OACAqE,EAAA5G,OAAAQ,SAAA+B,MAAAxB,UAAA6D,EAAA7L,QAAAoC,gBAMA1D,IAAA,iBACA9C,MAAA,WACA,IAAAkS,EAAA5K,KACAA,KAAA+D,OAAAQ,SAAAsG,KAAA9H,iBAAA,mBACA6H,EAAA7G,OAAAS,KAAAL,OAAAlI,OAAA,EACA,QAAA2O,EAAA7G,OAAAK,QAAAyG,MACAD,EAAA7G,OAAAK,QAAAyG,KAAA,OACAD,EAAA7G,OAAAQ,SAAAsG,KAAA/F,UAAA6D,EAAA7L,QAAAwC,UACyB,SAAAsL,EAAA7G,OAAAK,QAAAyG,MACzBD,EAAA7G,OAAAK,QAAAyG,KAAA,MACAD,EAAA7G,OAAAQ,SAAAsG,KAAA/F,UAAA6D,EAAA7L,QAAAsC,SACyB,QAAAwL,EAAA7G,OAAAK,QAAAyG,OACzBD,EAAA7G,OAAAK,QAAAyG,KAAA,MACAD,EAAA7G,OAAAQ,SAAAsG,KAAA/F,UAAA6D,EAAA7L,QAAAuC,SAGA,QAAAuL,EAAA7G,OAAAK,QAAAyG,MAAA,QAAAD,EAAA7G,OAAAK,QAAAyG,MACAD,EAAA7G,OAAAK,QAAAyG,KAAA,OACAD,EAAA7G,OAAAQ,SAAAsG,KAAA/F,UAAA6D,EAAA7L,QAAAwC,UACyB,SAAAsL,EAAA7G,OAAAK,QAAAyG,OACzBD,EAAA7G,OAAAK,QAAAyG,KAAA,MACAD,EAAA7G,OAAAQ,SAAAsG,KAAA/F,UAAA6D,EAAA7L,QAAAsC,cAOA5D,IAAA,iBACA9C,MAAA,WACA,IAAAoS,EAAA9K,KACAA,KAAA+D,OAAAQ,SAAApF,KAAA4D,iBAAA,mBACA+H,EAAA/G,OAAAS,KAAAQ,cAKAxJ,IAAA,mBACA9C,MAAA,WACA,IAAAqS,EAAA/K,KACAA,KAAA+D,OAAAQ,SAAAyG,aAAAjI,iBAAA,mBACAgI,EAAAhH,OAAAkH,QAAA,SAAAF,EAAAhH,OAAAmH,KAAA,sBAKA1P,IAAA,iBACA9C,MAAA,WACA,IAAAyS,EAAAnL,KACAA,KAAA+D,OAAAQ,SAAA6G,eAAArI,iBAAA,mBACAoI,EAAApH,OAAAsH,aAEArL,KAAA+D,OAAAQ,SAAA+G,kBAAAvI,iBAAA,mBACAoI,EAAApH,OAAAwH,gBAEAvL,KAAA+D,OAAAQ,SAAAiH,eAAAzI,iBAAA,mBACAoI,EAAApH,OAAAiB,cAKAxJ,IAAA,gBACA9C,MAAA,WACA,IAAA+S,EAAAzL,KACAA,KAAA+D,OAAAQ,SAAAmH,UAAA3I,iBAAA,mBACA0I,EAAA1H,OAAAQ,SAAAmH,UAAAvG,UAAAI,SAAA,gCACAkG,EAAA1H,OAAAQ,SAAAmH,UAAAvG,UAAAC,OAAA,+BACAqG,EAAA1H,OAAArE,KAAA+L,EAAA1H,OAAArE,IAAA8F,SAEAiG,EAAA1H,OAAAQ,SAAAmH,UAAAvG,UAAAG,IAAA,+BACAmG,EAAA1H,OAAArE,KAAA+L,EAAA1H,OAAArE,IAAA+F,cAMAmD,EAxLA,GA0LA1R,EAAA4F,QAAA8L,+EC3NC,GAAA7L,EAAAC,EAAAD,MAAA4O,EAAAzO,EAAAyO,OAAAxO,GAAAD,EAAAE,OAAAF,EAAAG,OAAAL,EAAAG,gBAAAJ,EAAA4O,EAAe,SAAfvO,EAAAC,GAAAG,GACM,WAAqB,IAArBH,IADNG,GAAA,gCAAAA,GACiE,IADjEA,GAC8EL,EAAAC,EAD9E,IAAAI,GAAA,4CCCDpF,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAqBAgG,EArBAwE,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAmBAoI,EAAApU,EAAA,IACAiH,GACAC,EADAkN,IAEAlN,EAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAO1C,IAAAmN,EAAA,WACA,SAAAA,EAAAzH,IANA,SAAAJ,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAA6L,GACA7L,KAAAkG,UAAA9B,EAAA8B,UACAlG,KAAA8L,MAAA1H,EAAA0H,MACA9L,KAAA+D,OAAAK,EAAAL,OACA/D,KAAA+L,UACA/L,KAAAzC,MAAA,EACAyC,KAAA1F,WAgJA,OA9IA4I,EAAA2I,IAEArQ,IAAA,OACA9C,MAAA,WACAsH,KAAA+D,OAAAkB,OAAAC,QAAA,WACAlF,KAAA+D,OAAAQ,SAAAyH,QAAA7G,UAAAC,OAAA,uBAIA5J,IAAA,OACA9C,MAAA,WACAsH,KAAA+D,OAAAkB,OAAAC,QAAA,WACAlF,KAAA+D,OAAAQ,SAAAyH,QAAA7G,UAAAG,IAAA,uBAIA9J,IAAA,SACA9C,MAAA,WACAsH,KAAA+D,OAAAQ,SAAAyH,QAAA7G,UAAAI,SAAA,oBACAvF,KAAAwF,OAEAxF,KAAAyF,UAKAjK,IAAA,SACA9C,MAAA,WACA,IAAA4P,EAAA2D,UAAAhQ,OAAA,QAAAmE,IAAA6L,UAAA,GAAAA,UAAA,GAAAjM,KAAA+D,OAAA9G,MAAAqL,YACA,GAAAtI,KAAAzC,MAAAyC,KAAA1F,QAAA2B,OAAA,GAAAqM,EAAAtI,KAAA1F,QAAA0F,KAAAzC,OAAA,KAAAyC,KAAA1F,QAAA0F,KAAAzC,MAAA,IAAA+K,GAAAtI,KAAA1F,QAAA0F,KAAAzC,MAAA,MACA,QAAA7F,EAAA,EAAmCA,EAAAsI,KAAA1F,QAAA2B,OAAyBvE,IAC5D4Q,GAAAtI,KAAA1F,QAAA5C,GAAA,MAAAsI,KAAA1F,QAAA5C,EAAA,IAAA4Q,EAAAtI,KAAA1F,QAAA5C,EAAA,SACAsI,KAAAzC,MAAA7F,EACAsI,KAAAkG,UAAAE,MAAA8F,UAAA,kBAAAlM,KAAAzC,MAAA,MACAyC,KAAAkG,UAAAE,MAAA+F,gBAAA,kBAAAnM,KAAAzC,MAAA,MACAyC,KAAAkG,UAAArB,uBAAA,0BAAAM,UAAAC,OAAA,uBACApF,KAAAkG,UAAAkG,qBAAA,KAAA1U,GAAAyN,UAAAG,IAAA,2BAOA9J,IAAA,SACA9C,MAAA,SAAA6E,GACA,IAAA+G,EAAAtE,KACA,IAAAA,KAAA+L,OAAAxO,GACA,GAAAyC,KAAA8L,MASqB,CACrB9L,KAAA+L,OAAAxO,KACA,QACA,YAEA,IAAA8O,EAAA,IAAAC,eACAD,EAAAE,mBAAA,WACAhP,IAAA+G,EAAAP,OAAAS,KAAAjH,OAAA,IAAA8O,EAAAG,aACAH,EAAAI,QAAA,KAAAJ,EAAAI,OAAA,WAAAJ,EAAAI,OACAnI,EAAAyH,OAAAxO,GAAA+G,EAAAoI,MAAAL,EAAAM,eAEArI,EAAAP,OAAA6I,OAAA,kCAAAP,EAAAI,QACAnI,EAAAyH,OAAAxO,KACA,QACA,mBAGA+G,EAAA4B,UAAApB,WAAA,EAAArG,EAAA3B,UAAgF6O,OAAArH,EAAAyH,OAAAxO,KAChF+G,EAAAuC,OAAA,GACAvC,EAAAhK,QAAAgK,EAAAyH,OAAAxO,KAGA,IAAAsP,EAAA7M,KAAA+D,OAAAS,KAAAL,OAAA5G,GAAAmC,IACA2M,EAAAS,KAAA,MAAAD,GAAA,GACAR,EAAAU,KAAA,WAhCA/M,KAAA+D,OAAAS,KAAAL,OAAA5G,GAAAmC,IACAM,KAAA+L,OAAAxO,GAAAyC,KAAA0M,MAAA1M,KAAA+D,OAAAS,KAAAL,OAAA5G,GAAAmC,KAEAM,KAAA+L,OAAAxO,KACA,QACA,kBA8BAyC,KAAAkG,UAAApB,WAAA,EAAArG,EAAA3B,UAA+D6O,OAAA3L,KAAA+L,OAAAxO,KAC/DyC,KAAA6G,OAAA,GACA7G,KAAA1F,QAAA0F,KAAA+L,OAAAxO,MAIA/B,IAAA,QACA9C,MAAA,SAAAsU,GACA,GAAAA,EAAA,CAOA,IAHA,IAAAC,GAHAD,IAAAnK,QAAA,yBAAAqK,EAAAC,GACA,OAAAA,EAAA,SAEAC,MAAA,MACA1N,KACA2N,EAAAJ,EAAAhR,OACAvE,EAAA,EAAmCA,EAAA2V,EAAc3V,IAAA,CACjD,IAAA4V,EAAAL,EAAAvV,GAAAwV,MAAA,qCACAK,EAAAN,EAAAvV,GAAAmL,QAAA,sCAAsF,IAAAA,QAAA,mCAAgD,IAAAA,QAAA,iBACtI,GAAAyK,EAEA,IADA,IAAAE,EAAAF,EAAArR,OACAwR,EAAA,EAA2CA,EAAAD,EAAaC,IAAA,CACxD,IAAAC,EAAA,mCAA2EC,KAAAL,EAAAG,IAI3EG,EAHA,GAAAF,EAAA,GACArM,SAAAqM,EAAA,KACAA,EAAA,GAAArM,SAAAqM,EAAA,UAAAA,EAAA,OAAAzR,OAAA,YAEAyD,EAAA0H,MACAwG,EACAL,KAWA,OANA7N,IAAAmO,OAAA,SAAAhR,GACA,OAAAA,EAAA,MAEAiR,KAAA,SAAA9K,EAAA+K,GACA,OAAA/K,EAAA,GAAA+K,EAAA,KAEArO,EAEA,YAKAlE,IAAA,SACA9C,MAAA,SAAA6E,GACAyC,KAAA+L,OAAAxF,OAAAhJ,EAAA,MAIA/B,IAAA,QACA9C,MAAA,WACAsH,KAAA+L,UACA/L,KAAAkG,UAAApB,UAAA,OAIA+G,EAxJA,GA0JA3U,EAAA4F,QAAA+O,gCCxLAzT,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAqBAgG,EArBAwE,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAmBAwK,EAAAxW,EAAA,GACAoM,GACAlF,EADAsP,IAEAtP,EAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAO1C,IAAAuP,EAAA,WACA,SAAAA,EAAAlK,IANA,SAAAC,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAAiO,GACAjO,KAAAkO,YAAAnK,EAAAK,QAAA8J,YACAlO,KAAAqH,KAAA8G,KAAAzB,MAAA9I,EAAA9G,QAAAxB,QAAA9C,IAAAwH,KAAAkO,cACAlO,KAAAqH,OACArH,KAAAqH,SAEArH,KAAAqH,KAAAgD,OAAArK,KAAAqH,KAAAgD,QAAAtG,EAAAK,QAAAiG,OAiBA,OAfAnH,EAAA+K,IAEAzS,IAAA,MACA9C,MAAA,SAAA8C,GACA,OAAAwE,KAAAqH,KAAA7L,MAIAA,IAAA,MACA9C,MAAA,SAAA8C,EAAA9C,GACAsH,KAAAqH,KAAA7L,GAAA9C,EACAkL,EAAA9G,QAAAxB,QAAAC,IAAAyE,KAAAkO,YAAAC,KAAAC,UAAApO,KAAAqH,WAIA4G,EAzBA,GA2BA/W,EAAA4F,QAAAmR,gCCzDA7V,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAAAwK,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAwBA,IAAA6K,EAAA,WACA,SAAAA,EAAA9J,IANA,SAAAP,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAAqO,GACArO,KAAAsO,YACAtO,KAAAsO,SAAAjE,OAAA9F,EAAA8F,OACArK,KAAAsO,SAAAC,OAAAhK,EAAAgK,OACAvO,KAAAsO,SAAAE,OAAAjK,EAAAiK,OAkBA,OAhBAtL,EAAAmL,IAEA7S,IAAA,MACA9C,MAAA,SAAAqN,EAAAwD,EAAAkF,GACAlF,EAAA5P,KAAAiQ,IAAAL,EAAA,GACAA,EAAA5P,KAAAE,IAAA0P,EAAA,GACAvJ,KAAAsO,SAAAvI,GAAAK,MAAAqI,GAAA,IAAAlF,EAAA,OAIA/N,IAAA,MACA9C,MAAA,SAAAqN,EAAA0I,GACA,OAAAC,WAAA1O,KAAAsO,SAAAvI,GAAAK,MAAAqI,IAAA,QAIAJ,EAxBA,GA0BAnX,EAAA4F,QAAAuR,6CCnDAlX,EAAAD,SAAA,EACA,IACAC,EAAAD,QAAA,qBAAAkB,OAAAW,UAAA2M,SAAA7N,KAAA8W,EAAAC,SACC,MAAAzO,kECHD,IAAA0O,EAAArX,EAAA,IACAsX,EAAA1W,OAAA2W,OAAAF,EAAAF,EAAArX,QACA0X,EAAA,UACAF,EAAA3R,QAAA,SAAA8R,GACA,OA0BA,SAAAA,GACA,IAAAC,EAAA,GAAAD,EACAE,EAAAH,EAAArB,KAAAuB,GACA,IAAAC,EACA,OAAAF,EAEA,IAAAG,EAAA,GACA1X,OAAA,EAAA2X,OAAA,EAAAC,OAAA,EACA,IAAA5X,EAAAyX,EAAA5R,MAAA8R,EAAA,EAA8C3X,EAAAwX,EAAAjT,OAAiBvE,IAAA,CAC/D,OAAAwX,EAAAK,WAAA7X,IACA,QACA4X,EAAA,QACA,MACA,QACAA,EAAA,QACA,MACA,QACAA,EAAA,QACA,MACA,QACAA,EAAA,QACA,MACA,QACAA,EAAA,QACA,MACA,QACA,SAEAD,IAAA3X,IACA0X,GAAAF,EAAAtM,UAAAyM,EAAA3X,IAEA2X,EAAA3X,EAAA,EACA0X,GAAAE,EAEA,OAAAD,IAAA3X,EACA0X,EAAAF,EAAAtM,UAAAyM,EAAA3X,GAEA0X,EA/DAI,CAaA,SAAA9J,EAAAhN,GACA,iBAAAA,IAEAA,OADA0H,IAAA1H,GAAA,OAAAA,EACA,GACS,mBAAAA,EACTgN,EAAAhN,EAAAb,KAAAa,IAEAyV,KAAAC,UAAA1V,IAGA,OAAAA,EAvBAgN,CAAAuJ,KAEAH,EAAA/R,MAAA,SAAAsK,EAAAlG,GACA,GAAA3E,MAAAC,QAAA4K,GACA,QAAA3P,EAAA,EAAA+X,EAAApI,EAAApL,OAA0CvE,EAAA+X,EAAS/X,IACnDyJ,EAAAkG,EAAA3P,WAGA,QAAAgY,KAAArI,EACAlG,EAAAkG,EAAAqI,OA0DAvY,EAAAD,QAAA4X,0LCxECa,EAAAzS,EAAAyS,UAAAzS,EAAAI,MAAAJ,EAAAD,MAAAC,EAAAK,aAAA6G,EAAuBoG,OA0EvBhN,GACwB,6BAAA4G,EAAAwL,aADxBpS,GAAA,sBAAAA,GAC+E,IAAA4G,EAAAyL,gBAAArS,GAAkD,uBAAlDA,GAA6EL,EAA7EiH,EAAAyL,eAD/ErS,GAAA,KAAAA,GAEO,aAAA4G,EAAAyL,gBAAArS,GAAkD,uBAAlDA,GAA6EL,EAA7EiH,EAAAyL,eAFPrS,GAAA,KAAAA,GAAA,cAGQsS,EAAAtY,EAAA,EAAAA,CAAAmY,GAAArS,MAAA8G,EAAA9G,MAAAL,MAAAmH,EAAAnH,MAAAM,MAHR,MAAAC,GAWoC,wFAAAqI,IAAArI,GAA2C,+BAA3CA,GAAsDL,EAAA0I,GAX1FrI,GAAA,YAAAA,GAW6H,qBAX7HA,GAWgJL,EAAAiH,EAAA9G,OAXhJE,GAYiD,yDAZjDA,GAYkEuS,EAAAnR,KAZlEpB,GAuB6E,qgBAvB7EA,GAuBgGL,EAAAiH,EAAA9G,OAvBhGE,GAwBuE,+EAxBvEA,GAwB0FL,EAAAiH,EAAA9G,OAxB1FE,GAyB+D,uEAzB/DA,GAyBmFuS,EAAAxQ,QAzBnF/B,GAmCoB,qaAnCpBA,GAmCqCuS,EAAAtQ,KAnCrCjC,GAsCoB,iHAtCpBA,GAsCqCuS,EAAAnR,KAtCrCpB,GAyCoB,oHAzCpBA,GAyCqCuS,EAAAtQ,KAzCrCjC,GA6CwB,mMA7CxBA,GA6C+CuS,EAAAhR,WA7C/CvB,GAiDwF,iPAjDxFA,GAiD2GL,EAAAiH,EAAA9G,OAjD3GE,GAsDoB,sMAAiC,SAAjC4G,EAAAkC,MAAA9I,GAAuDuS,EAAA7Q,UAAwC,WAAxCkF,EAAwCkC,QAtDnH9I,GAAAuS,EAAA9Q,aAAAzB,GAyDoB,mIAA+B,QAA/B4G,EAAAyG,KAAArN,GAAmDuS,EAAA1Q,QAAA,QAAA+E,EAAoCyG,KAApCrN,GAAwDuS,EAAA3Q,QAAA,SAAAgF,EAAqCyG,OAzDpKrN,GAAAuS,EAAAzQ,UAAA9B,GA4DoB,mIA5DpBA,GA4DqCuS,EAAA5Q,KA5DrC3B,GA+DoB,kIA/DpBA,GA+DoCuS,EAAArQ,IA/DpClC,GAqEmE,2LArEnEA,GAqEqFuS,EAAAvQ,MArErFhC,GAAA,mLA1EAA,GAEoC,qEAAAqI,IAAArI,GAA2C,+BAA3CA,GAAsDL,EAAA0I,GAF1FrI,GAAA,YAAAA,GAE6H,qBAF7HA,GAEgJL,EAAAiH,EAAA9G,OAFhJE,GAGiD,yDAHjDA,GAGkEuS,EAAAnR,KAHlEpB,GAiB6E,2pBAjB7EA,GAiBgGL,EAAAiH,EAAA9G,OAjBhGE,GAkBuE,+EAlBvEA,GAkB0FL,EAAAiH,EAAA9G,OAlB1FE,GAmB+D,uEAnB/DA,GAmBmFuS,EAAAxQ,QAnBnF/B,GA6BoB,qaA7BpBA,GA6BqCuS,EAAAtQ,KA7BrCjC,GAgCoB,iHAhCpBA,GAgCqCuS,EAAAnR,KAhCrCpB,GAmCoB,oHAnCpBA,GAmCqCuS,EAAAtQ,KAnCrCjC,GAuCwB,mMAvCxBA,GAuC+CuS,EAAAhR,WAvC/CvB,GA2CwF,iPA3CxFA,GA2C2GL,EAAAiH,EAAA9G,OA3C3GE,GAgDoB,sMAAiC,SAAjC4G,EAAAkC,MAAA9I,GAAuDuS,EAAA7Q,UAAwC,WAAxCkF,EAAwCkC,QAhDnH9I,GAAAuS,EAAA9Q,aAAAzB,GAmDoB,mIAA+B,QAA/B4G,EAAAyG,KAAArN,GAAmDuS,EAAA1Q,QAAA,QAAA+E,EAAoCyG,KAApCrN,GAAwDuS,EAAA3Q,QAAA,SAAAgF,EAAqCyG,OAnDpKrN,GAAAuS,EAAAzQ,UAAA9B,GAsDoB,mIAtDpBA,GAsDqCuS,EAAA5Q,KAtDrC3B,GAyDoB,kIAzDpBA,GAyDoCuS,EAAArQ,IAzDpClC,GA+DmE,2LA/DnEA,GA+DqFuS,EAAAvQ,MA/DrFhC,GAiEwB,oDAAA4G,EAAAwL,aAjExBpS,GAAA,sBAAAA,GAiE+E,IAAA4G,EAAAyL,gBAAArS,GAAkD,uBAAlDA,GAA6EL,EAA7EiH,EAAAyL,eAjE/ErS,GAAA,KAAAA,GAkEO,aAAA4G,EAAAyL,gBAAArS,GAAkD,uBAAlDA,GAA6EL,EAA7EiH,EAAAyL,eAlEPrS,GAAA,KAAAA,GAAA,cAmEQsS,EAAAtY,EAAA,EAAAA,CAAAmY,GAAArS,MAAA8G,EAAA9G,MAAAL,MAAAmH,EAAAnH,MAAAM,MAnER,MAAAC,GA0EA,0DCzEDpF,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAAAwK,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAoBAmF,EAAAhL,EADAnG,EAAA,IAGAwY,EAAArS,EADAnG,EAAA,KAEA,SAAAmG,EAAAe,GACA,OAAAA,KAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAO1C,IAAAuR,EAAA,WACA,SAAAA,EAAA7L,IANA,SAAAJ,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAKAC,CAAAlE,KAAAiQ,GACAjQ,KAAAkG,UAAA9B,EAAA8B,UACAlG,KAAAoE,kBACApE,KAAAhE,YAAAoI,EAAApI,YACAgE,KAAA6H,OAsDA,OApDA3E,EAAA+M,IACAzU,IAAA,OACA9C,MAAA,WACA,IAAAmN,EAAA,GACA7F,KAAAoE,QAAAnH,MAAAhB,SAEA4J,EADA,WAAA7F,KAAAoE,QAAAkC,MACAtG,KAAAoE,QAAAnH,MAAA+C,KAAAhE,YAAA,IAAA6J,MAEA7F,KAAAoE,QAAAnH,MAAA,GAAA4I,OAGA7F,KAAAkG,UAAApB,WAAA,EAAAkL,EAAAlT,UACAsH,QAAApE,KAAAoE,QACA2L,MAAApH,EAAA7L,QACA+I,QACA8J,UAAA,SAAAjR,GACA,OAAAA,KAGAsB,KAAAN,IAAAM,KAAAkG,UAAAgK,cAAA,yBACAlQ,KAAAgM,QAAAhM,KAAAkG,UAAAgK,cAAA,gBACAlQ,KAAA6J,MAAA7J,KAAAkG,UAAAgK,cAAA,kBACAlQ,KAAAmQ,KAAAnQ,KAAAkG,UAAAgK,cAAA,iBACAlQ,KAAAoQ,KAAApQ,KAAAkG,UAAAgK,cAAA,iBACAlQ,KAAA0J,QAAA1J,KAAAkG,UAAAgK,cAAA,qBACAlQ,KAAAqQ,OAAArQ,KAAAkG,UAAAgK,cAAA,mBACAlQ,KAAAtF,KAAAsF,KAAAkG,UAAAgK,cAAA,iBACAlQ,KAAAwE,KAAAxE,KAAAkG,UAAAgK,cAAA,iBACAlQ,KAAAqF,OAAArF,KAAAkG,UAAAgK,cAAA,oBACAlQ,KAAAmG,SAAAnG,KAAAkG,UAAA3F,iBAAA,qBACAP,KAAAuO,OAAAvO,KAAAkG,UAAAgK,cAAA,mBACAlQ,KAAAwO,OAAAxO,KAAAkG,UAAAgK,cAAA,mBACAlQ,KAAAsQ,MAAAtQ,KAAAkG,UAAAgK,cAAA,kBACAlQ,KAAAqK,OAAArK,KAAAkG,UAAAgK,cAAA,mBACAlQ,KAAAuK,UAAAvK,KAAAkG,UAAAgK,cAAA,uBACAlQ,KAAAkK,aAAAlK,KAAAkG,UAAAgK,cAAA,wBACAlQ,KAAA0K,cAAA1K,KAAAkG,UAAAgK,cAAA,4BACAlQ,KAAA6K,KAAA7K,KAAAkG,UAAAgK,cAAA,sBACAlQ,KAAAsG,MAAAtG,KAAAkG,UAAAgK,cAAA,uBACAlQ,KAAAb,KAAAa,KAAAkG,UAAAgK,cAAA,sBACAlQ,KAAA8F,IAAA9F,KAAAkG,UAAAgK,cAAA,gBACAlQ,KAAA2F,MAAA3F,KAAAkG,UAAAgK,cAAA,kBACAlQ,KAAA4F,OAAA5F,KAAAkG,UAAAgK,cAAA,mBACAlQ,KAAA8G,MAAA9G,KAAAkG,UAAAgK,cAAA,kBACAlQ,KAAA4M,OAAA5M,KAAAkG,UAAAgK,cAAA,mBACAlQ,KAAAgL,aAAAhL,KAAAkG,UAAAgK,cAAA,yBACAlQ,KAAAoL,eAAApL,KAAAkG,UAAAgK,cAAA,sBACAlQ,KAAAsL,kBAAAtL,KAAAkG,UAAAgK,cAAA,yBACAlQ,KAAAwL,eAAAxL,KAAAkG,UAAAgK,cAAA,sBACAlQ,KAAA0L,UAAA1L,KAAAkG,UAAAgK,cAAA,yBAGAD,EA5DA,GA8DA/Y,EAAA4F,QAAAmT,gCC9FA7X,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9CxB,EAAA4F,QAAA,SAAAsH,GACA,IAAAmM,GACArK,UAAA9B,EAAAjK,SAAAM,SAAAoK,uBAAA,cACA2L,KAAApM,EAAAqM,QAAArM,EAAAoG,QAAA,EACAA,OAAA,EACAkG,UAAA,EACAC,OAAA,EACAC,QAAAxM,EAAAyM,SAAAzM,EAAA1E,KAAA,EACAoR,QAAA,OACAxT,MAAA,UACAuN,KAAA,MACAvE,MAAA,OACA+D,OAAA,GACAuF,WAAAxL,EAAAoG,MACAqF,cAAAzL,EAAA2M,eAAA,QACA9T,MAAAmH,EAAA4M,UACA9C,YAAA,mBAEA,QAAA+C,KAAAV,EACAA,EAAAvX,eAAAiY,KAAA7M,EAAApL,eAAAiY,KACA7M,EAAA6M,GAAAV,EAAAU,IAgBA,MAbA,mBAAA7Y,OAAAW,UAAA2M,SAAA7N,KAAAuM,EAAAnH,SACAmH,EAAAnH,OAAAmH,EAAAnH,QAEAmH,EAAAnH,MAAAlD,IAAA,SAAA8C,GAKA,OAJAA,EAAA5E,KAAA4E,EAAA5E,MAAA4E,EAAA8I,OAAA,aACA9I,EAAAY,OAAAZ,EAAAY,QAAAZ,EAAA+I,QAAA,eACA/I,EAAAgJ,MAAAhJ,EAAAgJ,OAAAhJ,EAAAiJ,IACAjJ,EAAAkJ,KAAAlJ,EAAAkJ,MAAA,SACAlJ,IAEAuH,EAAAnH,MAAAhB,QAAA,WAAAmI,EAAAyG,OACAzG,EAAAyG,KAAA,OAEAzG,kBCtCAjN,EAAAD,QAAA,0lBCAAC,EAAAD,QAAA,qlBCAAC,EAAAD,QAAA,oMCAAC,EAAAD,QAAA,yQCAAC,EAAAD,QAAA,iXCAAC,EAAAD,QAAA,kTCAAC,EAAAD,QAAA,gQCAAC,EAAAD,QAAA,oeCAAC,EAAAD,QAAA,0LCAAC,EAAAD,QAAA,4RCAAC,EAAAD,QAAA,yTCAAC,EAAAD,QAAA,wmBCAAC,EAAAD,QAAA,qzCCAAC,EAAAD,QAAA,4SCAAC,EAAAD,QAAA,sRCCA,IACAga,EACAC,EAFAvC,EAAAzX,EAAAD,WAGA,SAAAka,IACA,UAAAC,MAAA,mCAEA,SAAAC,IACA,UAAAD,MAAA,qCAsBA,SAAAE,EAAAC,GACA,GAAAN,IAAAjP,WACA,OAAAA,WAAAuP,EAAA,GAEA,IAAAN,IAAAE,IAAAF,IAAAjP,WAEA,OADAiP,EAAAjP,WACAA,WAAAuP,EAAA,GAEA,IACA,OAAAN,EAAAM,EAAA,GACK,MAAArR,GACL,IACA,OAAA+Q,EAAArZ,KAAA,KAAA2Z,EAAA,GACS,MAAArR,GACT,OAAA+Q,EAAArZ,KAAAmI,KAAAwR,EAAA,MAlCA,WACA,IAEAN,EADA,mBAAAjP,WACAA,WAEAmP,EAEK,MAAAjR,GACL+Q,EAAAE,EAEA,IAEAD,EADA,mBAAAM,aACAA,aAEAH,EAEK,MAAAnR,GACLgR,EAAAG,GAjBA,GAwDA,IAEAI,EAFAC,KACAC,GAAA,EAEAC,GAAA,EACA,SAAAC,IACAF,GAAAF,IAGAE,GAAA,EACAF,EAAAzV,OACA0V,EAAAD,EAAAnV,OAAAoV,GAEAE,GAAA,EAEAF,EAAA1V,QACA8V,KAGA,SAAAA,IACA,IAAAH,EAAA,CAGA,IAAAI,EAAAT,EAAAO,GACAF,GAAA,EAEA,IADA,IAAAnC,EAAAkC,EAAA1V,OACAwT,GAAA,CAGA,IAFAiC,EAAAC,EACAA,OACAE,EAAApC,GACAiC,GACAA,EAAAG,GAAAI,MAGAJ,GAAA,EACApC,EAAAkC,EAAA1V,OAEAyV,EAAA,KACAE,GAAA,EAvDA,SAAAM,GACA,GAAAf,IAAAM,aACA,OAAAA,aAAAS,GAEA,IAAAf,IAAAG,IAAAH,IAAAM,aAEA,OADAN,EAAAM,aACAA,aAAAS,GAEA,IACAf,EAAAe,GACK,MAAA/R,GACL,IACA,OAAAgR,EAAAtZ,KAAA,KAAAqa,GACS,MAAA/R,GACT,OAAAgR,EAAAtZ,KAAAmI,KAAAkS,KA0CAC,CAAAH,IAcA,SAAAI,EAAAZ,EAAAa,GACArS,KAAAwR,MACAxR,KAAAqS,QAWA,SAAAC,KAzBA1D,EAAA2D,SAAA,SAAAf,GACA,IAAAgB,EAAA,IAAAhW,MAAAyP,UAAAhQ,OAAA,GACA,GAAAgQ,UAAAhQ,OAAA,EACA,QAAAvE,EAAA,EAAuBA,EAAAuU,UAAAhQ,OAAsBvE,IAC7C8a,EAAA9a,EAAA,GAAAuU,UAAAvU,GAGAia,EAAAvK,KAAA,IAAAgL,EAAAZ,EAAAgB,IACA,IAAAb,EAAA1V,QAAA2V,GACAL,EAAAQ,IAOAK,EAAArZ,UAAAkZ,IAAA,WACAjS,KAAAwR,IAAAiB,MAAA,KAAAzS,KAAAqS,QAEAzD,EAAAjJ,MAAA,UACAiJ,EAAA8D,SAAA,EACA9D,EAAA+D,OACA/D,EAAAgE,QACAhE,EAAAiE,QAAA,GACAjE,EAAAkE,YAGAlE,EAAAmE,GAAAT,EACA1D,EAAAoE,YAAAV,EACA1D,EAAAqE,KAAAX,EACA1D,EAAAsE,IAAAZ,EACA1D,EAAAuE,eAAAb,EACA1D,EAAAwE,mBAAAd,EACA1D,EAAAyE,KAAAf,EACA1D,EAAA0E,gBAAAhB,EACA1D,EAAA2E,oBAAAjB,EACA1D,EAAA4E,UAAA,SAAAvb,GACA,UAEA2W,EAAA6E,QAAA,SAAAxb,GACA,UAAAoZ,MAAA,qCAEAzC,EAAA8E,IAAA,WACA,WAEA9E,EAAA+E,MAAA,SAAAC,GACA,UAAAvC,MAAA,mCAEAzC,EAAAiF,MAAA,WACA,wDC1JA,SAAAlF,EAAAvO,GAEA,IAAAuO,EAAAmF,aAAA,CAGA,IAIAC,EAuGA7E,EAVA8E,EAhBAC,EACAC,EAlFAC,EAAA,EACAC,KACAC,GAAA,EACAC,EAAA3F,EAAAlU,SAyHA8Z,EAAAnc,OAAAoc,gBAAApc,OAAAoc,eAAA7F,GACA4F,OAAAtS,WAAAsS,EAAA5F,EACU,wBAAAjJ,SAAA7N,KAAA8W,EAAAC,SAhEVmF,EAAA,SAAAU,GACA7F,EAAA2D,SAAA,WACAmC,EAAAD,OAIA,WACA,GAAA9F,EAAAgG,cAAAhG,EAAAiG,cAAA,CACA,IAAAC,GAAA,EACAC,EAAAnG,EAAAoG,UAMA,OALApG,EAAAoG,UAAA,WACAF,GAAA,GAEAlG,EAAAgG,YAAA,QACAhG,EAAAoG,UAAAD,EACAD,GAmDKG,GAEArG,EAAAsG,iBAjCLjB,EAAA,IAAAiB,gBACAC,MAAAH,UAAA,SAAAI,GAEAT,EADAS,EAAA9N,OAGA0M,EAAA,SAAAU,GACAT,EAAAoB,MAAAT,YAAAF,KA6BKH,GAAA,uBAAAA,EAAAe,cAAA,WAzBLnG,EAAAoF,EAAA1Z,gBACAmZ,EAAA,SAAAU,GACA,IAAAa,EAAAhB,EAAAe,cAAA,UACAC,EAAA/I,mBAAA,WACAmI,EAAAD,GACAa,EAAA/I,mBAAA,KACA2C,EAAAqG,YAAAD,GACAA,EAAA,MAEApG,EAAAsG,YAAAF,KAIAvB,EAAA,SAAAU,GACAxS,WAAAyS,EAAA,EAAAD,KAxCAR,EAAA,gBAAAta,KAAAyC,SAAA,IACA8X,EAAA,SAAAiB,GACAA,EAAAM,SAAA9G,GAAA,iBAAAwG,EAAA9N,MAAA,IAAA8N,EAAA9N,KAAAC,QAAA2M,IACAS,GAAAS,EAAA9N,KAAAqO,MAAAzB,EAAAhY,UAGA0S,EAAA5L,iBACA4L,EAAA5L,iBAAA,UAAAmR,GAAA,GAEAvF,EAAAgH,YAAA,YAAAzB,GAEAH,EAAA,SAAAU,GACA9F,EAAAgG,YAAAV,EAAAQ,EAAA,OA4CAF,EAAAT,aApIA,SAAA3S,GACA,mBAAAA,IACAA,EAAA,IAAAlB,SAAA,GAAAkB,IAGA,IADA,IAAAqR,EAAA,IAAAhW,MAAAyP,UAAAhQ,OAAA,GACAvE,EAAA,EAAuBA,EAAA8a,EAAAvW,OAAiBvE,IACxC8a,EAAA9a,GAAAuU,UAAAvU,EAAA,GAEA,IAAAke,GACAzU,WACAqR,QAIA,OAFA4B,EAAAD,GAAAyB,EACA7B,EAAAI,GACAA,KAuHAI,EAAAsB,iBArHA,SAAAA,EAAApB,UACAL,EAAAK,GAuBA,SAAAC,EAAAD,GACA,GAAAJ,EACApS,WAAAyS,EAAA,EAAAD,OACS,CACT,IAAAmB,EAAAxB,EAAAK,GACA,GAAAmB,EAAA,CACAvB,GAAA,EACA,KA5BA,SAAAuB,GACA,IAAAzU,EAAAyU,EAAAzU,SACAqR,EAAAoD,EAAApD,KACA,OAAAA,EAAAvW,QACA,OACAkF,IACA,MACA,OACAA,EAAAqR,EAAA,IACA,MACA,OACArR,EAAAqR,EAAA,GAAAA,EAAA,IACA,MACA,OACArR,EAAAqR,EAAA,GAAAA,EAAA,GAAAA,EAAA,IACA,MACA,QACArR,EAAAsR,MAAArS,EAAAoS,IAYAP,CAAA2D,GACiB,QACjBC,EAAApB,GACAJ,GAAA,MA7DA,CAgJC,oBAAAyB,UAAA,IAAAnH,OAAAvO,EAAAuO,EAAAmH,4DChJD,IAAArD,EAAAxS,SAAAlH,UAAA0Z,MAYA,SAAAsD,EAAAjT,EAAAkT,GACAhW,KAAAiW,IAAAnT,EACA9C,KAAAkW,SAAAF,EAbA9e,EAAA+K,WAAA,WACA,WAAA8T,EAAAtD,EAAA5a,KAAAoK,WAAA3K,OAAA2U,WAAAwF,eAEAva,EAAAkR,YAAA,WACA,WAAA2N,EAAAtD,EAAA5a,KAAAuQ,YAAA9Q,OAAA2U,WAAAvD,gBAEAxR,EAAAua,aAAAva,EAAAwR,cAAA,SAAAsJ,GACAA,GACAA,EAAAmE,SAOAJ,EAAAhd,UAAAqd,MAAAL,EAAAhd,UAAAsd,IAAA,aAEAN,EAAAhd,UAAAod,MAAA,WACAnW,KAAAkW,SAAAre,KAAAP,OAAA0I,KAAAiW,MAEA/e,EAAAof,OAAA,SAAAzZ,EAAA0Z,GACA9E,aAAA5U,EAAA2Z,gBACA3Z,EAAA4Z,aAAAF,GAEArf,EAAAwf,SAAA,SAAA7Z,GACA4U,aAAA5U,EAAA2Z,gBACA3Z,EAAA4Z,cAAA,GAEAvf,EAAAyf,aAAAzf,EAAA0f,OAAA,SAAA/Z,GACA4U,aAAA5U,EAAA2Z,gBACA,IAAAD,EAAA1Z,EAAA4Z,aACAF,GAAA,IACA1Z,EAAA2Z,eAAAvU,WAAA,WACApF,EAAAga,YACAha,EAAAga,cACSN,KAGT/e,EAAA,IACAN,EAAA4c,0BACA5c,EAAA2e,yECzCA,IAAAjW,EAAA,mBAAAC,QAAA,iBAAAA,OAAAC,SAAA,SAAApB,GACA,cAAAA,GACC,SAAAA,GACD,OAAAA,GAAA,mBAAAmB,QAAAnB,EAAAqB,cAAAF,QAAAnB,IAAAmB,OAAA9G,UAAA,gBAAA2F,GAEAoY,EAAA7U,WACA,SAAAqQ,KAOA,SAAAyE,EAAA/U,GACA,KAAAhC,gBAAA+W,GACA,UAAA9S,UAAA,wCACA,sBAAAjC,EACA,UAAAiC,UAAA,kBACAjE,KAAAgX,OAAA,EACAhX,KAAAiX,UAAA,EACAjX,KAAAkX,YAAA9W,EACAJ,KAAAmX,cACAC,EAAApV,EAAAhC,MAEA,SAAAyU,EAAAqB,EAAAuB,GACA,SAAAvB,EAAAkB,QACAlB,IAAAoB,OAEA,IAAApB,EAAAkB,QAIAlB,EAAAmB,UAAA,EACAF,EAAAO,aAAA,WACA,IAAAC,EAAA,IAAAzB,EAAAkB,OAAAK,EAAAG,YAAAH,EAAAI,WACA,UAAAF,EAAA,CAIA,IAAAG,EACA,IACAA,EAAAH,EAAAzB,EAAAoB,QACS,MAAA/W,GAET,YADAwX,EAAAN,EAAAO,QAAAzX,GAGA0X,EAAAR,EAAAO,QAAAF,QAVA,IAAA5B,EAAAkB,OAAAa,EAAAF,GAAAN,EAAAO,QAAA9B,EAAAoB,WAPApB,EAAAqB,WAAA/P,KAAAiQ,GAoBA,SAAAQ,EAAA/B,EAAAgC,GACA,IACA,GAAAA,IAAAhC,EACA,UAAA7R,UAAA,6CACA,GAAA6T,IAAA,qBAAAA,EAAA,YAAAlY,EAAAkY,KAAA,mBAAAA,GAAA,CACA,IAAAC,EAAAD,EAAAC,KACA,GAAAD,aAAAf,EAIA,OAHAjB,EAAAkB,OAAA,EACAlB,EAAAoB,OAAAY,OACAE,EAAAlC,GAEa,sBAAAiC,EAEb,YADAX,GArDApV,EAqDA+V,EArDAE,EAqDAH,EApDA,WACA9V,EAAAyQ,MAAAwF,EAAAhM,aAmDA6J,GAIAA,EAAAkB,OAAA,EACAlB,EAAAoB,OAAAY,EACAE,EAAAlC,GACK,MAAA3V,GACLwX,EAAA7B,EAAA3V,GA7DA,IAAA6B,EAAAiW,EAgEA,SAAAN,EAAA7B,EAAAgC,GACAhC,EAAAkB,OAAA,EACAlB,EAAAoB,OAAAY,EACAE,EAAAlC,GAEA,SAAAkC,EAAAlC,GACA,IAAAA,EAAAkB,QAAA,IAAAlB,EAAAqB,WAAAlb,QACA8a,EAAAO,aAAA,WACAxB,EAAAmB,UACAF,EAAAmB,sBAAApC,EAAAoB,UAIA,QAAAxf,EAAA,EAAA+X,EAAAqG,EAAAqB,WAAAlb,OAAiDvE,EAAA+X,EAAS/X,IAC1D+c,EAAAqB,IAAAqB,WAAAzf,IAEAoe,EAAAqB,WAAA,KAOA,SAAAC,EAAApV,EAAA8T,GACA,IAAAqC,GAAA,EACA,IACAnW,EAAA,SAAAtJ,GACAyf,IAEAA,GAAA,EACAN,EAAA/B,EAAApd,KACS,SAAA0f,GACTD,IAEAA,GAAA,EACAR,EAAA7B,EAAAsC,MAEK,MAAAC,GACL,GAAAF,EACA,OACAA,GAAA,EACAR,EAAA7B,EAAAuC,IAGAtB,EAAAhe,UAAA,eAAA0e,GACA,OAAAzX,KAAA+X,KAAA,KAAAN,IAEAV,EAAAhe,UAAAgf,KAAA,SAAAP,EAAAC,GACA,IAAAa,EAAA,IAAAtY,KAAAD,YAAAuS,GAEA,OADAmC,EAAAzU,KAAA,IA/BA,SAAAwX,EAAAC,EAAAG,GACA5X,KAAAwX,YAAA,mBAAAA,IAAA,KACAxX,KAAAyX,WAAA,mBAAAA,IAAA,KACAzX,KAAA4X,UA4BA,CAAAJ,EAAAC,EAAAa,IACAA,GAEAvB,EAAAhe,UAAA,iBAAAoI,GACA,IAAApB,EAAAC,KAAAD,YACA,OAAAC,KAAA+X,KAAA,SAAArf,GACA,OAAAqH,EAAA8X,QAAA1W,KAAA4W,KAAA,WACA,OAAArf,KAEK,SAAA0f,GACL,OAAArY,EAAA8X,QAAA1W,KAAA4W,KAAA,WACA,OAAAhY,EAAA4X,OAAAS,QAIArB,EAAAwB,IAAA,SAAArc,GACA,WAAA6a,EAAA,SAAAc,EAAAF,GACA,IAAAzb,QAAA,IAAAA,EAAAD,OACA,UAAAgI,UAAA,gCACA,IAAAuO,EAAAhW,MAAAzD,UAAA2c,MAAA7d,KAAAqE,GACA,OAAAsW,EAAAvW,OACA,OAAA4b,MACA,IAAAW,EAAAhG,EAAAvW,OACA,SAAAwc,EAAA/gB,EAAAghB,GACA,IACA,GAAAA,IAAA,qBAAAA,EAAA,YAAA9Y,EAAA8Y,KAAA,mBAAAA,GAAA,CACA,IAAAX,EAAAW,EAAAX,KACA,sBAAAA,EAIA,YAHAA,EAAAlgB,KAAA6gB,EAAA,SAAAA,GACAD,EAAA/gB,EAAAghB,IACyBf,GAIzBnF,EAAA9a,GAAAghB,EACA,KAAAF,GACAX,EAAArF,GAEa,MAAA6F,GACbV,EAAAU,IAGA,QAAA3gB,EAAA,EAAuBA,EAAA8a,EAAAvW,OAAiBvE,IACxC+gB,EAAA/gB,EAAA8a,EAAA9a,OAIAqf,EAAAc,QAAA,SAAAnf,GACA,OAAAA,GAAA,qBAAAA,EAAA,YAAAkH,EAAAlH,OAAAqH,cAAAgX,EACAre,EAEA,IAAAqe,EAAA,SAAAc,GACAA,EAAAnf,MAGAqe,EAAAY,OAAA,SAAAjf,GACA,WAAAqe,EAAA,SAAAc,EAAAF,GACAA,EAAAjf,MAGAqe,EAAA4B,KAAA,SAAAC,GACA,WAAA7B,EAAA,SAAAc,EAAAF,GACA,QAAAjgB,EAAA,EAAA+X,EAAAmJ,EAAA3c,OAA4CvE,EAAA+X,EAAS/X,IACrDkhB,EAAAlhB,GAAAqgB,KAAAF,EAAAF,MAIAZ,EAAAO,aAAA,mBAAAxD,GAAA,SAAA9R,GACA8R,EAAA9R,KACC,SAAAA,GACD8U,EAAA9U,EAAA,IAEA+U,EAAAmB,sBAAA,SAAAW,GACA,oBAAAtR,kBACAA,QAAAuR,KAAA,wCAAAD,IAGA1hB,EAAAD,QAAA6f,gECtMA3e,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9C,IAAAwK,EAAA,WACA,SAAAC,EAAAC,EAAAC,GACA,QAAA3L,EAAA,EAAuBA,EAAA2L,EAAApH,OAAkBvE,IAAA,CACzC,IAAA4L,EAAAD,EAAA3L,GACA4L,EAAA/K,WAAA+K,EAAA/K,aAAA,EACA+K,EAAAhL,cAAA,EACA,UAAAgL,IACAA,EAAAC,UAAA,GACAnL,OAAAC,eAAA+K,EAAAE,EAAA9H,IAAA8H,IAGA,gBAAAE,EAAAC,EAAAC,GAKA,OAJAD,GACAN,EAAAK,EAAAzK,UAAA0K,GACAC,GACAP,EAAAK,EAAAE,GACAF,GAhBA,GAoBAuV,EAAApb,EADAnG,EAAA,KAGAoM,EAAAjG,EADAnG,EAAA,IAGAmR,EAAAhL,EADAnG,EAAA,IAGAwhB,EAAArb,EADAnG,EAAA,KAGAyhB,EAAAtb,EADAnG,EAAA,KAGA0hB,EAAAvb,EADAnG,EAAA,KAGA2hB,EAAAxb,EADAnG,EAAA,KAGAiH,EAAAd,EADAnG,EAAA,KAGA4hB,EAAAzb,EADAnG,EAAA,IAGA6hB,EAAA1b,EADAnG,EAAA,IAGA8hB,EAAA3b,EADAnG,EAAA,IAGA+hB,EAAA5b,EADAnG,EAAA,IAEA,SAAAmG,EAAAe,GACA,OAAAA,KAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAO1C,IAAA8a,KACAC,EAAA,WACA,SAAAA,EAAArV,GAuBA,GA9BA,SAAAJ,EAAAR,GACA,KAAAQ,aAAAR,GACA,UAAAS,UAAA,qCAMAC,CAAAlE,KAAAyZ,GACAzZ,KAAAoE,SAAA,EAAA4U,EAAAlc,SAAAsH,GACApE,KAAAkG,UAAAlG,KAAAoE,QAAA8B,UACAlG,KAAAuI,QAAA,EACAvI,KAAA0Z,cAAAX,EAAAjc,QAAA+a,UACA7X,KAAAkL,KAAA,SACAlL,KAAAhE,YAAA4H,EAAA9G,QAAAd,YAAAgE,KAAAoE,QAAAnH,MAAAhB,QACA+D,KAAAkG,UAAAf,UAAAG,IAAA,WACAtF,KAAAoE,QAAAwM,UAAA5Q,KAAAoE,QAAAoG,OACAxK,KAAAkG,UAAAf,UAAAG,IAAA,mBAEAtF,KAAAoE,QAAAnH,MAAAhB,OAAA,GACA+D,KAAAkG,UAAAf,UAAAG,IAAA,oBAEA1B,EAAA9G,QAAA3D,UACA6G,KAAAkG,UAAAf,UAAAG,IAAA,kBAEAtF,KAAA2Z,MAAA3Z,KAAAkG,UAAA0T,aAAA,IACA5Z,KAAA2Z,OACA3Z,KAAAkG,UAAAf,UAAAG,IAAA,iBAEAtF,KAAAkG,UAAAlG,KAAAoE,QAAA8B,UACA,IAAAlG,KAAAoE,QAAAwM,UAAA,IAAA5Q,KAAAoE,QAAAwM,QAEA,IADA,IAAAiJ,EAAA7Z,KAAAkG,UAAArB,uBAAA,uBACAnN,EAAA,EAA2BA,EAAAmiB,EAAA5d,OAAmBvE,IAC9CsI,KAAAoE,QAAAnH,MAAAvF,KACAsI,KAAAoE,QAAAnH,MAAAvF,GAAAgI,IAAAma,EAAAniB,GAAAoN,WAIA9E,KAAAuE,SAAA,IAAA0U,EAAAnc,SACAoJ,UAAAlG,KAAAkG,UACA9B,QAAApE,KAAAoE,QACApI,YAAAgE,KAAAhE,cAEAgE,KAAAoE,QAAAoG,QACAxK,KAAAkG,UAAAf,UAAAG,IAAA,iBACAtF,KAAAuE,SAAA7J,KAAA0L,MAAA0T,MAAA9Z,KAAAuE,SAAA7J,KAAAkf,YAAA,SAEA5Z,KAAAoE,QAAAoM,OACAxQ,KAAAiL,QAAA,QACAjL,KAAAuE,SAAA4L,KAAA/J,MAAA2T,QAAA,SAEA/Z,KAAAuE,SAAA4L,KAAAyJ,YAAA,KACA5Z,KAAAuE,SAAA6L,KAAAjL,UAAAG,IAAA,uBAEAtF,KAAAoE,QAAAwM,UACA5Q,KAAAN,IAAA,IAAAjB,EAAA3B,SACAoJ,UAAAlG,KAAAuE,SAAA7E,IACAoM,MAAA,IAAA9L,KAAAoE,QAAAwM,QACA7M,OAAA/D,QAGAA,KAAAiF,OAAA,IAAAqU,EAAAxc,QACAkD,KAAA1E,QAAA,IAAA6d,EAAArc,QAAAkD,MACAA,KAAAgH,IAAA,IAAAkS,EAAApc,QAAAkD,KAAAuE,UACAvE,KAAAga,WAAA,IAAAZ,EAAAtc,QAAAkD,MACAA,KAAAia,MAAA,IAAAZ,EAAAvc,QAAAkD,MACAA,KAAAwE,KAAA,IAAA+U,EAAAzc,QAAAkD,MACAA,KAAAka,YACAla,KAAAqE,aACA,WAAArE,KAAAoE,QAAAkC,MACAtG,KAAAwE,KAAAO,OAAA/E,KAAAhE,YAAA,IAEAgE,KAAAwE,KAAAO,OAAA,GAEA/E,KAAAoE,QAAAsM,UACA1Q,KAAApB,OAEA4a,EAAApS,KAAApH,MAqZA,OAnZAkD,EAAAuW,IAEAje,IAAA,YACA9C,MAAA,WACA,IAAA4L,EAAAtE,KACAA,KAAA/C,MAAAxC,SAAA4a,cAAA,SACArV,KAAA/C,MAAA6T,QAAA9Q,KAAAoE,QAAA0M,QAMA,IALA,IAAAqJ,EAAA,SAAAziB,GACA4M,EAAArH,MAAA8F,iBAAAuB,EAAAW,OAAAiC,YAAAxP,GAAA,SAAAyI,GACAmE,EAAAW,OAAAC,QAAAZ,EAAAW,OAAAiC,YAAAxP,GAAAyI,MAGAzI,EAAA,EAA+BA,EAAAsI,KAAAiF,OAAAiC,YAAAjL,OAAoCvE,IACnEyiB,EAAAziB,GAEAsI,KAAAqK,OAAArK,KAAA1E,QAAA9C,IAAA,iBAIAgD,IAAA,aACA9C,MAAA,WACA,IAAAqP,EAAA/H,KACAA,KAAA+S,GAAA,kBACAhL,EAAAQ,QACAR,EAAAqS,iBAGApa,KAAA+S,GAAA,mBACAhL,EAAAQ,QACAR,EAAAsS,gBAGAra,KAAA+S,GAAA,wBACA,IAAAhL,EAAAkC,kBAAA,CACAlC,EAAAf,IAAAzL,IAAA,SAAAwM,EAAA9K,MAAAqL,YAAAP,EAAAhH,SAAA,SACAgH,EAAArI,KAAAqI,EAAArI,IAAAmH,SACA,IAAAyB,EAAA1E,EAAA9G,QAAAtD,aAAAuO,EAAA9K,MAAAqL,aACAP,EAAAxD,SAAAsF,MAAA/E,YAAAwD,IACAP,EAAAxD,SAAAsF,MAAA/E,UAAAwD,MAIAtI,KAAA+S,GAAA,4BACA,IAAAhL,EAAAhH,WACAgH,EAAAxD,SAAAuC,MAAAhC,UAAAlB,EAAA9G,QAAAtD,aAAAuO,EAAAhH,aAGAf,KAAA+S,GAAA,sBACA,IAAAxJ,EAAAxB,EAAA9K,MAAAqd,SAAAre,OAAA8L,EAAA9K,MAAAqd,SAAAzZ,IAAAkH,EAAA9K,MAAAqd,SAAAre,OAAA,GAAA8L,EAAAhH,SAAA,EACAgH,EAAAf,IAAAzL,IAAA,SAAAgO,EAAA,WAEA,IAAAgR,OAAA,EACAva,KAAA+S,GAAA,mBACAhL,EAAAvD,KAAAL,OAAAlI,OAAA,GACA8L,EAAA6E,OAAA,uEACA2N,EAAAtY,WAAA,WACA8F,EAAAwD,cACAxD,EAAAQ,QACAR,EAAAnJ,QAEyB,MACJ,IAAAmJ,EAAAvD,KAAAL,OAAAlI,QACrB8L,EAAA6E,OAAA,kCAGA5M,KAAAiF,OAAA8N,GAAA,wBACAwH,GAAA9I,aAAA8I,KAEAva,KAAA+S,GAAA,mBACA,SAAAhL,EAAA3D,QAAAyG,KACA,SAAA9C,EAAA3D,QAAAkC,MACAyB,EAAAvD,KAAAjH,MAAAwK,EAAAvD,KAAAL,OAAAlI,OAAA,GACA8L,EAAAvD,KAAAO,QAAAgD,EAAAvD,KAAAjH,MAAA,GAAAwK,EAAAvD,KAAAL,OAAAlI,QACA8L,EAAAnJ,SAEAmJ,EAAAvD,KAAAO,QAAAgD,EAAAvD,KAAAjH,MAAA,GAAAwK,EAAAvD,KAAAL,OAAAlI,QACA8L,EAAAlJ,SAEyB,WAAAkJ,EAAA3D,QAAAkC,QACzByB,EAAA/L,YAAAsL,QAAAS,EAAAvD,KAAAjH,OAAAwK,EAAA/L,YAAAC,OAAA,GACA8L,EAAAvD,KAAAO,OAAAgD,EAAAyS,aACAzS,EAAAnJ,SAEAmJ,EAAAvD,KAAAO,OAAAgD,EAAAyS,aACAzS,EAAAlJ,UAGqB,QAAAkJ,EAAA3D,QAAAyG,MACrB9C,EAAAvD,KAAAO,OAAAgD,EAAAvD,KAAAjH,OACAwK,EAAAnJ,QACqB,QAAAmJ,EAAA3D,QAAAyG,OACrB9C,EAAAwD,cACAxD,EAAAnJ,aAMApD,IAAA,WACA9C,MAAA,SAAAuE,GACA+C,KAAAya,MACAza,KAAAya,IAAAC,UACA1a,KAAAya,IAAA,MAEA,IAAA1U,EAAA9I,EAAA8I,KACA/F,KAAAoE,QAAAuW,iBAAA3a,KAAAoE,QAAAuW,gBAAA5U,GACA,sBAAA3N,OAAAW,UAAA2M,SAAA7N,KAAAmI,KAAAoE,QAAAuW,gBAAA5U,IACA/F,KAAAoE,QAAAuW,gBAAA5U,GAAA/F,KAAA/C,QAAA+C,MAEAuH,QAAAC,MAAA,uBAAAzB,IAGAA,GAAA,SAAAA,IAEAA,EADA,gBAAA4H,KAAA1Q,EAAA2d,KACA,MAEA,UAGA,QAAA7U,EACA8U,IAAAC,eACA9a,KAAAya,IAAA,IAAAI,IACA7a,KAAAya,IAAAM,WAAA9d,EAAA2d,KACA5a,KAAAya,IAAAO,YAAAhb,KAAA/C,QACyB+C,KAAA/C,MAAAge,YAAA,0BAAAjb,KAAA/C,MAAAge,YAAA,iCACzBjb,KAAA/C,MAAA8J,IAAA9J,EAAA2d,IAEA5a,KAAA4M,OAAA,gCAEqB,WAAA7G,IACrB/F,KAAA/C,MAAA8J,IAAA9J,EAAA2d,MAGA5a,KAAAgK,KAAA,GACAhK,KAAAuI,QACAvI,KAAA/C,MAAA2B,UAKApD,IAAA,QACA9C,MAAA,WACA,IAAAwiB,EAAAjP,UAAAhQ,OAAA,QAAAmE,IAAA6L,UAAA,GAAAA,UAAA,GAAAjM,KAAAwE,KAAAL,OAAAnE,KAAAwE,KAAAjH,OAAAD,OAAA0C,KAAAoE,QAAA9G,MACAC,EAAA0O,UAAAhQ,OAAA,QAAAmE,IAAA6L,UAAA,GAAAA,UAAA,GAAAjM,KAAAwE,KAAAjH,SACA0O,UAAAhQ,OAAA,QAAAmE,IAAA6L,UAAA,KAAAA,UAAA,KAEAjM,KAAAwE,KAAAL,OAAA5G,KAAAyC,KAAAwE,KAAAL,OAAA5G,GAAAD,MAAA4d,GAEAlb,KAAAuE,SAAA4B,SAAA5I,KAAAyC,KAAAuE,SAAA4B,SAAA5I,GAAA6I,MAAAC,gBAAA6U,GACA3d,IAAAyC,KAAAwE,KAAAjH,QACAyC,KAAAuE,SAAAuB,IAAAM,MAAAC,gBAAA6U,EACAlb,KAAAuE,SAAAgK,OAAAnI,MAAA+U,WAAAD,EACAlb,KAAAuE,SAAA+L,MAAAlK,MAAA+U,WAAAD,EACAlb,KAAAuE,SAAA8F,OAAAjE,MAAA+U,WAAAD,MAKA1f,IAAA,OACA9C,MAAA,SAAA0X,GACAA,EAAAzW,KAAAiQ,IAAAwG,EAAA,GACAA,EAAAzW,KAAAE,IAAAuW,EAAApQ,KAAAe,UACAf,KAAA/C,MAAAqL,YAAA8H,EACApQ,KAAAgH,IAAAzL,IAAA,SAAA6U,EAAApQ,KAAAe,SAAA,SACAf,KAAAuE,SAAAsF,MAAA/E,UAAAlB,EAAA9G,QAAAtD,aAAA4W,MAIA5U,IAAA,eACA9C,MAAA,WACA,IAAA+P,EAAAzI,KAYA,GAXAA,KAAAuI,SACAvI,KAAAuI,QAAA,EACAvI,KAAAuE,SAAA8L,OAAAlL,UAAAC,OAAA,gBACApF,KAAAuE,SAAA8L,OAAAlL,UAAAG,IAAA,iBACAtF,KAAAuE,SAAA8L,OAAAvL,UAAA,GACA7C,WAAA,WACAwG,EAAAlE,SAAA8L,OAAAvL,UAAA6D,EAAA7L,QAAA+B,OACqB,KACrBmB,KAAAuE,SAAAiH,eAAA1G,UAAA6D,EAAA7L,QAAA+B,OAEAmB,KAAAia,MAAAmB,OAAA,WACApb,KAAAoE,QAAAuM,MACA,QAAAjZ,EAAA,EAAmCA,EAAA8hB,EAAAvd,OAAsBvE,IACzDsI,OAAAwZ,EAAA9hB,IACA8hB,EAAA9hB,GAAAmH,WAOArD,IAAA,OACA9C,MAAA,WACA,IAAAiS,EAAA3K,KACAA,KAAAoa,eACA,IAAAiB,EAAArb,KAAA/C,MAAA2B,OACAyc,GACAA,EAAAC,MAAA,SAAAnb,GACAoH,QAAAuR,KAAA3Y,GACA,oBAAAA,EAAAlI,MACA0S,EAAA0P,mBAOA7e,IAAA,cACA9C,MAAA,WACA,IAAAkS,EAAA5K,KACAA,KAAAuI,SACAvI,KAAAuI,QAAA,EACAvI,KAAAuE,SAAA8L,OAAAlL,UAAAC,OAAA,iBACApF,KAAAuE,SAAA8L,OAAAlL,UAAAG,IAAA,gBACAtF,KAAAuE,SAAA8L,OAAAvL,UAAA,GACA7C,WAAA,WACA2I,EAAArG,SAAA8L,OAAAvL,UAAA6D,EAAA7L,QAAA8B,MACqB,KACrBoB,KAAAuE,SAAAiH,eAAA1G,UAAA6D,EAAA7L,QAAA8B,MAEAoB,KAAAkG,UAAAf,UAAAC,OAAA,mBACApF,KAAAia,MAAAsB,QAAA,cAIA/f,IAAA,QACA9C,MAAA,WACAsH,KAAAqa,cACAra,KAAA/C,MAAA4B,WAIArD,IAAA,mBACA9C,MAAA,WACAsH,KAAAqK,UAAA,IACArK,KAAAuE,SAAA2F,aAAApF,UAAA6D,EAAA7L,QAAAgC,SACiBkB,KAAAqK,SAAA,EACjBrK,KAAAuE,SAAA2F,aAAApF,UAAA6D,EAAA7L,QAAAiC,WAEAiB,KAAAuE,SAAA2F,aAAApF,UAAA6D,EAAA7L,QAAAkC,aAKAxD,IAAA,SACA9C,MAAA,SAAA6Q,EAAAiS,GAeA,OAdAjS,EAAAmF,WAAAnF,GACAkS,MAAAlS,KACAA,EAAA5P,KAAAiQ,IAAAL,EAAA,GACAA,EAAA5P,KAAAE,IAAA0P,EAAA,GACAvJ,KAAAgH,IAAAzL,IAAA,SAAAgO,EAAA,UACAiS,GACAxb,KAAA1E,QAAAC,IAAA,SAAAgO,GAEAvJ,KAAA/C,MAAAoN,OAAAd,EACAvJ,KAAA/C,MAAAkN,QACAnK,KAAA/C,MAAAkN,OAAA,GAEAnK,KAAAoK,oBAEApK,KAAA/C,MAAAkN,MAAA,EAAAnK,KAAA/C,MAAAoN,UAIA7O,IAAA,KACA9C,MAAA,SAAAT,EAAAkJ,GACAnB,KAAAiF,OAAA8N,GAAA9a,EAAAkJ,MAIA3F,IAAA,SACA9C,MAAA,WACAsH,KAAAuE,SAAA8L,OAAAlL,UAAAI,SAAA,gBACAvF,KAAApB,OACiBoB,KAAAuE,SAAA8L,OAAAlL,UAAAI,SAAA,kBACjBvF,KAAAnB,WAKArD,IAAA,cACA9C,MAAA,SAAA6E,GACAyC,KAAAwE,KAAAO,OAAAxH,MAIA/B,IAAA,WACA9C,MAAA,SAAAyL,GACAnE,KAAAwE,KAAAc,IAAAnB,MAIA3I,IAAA,cACA9C,MAAA,SAAA6E,GACAyC,KAAAwE,KAAAY,OAAA7H,MAIA/B,IAAA,UACA9C,MAAA,WACA8gB,EAAAjT,OAAAiT,EAAAlS,QAAAtH,MAAA,GACAA,KAAAnB,QACAmB,KAAAkG,UAAApB,UAAA,GACA9E,KAAA/C,MAAA8J,IAAA,GACA/G,KAAAia,MAAAS,UACA1a,KAAAiF,OAAAC,QAAA,cAIA1J,IAAA,UACA9C,MAAA,WACA,IAAAwS,EAAAe,UAAAhQ,OAAA,QAAAmE,IAAA6L,UAAA,GAAAA,UAAA,YACAjM,KAAAkL,OACA,SAAAA,EACAlL,KAAAkG,UAAAf,UAAAG,IAAA,kBACiB,WAAA4F,GACjBlL,KAAAkG,UAAAf,UAAAC,OAAA,qBAKA5J,IAAA,SACA9C,MAAA,SAAAgjB,GACA,IAAA5Q,EAAA9K,KACAoQ,EAAAnE,UAAAhQ,OAAA,QAAAmE,IAAA6L,UAAA,GAAAA,UAAA,OACA0P,EAAA1P,UAAAhQ,OAAA,QAAAmE,IAAA6L,UAAA,GAAAA,UAAA,MACAjM,KAAAuE,SAAAqI,OAAA9H,UAAA4W,EACA1b,KAAAuE,SAAAqI,OAAAxG,MAAAuV,UACA3b,KAAA4b,YACAnK,aAAAzR,KAAA4b,YAEA5b,KAAAiF,OAAAC,QAAA,cAAmDwW,SACnDtL,IACApQ,KAAA4b,WAAA3Z,WAAA,WACA6I,EAAAvG,SAAAqI,OAAAxG,MAAAuV,QAAA,EACA7Q,EAAA7F,OAAAC,QAAA,eACqBkL,OAKrB5U,IAAA,YACA9C,MAAA,WACA,KAAAsH,KAAAwE,KAAAL,OAAAlI,OAAA,GAYA,SAXA,YAAA+D,KAAAoE,QAAAkC,MACA,OAAAtG,KAAAwE,KAAAjH,MAAA,IAAAyC,KAAAwE,KAAAL,OAAAlI,OAAA,EAAA+D,KAAAwE,KAAAjH,MAAA,EACqB,cAAAyC,KAAAoE,QAAAkC,MAAA,CACrB,IAAA/I,EAAAyC,KAAAhE,YAAAsL,QAAAtH,KAAAwE,KAAAjH,OACA,WAAAA,EACAyC,KAAAhE,YAAAgE,KAAAhE,YAAAC,OAAA,GAEA+D,KAAAhE,YAAAuB,EAAA,OASA/B,IAAA,YACA9C,MAAA,WACA,KAAAsH,KAAAwE,KAAAL,OAAAlI,OAAA,GAYA,SAXA,YAAA+D,KAAAoE,QAAAkC,MACA,OAAAtG,KAAAwE,KAAAjH,MAAA,GAAAyC,KAAAwE,KAAAL,OAAAlI,OACqB,cAAA+D,KAAAoE,QAAAkC,MAAA,CACrB,IAAA/I,EAAAyC,KAAAhE,YAAAsL,QAAAtH,KAAAwE,KAAAjH,OACA,OAAAA,IAAAyC,KAAAhE,YAAAC,OAAA,EACA+D,KAAAhE,YAAA,GAEAgE,KAAAhE,YAAAuB,EAAA,OASA/B,IAAA,WACA9C,MAAA,WACAsH,KAAAwE,KAAAO,OAAA/E,KAAA6b,gBAIArgB,IAAA,cACA9C,MAAA,WACAsH,KAAAwE,KAAAO,OAAA/E,KAAAwa,gBAIAhf,IAAA,WACAhD,IAAA,WACA,OAAAijB,MAAAzb,KAAA/C,MAAA8D,UAAA,EAAAf,KAAA/C,MAAA8D,cAIAvF,IAAA,UACAhD,IAAA,WACA,mBAGAihB,EA5dA,GA8dAviB,EAAA4F,QAAA2c,mDCnhBArhB,OAAAC,eAAAnB,EAAA,cAA8CwB,OAAA,IAC9ClB,EAAA,IACA,IAEAkH,EAFAod,EAAAtkB,EAAA,IACAwY,GACAtR,EADAod,IAEApd,EAAA9F,WAAA8F,GAA0C5B,QAAA4B,GAE1C6I,QAAAwU,IAAA,kHAAiK,uCACjK7kB,EAAA4F,QAAAkT,EAAAlT","file":"APlayer.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"APlayer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"APlayer\"] = factory();\n\telse\n\t\troot[\"APlayer\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 41);\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n } else {\n return Array.from(arr);\n }\n}\nvar isMobile = /mobile/i.test(window.navigator.userAgent);\nvar utils = {\n secondToTime: function secondToTime(second) {\n var add0 = function add0(num) {\n return num < 10 ? '0' + num : '' + num;\n };\n var hour = Math.floor(second / 3600);\n var min = Math.floor((second - hour * 3600) / 60);\n var sec = Math.floor(second - hour * 3600 - min * 60);\n return (hour > 0 ? [\n hour,\n min,\n sec\n ] : [\n min,\n sec\n ]).map(add0).join(':');\n },\n getElementViewLeft: function getElementViewLeft(element) {\n var actualLeft = element.offsetLeft;\n var current = element.offsetParent;\n var elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n } else {\n while (current !== null && current !== element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n return actualLeft - elementScrollLeft;\n },\n getElementViewTop: function getElementViewTop(element, noScrollTop) {\n var actualTop = element.offsetTop;\n var current = element.offsetParent;\n var elementScrollTop = 0;\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return noScrollTop ? actualTop : actualTop - elementScrollTop;\n },\n isMobile: isMobile,\n storage: {\n set: function set(key, value) {\n localStorage.setItem(key, value);\n },\n get: function get(key) {\n return localStorage.getItem(key);\n }\n },\n nameMap: {\n dragStart: isMobile ? 'touchstart' : 'mousedown',\n dragMove: isMobile ? 'touchmove' : 'mousemove',\n dragEnd: isMobile ? 'touchend' : 'mouseup'\n },\n randomOrder: function randomOrder(length) {\n function shuffle(arr) {\n for (var i = arr.length - 1; i >= 0; i--) {\n var randomIndex = Math.floor(Math.random() * (i + 1));\n var itemAtIndex = arr[randomIndex];\n arr[randomIndex] = arr[i];\n arr[i] = itemAtIndex;\n }\n return arr;\n }\n return shuffle([].concat(_toConsumableArray(Array(length))).map(function (item, i) {\n return i;\n }));\n }\n};\nexports.default = utils;","{{each audio}}\n
  • \n \n {{ $index + index }}\n {{ $value.name }}\n {{ $value.artist }}\n
  • \n{{/each}}","'use strict';\nmodule.exports = require('./compile/runtime');","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _play = require('../assets/play.svg');\nvar _play2 = _interopRequireDefault(_play);\nvar _pause = require('../assets/pause.svg');\nvar _pause2 = _interopRequireDefault(_pause);\nvar _volumeUp = require('../assets/volume-up.svg');\nvar _volumeUp2 = _interopRequireDefault(_volumeUp);\nvar _volumeDown = require('../assets/volume-down.svg');\nvar _volumeDown2 = _interopRequireDefault(_volumeDown);\nvar _volumeOff = require('../assets/volume-off.svg');\nvar _volumeOff2 = _interopRequireDefault(_volumeOff);\nvar _orderRandom = require('../assets/order-random.svg');\nvar _orderRandom2 = _interopRequireDefault(_orderRandom);\nvar _orderList = require('../assets/order-list.svg');\nvar _orderList2 = _interopRequireDefault(_orderList);\nvar _menu = require('../assets/menu.svg');\nvar _menu2 = _interopRequireDefault(_menu);\nvar _loopAll = require('../assets/loop-all.svg');\nvar _loopAll2 = _interopRequireDefault(_loopAll);\nvar _loopOne = require('../assets/loop-one.svg');\nvar _loopOne2 = _interopRequireDefault(_loopOne);\nvar _loopNone = require('../assets/loop-none.svg');\nvar _loopNone2 = _interopRequireDefault(_loopNone);\nvar _loading = require('../assets/loading.svg');\nvar _loading2 = _interopRequireDefault(_loading);\nvar _right = require('../assets/right.svg');\nvar _right2 = _interopRequireDefault(_right);\nvar _skip = require('../assets/skip.svg');\nvar _skip2 = _interopRequireDefault(_skip);\nvar _lrc = require('../assets/lrc.svg');\nvar _lrc2 = _interopRequireDefault(_lrc);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nvar Icons = {\n play: _play2.default,\n pause: _pause2.default,\n volumeUp: _volumeUp2.default,\n volumeDown: _volumeDown2.default,\n volumeOff: _volumeOff2.default,\n orderRandom: _orderRandom2.default,\n orderList: _orderList2.default,\n menu: _menu2.default,\n loopAll: _loopAll2.default,\n loopOne: _loopOne2.default,\n loopNone: _loopNone2.default,\n loading: _loading2.default,\n right: _right2.default,\n skip: _skip2.default,\n lrc: _lrc2.default\n};\nexports.default = Icons;","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar g;\ng = function () {\n return this;\n}();\ntry {\n g = g || Function('return this')() || (1, eval)('this');\n} catch (e) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object')\n g = window;\n}\nmodule.exports = g;","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\n(function (root, smoothScroll) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(smoothScroll);\n } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && (typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') {\n module.exports = smoothScroll();\n } else {\n root.smoothScroll = smoothScroll();\n }\n}(undefined, function () {\n 'use strict';\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object')\n return;\n if (document.querySelectorAll === void 0 || window.pageYOffset === void 0 || history.pushState === void 0) {\n return;\n }\n var getTop = function getTop(element, start) {\n if (element.nodeName === 'HTML')\n return -start;\n return element.getBoundingClientRect().top + start;\n };\n var easeInOutCubic = function easeInOutCubic(t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n };\n var position = function position(start, end, elapsed, duration) {\n if (elapsed > duration)\n return end;\n return start + (end - start) * easeInOutCubic(elapsed / duration);\n };\n var smoothScroll = function smoothScroll(el, duration, callback, context) {\n duration = duration || 500;\n context = context || window;\n var start = context.scrollTop || window.pageYOffset;\n if (typeof el === 'number') {\n var end = parseInt(el);\n } else {\n var end = getTop(el, start);\n }\n var clock = Date.now();\n var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) {\n window.setTimeout(fn, 15);\n };\n var step = function step() {\n var elapsed = Date.now() - clock;\n if (context !== window) {\n context.scrollTop = position(start, end, elapsed, duration);\n } else {\n window.scroll(0, position(start, end, elapsed, duration));\n }\n if (elapsed > duration) {\n if (typeof callback === 'function') {\n callback(el);\n }\n } else {\n requestAnimationFrame(step);\n }\n };\n step();\n };\n var linkHandler = function linkHandler(ev) {\n if (!ev.defaultPrevented) {\n ev.preventDefault();\n if (location.hash !== this.hash)\n window.history.pushState(null, null, this.hash);\n var node = document.getElementById(this.hash.substring(1));\n if (!node)\n return;\n smoothScroll(node, 500, function (el) {\n location.replace('#' + el.id);\n });\n }\n };\n document.addEventListener('DOMContentLoaded', function () {\n var internal = document.querySelectorAll('a[href^=\"#\"]:not([href=\"#\"])'), a;\n for (var i = internal.length; a = internal[--i];) {\n a.addEventListener('click', linkHandler, false);\n }\n });\n return smoothScroll;\n}));","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _listItem = require('../template/list-item.art');\nvar _listItem2 = _interopRequireDefault(_listItem);\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _smoothscroll = require('smoothscroll');\nvar _smoothscroll2 = _interopRequireDefault(_smoothscroll);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar List = function () {\n function List(player) {\n _classCallCheck(this, List);\n this.player = player;\n this.index = 0;\n this.audios = this.player.options.audio;\n this.bindEvents();\n }\n _createClass(List, [\n {\n key: 'bindEvents',\n value: function bindEvents() {\n var _this = this;\n this.player.template.list.addEventListener('click', function (e) {\n var target = void 0;\n if (e.target.tagName.toUpperCase() === 'LI') {\n target = e.target;\n } else {\n target = e.target.parentElement;\n }\n var audioIndex = parseInt(target.getElementsByClassName('aplayer-list-index')[0].innerHTML) - 1;\n if (audioIndex !== _this.index) {\n _this.switch(audioIndex);\n _this.player.play();\n } else {\n _this.player.toggle();\n }\n });\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.events.trigger('listshow');\n this.player.template.list.classList.remove('aplayer-list-hide');\n this.player.template.listOl.scrollTop = this.index * 33;\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.events.trigger('listhide');\n this.player.template.list.classList.add('aplayer-list-hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (!this.player.template.list.classList.contains('aplayer-list-hide')) {\n this.hide();\n } else {\n this.show();\n }\n }\n },\n {\n key: 'add',\n value: function add(audios) {\n this.player.events.trigger('listadd', { audios: audios });\n if (Object.prototype.toString.call(audios) !== '[object Array]') {\n audios = [audios];\n }\n audios.map(function (item) {\n item.name = item.name || item.title || 'Audio name';\n item.artist = item.artist || item.author || 'Audio artist';\n item.cover = item.cover || item.pic;\n item.type = item.type || 'normal';\n return item;\n });\n var wasSingle = !(this.audios.length > 1);\n var wasEmpty = this.audios.length === 0;\n this.player.template.listOl.innerHTML += (0, _listItem2.default)({\n theme: this.player.options.theme,\n audio: audios,\n index: this.audios.length + 1\n });\n this.audios = this.audios.concat(audios);\n if (wasSingle && this.audios.length > 1) {\n this.player.container.classList.add('aplayer-withlist');\n }\n this.player.randomOrder = _utils2.default.randomOrder(this.audios.length);\n this.player.template.listCurs = this.player.container.querySelectorAll('.aplayer-list-cur');\n this.player.template.listCurs[this.audios.length - 1].style.backgroundColor = audios.theme || this.player.options.theme;\n if (wasEmpty) {\n if (this.player.options.order === 'random') {\n this.switch(this.player.randomOrder[0]);\n } else {\n this.switch(0);\n }\n }\n }\n },\n {\n key: 'remove',\n value: function remove(index) {\n this.player.events.trigger('listremove', { index: index });\n if (this.audios[index]) {\n if (this.audios.length > 1) {\n var list = this.player.container.querySelectorAll('.aplayer-list li');\n list[index].remove();\n this.audios.splice(index, 1);\n this.player.lrc && this.player.lrc.remove(index);\n if (index === this.index) {\n if (this.audios[index]) {\n this.switch(index);\n } else {\n this.switch(index - 1);\n }\n }\n if (this.index > index) {\n this.index--;\n }\n for (var i = index; i < list.length; i++) {\n list[i].getElementsByClassName('aplayer-list-index')[0].textContent = i;\n }\n if (this.audios.length === 1) {\n this.player.container.classList.remove('aplayer-withlist');\n }\n this.player.template.listCurs = this.player.container.querySelectorAll('.aplayer-list-cur');\n } else {\n this.clear();\n }\n }\n }\n },\n {\n key: 'switch',\n value: function _switch(index) {\n this.player.events.trigger('listswitch', { index: index });\n if (typeof index !== 'undefined' && this.audios[index]) {\n this.index = index;\n var audio = this.audios[this.index];\n this.player.template.pic.style.backgroundImage = audio.cover ? 'url(\\'' + audio.cover + '\\')' : '';\n this.player.theme(this.audios[this.index].theme || this.player.options.theme, this.index, false);\n this.player.template.title.innerHTML = audio.name;\n this.player.template.author.innerHTML = audio.artist ? ' - ' + audio.artist : '';\n var light = this.player.container.getElementsByClassName('aplayer-list-light')[0];\n if (light) {\n light.classList.remove('aplayer-list-light');\n }\n this.player.container.querySelectorAll('.aplayer-list li')[this.index].classList.add('aplayer-list-light');\n (0, _smoothscroll2.default)(this.index * 33, 500, null, this.player.template.listOl);\n this.player.setAudio(audio);\n this.player.lrc && this.player.lrc.switch(this.index);\n this.player.lrc && this.player.lrc.update(0);\n if (this.player.duration !== 1) {\n this.player.template.dtime.innerHTML = _utils2.default.secondToTime(this.player.duration);\n }\n }\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.player.events.trigger('listclear');\n this.index = 0;\n this.player.container.classList.remove('aplayer-withlist');\n this.player.pause();\n this.audios = [];\n this.player.lrc && this.player.lrc.clear();\n this.player.audio.src = '';\n this.player.template.listOl.innerHTML = '';\n this.player.template.pic.style.backgroundImage = '';\n this.player.theme(this.player.options.theme, this.index, false);\n this.player.template.title.innerHTML = 'No audio';\n this.player.template.author.innerHTML = '';\n this.player.bar.set('loaded', 0, 'width');\n this.player.template.dtime.innerHTML = _utils2.default.secondToTime(0);\n }\n }\n ]);\n return List;\n}();\nexports.default = List;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Events = function () {\n function Events() {\n _classCallCheck(this, Events);\n this.events = {};\n this.audioEvents = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'mozaudioavailable',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ];\n this.playerEvents = [\n 'destroy',\n 'listshow',\n 'listhide',\n 'listadd',\n 'listremove',\n 'listswitch',\n 'listclear',\n 'noticeshow',\n 'noticehide',\n 'lrcshow',\n 'lrchide'\n ];\n }\n _createClass(Events, [\n {\n key: 'on',\n value: function on(name, callback) {\n if (this.type(name) && typeof callback === 'function') {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(callback);\n }\n }\n },\n {\n key: 'trigger',\n value: function trigger(name, data) {\n if (this.events[name] && this.events[name].length) {\n for (var i = 0; i < this.events[name].length; i++) {\n this.events[name][i](data);\n }\n }\n }\n },\n {\n key: 'type',\n value: function type(name) {\n if (this.playerEvents.indexOf(name) !== -1) {\n return 'player';\n } else if (this.audioEvents.indexOf(name) !== -1) {\n return 'audio';\n }\n console.error('Unknown event name: ' + name);\n return null;\n }\n }\n ]);\n return Events;\n}();\nexports.default = Events;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Timer = function () {\n function Timer(player) {\n _classCallCheck(this, Timer);\n this.player = player;\n window.requestAnimationFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }();\n this.types = ['loading'];\n this.init();\n }\n _createClass(Timer, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.types.forEach(function (item) {\n _this['init' + item + 'Checker']();\n });\n }\n },\n {\n key: 'initloadingChecker',\n value: function initloadingChecker() {\n var _this2 = this;\n var lastPlayPos = 0;\n var currentPlayPos = 0;\n var bufferingDetected = false;\n this.loadingChecker = setInterval(function () {\n if (_this2.enableloadingChecker) {\n currentPlayPos = _this2.player.audio.currentTime;\n if (!bufferingDetected && currentPlayPos === lastPlayPos && !_this2.player.audio.paused) {\n _this2.player.container.classList.add('aplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected && currentPlayPos > lastPlayPos && !_this2.player.audio.paused) {\n _this2.player.container.classList.remove('aplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n }\n }, 100);\n }\n },\n {\n key: 'enable',\n value: function enable(type) {\n this['enable' + type + 'Checker'] = true;\n if (type === 'fps') {\n this.initfpsChecker();\n }\n }\n },\n {\n key: 'disable',\n value: function disable(type) {\n this['enable' + type + 'Checker'] = false;\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n var _this3 = this;\n this.types.forEach(function (item) {\n _this3['enable' + item + 'Checker'] = false;\n _this3[item + 'Checker'] && clearInterval(_this3[item + 'Checker']);\n });\n }\n }\n ]);\n return Timer;\n}();\nexports.default = Timer;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Controller = function () {\n function Controller(player) {\n _classCallCheck(this, Controller);\n this.player = player;\n this.initPlayButton();\n this.initPlayBar();\n this.initOrderButton();\n this.initLoopButton();\n this.initMenuButton();\n if (!_utils2.default.isMobile) {\n this.initVolumeButton();\n }\n this.initMiniSwitcher();\n this.initSkipButton();\n this.initLrcButton();\n }\n _createClass(Controller, [\n {\n key: 'initPlayButton',\n value: function initPlayButton() {\n var _this = this;\n this.player.template.pic.addEventListener('click', function () {\n _this.player.toggle();\n });\n }\n },\n {\n key: 'initPlayBar',\n value: function initPlayBar() {\n var _this2 = this;\n var thumbMove = function thumbMove(e) {\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this2.player.template.barWrap)) / _this2.player.template.barWrap.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this2.player.bar.set('played', percentage, 'width');\n _this2.player.lrc && _this2.player.lrc.update(percentage * _this2.player.duration);\n _this2.player.template.ptime.innerHTML = _utils2.default.secondToTime(percentage * _this2.player.duration);\n };\n var thumbUp = function thumbUp(e) {\n document.removeEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n document.removeEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this2.player.template.barWrap)) / _this2.player.template.barWrap.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this2.player.bar.set('played', percentage, 'width');\n _this2.player.seek(_this2.player.bar.get('played', 'width') * _this2.player.duration);\n _this2.player.disableTimeupdate = false;\n };\n this.player.template.barWrap.addEventListener(_utils2.default.nameMap.dragStart, function () {\n _this2.player.disableTimeupdate = true;\n document.addEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n document.addEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n });\n }\n },\n {\n key: 'initVolumeButton',\n value: function initVolumeButton() {\n var _this3 = this;\n this.player.template.volumeButton.addEventListener('click', function () {\n if (_this3.player.audio.muted) {\n _this3.player.audio.muted = false;\n _this3.player.switchVolumeIcon();\n _this3.player.bar.set('volume', _this3.player.volume(), 'height');\n } else {\n _this3.player.audio.muted = true;\n _this3.player.switchVolumeIcon();\n _this3.player.bar.set('volume', 0, 'height');\n }\n });\n var thumbMove = function thumbMove(e) {\n var percentage = 1 - ((e.clientY || e.changedTouches[0].clientY) - _utils2.default.getElementViewTop(_this3.player.template.volumeBar, _this3.player.options.fixed)) / _this3.player.template.volumeBar.clientHeight;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this3.player.volume(percentage);\n };\n var thumbUp = function thumbUp(e) {\n _this3.player.template.volumeBarWrap.classList.remove('aplayer-volume-bar-wrap-active');\n document.removeEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n document.removeEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n var percentage = 1 - ((e.clientY || e.changedTouches[0].clientY) - _utils2.default.getElementViewTop(_this3.player.template.volumeBar, _this3.player.options.fixed)) / _this3.player.template.volumeBar.clientHeight;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this3.player.volume(percentage);\n };\n this.player.template.volumeBarWrap.addEventListener(_utils2.default.nameMap.dragStart, function () {\n _this3.player.template.volumeBarWrap.classList.add('aplayer-volume-bar-wrap-active');\n document.addEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n document.addEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n });\n }\n },\n {\n key: 'initOrderButton',\n value: function initOrderButton() {\n var _this4 = this;\n this.player.template.order.addEventListener('click', function () {\n if (_this4.player.options.order === 'list') {\n _this4.player.options.order = 'random';\n _this4.player.template.order.innerHTML = _icons2.default.orderRandom;\n } else if (_this4.player.options.order === 'random') {\n _this4.player.options.order = 'list';\n _this4.player.template.order.innerHTML = _icons2.default.orderList;\n }\n });\n }\n },\n {\n key: 'initLoopButton',\n value: function initLoopButton() {\n var _this5 = this;\n this.player.template.loop.addEventListener('click', function () {\n if (_this5.player.list.audios.length > 1) {\n if (_this5.player.options.loop === 'one') {\n _this5.player.options.loop = 'none';\n _this5.player.template.loop.innerHTML = _icons2.default.loopNone;\n } else if (_this5.player.options.loop === 'none') {\n _this5.player.options.loop = 'all';\n _this5.player.template.loop.innerHTML = _icons2.default.loopAll;\n } else if (_this5.player.options.loop === 'all') {\n _this5.player.options.loop = 'one';\n _this5.player.template.loop.innerHTML = _icons2.default.loopOne;\n }\n } else {\n if (_this5.player.options.loop === 'one' || _this5.player.options.loop === 'all') {\n _this5.player.options.loop = 'none';\n _this5.player.template.loop.innerHTML = _icons2.default.loopNone;\n } else if (_this5.player.options.loop === 'none') {\n _this5.player.options.loop = 'all';\n _this5.player.template.loop.innerHTML = _icons2.default.loopAll;\n }\n }\n });\n }\n },\n {\n key: 'initMenuButton',\n value: function initMenuButton() {\n var _this6 = this;\n this.player.template.menu.addEventListener('click', function () {\n _this6.player.list.toggle();\n });\n }\n },\n {\n key: 'initMiniSwitcher',\n value: function initMiniSwitcher() {\n var _this7 = this;\n this.player.template.miniSwitcher.addEventListener('click', function () {\n _this7.player.setMode(_this7.player.mode === 'mini' ? 'normal' : 'mini');\n });\n }\n },\n {\n key: 'initSkipButton',\n value: function initSkipButton() {\n var _this8 = this;\n this.player.template.skipBackButton.addEventListener('click', function () {\n _this8.player.skipBack();\n });\n this.player.template.skipForwardButton.addEventListener('click', function () {\n _this8.player.skipForward();\n });\n this.player.template.skipPlayButton.addEventListener('click', function () {\n _this8.player.toggle();\n });\n }\n },\n {\n key: 'initLrcButton',\n value: function initLrcButton() {\n var _this9 = this;\n this.player.template.lrcButton.addEventListener('click', function () {\n if (_this9.player.template.lrcButton.classList.contains('aplayer-icon-lrc-inactivity')) {\n _this9.player.template.lrcButton.classList.remove('aplayer-icon-lrc-inactivity');\n _this9.player.lrc && _this9.player.lrc.show();\n } else {\n _this9.player.template.lrcButton.classList.add('aplayer-icon-lrc-inactivity');\n _this9.player.lrc && _this9.player.lrc.hide();\n }\n });\n }\n }\n ]);\n return Controller;\n}();\nexports.default = Controller;","{{each lyrics}}\n {{$value[1]}}

    \n{{/each}}","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _lrc = require('../template/lrc.art');\nvar _lrc2 = _interopRequireDefault(_lrc);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Lrc = function () {\n function Lrc(options) {\n _classCallCheck(this, Lrc);\n this.container = options.container;\n this.async = options.async;\n this.player = options.player;\n this.parsed = [];\n this.index = 0;\n this.current = [];\n }\n _createClass(Lrc, [\n {\n key: 'show',\n value: function show() {\n this.player.events.trigger('lrcshow');\n this.player.template.lrcWrap.classList.remove('aplayer-lrc-hide');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.events.trigger('lrchide');\n this.player.template.lrcWrap.classList.add('aplayer-lrc-hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.player.template.lrcWrap.classList.contains('aplayer-lrc-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n },\n {\n key: 'update',\n value: function update() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.player.audio.currentTime;\n if (this.index > this.current.length - 1 || currentTime < this.current[this.index][0] || !this.current[this.index + 1] || currentTime >= this.current[this.index + 1][0]) {\n for (var i = 0; i < this.current.length; i++) {\n if (currentTime >= this.current[i][0] && (!this.current[i + 1] || currentTime < this.current[i + 1][0])) {\n this.index = i;\n this.container.style.transform = 'translateY(' + -this.index * 16 + 'px)';\n this.container.style.webkitTransform = 'translateY(' + -this.index * 16 + 'px)';\n this.container.getElementsByClassName('aplayer-lrc-current')[0].classList.remove('aplayer-lrc-current');\n this.container.getElementsByTagName('p')[i].classList.add('aplayer-lrc-current');\n }\n }\n }\n }\n },\n {\n key: 'switch',\n value: function _switch(index) {\n var _this = this;\n if (!this.parsed[index]) {\n if (!this.async) {\n if (this.player.list.audios[index].lrc) {\n this.parsed[index] = this.parse(this.player.list.audios[index].lrc);\n } else {\n this.parsed[index] = [[\n '00:00',\n 'Not available'\n ]];\n }\n } else {\n this.parsed[index] = [[\n '00:00',\n 'Loading'\n ]];\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (index === _this.player.list.index && xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n _this.parsed[index] = _this.parse(xhr.responseText);\n } else {\n _this.player.notice('LRC file request fails: status ' + xhr.status);\n _this.parsed[index] = [[\n '00:00',\n 'Not available'\n ]];\n }\n _this.container.innerHTML = (0, _lrc2.default)({ lyrics: _this.parsed[index] });\n _this.update(0);\n _this.current = _this.parsed[index];\n }\n };\n var apiurl = this.player.list.audios[index].lrc;\n xhr.open('get', apiurl, true);\n xhr.send(null);\n }\n }\n this.container.innerHTML = (0, _lrc2.default)({ lyrics: this.parsed[index] });\n this.update(0);\n this.current = this.parsed[index];\n }\n },\n {\n key: 'parse',\n value: function parse(lrc_s) {\n if (lrc_s) {\n lrc_s = lrc_s.replace(/([^\\]^\\n])\\[/g, function (match, p1) {\n return p1 + '\\n[';\n });\n var lyric = lrc_s.split('\\n');\n var lrc = [];\n var lyricLen = lyric.length;\n for (var i = 0; i < lyricLen; i++) {\n var lrcTimes = lyric[i].match(/\\[(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?]/g);\n var lrcText = lyric[i].replace(/.*\\[(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?]/g, '').replace(/<(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?>/g, '').replace(/^\\s+|\\s+$/g, '');\n if (lrcTimes) {\n var timeLen = lrcTimes.length;\n for (var j = 0; j < timeLen; j++) {\n var oneTime = /\\[(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?]/.exec(lrcTimes[j]);\n var min2sec = oneTime[1] * 60;\n var sec2sec = parseInt(oneTime[2]);\n var msec2sec = oneTime[4] ? parseInt(oneTime[4]) / ((oneTime[4] + '').length === 2 ? 100 : 1000) : 0;\n var lrcTime = min2sec + sec2sec + msec2sec;\n lrc.push([\n lrcTime,\n lrcText\n ]);\n }\n }\n }\n lrc = lrc.filter(function (item) {\n return item[1];\n });\n lrc.sort(function (a, b) {\n return a[0] - b[0];\n });\n return lrc;\n } else {\n return [];\n }\n }\n },\n {\n key: 'remove',\n value: function remove(index) {\n this.parsed.splice(index, 1);\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.parsed = [];\n this.container.innerHTML = '';\n }\n }\n ]);\n return Lrc;\n}();\nexports.default = Lrc;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Storage = function () {\n function Storage(player) {\n _classCallCheck(this, Storage);\n this.storageName = player.options.storageName;\n this.data = JSON.parse(_utils2.default.storage.get(this.storageName));\n if (!this.data) {\n this.data = {};\n }\n this.data.volume = this.data.volume || player.options.volume;\n }\n _createClass(Storage, [\n {\n key: 'get',\n value: function get(key) {\n return this.data[key];\n }\n },\n {\n key: 'set',\n value: function set(key, value) {\n this.data[key] = value;\n _utils2.default.storage.set(this.storageName, JSON.stringify(this.data));\n }\n }\n ]);\n return Storage;\n}();\nexports.default = Storage;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bar = function () {\n function Bar(template) {\n _classCallCheck(this, Bar);\n this.elements = {};\n this.elements.volume = template.volume;\n this.elements.played = template.played;\n this.elements.loaded = template.loaded;\n }\n _createClass(Bar, [\n {\n key: 'set',\n value: function set(type, percentage, direction) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.elements[type].style[direction] = percentage * 100 + '%';\n }\n },\n {\n key: 'get',\n value: function get(type, direction) {\n return parseFloat(this.elements[type].style[direction]) / 100;\n }\n }\n ]);\n return Bar;\n}();\nexports.default = Bar;","'use strict';\nmodule.exports = false;\ntry {\n module.exports = Object.prototype.toString.call(global.process) === '[object process]';\n} catch (e) {\n}","'use strict';\nvar detectNode = require('detect-node');\nvar runtime = Object.create(detectNode ? global : window);\nvar ESCAPE_REG = /[\"&'<>]/;\nruntime.$escape = function (content) {\n return xmlEscape(toString(content));\n};\nruntime.$each = function (data, callback) {\n if (Array.isArray(data)) {\n for (var i = 0, len = data.length; i < len; i++) {\n callback(data[i], i);\n }\n } else {\n for (var _i in data) {\n callback(data[_i], _i);\n }\n }\n};\nfunction toString(value) {\n if (typeof value !== 'string') {\n if (value === undefined || value === null) {\n value = '';\n } else if (typeof value === 'function') {\n value = toString(value.call(value));\n } else {\n value = JSON.stringify(value);\n }\n }\n return value;\n}\n;\nfunction xmlEscape(content) {\n var html = '' + content;\n var regexResult = ESCAPE_REG.exec(html);\n if (!regexResult) {\n return content;\n }\n var result = '';\n var i = void 0, lastIndex = void 0, char = void 0;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34:\n char = '"';\n break;\n case 38:\n char = '&';\n break;\n case 39:\n char = ''';\n break;\n case 60:\n char = '<';\n break;\n case 62:\n char = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) {\n result += html.substring(lastIndex, i);\n }\n lastIndex = i + 1;\n result += char;\n }\n if (lastIndex !== i) {\n return result + html.substring(lastIndex, i);\n } else {\n return result;\n }\n}\n;\nmodule.exports = runtime;","{{ if !options.fixed }}\n
    \n
    \n
    {{@ icons.play }}
    \n
    \n
    \n
    \n No audio\n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n {{@ icons.loading }}\n \n
    \n
    \n
    \n
    \n \n 00:00 / 00:00\n \n \n {{@ icons.skip }}\n \n \n {{@ icons.play }}\n \n \n {{@ icons.skip }}\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n {{ include './list-item.art' getObject({\n theme: options.theme,\n audio: options.audio,\n index: 1\n }) }}\n \n
    \n{{ else }}\n
    \n \n {{ include './list-item.art' getObject({\n theme: options.theme,\n audio: options.audio,\n index: 1\n }) }}\n \n
    \n
    \n
    \n
    {{@ icons.play }}
    \n
    \n
    \n
    \n No audio\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n {{@ icons.loading }}\n \n
    \n
    \n
    \n
    \n \n 00:00 / 00:00\n \n \n {{@ icons.skip }}\n \n \n {{@ icons.play }}\n \n \n {{@ icons.skip }}\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n{{/if}}","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nvar _player = require('../template/player.art');\nvar _player2 = _interopRequireDefault(_player);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Template = function () {\n function Template(options) {\n _classCallCheck(this, Template);\n this.container = options.container;\n this.options = options.options;\n this.randomOrder = options.randomOrder;\n this.init();\n }\n _createClass(Template, [{\n key: 'init',\n value: function init() {\n var cover = '';\n if (this.options.audio.length) {\n if (this.options.order === 'random') {\n cover = this.options.audio[this.randomOrder[0]].cover;\n } else {\n cover = this.options.audio[0].cover;\n }\n }\n this.container.innerHTML = (0, _player2.default)({\n options: this.options,\n icons: _icons2.default,\n cover: cover,\n getObject: function getObject(obj) {\n return obj;\n }\n });\n this.lrc = this.container.querySelector('.aplayer-lrc-contents');\n this.lrcWrap = this.container.querySelector('.aplayer-lrc');\n this.ptime = this.container.querySelector('.aplayer-ptime');\n this.info = this.container.querySelector('.aplayer-info');\n this.time = this.container.querySelector('.aplayer-time');\n this.barWrap = this.container.querySelector('.aplayer-bar-wrap');\n this.button = this.container.querySelector('.aplayer-button');\n this.body = this.container.querySelector('.aplayer-body');\n this.list = this.container.querySelector('.aplayer-list');\n this.listOl = this.container.querySelector('.aplayer-list ol');\n this.listCurs = this.container.querySelectorAll('.aplayer-list-cur');\n this.played = this.container.querySelector('.aplayer-played');\n this.loaded = this.container.querySelector('.aplayer-loaded');\n this.thumb = this.container.querySelector('.aplayer-thumb');\n this.volume = this.container.querySelector('.aplayer-volume');\n this.volumeBar = this.container.querySelector('.aplayer-volume-bar');\n this.volumeButton = this.container.querySelector('.aplayer-time button');\n this.volumeBarWrap = this.container.querySelector('.aplayer-volume-bar-wrap');\n this.loop = this.container.querySelector('.aplayer-icon-loop');\n this.order = this.container.querySelector('.aplayer-icon-order');\n this.menu = this.container.querySelector('.aplayer-icon-menu');\n this.pic = this.container.querySelector('.aplayer-pic');\n this.title = this.container.querySelector('.aplayer-title');\n this.author = this.container.querySelector('.aplayer-author');\n this.dtime = this.container.querySelector('.aplayer-dtime');\n this.notice = this.container.querySelector('.aplayer-notice');\n this.miniSwitcher = this.container.querySelector('.aplayer-miniswitcher');\n this.skipBackButton = this.container.querySelector('.aplayer-icon-back');\n this.skipForwardButton = this.container.querySelector('.aplayer-icon-forward');\n this.skipPlayButton = this.container.querySelector('.aplayer-icon-play');\n this.lrcButton = this.container.querySelector('.aplayer-icon-lrc');\n }\n }]);\n return Template;\n}();\nexports.default = Template;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.default = function (options) {\n var defaultOption = {\n container: options.element || document.getElementsByClassName('aplayer')[0],\n mini: options.narrow || options.fixed || false,\n fixed: false,\n autoplay: false,\n mutex: true,\n lrcType: options.showlrc || options.lrc || 0,\n preload: 'auto',\n theme: '#b7daff',\n loop: 'all',\n order: 'list',\n volume: 0.7,\n listFolded: options.fixed,\n listMaxHeight: options.listmaxheight || '250px',\n audio: options.music || [],\n storageName: 'aplayer-setting'\n };\n for (var defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !options.hasOwnProperty(defaultKey)) {\n options[defaultKey] = defaultOption[defaultKey];\n }\n }\n if (Object.prototype.toString.call(options.audio) !== '[object Array]') {\n options.audio = [options.audio];\n }\n options.audio.map(function (item) {\n item.name = item.name || item.title || 'Audio name';\n item.artist = item.artist || item.author || 'Audio artist';\n item.cover = item.cover || item.pic;\n item.type = item.type || 'normal';\n return item;\n });\n if (options.audio.length <= 1 && options.loop === 'one') {\n options.loop = 'all';\n }\n return options;\n};","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","'use strict';\nvar process = module.exports = {};\nvar cachedSetTimeout;\nvar cachedClearTimeout;\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n}());\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = '';\nprocess.versions = {};\nfunction noop() {\n}\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\nprocess.listeners = function (name) {\n return [];\n};\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};","'use strict';\n(function (global, undefined) {\n 'use strict';\n if (global.setImmediate) {\n return;\n }\n var nextHandle = 1;\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n function setImmediate(callback) {\n if (typeof callback !== 'function') {\n callback = new Function('' + callback);\n }\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n var task = {\n callback: callback,\n args: args\n };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n function runIfPresent(handle) {\n if (currentlyRunningATask) {\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n function installNextTickImplementation() {\n registerImmediate = function registerImmediate(handle) {\n process.nextTick(function () {\n runIfPresent(handle);\n });\n };\n }\n function canUsePostMessage() {\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function () {\n postMessageIsAsynchronous = false;\n };\n global.postMessage('', '*');\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n function installPostMessageImplementation() {\n var messagePrefix = 'setImmediate$' + Math.random() + '$';\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === global && typeof event.data === 'string' && event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n if (global.addEventListener) {\n global.addEventListener('message', onGlobalMessage, false);\n } else {\n global.attachEvent('onmessage', onGlobalMessage);\n }\n registerImmediate = function registerImmediate(handle) {\n global.postMessage(messagePrefix + handle, '*');\n };\n }\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function (event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n registerImmediate = function registerImmediate(handle) {\n channel.port2.postMessage(handle);\n };\n }\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function registerImmediate(handle) {\n var script = doc.createElement('script');\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n function installSetTimeoutImplementation() {\n registerImmediate = function registerImmediate(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n if ({}.toString.call(global.process) === '[object process]') {\n installNextTickImplementation();\n } else if (canUsePostMessage()) {\n installPostMessageImplementation();\n } else if (global.MessageChannel) {\n installMessageChannelImplementation();\n } else if (doc && 'onreadystatechange' in doc.createElement('script')) {\n installReadyStateChangeImplementation();\n } else {\n installSetTimeoutImplementation();\n }\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === 'undefined' ? typeof global === 'undefined' ? undefined : global : self));","'use strict';\nvar apply = Function.prototype.apply;\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n if (timeout) {\n timeout.close();\n }\n};\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function () {\n};\nTimeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n};\nexports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\nexports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\nexports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\nrequire('setimmediate');\nexports.setImmediate = setImmediate;\nexports.clearImmediate = clearImmediate;","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar setTimeoutFunc = setTimeout;\nfunction noop() {\n}\nfunction bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n}\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n}\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\nfunction resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && ((typeof newValue === 'undefined' ? 'undefined' : _typeof(newValue)) === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n}\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\nPromise.prototype['finally'] = function (callback) {\n var constructor = this.constructor;\n return this.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n return constructor.reject(reason);\n });\n });\n};\nPromise.all = function (arr) {\n return new Promise(function (resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\nPromise.resolve = function (value) {\n if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n};\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\nPromise._immediateFn = typeof setImmediate === 'function' && function (fn) {\n setImmediate(fn);\n} || function (fn) {\n setTimeoutFunc(fn, 0);\n};\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n};\nmodule.exports = Promise;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _promisePolyfill = require('promise-polyfill');\nvar _promisePolyfill2 = _interopRequireDefault(_promisePolyfill);\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nvar _options = require('./options');\nvar _options2 = _interopRequireDefault(_options);\nvar _template = require('./template');\nvar _template2 = _interopRequireDefault(_template);\nvar _bar = require('./bar');\nvar _bar2 = _interopRequireDefault(_bar);\nvar _storage = require('./storage');\nvar _storage2 = _interopRequireDefault(_storage);\nvar _lrc = require('./lrc');\nvar _lrc2 = _interopRequireDefault(_lrc);\nvar _controller = require('./controller');\nvar _controller2 = _interopRequireDefault(_controller);\nvar _timer = require('./timer');\nvar _timer2 = _interopRequireDefault(_timer);\nvar _events = require('./events');\nvar _events2 = _interopRequireDefault(_events);\nvar _list = require('./list');\nvar _list2 = _interopRequireDefault(_list);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar instances = [];\nvar APlayer = function () {\n function APlayer(options) {\n _classCallCheck(this, APlayer);\n this.options = (0, _options2.default)(options);\n this.container = this.options.container;\n this.paused = true;\n this.playedPromise = _promisePolyfill2.default.resolve();\n this.mode = 'normal';\n this.randomOrder = _utils2.default.randomOrder(this.options.audio.length);\n this.container.classList.add('aplayer');\n if (this.options.lrcType && !this.options.fixed) {\n this.container.classList.add('aplayer-withlrc');\n }\n if (this.options.audio.length > 1) {\n this.container.classList.add('aplayer-withlist');\n }\n if (_utils2.default.isMobile) {\n this.container.classList.add('aplayer-mobile');\n }\n this.arrow = this.container.offsetWidth <= 300;\n if (this.arrow) {\n this.container.classList.add('aplayer-arrow');\n }\n this.container = this.options.container;\n if (this.options.lrcType === 2 || this.options.lrcType === true) {\n var lrcEle = this.container.getElementsByClassName('aplayer-lrc-content');\n for (var i = 0; i < lrcEle.length; i++) {\n if (this.options.audio[i]) {\n this.options.audio[i].lrc = lrcEle[i].innerHTML;\n }\n }\n }\n this.template = new _template2.default({\n container: this.container,\n options: this.options,\n randomOrder: this.randomOrder\n });\n if (this.options.fixed) {\n this.container.classList.add('aplayer-fixed');\n this.template.body.style.width = this.template.body.offsetWidth - 18 + 'px';\n }\n if (this.options.mini) {\n this.setMode('mini');\n this.template.info.style.display = 'block';\n }\n if (this.template.info.offsetWidth < 200) {\n this.template.time.classList.add('aplayer-time-narrow');\n }\n if (this.options.lrcType) {\n this.lrc = new _lrc2.default({\n container: this.template.lrc,\n async: this.options.lrcType === 3,\n player: this\n });\n }\n this.events = new _events2.default();\n this.storage = new _storage2.default(this);\n this.bar = new _bar2.default(this.template);\n this.controller = new _controller2.default(this);\n this.timer = new _timer2.default(this);\n this.list = new _list2.default(this);\n this.initAudio();\n this.bindEvents();\n if (this.options.order === 'random') {\n this.list.switch(this.randomOrder[0]);\n } else {\n this.list.switch(0);\n }\n if (this.options.autoplay) {\n this.play();\n }\n instances.push(this);\n }\n _createClass(APlayer, [\n {\n key: 'initAudio',\n value: function initAudio() {\n var _this = this;\n this.audio = document.createElement('audio');\n this.audio.preload = this.options.preload;\n var _loop = function _loop(i) {\n _this.audio.addEventListener(_this.events.audioEvents[i], function (e) {\n _this.events.trigger(_this.events.audioEvents[i], e);\n });\n };\n for (var i = 0; i < this.events.audioEvents.length; i++) {\n _loop(i);\n }\n this.volume(this.storage.get('volume'), true);\n }\n },\n {\n key: 'bindEvents',\n value: function bindEvents() {\n var _this2 = this;\n this.on('play', function () {\n if (_this2.paused) {\n _this2.setUIPlaying();\n }\n });\n this.on('pause', function () {\n if (!_this2.paused) {\n _this2.setUIPaused();\n }\n });\n this.on('timeupdate', function () {\n if (!_this2.disableTimeupdate) {\n _this2.bar.set('played', _this2.audio.currentTime / _this2.duration, 'width');\n _this2.lrc && _this2.lrc.update();\n var currentTime = _utils2.default.secondToTime(_this2.audio.currentTime);\n if (_this2.template.ptime.innerHTML !== currentTime) {\n _this2.template.ptime.innerHTML = currentTime;\n }\n }\n });\n this.on('durationchange', function () {\n if (_this2.duration !== 1) {\n _this2.template.dtime.innerHTML = _utils2.default.secondToTime(_this2.duration);\n }\n });\n this.on('progress', function () {\n var percentage = _this2.audio.buffered.length ? _this2.audio.buffered.end(_this2.audio.buffered.length - 1) / _this2.duration : 0;\n _this2.bar.set('loaded', percentage, 'width');\n });\n var skipTime = void 0;\n this.on('error', function () {\n if (_this2.list.audios.length > 1) {\n _this2.notice('An audio error has occurred, player will skip forward in 2 seconds.');\n skipTime = setTimeout(function () {\n _this2.skipForward();\n if (!_this2.paused) {\n _this2.play();\n }\n }, 2000);\n } else if (_this2.list.audios.length === 1) {\n _this2.notice('An audio error has occurred.');\n }\n });\n this.events.on('listswitch', function () {\n skipTime && clearTimeout(skipTime);\n });\n this.on('ended', function () {\n if (_this2.options.loop === 'none') {\n if (_this2.options.order === 'list') {\n if (_this2.list.index < _this2.list.audios.length - 1) {\n _this2.list.switch((_this2.list.index + 1) % _this2.list.audios.length);\n _this2.play();\n } else {\n _this2.list.switch((_this2.list.index + 1) % _this2.list.audios.length);\n _this2.pause();\n }\n } else if (_this2.options.order === 'random') {\n if (_this2.randomOrder.indexOf(_this2.list.index) < _this2.randomOrder.length - 1) {\n _this2.list.switch(_this2.nextIndex());\n _this2.play();\n } else {\n _this2.list.switch(_this2.nextIndex());\n _this2.pause();\n }\n }\n } else if (_this2.options.loop === 'one') {\n _this2.list.switch(_this2.list.index);\n _this2.play();\n } else if (_this2.options.loop === 'all') {\n _this2.skipForward();\n _this2.play();\n }\n });\n }\n },\n {\n key: 'setAudio',\n value: function setAudio(audio) {\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n var type = audio.type;\n if (this.options.customAudioType && this.options.customAudioType[type]) {\n if (Object.prototype.toString.call(this.options.customAudioType[type]) === '[object Function]') {\n this.options.customAudioType[type](this.audio, audio, this);\n } else {\n console.error('Illegal customType: ' + type);\n }\n } else {\n if (!type || type === 'auto') {\n if (/m3u8(#|\\?|$)/i.exec(audio.url)) {\n type = 'hls';\n } else {\n type = 'normal';\n }\n }\n if (type === 'hls') {\n if (Hls.isSupported()) {\n this.hls = new Hls();\n this.hls.loadSource(audio.url);\n this.hls.attachMedia(this.audio);\n } else if (this.audio.canPlayType('application/x-mpegURL') || this.audio.canPlayType('application/vnd.apple.mpegURL')) {\n this.audio.src = audio.url;\n } else {\n this.notice('Error: HLS is not supported.');\n }\n } else if (type === 'normal') {\n this.audio.src = audio.url;\n }\n }\n this.seek(0);\n if (!this.paused) {\n this.audio.play();\n }\n }\n },\n {\n key: 'theme',\n value: function theme() {\n var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.list.audios[this.list.index].theme || this.options.theme;\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.list.index;\n var isReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (isReset) {\n this.list.audios[index] && (this.list.audios[index].theme = color);\n }\n this.template.listCurs[index] && (this.template.listCurs[index].style.backgroundColor = color);\n if (index === this.list.index) {\n this.template.pic.style.backgroundColor = color;\n this.template.played.style.background = color;\n this.template.thumb.style.background = color;\n this.template.volume.style.background = color;\n }\n }\n },\n {\n key: 'seek',\n value: function seek(time) {\n time = Math.max(time, 0);\n time = Math.min(time, this.duration);\n this.audio.currentTime = time;\n this.bar.set('played', time / this.duration, 'width');\n this.template.ptime.innerHTML = _utils2.default.secondToTime(time);\n }\n },\n {\n key: 'setUIPlaying',\n value: function setUIPlaying() {\n var _this3 = this;\n if (this.paused) {\n this.paused = false;\n this.template.button.classList.remove('aplayer-play');\n this.template.button.classList.add('aplayer-pause');\n this.template.button.innerHTML = '';\n setTimeout(function () {\n _this3.template.button.innerHTML = _icons2.default.pause;\n }, 100);\n this.template.skipPlayButton.innerHTML = _icons2.default.pause;\n }\n this.timer.enable('loading');\n if (this.options.mutex) {\n for (var i = 0; i < instances.length; i++) {\n if (this !== instances[i]) {\n instances[i].pause();\n }\n }\n }\n }\n },\n {\n key: 'play',\n value: function play() {\n var _this4 = this;\n this.setUIPlaying();\n var playPromise = this.audio.play();\n if (playPromise) {\n playPromise.catch(function (e) {\n console.warn(e);\n if (e.name === 'NotAllowedError') {\n _this4.setUIPaused();\n }\n });\n }\n }\n },\n {\n key: 'setUIPaused',\n value: function setUIPaused() {\n var _this5 = this;\n if (!this.paused) {\n this.paused = true;\n this.template.button.classList.remove('aplayer-pause');\n this.template.button.classList.add('aplayer-play');\n this.template.button.innerHTML = '';\n setTimeout(function () {\n _this5.template.button.innerHTML = _icons2.default.play;\n }, 100);\n this.template.skipPlayButton.innerHTML = _icons2.default.play;\n }\n this.container.classList.remove('aplayer-loading');\n this.timer.disable('loading');\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.setUIPaused();\n this.audio.pause();\n }\n },\n {\n key: 'switchVolumeIcon',\n value: function switchVolumeIcon() {\n if (this.volume() >= 0.95) {\n this.template.volumeButton.innerHTML = _icons2.default.volumeUp;\n } else if (this.volume() > 0) {\n this.template.volumeButton.innerHTML = _icons2.default.volumeDown;\n } else {\n this.template.volumeButton.innerHTML = _icons2.default.volumeOff;\n }\n }\n },\n {\n key: 'volume',\n value: function volume(percentage, nostorage) {\n percentage = parseFloat(percentage);\n if (!isNaN(percentage)) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.bar.set('volume', percentage, 'height');\n if (!nostorage) {\n this.storage.set('volume', percentage);\n }\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n this.switchVolumeIcon();\n }\n return this.audio.muted ? 0 : this.audio.volume;\n }\n },\n {\n key: 'on',\n value: function on(name, callback) {\n this.events.on(name, callback);\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.template.button.classList.contains('aplayer-play')) {\n this.play();\n } else if (this.template.button.classList.contains('aplayer-pause')) {\n this.pause();\n }\n }\n },\n {\n key: 'switchAudio',\n value: function switchAudio(index) {\n this.list.switch(index);\n }\n },\n {\n key: 'addAudio',\n value: function addAudio(audios) {\n this.list.add(audios);\n }\n },\n {\n key: 'removeAudio',\n value: function removeAudio(index) {\n this.list.remove(index);\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n instances.splice(instances.indexOf(this), 1);\n this.pause();\n this.container.innerHTML = '';\n this.audio.src = '';\n this.timer.destroy();\n this.events.trigger('destroy');\n }\n },\n {\n key: 'setMode',\n value: function setMode() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'normal';\n this.mode = mode;\n if (mode === 'mini') {\n this.container.classList.add('aplayer-narrow');\n } else if (mode === 'normal') {\n this.container.classList.remove('aplayer-narrow');\n }\n }\n },\n {\n key: 'notice',\n value: function notice(text) {\n var _this6 = this;\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n var opacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.8;\n this.template.notice.innerHTML = text;\n this.template.notice.style.opacity = opacity;\n if (this.noticeTime) {\n clearTimeout(this.noticeTime);\n }\n this.events.trigger('noticeshow', { text: text });\n if (time) {\n this.noticeTime = setTimeout(function () {\n _this6.template.notice.style.opacity = 0;\n _this6.events.trigger('noticehide');\n }, time);\n }\n }\n },\n {\n key: 'prevIndex',\n value: function prevIndex() {\n if (this.list.audios.length > 1) {\n if (this.options.order === 'list') {\n return this.list.index - 1 < 0 ? this.list.audios.length - 1 : this.list.index - 1;\n } else if (this.options.order === 'random') {\n var index = this.randomOrder.indexOf(this.list.index);\n if (index === 0) {\n return this.randomOrder[this.randomOrder.length - 1];\n } else {\n return this.randomOrder[index - 1];\n }\n }\n } else {\n return 0;\n }\n }\n },\n {\n key: 'nextIndex',\n value: function nextIndex() {\n if (this.list.audios.length > 1) {\n if (this.options.order === 'list') {\n return (this.list.index + 1) % this.list.audios.length;\n } else if (this.options.order === 'random') {\n var index = this.randomOrder.indexOf(this.list.index);\n if (index === this.randomOrder.length - 1) {\n return this.randomOrder[0];\n } else {\n return this.randomOrder[index + 1];\n }\n }\n } else {\n return 0;\n }\n }\n },\n {\n key: 'skipBack',\n value: function skipBack() {\n this.list.switch(this.prevIndex());\n }\n },\n {\n key: 'skipForward',\n value: function skipForward() {\n this.list.switch(this.nextIndex());\n }\n },\n {\n key: 'duration',\n get: function get() {\n return isNaN(this.audio.duration) ? 0 : this.audio.duration;\n }\n }\n ], [{\n key: 'version',\n get: function get() {\n return APLAYER_VERSION;\n }\n }]);\n return APlayer;\n}();\nexports.default = APlayer;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nrequire('../css/index.scss');\nvar _player = require('./player');\nvar _player2 = _interopRequireDefault(_player);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nconsole.log('\\n' + ' %c APlayer v' + APLAYER_VERSION + ' ' + GIT_HASH + ' %c http://aplayer.js.org ' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\nexports.default = _player2.default;"],"sourceRoot":""} \ No newline at end of file diff --git a/public/assets/js/firefly-twikoo-1.6.44.all.min.js b/public/assets/js/firefly-twikoo-1.6.44.all.min.js new file mode 100644 index 0000000..01b212c --- /dev/null +++ b/public/assets/js/firefly-twikoo-1.6.44.all.min.js @@ -0,0 +1,2 @@ +/*! For license information please see twikoo.all.min.js.LICENSE.txt */ +var e,t;e=this,t=function(){return function(){var e={6885:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(3692);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===r[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return r[e]}}))}));var i=n(2912);Object.keys(i).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===i[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}}))}))},3692:function(e,t){"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.StorageType=t.AbstractStorage=t.AbstractSDKRequest=void 0,function(e){e.local="local",e.none="none",e.session="session"}(n||(t.StorageType=n={})),t.AbstractSDKRequest=function(){},t.AbstractStorage=function(){}},2912:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatUrl=function(e,t,n){void 0===n&&(n={});var r=/\?/.test(t),i="";for(var o in n)""===i?!r&&(t+="?"):i+="&",i+=o+"="+encodeURIComponent(n[o]);return/^http(s)?\:\/\//.test(t+=i)?t:""+e+t}},3052:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LOGINTYPE=t.DATA_VERSION=void 0,t.getEndPoint=function(){return{BASE_URL:l,PROTOCOL:c}},t.getSdkName=function(){return s},t.getSdkVersion=function(){return a},t.setEndPoint=d,t.setRegionLevelEndpoint=function(e,t,n){d(t?"//"+e+"."+t+".tcb-api.tencentcloudapi.com/web":"//"+e+".ap-shanghai.tcb-api.tencentcloudapi.com/web",n)},t.setSdkName=function(e){s=e,i(e)},t.setSdkVersion=function(e){a=e};var r=n(2566),i=r.constants.setSdkName,o=r.constants.setProtocol,a="",s="@cloudbase/js-sdk";t.DATA_VERSION="2020-01-10";var u,c="undefined"!=typeof location&&"http:"===location.protocol?"http:":"https:",l="//tcb-api.tencentcloudapi.com/web";function d(e,t){l=e,t&&(c=t,o(t))}!function(e){e.ANONYMOUS="ANONYMOUS",e.WECHAT="WECHAT",e.CUSTOM="CUSTOM",e.NULL="NULL"}(u||(t.LOGINTYPE=u={}))},7696:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EVENTS=void 0,t.EVENTS={LOGIN_STATE_CHANGED:"loginStateChanged",LOGIN_STATE_EXPIRED:"loginStateExpire",LOGIN_TYPE_CHANGED:"loginTypeChanged",ANONYMOUS_CONVERTED:"anonymousConverted",ACCESS_TOKEN_REFRESHD:"refreshAccessToken"}},4283:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=t.cloudbase=void 0;var i=r(n(9367)),o=n(2566),a=r(n(2473)),s=n(3219),u=n(4319),c=n(1706),l=n(6153),d=n(3052),f=function(){return f=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;u--)(o=e[u])&&(s=(a<3?o(s):a>3?o(t,n,s):o(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},h=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,i["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},m=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},g=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]C:return w(b.INVALID_PARAMS,"timeout is greater than maximum value[10min]"),C;case e<100:return w(b.INVALID_PARAMS,"timeout is less than maximum value[100ms]"),100;default:return e}},p([E({mode:"sync",title:"Cloudbase 初始化失败",messages:["请确认以下各项:"," 1 - 调用 cloudbase.init() 的语法或参数是否正确"," 2 - 如果是非浏览器环境,是否配置了安全应用来源(https://docs.cloudbase.net/api-reference/webv2/adapter.html#jie-ru-liu-cheng)","如果问题依然存在,建议到官方问答社区提问或寻找帮助:"+k]}),h("design:type",Function),h("design:paramtypes",[Object]),h("design:returntype",e)],e.prototype,"init",null),p([E({title:"调用扩展能力失败",messages:["请确认以下各项:"," 1 - 调用 invokeExtension() 的语法或参数是否正确"," 2 - 被调用的扩展能力是否已经安装并通过 registerExtension() 注册","如果问题依然存在,建议到官方问答社区提问或寻找帮助:"+k]}),h("design:type",Function),h("design:paramtypes",[String,Object]),h("design:returntype",Promise)],e.prototype,"invokeExtension",null),e}(),D=t.cloudbase=new I;D.useAdapters(a["default"]),t["default"]=D},4319:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Platform=void 0,t.Platform={}},1706:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getCacheByEnvId=function(e){return f[e]},t.getLocalCache=function(e){return p[e]},t.initCache=function(e){var t=e.env,n=e.persistence,r=e.platformInfo,h={accessTokenKey:o+"_"+t,accessTokenExpireKey:a+"_"+t,refreshTokenKey:s+"_"+t,anonymousUuidKey:u+"_"+t,loginTypeKey:c+"_"+t,userInfoKey:l+"_"+t};f[t]?f[t].updatePersistence(n):f[t]=new d(i(i({},e),{keys:h,platformInfo:r,alwaysLocalKeys:["anonymousUuidKey"]})),p[t]=p[t]||new d(i(i({},e),{keys:h,platformInfo:r,persistence:"local"}))};var r=n(2566),i=function(){return i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=1)return[2,this._refreshAccessToken(--e)];throw new Error(JSON.stringify({code:f.OPERATION_FAIL,message:"重试获取 refresh token 失败"}));case 9:return o.cloudbase.fire(s.EVENTS.LOGIN_STATE_EXPIRED),[4,this._cache.removeStoreAsync(a)];case 10:d.sent(),d.label=11;case 11:throw new Error(JSON.stringify({code:f.NETWORK_ERROR,msg:"refresh access_token failed:"+h.data.code}));case 12:return h.data.access_token?(o.cloudbase.fire(s.EVENTS.ACCESS_TOKEN_REFRESHD),[4,this._cache.setStoreAsync(n,h.data.access_token)]):[3,15];case 13:return d.sent(),[4,this._cache.setStoreAsync(i,h.data.access_token_expire+Date.now())];case 14:return d.sent(),[2,{accessToken:h.data.access_token,accessTokenExpire:h.data.access_token_expire}];case 15:return h.data.refresh_token?[4,this._cache.removeStoreAsync(a)]:[3,19];case 16:return d.sent(),[4,this._cache.setStoreAsync(a,h.data.refresh_token)];case 17:return d.sent(),[4,this._refreshAccessToken()];case 18:d.sent(),d.label=19;case 19:return[2]}}))}))},e.prototype._setRefreshToken=function(e){return l(this,void 0,void 0,(function(){var t,n,r,i;return d(this,(function(o){switch(o.label){case 0:return t=this._cache.keys,n=t.accessTokenKey,r=t.accessTokenExpireKey,i=t.refreshTokenKey,[4,this._cache.removeStoreAsync(n)];case 1:return o.sent(),[4,this._cache.removeStoreAsync(r)];case 2:return o.sent(),[4,this._cache.setStoreAsync(i,e)];case 3:return o.sent(),[2]}}))}))},e}(),w={}},1235:function(e,t){"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.LOGINTYPE=void 0,function(e){e.ANONYMOUS="ANONYMOUS",e.WECHAT="WECHAT",e.WECHAT_PUBLIC="WECHAT-PUBLIC",e.WECHAT_OPEN="WECHAT-OPEN",e.CUSTOM="CUSTOM",e.EMAIL="EMAIL",e.USERNAME="USERNAME",e.NULL="NULL",e.PHONE="PHONE"}(n||(t.LOGINTYPE=n={}))},3442:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.Auth=void 0,Object.defineProperty(t,"AuthProvider",{enumerable:!0,get:function(){return l.AuthProvider}}),t.eventBus=t.LoginState=t.EVENTS=void 0,t.registerAuth=function(e){try{e.registerComponent(M)}catch(t){console.warn(t)}},t.registerProvider=function(e,t){O.prototype[e]=function(n){var r="_"+e;return this[r]||(this[r]=new t(h(h({},n),this._config))),this[r]}};var i=r(n(9367)),o=n(2566),a=n(9250),s=n(4325),u=n(2007),c=n(1235),l=n(4522),d=n(7036),f=n(9676),p=n(2424),h=function(){return h=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;u--)(o=e[u])&&(s=(a<3?o(s):a>3?o(t,n,s):o(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},g=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,i["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},v=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},_=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;u--)(i=e[u])&&(s=(a<3?i(s):a>3?i(t,n,s):i(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},f=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,o["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},p=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},h=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]Date.now()?[4,(s=new r.LoginState({envId:this._config.env,cache:this._cache,request:this._request})).checkLocalStateAsync()]:[3,4]:[3,7];case 3:return o.sent(),[2,s];case 4:return[4,this._cache.removeStoreAsync(t)];case 5:return o.sent(),[4,this._cache.removeStoreAsync(n)];case 6:o.sent(),o.label=7;case 7:return[2]}}))}))},e.prototype.setRefreshToken=function(e){return i(this,void 0,void 0,(function(){var t,n,r,i;return o(this,(function(o){switch(o.label){case 0:return t=this._cache.keys,n=t.accessTokenKey,r=t.accessTokenExpireKey,i=t.refreshTokenKey,[4,this._cache.removeStoreAsync(n)];case 1:return o.sent(),[4,this._cache.removeStoreAsync(r)];case 2:return o.sent(),[4,this._cache.setStoreAsync(i,e)];case 3:return o.sent(),[2]}}))}))},e.prototype.setAccessToken=function(e,t){return i(this,void 0,void 0,(function(){var n,r,i;return o(this,(function(o){switch(o.label){case 0:return n=this._cache.keys,r=n.accessTokenKey,i=n.accessTokenExpireKey,[4,this._cache.setStoreAsync(r,e)];case 1:return o.sent(),[4,this._cache.setStoreAsync(i,t)];case 2:return o.sent(),[2]}}))}))},e.prototype.refreshUserInfo=function(){return i(this,void 0,void 0,(function(){var e;return o(this,(function(t){switch(t.label){case 0:return[4,this._request.send("auth.getUserInfo",{})];case 1:return e=t.sent().data,[4,this.setLocalUserInfo(e)];case 2:return t.sent(),[2,e]}}))}))},e.prototype.setLocalUserInfo=function(e){return i(this,void 0,void 0,(function(){var t;return o(this,(function(n){switch(n.label){case 0:return t=this._cache.keys.userInfoKey,[4,this._cache.setStoreAsync(t,e)];case 1:return n.sent(),[2]}}))}))},e}()},2007:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.CustomAuthProvider=void 0;var i,o=r(n(9367)),a=n(2566),s=n(4522),u=n(1235),c=n(3442),l=(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},i(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),d=function(e,t,n,r){var i,a=arguments.length,s=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"===("undefined"==typeof Reflect?"undefined":(0,o["default"])(Reflect))&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var u=e.length-1;u>=0;u--)(i=e[u])&&(s=(a<3?i(s):a>3?i(t,n,s):i(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},f=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,o["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},p=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},h=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;u--)(i=e[u])&&(s=(a<3?i(s):a>3?i(t,n,s):i(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},f=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,o["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},p=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},h=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;u--)(i=e[u])&&(s=(a<3?i(s):a>3?i(t,n,s):i(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},f=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,o["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},p=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},h=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;u--)(i=e[u])&&(s=(a<3?i(s):a>3?i(t,n,s):i(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},f=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,o["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},p=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},h=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;u--)(i=e[u])&&(s=(a<3?i(s):a>3?i(t,n,s):i(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},f=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,o["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},p=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},h=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;u--)(o=e[u])&&(s=(a<3?o(s):a>3?o(t,n,s):o(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},s=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,i["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},u=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},c=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0;u--)(o=e[u])&&(s=(a<3?o(s):a>3?o(t,n,s):o(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s},s=function(e,t){if("object"===("undefined"==typeof Reflect?"undefined":(0,i["default"])(Reflect))&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},u=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(t){o(t)}}function s(e){try{u(r["throw"](e))}catch(t){o(t)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},c=function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),"throw":s(1),"return":s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]d}));f.unshift(a[d].replace(l,n+"."+r).replace(c,i)),(o=new Error).stack=(s?"@debugger":"Error")+"\n"+f.join("\n")}return o}t.catchErrorsDecorator=function(e){var t=e.mode,n=void 0===t?"async":t,s=e.customInfo,d=void 0===s?{}:s,f=e.title,p=e.messages,h=void 0===p?[]:p;return function(e,t,s){if(a.IS_DEBUG_MODE){var p=d.className||e.constructor.name,m=d.methodName||t,g=s.value,v=function(e){var t="",n=e.stack.split("\n"),r=n.findIndex((function(e){return u.test(e)}));if(-1!==r){var i=c.exec(n[r+1]||"");t=i?i[0]:""}return t}(new Error);s.value="sync"===n?function(){for(var e=[],t=0;t0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0?JSON.parse(r).content:""}u.printWarn(c.ERRORS.INVALID_OPERATION,"current platform's storage is asynchronous, please use getStoreAsync insteed")},e.prototype.getStoreAsync=function(e,t){var n;return o(this,void 0,void 0,(function(){var r;return a(this,(function(i){switch(i.label){case 0:try{if("undefined"!=typeof process&&(null===(n=process.env)||void 0===n?void 0:n.tcb_token))return[2,process.env.tcb_token];if(!this._storage)return[2,""]}catch(o){return[2,""]}return t=t||"localCachev1",[4,this._storage.getItem(e)];case 1:return(r=i.sent())&&r.indexOf(t)>=0?[2,JSON.parse(r).content]:[2,""]}}))}))},e.prototype.removeStore=function(e){"async"!==this.mode?this._storage.removeItem(e):u.printWarn(c.ERRORS.INVALID_OPERATION,"current platform's storage is asynchronous, please use removeStoreAsync insteed")},e.prototype.removeStoreAsync=function(e){return o(this,void 0,void 0,(function(){return a(this,(function(t){switch(t.label){case 0:return[4,this._storage.removeItem(e)];case 1:return t.sent(),[2]}}))}))},e}();t.CloudbaseCache=f},9978:function(e,t,n){"use strict";var r,i=(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(){for(var e=0,t=0,n=arguments.length;t0},e}();t.CloudbaseEventEmitter=c;var l=new c;t.addEventListener=function(e,t){l.on(e,t)},t.activateEvent=function(e,t){void 0===t&&(t={}),l.fire(e,t)},t.removeEventListener=function(e,t){l.off(e,t)}},5939:function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e:{"default":e}};Object.defineProperty(t,"__esModule",{value:!0}),t.transformPhone=t.sleep=t.printGroupLog=t.throwError=t.printInfo=t.printError=t.printWarn=t.execCallback=t.createPromiseCallback=t.removeParam=t.getHash=t.getQuery=t.toQueryString=t.createSign=t.formatUrl=t.genSeqId=t.isFormData=t.isInstanceOf=t.isNull=t.isPalinObject=t.isUndefined=t.isString=t.isArray=void 0;var i=r(n(4180)),o=r(n(6253)),a=r(n(1717)),s=n(3440);function u(e){var t=o["default"].stringify(e);return t=(t=(t=t.replace(/=+$/,"")).replace(/\+/g,"-")).replace(/\//g,"_")}t.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},t.isString=function(e){return"string"==typeof e},t.isUndefined=function(e){return void 0===e},t.isPalinObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},t.isNull=function(e){return"[object Null]"===Object.prototype.toString.call(e)},t.isInstanceOf=function(e,t){return e instanceof t},t.isFormData=function(e){return"[object FormData]"===Object.prototype.toString.call(e)},t.genSeqId=function(){return Math.random().toString(16).slice(2)},t.formatUrl=function(e,t,n){void 0===n&&(n={});var r=/\?/.test(t),i="";for(var o in n)""===i?!r&&(t+="?"):i+="&",i+=o+"="+encodeURIComponent(n[o]);return/^http(s)?\:\/\//.test(t+=i)?t:""+e+t},t.createSign=function(e,t){var n=u(a["default"].parse(JSON.stringify({alg:"HS256",typ:"JWT"})))+"."+u(a["default"].parse(JSON.stringify(e)));return n+"."+u(i["default"](n,t))},t.toQueryString=function(e){void 0===e&&(e={});var t=[];for(var n in e)t.push(n+"="+encodeURIComponent(e[n]));return t.join("&")},t.getQuery=function(e,t){if("undefined"==typeof window)return!1;var n=t||window.location.search,r=new RegExp("(^|&)"+e+"=([^&]*)(&|$)"),i=n.substr(n.indexOf("?")+1).match(r);return null!=i?i[2]:""},t.getHash=function(e){if("undefined"==typeof window)return"";var t=window.location.hash.match(new RegExp("[#?&/]"+e+"=([^&#]*)"));return t?t[1]:""},t.removeParam=function(e,t){var n=t.split("?")[0],r=[],i=-1!==t.indexOf("?")?t.split("?")[1]:"";if(""!==i){for(var o=(r=i.split("&")).length-1;o>=0;o-=1)r[o].split("=")[0]===e&&r.splice(o,1);n=n+"?"+r.join("&")}return n},t.createPromiseCallback=function(){var e;if(!Promise){(e=function(){}).promise={};var t=function(){throw new Error('Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.')};return Object.defineProperty(e.promise,"then",{get:t}),Object.defineProperty(e.promise,"catch",{get:t}),e}var n=new Promise((function(t,n){e=function(e,r){return e?n(e):t(r)}}));return e.promise=n,e},t.execCallback=function(e,t,n){if(void 0===n&&(n=null),e&&"function"==typeof e)return e(t,n);if(t)throw t;return n},t.printWarn=function(e,t){console.warn("["+s.getSdkName()+"]["+e+"]:"+t)},t.printError=function(e,t){console.error({code:e,msg:"["+s.getSdkName()+"]["+e+"]:"+t})},t.printInfo=function(e,t){console.log("["+s.getSdkName()+"]["+e+"]:"+t)},t.throwError=function(e,t){throw new Error(JSON.stringify({code:e,msg:"["+s.getSdkName()+"]["+e+"]:"+t}))},t.printGroupLog=function(e){var t=e.title,n=e.subtitle,r=void 0===n?"":n,i=e.content,o=void 0===i?[]:i,a=e.printTrace,s=void 0!==a&&a,u=e.collapsed;void 0!==u&&u?console.groupCollapsed(t,r):console.group(t,r);for(var c=0,l=o;c>16)+(t>>16)+(n>>16)<<16|65535&n}function a(e,t,n,r,i,a){return o((s=o(o(t,e),o(r,a)))<<(u=i)|s>>>32-u,n);var s,u}function s(e,t,n,r,i,o,s){return a(t&n|~t&r,e,t,i,o,s)}function u(e,t,n,r,i,o,s){return a(t&r|n&~r,e,t,i,o,s)}function c(e,t,n,r,i,o,s){return a(t^n^r,e,t,i,o,s)}function l(e,t,n,r,i,o,s){return a(n^(t|~r),e,t,i,o,s)}function d(e,t){var n,r,i,a,d;e[t>>5]|=128<>>9<<4)]=t;var f=1732584193,p=-271733879,h=-1732584194,m=271733878;for(n=0;n>5]>>>t%32&255);return n}function p(e){var t,n=[];for(n[(e.length>>2)-1]=undefined,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+r.charAt(15&t);return i}function m(e){return unescape(encodeURIComponent(e))}function g(e){return function(e){return f(d(p(e),8*e.length))}(m(e))}function v(e,t){return function(e,t){var n,r,i=p(e),o=[],a=[];for(o[15]=a[15]=undefined,i.length>16&&(i=d(i,8*e.length)),n=0;n<16;n+=1)o[n]=909522486^i[n],a[n]=1549556828^i[n];return r=d(o.concat(p(t)),512+8*t.length),f(d(a.concat(r),640))}(m(e),m(t))}function _(e,t,n){return t?n?v(t,e):h(v(t,e)):n?g(e):h(g(e))}(r=function(){return _}.call(t,n,t,e))===undefined||(e.exports=r)}()},2473:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.wxMpStorage=t["default"]=t.WxRequest=t.WxMpWebSocket=void 0;var r,i=n(6885),o=(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]>>2]>>>24-o%4*8&255;t[r+o>>>2]|=a<<24-(r+o)%4*8}else for(o=0;o>>2]=n[o>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n,r=[],i=function(t){var n=987654321,r=4294967295;return function(){var i=((n=36969*(65535&n)+(n>>16)&r)<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r;return i/=4294967296,(i+=.5)*(e.random()>.5?1:-1)}},o=0;o>>2]>>>24-i%4*8&255;r.push((o>>>4).toString(16)),r.push((15&o).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=s.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(o))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},d=i.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,s=i/(4*o),u=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*o,c=e.min(4*u,i);if(u){for(var l=0;l>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,s=0;s<4&&o+.75*s>>6*(3-s)&63));var u=r.charAt(64);if(u)for(;i.length%4;)i.push(u);return i.join("")},parse:function(e){var t=e.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var o=0;o>>6-a%4*2;i[o>>>2]|=(s|u)<<24-o%4*8,o++}return n.create(i,o)}(e,t,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},e.enc.Base64},"object"===(0,s["default"])(t)?e.exports=t=a(n(4794)):(i=[n(4794)],(o="function"==typeof(r=a)?r.apply(t,i):r)===undefined||(e.exports=o))},1717:function(e,t,n){"use strict";var r,i,o,a,s=n(477)(n(9367));a=function(e){return e.enc.Utf8},"object"===(0,s["default"])(t)?e.exports=t=a(n(4794)):(i=[n(4794)],(o="function"==typeof(r=a)?r.apply(t,i):r)===undefined||(e.exports=o))},4180:function(e,t,n){"use strict";var r,i,o,a,s=n(477)(n(9367));a=function(e){return e.HmacSHA256},"object"===(0,s["default"])(t)?e.exports=t=a(n(4794),n(5794),n(2910)):(i=[n(4794),n(5794),n(2910)],(o="function"==typeof(r=a)?r.apply(t,i):r)===undefined||(e.exports=o))},2910:function(e,t,n){"use strict";var r,i,o,a,s=n(477)(n(9367));a=function(e){var t,n,r;n=(t=e).lib.Base,r=t.enc.Utf8,t.algo.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=r.parse(t));var n=e.blockSize,i=4*n;t.sigBytes>i&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),a=this._iKey=t.clone(),s=o.words,u=a.words,c=0;c>>7)^(h<<14|h>>>18)^h>>>3,g=c[p-2],v=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=m+c[p-7]+v+c[p-16]}var _=r&i^r&o^i&o,y=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),b=f+((s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25))+(s&l^~s&d)+u[p]+c[p];f=d,d=l,l=s,s=a+b|0,a=o,o=i,i=r,r=b+(y+_)|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+a|0,n[4]=n[4]+s|0,n[5]=n[5]+l|0,n[6]=n[6]+d|0,n[7]=n[7]+f|0},_doFinalize:function(){var e=this._data,n=e.words,r=8*this._nDataBytes,i=8*e.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=t.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,e.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});n.SHA256=o._createHelper(l),n.HmacSHA256=o._createHmacHelper(l)}(Math),e.SHA256},"object"===(0,s["default"])(t)?e.exports=t=a(n(4794)):(i=[n(4794)],(o="function"==typeof(r=a)?r.apply(t,i):r)===undefined||(e.exports=o))},9067:function(e){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r="undefined"!=typeof t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,i,o){"string"==typeof e&&(e=[[null,e,undefined]]);var a={};if(r)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=o),n&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=n):l[2]=n),i&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=i):l[4]="".concat(i)),t.push(l))}},t}},5346:function(e){"use strict";e.exports=function(e){return e[1]}},1463:function(e,t,n){"use strict";var r=n(477)(n(9367));e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===(0,r["default"])(e)&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=96)}({0:function(e,t,n){function r(e,t,n,r,i,o,a,s){var u,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),r&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=u):i&&(u=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),u)if(c.functional){c._injectStyles=u;var l=c.render;c.render=function(e,t){return u.call(t),l(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,u):[u]}return{exports:e,options:c}}n.d(t,"a",(function(){return r}))},96:function(e,t,n){n.r(t);var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button","class":[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{"class":e.icon}):e._e(),e.$slots["default"]?n("span",[e._t("default")],2):e._e()])};r._withStripped=!0;var i={name:"ElButton",inject:{elForm:{"default":""},elFormItem:{"default":""}},props:{type:{type:String,"default":"default"},size:String,icon:{type:String,"default":""},nativeType:{type:String,"default":"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.$options.propsData.hasOwnProperty("disabled")?this.disabled:(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},o=n(0),a=Object(o.a)(i,r,[],!1,null,null,null);a.options.__file="packages/button/src/button.vue";var s=a.exports;s.install=function(e){e.component(s.name,s)},t["default"]=s}})},5735:function(e,t,n){"use strict";var r=n(477)(n(9367));e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===(0,r["default"])(e)&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=75)}({0:function(e,t,n){function r(e,t,n,r,i,o,a,s){var u,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),r&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=u):i&&(u=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),u)if(c.functional){c._injectStyles=u;var l=c.render;c.render=function(e,t){return u.call(t),l(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,u):[u]}return{exports:e,options:c}}n.d(t,"a",(function(){return r}))},11:function(e,t){e.exports=n(2036)},21:function(e,t){e.exports=n(4524)},4:function(e,t){e.exports=n(5956)},75:function(e,t,n){n.r(t);var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{"class":["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?n("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?n("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?n("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?n("i",{staticClass:"el-input__icon","class":e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?n("span",{staticClass:"el-input__suffix"},[n("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?n("i",{staticClass:"el-input__icon","class":e.suffixIcon}):e._e()],e.showClear?n("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?n("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?n("span",{staticClass:"el-input__count"},[n("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?n("i",{staticClass:"el-input__icon","class":["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?n("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:n("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?n("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)};r._withStripped=!0;var i=n(4),o=n.n(i),a=n(11),s=n.n(a),u=void 0,c=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function l(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1,n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;u||(u=document.createElement("textarea"),document.body.appendChild(u));var r=function(e){var t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),r=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),i=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:c.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";"),paddingSize:r,borderSize:i,boxSizing:n}}(e),i=r.paddingSize,o=r.borderSize,a=r.boxSizing,s=r.contextStyle;u.setAttribute("style",s+";\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n"),u.value=e.value||e.placeholder||"";var l=u.scrollHeight,d={};"border-box"===a?l+=o:"content-box"===a&&(l-=i),u.value="";var f=u.scrollHeight-i;if(null!==t){var p=f*t;"border-box"===a&&(p=p+i+o),l=Math.max(p,l),d.minHeight=p+"px"}if(null!==n){var h=f*n;"border-box"===a&&(h=h+i+o),l=Math.min(h,l)}return d.height=l+"px",u.parentNode&&u.parentNode.removeChild(u),u=null,d}var d=n(9),f=n.n(d),p=n(21),h={name:"ElInput",componentName:"ElInput",mixins:[o.a,s.a],inheritAttrs:!1,inject:{elForm:{"default":""},elFormItem:{"default":""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,"default":"text"},autosize:{type:[Boolean,Object],"default":!1},autocomplete:{type:String,"default":"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,"default":!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,"default":!1},showPassword:{type:Boolean,"default":!1},showWordLimit:{type:Boolean,"default":!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return f()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||this.value===undefined?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"==typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize;if("textarea"===this.type)if(e){var t=e.minRows,n=e.maxRows;this.textareaCalcStyle=l(this.$refs.textarea,t,n)}else this.textareaCalcStyle={minHeight:l(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(e){this.$emit("compositionstart",e),this.isComposing=!0},handleCompositionUpdate:function(e){this.$emit("compositionupdate",e);var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(p.isKorean)(n)},handleCompositionEnd:function(e){this.$emit("compositionend",e),this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,r=0;r0&&arguments[0]!==undefined?arguments[0]:{};if(!i.a.prototype.$isServer){if("string"==typeof(e=_()({},b,e)).target&&(e.target=document.querySelector(e.target)),e.target=e.target||document.body,e.target!==document.body?e.fullscreen=!1:e.body=!0,e.fullscreen&&k)return k;var t=e.body?document.body:e.target,n=new y({el:document.createElement("div"),data:e});return function(e,t,n){var r={};e.fullscreen?(n.originalPosition=Object(l.getStyle)(document.body,"position"),n.originalOverflow=Object(l.getStyle)(document.body,"overflow"),r.zIndex=d.PopupManager.nextZIndex()):e.body?(n.originalPosition=Object(l.getStyle)(document.body,"position"),["top","left"].forEach((function(t){var n="top"===t?"scrollTop":"scrollLeft";r[t]=e.target.getBoundingClientRect()[t]+document.body[n]+document.documentElement[n]+"px"})),["height","width"].forEach((function(t){r[t]=e.target.getBoundingClientRect()[t]+"px"}))):n.originalPosition=Object(l.getStyle)(t,"position"),Object.keys(r).forEach((function(e){n.$el.style[e]=r[e]}))}(e,t,n),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&"sticky"!==n.originalPosition&&Object(l.addClass)(t,"el-loading-parent--relative"),e.fullscreen&&e.lock&&Object(l.addClass)(t,"el-loading-parent--hidden"),t.appendChild(n.$el),i.a.nextTick((function(){n.visible=!0})),e.fullscreen&&(k=n),n}};t["default"]={install:function(e){e.use(g),e.prototype.$loading=w},directive:g,service:w}},9:function(e,t){e.exports=n(8589)}})},5956:function(e,t){"use strict";function n(e,t,r){this.$children.forEach((function(i){i.$options.componentName===e?i.$emit.apply(i,[t].concat(r)):n.apply(i,[e,t].concat([r]))}))}t.__esModule=!0,t["default"]={methods:{dispatch:function(e,t,n){for(var r=this.$parent||this.$root,i=r.$options.componentName;r&&(!i||i!==e);)(r=r.$parent)&&(i=r.$options.componentName);r&&r.$emit.apply(r,[t].concat(n))},broadcast:function(e,t,r){n.call(this,e,t,r)}}}},2036:function(e,t,n){"use strict";t.__esModule=!0,n(2417),t["default"]={mounted:function(){},methods:{getMigratingConfig:function(){return{props:{},events:{}}}}}},3725:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:300,r=arguments.length>3&&arguments[3]!==undefined&&arguments[3];if(!e||!t)throw new Error("instance & callback is required");var i=!1,o=function(){i||(i=!0,t&&t.apply(null,arguments))};r?e.$once("after-leave",o):e.$on("after-leave",o),setTimeout((function(){o()}),n+100)}},2865:function(e,t,n){"use strict";var r=n(477)(n(9367));t.__esModule=!0,t.isInContainer=t.getScrollContainer=t.isScroll=t.getStyle=t.once=t.off=t.on=undefined;var i="function"==typeof Symbol&&"symbol"===(0,r["default"])(Symbol.iterator)?function(e){return(0,r["default"])(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":(0,r["default"])(e)};t.hasClass=m,t.addClass=function(e,t){if(e){for(var n=e.className,r=(t||"").split(" "),i=0,o=r.length;i-1}t.once=function(e,t,n){p(e,t,(function r(){n&&n.apply(this,arguments),h(e,t,r)}))};var g=t.getStyle=l<9?function(e,t){if(!s){if(!e||!t)return null;"float"===(t=f(t))&&(t="styleFloat");try{if("opacity"===t)try{return e.filters.item("alpha").opacity/100}catch(n){return 1}return e.style[t]||e.currentStyle?e.currentStyle[t]:null}catch(n){return e.style[t]}}}:function(e,t){if(!s){if(!e||!t)return null;"float"===(t=f(t))&&(t="cssFloat");try{var n=document.defaultView.getComputedStyle(e,"");return e.style[t]||n?n[t]:null}catch(r){return e.style[t]}}},v=t.isScroll=function(e,t){if(!s){var n=null!==t&&t!==undefined;return g(e,n?t?"overflow-y":"overflow-x":"overflow").match(/(scroll|auto|overlay)/)}};t.getScrollContainer=function(e,t){if(!s){for(var n=e;n;){if([window,document,document.documentElement].includes(n))return window;if(v(n,t))return n;n=n.parentNode}return n}},t.isInContainer=function(e,t){if(s||!e||!t)return!1;var n=e.getBoundingClientRect(),r=void 0;return r=[window,document,document.documentElement,null,undefined].includes(t)?{top:0,right:window.innerWidth,bottom:window.innerHeight,left:0}:t.getBoundingClientRect(),n.topr.top&&n.right>r.left&&n.left0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(n)}),r):this.doOpen(n)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,n=e.modal,r=e.zIndex;if(r&&(o["default"].zIndex=r),n&&(this._closing&&(o["default"].closeModal(this._popupId),this._closing=!1),o["default"].openModal(this._popupId,o["default"].nextZIndex(),this.modalAppendToBody?undefined:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!(0,s.hasClass)(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt((0,s.getStyle)(document.body,"paddingRight"),10)),l=(0,a["default"])();var i=document.documentElement.clientHeight0&&(i||"scroll"===u)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+l+"px"),(0,s.addClass)(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=o["default"].nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){o["default"].closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,(0,s.removeClass)(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},t.PopupManager=o["default"]},8432:function(e,t,n){"use strict";t.__esModule=!0;var r,i=n(4478),o=(r=i)&&r.__esModule?r:{"default":r},a=n(2865),s=!1,u=!1,c=void 0,l=function(){if(!o["default"].prototype.$isServer){var e=f.modalDom;return e?s=!0:(s=!1,e=document.createElement("div"),f.modalDom=e,e.addEventListener("touchmove",(function(e){e.preventDefault(),e.stopPropagation()})),e.addEventListener("click",(function(){f.doOnModalClick&&f.doOnModalClick()}))),e}},d={},f={modalFade:!0,getInstance:function(e){return d[e]},register:function(e,t){e&&t&&(d[e]=t)},deregister:function(e){e&&(d[e]=null,delete d[e])},nextZIndex:function(){return f.zIndex++},modalStack:[],doOnModalClick:function(){var e=f.modalStack[f.modalStack.length-1];if(e){var t=f.getInstance(e.id);t&&t.closeOnClickModal&&t.close()}},openModal:function(e,t,n,r,i){if(!o["default"].prototype.$isServer&&e&&t!==undefined){this.modalFade=i;for(var u=this.modalStack,c=0,d=u.length;c0){var r=t[t.length-1];if(r.id===e)r.modalClass&&r.modalClass.trim().split(/\s+/).forEach((function(e){return(0,a.removeClass)(n,e)})),t.pop(),t.length>0&&(n.style.zIndex=t[t.length-1].zIndex);else for(var i=t.length-1;i>=0;i--)if(t[i].id===e){t.splice(i,1);break}}0===t.length&&(this.modalFade&&(0,a.addClass)(n,"v-modal-leave"),setTimeout((function(){0===t.length&&(n.parentNode&&n.parentNode.removeChild(n),n.style.display="none",f.modalDom=undefined),(0,a.removeClass)(n,"v-modal-leave")}),200))}};Object.defineProperty(f,"zIndex",{configurable:!0,get:function(){return u||(c=c||(o["default"].prototype.$ELEMENT||{}).zIndex||2e3,u=!0),c},set:function(e){c=e}}),o["default"].prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=function(){if(!o["default"].prototype.$isServer&&f.modalStack.length>0){var e=f.modalStack[f.modalStack.length-1];if(!e)return;return f.getInstance(e.id)}}();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t["default"]=f},9686:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(){if(o["default"].prototype.$isServer)return 0;if(a!==undefined)return a;var e=document.createElement("div");e.className="el-scrollbar__wrap",e.style.visibility="hidden",e.style.width="100px",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth;e.style.overflow="scroll";var n=document.createElement("div");n.style.width="100%",e.appendChild(n);var r=n.offsetWidth;return e.parentNode.removeChild(e),a=t-r};var r,i=n(4478),o=(r=i)&&r.__esModule?r:{"default":r},a=void 0},4524:function(e,t){"use strict";t.__esModule=!0,t.isDef=function(e){return e!==undefined&&null!==e},t.isKorean=function(e){return/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi.test(e)}},6200:function(e,t,n){"use strict";var r=n(477)(n(9367));t.__esModule=!0,t.isDefined=t.isUndefined=t.isFunction=undefined;var i="function"==typeof Symbol&&"symbol"===(0,r["default"])(Symbol.iterator)?function(e){return(0,r["default"])(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":(0,r["default"])(e)};t.isString=function(e){return"[object String]"===Object.prototype.toString.call(e)},t.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},t.isHtmlElement=function(e){return e&&e.nodeType===Node.ELEMENT_NODE};var o,a=n(4478),s=(o=a)&&o.__esModule?o:{"default":o},u=function(e){return e&&"[object Function]"==={}.toString.call(e)};"object"===("undefined"==typeof Int8Array?"undefined":i(Int8Array))||!s["default"].prototype.$isServer&&"function"==typeof document.childNodes||(t.isFunction=u=function(e){return"function"==typeof e||!1}),t.isFunction=u,t.isUndefined=function(e){return void 0===e},t.isDefined=function(e){return e!==undefined&&null!==e}},2417:function(e,t,n){"use strict";var r=n(477)(n(9367));t.__esModule=!0,t.isMac=t.isEmpty=t.isEqual=t.arrayEquals=t.looseEqual=t.capitalize=t.kebabCase=t.autoprefixer=t.isFirefox=t.isEdge=t.isIE=t.coerceTruthyValueToArray=t.arrayFind=t.arrayFindIndex=t.escapeRegexpString=t.valueEquals=t.generateId=t.getValueByPath=undefined;var i="function"==typeof Symbol&&"symbol"===(0,r["default"])(Symbol.iterator)?function(e){return(0,r["default"])(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":(0,r["default"])(e)};t.noop=function(){},t.hasOwn=function(e,t){return c.call(e,t)},t.toObject=function(e){for(var t={},n=0;n0&&arguments[0]!==undefined?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")};var d=t.arrayFindIndex=function(e,t){for(var n=0;n!==e.length;++n)if(t(e[n]))return n;return-1},f=(t.arrayFind=function(e,t){var n=d(e,t);return-1!==n?e[n]:undefined},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!s["default"].prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!s["default"].prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!s["default"].prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==(void 0===e?"undefined":i(e)))return e;var t=["ms-","webkit-"];return["transform","transition","animation"].forEach((function(n){var r=e[n];n&&r&&t.forEach((function(t){e[t+n]=r}))})),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,u.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var n=(0,u.isObject)(e),r=(0,u.isObject)(t);return n&&r?JSON.stringify(e)===JSON.stringify(t):!n&&!r&&String(e)===String(t)}),p=t.arrayEquals=function(e,t){if(t=t||[],(e=e||[]).length!==t.length)return!1;for(var n=0;n0&&arguments[0]!==undefined?arguments[0]:{},i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};!(n&&n.context&&r.target&&i.target)||e.contains(r.target)||e.contains(i.target)||e===r.target||n.context.popperElm&&(n.context.popperElm.contains(r.target)||n.context.popperElm.contains(i.target))||(t.expression&&e[u].methodName&&n.context[e[u].methodName]?n.context[e[u].methodName]():e[u].bindingFn&&e[u].bindingFn())}}!o["default"].prototype.$isServer&&(0,a.on)(document,"mousedown",(function(e){return i=e})),!o["default"].prototype.$isServer&&(0,a.on)(document,"mouseup",(function(e){s.forEach((function(t){return t[u].documentHandler(e,i)}))})),t["default"]={bind:function(e,t,n){s.push(e);var r=c++;e[u]={id:r,documentHandler:l(e,t,n),methodName:t.expression,bindingFn:t.value}},update:function(e,t,n){e[u].documentHandler=l(e,t,n),e[u].methodName=t.expression,e[u].bindingFn=t.value},unbind:function(e){for(var t=s.length,n=0;n-1}t.once=function(e,t,n){d(e,t,(function r(){n&&n.apply(this,arguments),f(e,t,r)}))};var h=t.getStyle=u<9?function(e,t){if(!o){if(!e||!t)return null;"float"===(t=l(t))&&(t="styleFloat");try{if("opacity"===t)try{return e.filters.item("alpha").opacity/100}catch(n){return 1}return e.style[t]||e.currentStyle?e.currentStyle[t]:null}catch(n){return e.style[t]}}}:function(e,t){if(!o){if(!e||!t)return null;"float"===(t=l(t))&&(t="cssFloat");try{var n=document.defaultView.getComputedStyle(e,"");return e.style[t]||n?n[t]:null}catch(r){return e.style[t]}}},m=t.isScroll=function(e,t){if(!o){var n=null!==t&&t!==undefined;return h(e,n?t?"overflow-y":"overflow-x":"overflow").match(/(scroll|auto|overlay)/)}};t.getScrollContainer=function(e,t){if(!o){for(var n=e;n;){if([window,document,document.documentElement].includes(n))return window;if(m(n,t))return n;n=n.parentNode}return n}},t.isInContainer=function(e,t){if(o||!e||!t)return!1;var n,r=e.getBoundingClientRect();return n=[window,document,document.documentElement,null,undefined].includes(t)?{top:0,right:window.innerWidth,bottom:window.innerHeight,left:0}:t.getBoundingClientRect(),r.topn.top&&r.right>n.left&&r.left>>6,u[l++]=128|63&s):s<55296||s>=57344?(u[l++]=224|s>>>12,u[l++]=128|s>>>6&63,u[l++]=128|63&s):(s=65536+((1023&s)<<10|1023&e.charCodeAt(++o)),u[l++]=240|s>>>18,u[l++]=128|s>>>12&63,u[l++]=128|s>>>6&63,u[l++]=128|63&s);e=u}else{if("object"!==a)throw new Error(t);if(null===e)throw new Error(t);if(d&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||d&&ArrayBuffer.isView(e)))throw new Error(t)}e.length>64&&(e=new E(n,!0).update(e).array());var f=[],p=[];for(o=0;o<64;++o){var h=e[o]||0;f[o]=92^h,p[o]=54^h}E.call(this,n,r),this.update(p),this.oKeyPad=f,this.inner=!0,this.sharedMemory=r}E.prototype.update=function(e){if(!this.finalized){var n,r=(0,i["default"])(e);if("string"!==r){if("object"!==r)throw new Error(t);if(null===e)throw new Error(t);if(d&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||d&&ArrayBuffer.isView(e)))throw new Error(t);n=!0}for(var o,a,s=0,u=e.length,c=this.blocks;s>>2]|=e[s]<>>2]|=o<>>2]|=(192|o>>>6)<>>2]|=(128|63&o)<=57344?(c[a>>>2]|=(224|o>>>12)<>>2]|=(128|o>>>6&63)<>>2]|=(128|63&o)<>>2]|=(240|o>>>18)<>>2]|=(128|o>>>12&63)<>>2]|=(128|o>>>6&63)<>>2]|=(128|63&o)<=64?(this.block=c[16],this.start=a-64,this.hash(),this.hashed=!0):this.start=a}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},E.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>>2]|=p[3&t],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},E.prototype.hash=function(){var e,t,n,r,i,o,a,s,u,c=this.h0,l=this.h1,d=this.h2,f=this.h3,p=this.h4,h=this.h5,g=this.h6,v=this.h7,_=this.blocks;for(e=16;e<64;++e)t=((i=_[e-15])>>>7|i<<25)^(i>>>18|i<<14)^i>>>3,n=((i=_[e-2])>>>17|i<<15)^(i>>>19|i<<13)^i>>>10,_[e]=_[e-16]+t+_[e-7]+n|0;for(u=l&d,e=0;e<64;e+=4)this.first?(this.is224?(o=300032,v=(i=_[0]-1413257819)-150054599|0,f=i+24177077|0):(o=704751109,v=(i=_[0]-210244248)-1521486534|0,f=i+143694565|0),this.first=!1):(t=(c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),r=(o=c&l)^c&d^u,v=f+(i=v+(n=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+(p&h^~p&g)+m[e]+_[e])|0,f=i+(t+r)|0),t=(f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10),r=(a=f&c)^f&l^o,g=d+(i=g+(n=(v>>>6|v<<26)^(v>>>11|v<<21)^(v>>>25|v<<7))+(v&p^~v&h)+m[e+1]+_[e+1])|0,t=((d=i+(t+r)|0)>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),r=(s=d&f)^d&c^a,h=l+(i=h+(n=(g>>>6|g<<26)^(g>>>11|g<<21)^(g>>>25|g<<7))+(g&v^~g&p)+m[e+2]+_[e+2])|0,t=((l=i+(t+r)|0)>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),r=(u=l&d)^l&f^s,p=c+(i=p+(n=(h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&g^~h&v)+m[e+3]+_[e+3])|0,c=i+(t+r)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+c|0,this.h1=this.h1+l|0,this.h2=this.h2+d|0,this.h3=this.h3+f|0,this.h4=this.h4+p|0,this.h5=this.h5+h|0,this.h6=this.h6+g|0,this.h7=this.h7+v|0},E.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,r=this.h3,i=this.h4,o=this.h5,a=this.h6,s=this.h7,u=f[e>>>28&15]+f[e>>>24&15]+f[e>>>20&15]+f[e>>>16&15]+f[e>>>12&15]+f[e>>>8&15]+f[e>>>4&15]+f[15&e]+f[t>>>28&15]+f[t>>>24&15]+f[t>>>20&15]+f[t>>>16&15]+f[t>>>12&15]+f[t>>>8&15]+f[t>>>4&15]+f[15&t]+f[n>>>28&15]+f[n>>>24&15]+f[n>>>20&15]+f[n>>>16&15]+f[n>>>12&15]+f[n>>>8&15]+f[n>>>4&15]+f[15&n]+f[r>>>28&15]+f[r>>>24&15]+f[r>>>20&15]+f[r>>>16&15]+f[r>>>12&15]+f[r>>>8&15]+f[r>>>4&15]+f[15&r]+f[i>>>28&15]+f[i>>>24&15]+f[i>>>20&15]+f[i>>>16&15]+f[i>>>12&15]+f[i>>>8&15]+f[i>>>4&15]+f[15&i]+f[o>>>28&15]+f[o>>>24&15]+f[o>>>20&15]+f[o>>>16&15]+f[o>>>12&15]+f[o>>>8&15]+f[o>>>4&15]+f[15&o]+f[a>>>28&15]+f[a>>>24&15]+f[a>>>20&15]+f[a>>>16&15]+f[a>>>12&15]+f[a>>>8&15]+f[a>>>4&15]+f[15&a];return this.is224||(u+=f[s>>>28&15]+f[s>>>24&15]+f[s>>>20&15]+f[s>>>16&15]+f[s>>>12&15]+f[s>>>8&15]+f[s>>>4&15]+f[15&s]),u},E.prototype.toString=E.prototype.hex,E.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,r=this.h3,i=this.h4,o=this.h5,a=this.h6,s=this.h7,u=[e>>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,n>>>24&255,n>>>16&255,n>>>8&255,255&n,r>>>24&255,r>>>16&255,r>>>8&255,255&r,i>>>24&255,i>>>16&255,i>>>8&255,255&i,o>>>24&255,o>>>16&255,o>>>8&255,255&o,a>>>24&255,a>>>16&255,a>>>8&255,255&a];return this.is224||u.push(s>>>24&255,s>>>16&255,s>>>8&255,255&s),u},E.prototype.array=E.prototype.digest,E.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e},A.prototype=new E,A.prototype.finalize=function(){if(E.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();E.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),E.prototype.finalize.call(this)}};var C=y();C.sha256=C,C.sha224=y(!0),C.sha256.hmac=w(),C.sha224.hmac=w(!0),c?e.exports=C:(a.sha256=C.sha256,a.sha224=C.sha224,l&&((r=function(){return C}.call(C,n,C,e))===undefined||(e.exports=r)))}()},210:function(){"use strict";!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e={javascript:"clike",actionscript:"javascript",apex:["clike","sql"],arduino:"cpp",aspnet:["markup","csharp"],birb:"clike",bison:"c",c:"clike",csharp:"clike",cpp:"c",cfscript:"clike",chaiscript:["clike","cpp"],cilkc:"c",cilkcpp:"cpp",coffeescript:"javascript",crystal:"ruby","css-extras":"css",d:"clike",dart:"clike",django:"markup-templating",ejs:["javascript","markup-templating"],etlua:["lua","markup-templating"],erb:["ruby","markup-templating"],fsharp:"clike","firestore-security-rules":"clike",flow:"javascript",ftl:"markup-templating",gml:"clike",glsl:"c",go:"clike",gradle:"clike",groovy:"clike",haml:"ruby",handlebars:"markup-templating",haxe:"clike",hlsl:"c",idris:"haskell",java:"clike",javadoc:["markup","java","javadoclike"],jolie:"clike",jsdoc:["javascript","javadoclike","typescript"],"js-extras":"javascript",json5:"json",jsonp:"json","js-templates":"javascript",kotlin:"clike",latte:["clike","markup-templating","php"],less:"css",lilypond:"scheme",liquid:"markup-templating",markdown:"markup","markup-templating":"markup",mongodb:"javascript",n4js:"javascript",objectivec:"c",opencl:"c",parser:"markup",php:"markup-templating",phpdoc:["php","javadoclike"],"php-extras":"php",plsql:"sql",processing:"clike",protobuf:"clike",pug:["markup","javascript"],purebasic:"clike",purescript:"haskell",qsharp:"clike",qml:"javascript",qore:"clike",racket:"scheme",cshtml:["markup","csharp"],jsx:["markup","javascript"],tsx:["jsx","typescript"],reason:"clike",ruby:"clike",sass:"css",scss:"css",scala:"java","shell-session":"bash",smarty:"markup-templating",solidity:"clike",soy:"markup-templating",sparql:"turtle",sqf:"clike",squirrel:"clike",stata:["mata","java","python"],"t4-cs":["t4-templating","csharp"],"t4-vb":["t4-templating","vbnet"],tap:"yaml",tt2:["clike","markup-templating"],textile:"markup",twig:"markup-templating",typescript:"javascript",v:"clike",vala:"clike",vbnet:"basic",velocity:"markup",wiki:"markup",xeora:"markup","xml-doc":"markup",xquery:"markup"},t={html:"markup",xml:"markup",svg:"markup",mathml:"markup",ssml:"markup",atom:"markup",rss:"markup",js:"javascript",g4:"antlr4",ino:"arduino","arm-asm":"armasm",art:"arturo",adoc:"asciidoc",avs:"avisynth",avdl:"avro-idl",gawk:"awk",sh:"bash",shell:"bash",shortcode:"bbcode",rbnf:"bnf",oscript:"bsl",cs:"csharp",dotnet:"csharp",cfc:"cfscript","cilk-c":"cilkc","cilk-cpp":"cilkcpp",cilk:"cilkcpp",coffee:"coffeescript",conc:"concurnas",jinja2:"django","dns-zone":"dns-zone-file",dockerfile:"docker",gv:"dot",eta:"ejs",xlsx:"excel-formula",xls:"excel-formula",gamemakerlanguage:"gml",po:"gettext",gni:"gn",ld:"linker-script","go-mod":"go-module",hbs:"handlebars",mustache:"handlebars",hs:"haskell",idr:"idris",gitignore:"ignore",hgignore:"ignore",npmignore:"ignore",webmanifest:"json",kt:"kotlin",kts:"kotlin",kum:"kumir",tex:"latex",context:"latex",ly:"lilypond",emacs:"lisp",elisp:"lisp","emacs-lisp":"lisp",md:"markdown",moon:"moonscript",n4jsd:"n4js",nani:"naniscript",objc:"objectivec",qasm:"openqasm",objectpascal:"pascal",px:"pcaxis",pcode:"peoplecode",plantuml:"plant-uml",pq:"powerquery",mscript:"powerquery",pbfasm:"purebasic",purs:"purescript",py:"python",qs:"qsharp",rkt:"racket",razor:"cshtml",rpy:"renpy",res:"rescript",robot:"robotframework",rb:"ruby","sh-session":"shell-session",shellsession:"shell-session",smlnj:"sml",sol:"solidity",sln:"solution-file",rq:"sparql",sclang:"supercollider",t4:"t4-cs",trickle:"tremor",troy:"tremor",trig:"turtle",ts:"typescript",tsconfig:"typoscript",uscript:"unrealscript",uc:"unrealscript",url:"uri",vb:"visual-basic",vba:"visual-basic",webidl:"web-idl",mathematica:"wolfram",nb:"wolfram",wl:"wolfram",xeoracube:"xeora",yml:"yaml"},n={},r="components/",i=Prism.util.currentScript();if(i){var o=/\bplugins\/autoloader\/prism-autoloader\.(?:min\.)?js(?:\?[^\r\n/]*)?$/i,a=/(^|\/)[\w-]+\.(?:min\.)?js(?:\?[^\r\n/]*)?$/i,s=i.getAttribute("data-autoloader-path");if(null!=s)r=s.trim().replace(/\/?$/,"/");else{var u=i.src;o.test(u)?r=u.replace(o,"components/"):a.test(u)&&(r=u.replace(a,"$1components/"))}}var c=Prism.plugins.autoloader={languages_path:r,use_minified:!0,loadLanguages:d};Prism.hooks.add("complete",(function(e){var t=e.element,n=e.language;if(t&&n&&"none"!==n){var r=function(e){var t=(e.getAttribute("data-dependencies")||"").trim();if(!t){var n=e.parentElement;n&&"pre"===n.tagName.toLowerCase()&&(t=(n.getAttribute("data-dependencies")||"").trim())}return t?t.split(/\s*,\s*/g):[]}(t);/^diff-./i.test(n)?(r.push("diff"),r.push(n.substr(5))):r.push(n),r.every(l)||d(r,(function(){Prism.highlightElement(t)}))}}))}function l(e){if(e.indexOf("!")>=0)return!1;if((e=t[e]||e)in Prism.languages)return!0;var r=n[e];return r&&!r.error&&!1===r.loading}function d(r,i,o){"string"==typeof r&&(r=[r]);var a=r.length,s=0,u=!1;function p(){u||++s===a&&i&&i(r)}0!==a?r.forEach((function(r){!function(r,i,o){var a=r.indexOf("!")>=0;function s(){var e=n[r];e||(e=n[r]={callbacks:[]}),e.callbacks.push({success:i,error:o}),!a&&l(r)?f(r,"success"):!a&&e.error?f(r,"error"):!a&&e.loading||(e.loading=!0,e.error=!1,function(e,t,n){var r=document.createElement("script");r.src=e,r.async=!0,r.onload=function(){document.body.removeChild(r),t&&t()},r.onerror=function(){document.body.removeChild(r),n&&n()},document.body.appendChild(r)}(function(e){return c.languages_path+"prism-"+e+(c.use_minified?".min":"")+".js"}(r),(function(){e.loading=!1,f(r,"success")}),(function(){e.loading=!1,e.error=!0,f(r,"error")})))}r=r.replace("!",""),r=t[r]||r;var u=e[r];u&&u.length?d(u,s,o):s()}(r,p,(function(){u||(u=!0,o&&o(r))}))})):i&&setTimeout(i,0)}function f(e,t){if(n[e]){for(var r=n[e].callbacks,i=0,o=r.length;i=d.reach);E+=w.value.length,w=w.next){var A=w.value;if(t.length>e.length)return;if(!(A instanceof o)){var C,x=1;if(_){if(!(C=a(k,E,e,v))||C.index>=e.length)break;var I=C.index,D=C.index+C[0].length,S=E;for(S+=w.value.length;I>=S;)S+=(w=w.next).value.length;if(E=S-=w.value.length,w.value instanceof o)continue;for(var O=w;O!==t.tail&&(Sd.reach&&(d.reach=P);var F=w.prev;if(M&&(F=c(t,F,M),E+=M.length),l(t,F,x),w=c(t,F,new o(f,g?i.tokenize(T,g):T,y,T)),N&&c(t,w,N),x>1){var L={cause:f+","+h,reach:P};s(e,t,n,w.prev,E,L),d&&L.reach>d.reach&&(d.reach=L.reach)}}}}}}function u(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function c(e,t,n){var r=t.next,i={value:n,prev:t,next:r};return t.next=i,r.prev=i,e.length++,i}function l(e,t,n){for(var r=t.next,i=0;i"+r.content+""},!e.document)return e.addEventListener?(i.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var n=JSON.parse(t.data),r=n.language,o=n.code,a=n.immediateClose;e.postMessage(i.highlight(o,i.languages[r],r)),a&&e.close()}),!1),i):i;var d=i.util.currentScript();function f(){i.manual||i.highlightAll()}if(d&&(i.filename=d.src,d.hasAttribute("data-manual")&&(i.manual=!0)),!i.manual){var p=document.readyState;"loading"===p||"interactive"===p&&d&&d.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return i}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});e.exports&&(e.exports=r),"undefined"!=typeof n.g&&(n.g.Prism=r),r.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},r.languages.markup.tag.inside["attr-value"].inside.entity=r.languages.markup.entity,r.languages.markup.doctype.inside["internal-subset"].inside=r.languages.markup,r.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(r.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:r.languages[t]},n.cdata=/^$/i;var i={"included-cdata":{pattern://i,inside:n}};i["language-"+t]={pattern:/[\s\S]+/,inside:r.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:i},r.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(r.languages.markup.tag,"addAttribute",{value:function(e,t){r.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:r.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),r.languages.html=r.languages.markup,r.languages.mathml=r.languages.markup,r.languages.svg=r.languages.markup,r.languages.xml=r.languages.extend("markup",{}),r.languages.ssml=r.languages.xml,r.languages.atom=r.languages.xml,r.languages.rss=r.languages.xml,function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{"function":/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,"function":{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(r),r.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,"function":/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},r.languages.javascript=r.languages.extend("clike",{"class-name":[r.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],"function":/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),r.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,r.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:r.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:r.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:r.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:r.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:r.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),r.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:r.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),r.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),r.languages.markup&&(r.languages.markup.tag.addInlined("script","javascript"),r.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),r.languages.js=r.languages.javascript,function(){if(void 0!==r&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},t="data-src-status",n="loading",i="loaded",o="pre[data-src]:not(["+t+'="'+i+'"]):not(['+t+'="'+n+'"])';r.hooks.add("before-highlightall",(function(e){e.selector+=", "+o})),r.hooks.add("before-sanity-check",(function(a){var s=a.element;if(s.matches(o)){a.code="",s.setAttribute(t,n);var u=s.appendChild(document.createElement("CODE"));u.textContent="Loading…";var c=s.getAttribute("data-src"),l=a.language;if("none"===l){var d=(/\.(\w+)$/.exec(c)||[,"none"])[1];l=e[d]||d}r.util.setLanguage(u,l),r.util.setLanguage(s,l);var f=r.plugins.autoloader;f&&f.loadLanguages(l),function(e,t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.onreadystatechange=function(){4==r.readyState&&(r.status<400&&r.responseText?t(r.responseText):r.status>=400?n("✖ Error "+r.status+" while fetching file: "+r.statusText):n("✖ Error: File does not exist or is empty"))},r.send(null)}(c,(function(e){s.setAttribute(t,i);var n=function(e){var t=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(e||"");if(t){var n=Number(t[1]),r=t[2],i=t[3];return r?i?[n,Number(i)]:[n,undefined]:[n,n]}return undefined}(s.getAttribute("data-range"));if(n){var o=e.split(/\r\n?|\n/g),a=n[0],c=null==n[1]?o.length:n[1];a<0&&(a+=o.length),a=Math.max(0,Math.min(a-1,o.length)),c<0&&(c+=o.length),c=Math.max(0,Math.min(c,o.length)),e=o.slice(a,c).join("\n"),s.hasAttribute("data-start")||s.setAttribute("data-start",String(a+1))}u.textContent=e,r.highlightElement(u)}),(function(e){s.setAttribute(t,"failed"),u.textContent=e}))}})),r.plugins.fileHighlight={highlight:function(e){for(var t,n=(e||document).querySelectorAll(o),i=0;t=n[i++];)r.highlightElement(t)}};var a=!1;r.fileHighlight=function(){a||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),a=!0),r.plugins.fileHighlight.highlight.apply(this,arguments)}}}()},8926:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(8323)),o=r(n(1452)),a=r(n(6619));t.A={components:{TkComments:i["default"],TkFooter:o["default"],TkAdmin:a["default"]},data:function(){return{showAdmin:!1,showAdminEntry:!1}},methods:{onShowAdminEntry:function(e){this.showAdminEntry=e}}}},3397:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(3491)),o=r(n(6370)),a=r(n(6359)),s=r(n(5910));t.A={data:function(){return{iconComment:i["default"],iconCommentSolid:o["default"],iconLike:a["default"],iconLikeSolid:s["default"]}},props:{liked:Boolean,likeCount:Number,repliesCount:Number},computed:{likeCountStr:function(){return this.likeCount>0?"".concat(this.likeCount):""},repliesCountStr:function(){return this.repliesCount>0?"".concat(this.repliesCount):""}},methods:{onLike:function(e){e.preventDefault(),this.$emit("like")},onReply:function(e){e.preventDefault(),this.$emit("reply")}}}},4238:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(479)),o=r(n(4964)),a=r(n(2889)),s=r(n(8559)),u=r(n(1140)),c=r(n(9985)),l=r(n(9097)),d=n(8129),f=r(n(9671));t.A={components:{TkAdminComment:s["default"],TkAdminConfig:u["default"],TkAdminImport:c["default"],TkAdminExport:l["default"]},props:{show:Boolean},data:function(){return{iconClose:f["default"],loading:!0,version:"",needUpdate:!1,isLogin:!1,isSetPassword:!0,isSetCredentials:!1,credentials:"",password:"",passwordConfirm:"",loginErrorMessage:"",activeTabName:"comment"}},computed:{canRegist:function(){return!this.isSetPassword&&!!this.password&&this.password===this.passwordConfirm&&(this.isSetCredentials||this.credentials)}},methods:{t:d.t,onLogin:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n,r;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.password){t.next=3;break}return e.loginErrorMessage=(0,d.t)("ADMIN_PASSWORD_REQUIRED"),t.abrupt("return");case 3:return e.loading=!0,e.loginErrorMessage="",n=(0,a["default"])(e.password),t.next=8,(0,d.call)(e.$tcb,"LOGIN",{password:n});case 8:if(!(r=t.sent).result.message){t.next=13;break}e.loginErrorMessage=r.result.message,t.next=28;break;case 13:if(!r.result.ticket){t.next=27;break}return t.prev=14,t.next=17,e.$tcb.auth.customAuthProvider().signIn(r.result.ticket);case 17:d.logger.log("登录成功"),e.password="",e.checkAuth(),t.next=25;break;case 22:t.prev=22,t.t0=t["catch"](14),d.logger.error("登录失败",t.t0);case 25:t.next=28;break;case 27:0===r.result.code&&(d.logger.log("登录成功"),localStorage.setItem("twikoo-access-token",n),e.password="",e.checkAuth());case 28:e.loading=!1;case 29:case"end":return t.stop()}}),t,null,[[14,22]])})))()},onLogout:function(e){var t=this;return(0,o["default"])(i["default"].mark((function n(){return i["default"].wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(e.preventDefault(),t.loading=!0,!t.$tcb){n.next=9;break}return n.next=5,t.$tcb.auth.signOut();case 5:return n.next=7,t.$tcb.auth.anonymousAuthProvider().signIn();case 7:n.next=10;break;case 9:localStorage.removeItem("twikoo-access-token");case 10:t.isLogin=!1,t.loading=!1;case 12:case"end":return n.stop()}}),n)})))()},onRegist:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n,r;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.loading=!0,n=(0,a["default"])(e.password),t.next=4,(0,d.call)(e.$tcb,"SET_PASSWORD",{password:n,credentials:e.credentials});case 4:(r=t.sent).result.code?(e.loginErrorMessage=(0,d.t)("ADMIN_REGIST_FAILED"),r.result.message&&(e.loginErrorMessage+=","+r.result.message),d.logger.warn("Twikoo 注册失败",r)):(e.passwordMd5="",e.isSetPassword=!0,e.onLogin()),e.loading=!1;case 7:case"end":return t.stop()}}),t)})))()},onShow:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.loading=!0,t.next=3,e.checkAuth();case 3:if(e.isLogin){t.next=7;break}return t.next=6,e.checkIfPasswordSet();case 6:e.focusPassword();case 7:e.loading=!1;case 8:case"end":return t.stop()}}),t)})))()},focusPassword:function(){var e=this;setTimeout((function(){e.$refs.focusme&&e.$refs.focusme.focus()}),500)},checkAuth:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n,r;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.$tcb){t.next=7;break}return t.next=3,e.$tcb.auth.getCurrenUser();case 3:n=t.sent,e.isLogin="CUSTOM"===n.loginType,t.next=11;break;case 7:return t.next=9,(0,d.call)(e.$tcb,"GET_CONFIG");case 9:(r=t.sent)&&r.result&&r.result.config&&(e.isLogin=r.result.config.IS_ADMIN);case 11:case"end":return t.stop()}}),t)})))()},checkIfPasswordSet:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,(0,d.call)(e.$tcb,"GET_PASSWORD_STATUS");case 3:n=t.sent,e.version=n.result.version,e.isSetPassword=n.result.status,e.isSetCredentials=!e.$tcb,t.next=14;break;case 9:throw t.prev=9,t.t0=t["catch"](0),e.needUpdate=!0,e.loading=!1,t.t0;case 14:case"end":return t.stop()}}),t,null,[[0,9]])})))()},onClose:function(e){e.preventDefault(),this.$emit("close")}},watch:{show:function(e){e&&this.onShow()}}}},4555:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(479)),o=r(n(4964)),a=n(1085),s=n(8129),u=n(2199),c=r(n(4785)),l=r(n(6431));t.A={components:{TkAvatar:c["default"],TkPagination:l["default"]},data:function(){return{loading:!0,comments:[],serverConfig:{},serverVersion:this.$twikoo.serverConfig.VERSION,clientVersion:u.version,count:0,pageSize:5,currentPage:1,filter:{keyword:"",type:""}}},methods:{t:s.t,displayCreated:function(e){return(0,s.timeago)(e.created)},convertLink:function(e){return(0,s.convertLink)(e)},getComments:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.loading=!0,t.next=3,(0,s.call)(e.$tcb,"COMMENT_GET_FOR_ADMIN",{per:e.pageSize,page:e.currentPage,keyword:e.filter.keyword,type:e.filter.type});case 3:(n=t.sent).result&&!n.result.code&&(e.count=n.result.count,e.comments=n.result.data),e.$nextTick((function(){(0,s.renderLinks)(e.$refs.comments),(0,s.renderMath)(e.$refs["comment-list"],e.$twikoo.katex),e.highlightCode()})),e.loading=!1;case 7:case"end":return t.stop()}}),t)})))()},getConfig:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,s.call)(e.$tcb,"GET_CONFIG_FOR_ADMIN");case 2:(n=t.sent).result&&!n.result.code&&(e.serverConfig=n.result.config,e.checkConfig());case 4:case"end":return t.stop()}}),t)})))()},checkConfig:function(){var e=this;this.serverConfig.HIGHLIGHT||(this.serverConfig.HIGHLIGHT="true");var t={},n=localStorage.getItem("twikoo");n&&(t=JSON.parse(n)),["nick","mail","avatar"].forEach((function(n){t[n]?e.serverConfig[n]=t[n]:e.serverConfig[n]=""})),!t.nick&&this.serverConfig.BLOGGER_NICK&&(t.nick=this.serverConfig.BLOGGER_NICK),!t.mail&&this.serverConfig.BLOGGER_EMAIL&&(t.mail=this.serverConfig.BLOGGER_EMAIL),!t.link&&this.serverConfig.SITE_URL&&(t.link=this.serverConfig.SITE_URL),localStorage.setItem("twikoo",JSON.stringify(t)),a.app.$emit("initMeta")},onPageSizeChange:function(e){this.pageSize=e,this.getComments()},switchPage:function(e){this.currentPage=e,this.getComments()},handleView:function(e){window.open("".concat(e.url,"#").concat(e._id))},handleDelete:function(e){var t=this;return(0,o["default"])(i["default"].mark((function n(){return i["default"].wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(confirm((0,s.t)("ADMIN_COMMENT_DELETE_CONFIRM"))){n.next=2;break}return n.abrupt("return");case 2:return t.loading=!0,n.next=5,(0,s.call)(t.$tcb,"COMMENT_DELETE_FOR_ADMIN",{id:e._id});case 5:return n.next=7,t.getComments();case 7:t.loading=!1;case 8:case"end":return n.stop()}}),n)})))()},handleSpam:function(e,t){this.setComment(e,{isSpam:t})},handleTop:function(e,t){this.setComment(e,{top:t})},setComment:function(e,t){var n=this;return(0,o["default"])(i["default"].mark((function r(){return i["default"].wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return n.loading=!0,r.next=3,(0,s.call)(n.$tcb,"COMMENT_SET_FOR_ADMIN",{id:e._id,set:t});case 3:return r.next=5,n.getComments();case 5:n.loading=!1;case 6:case"end":return r.stop()}}),r)})))()},highlightCode:function(){"true"===this.serverConfig.HIGHLIGHT&&(0,s.renderCode)(this.$refs["comment-list"],this.serverConfig.HIGHLIGHT_THEME,this.serverConfig.HIGHLIGHT_PLUGIN)}},mounted:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.all([e.getConfig(),e.getComments()]);case 2:e.highlightCode();case 3:case"end":return t.stop()}}),t)})))()}}},4868:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(479)),o=r(n(4964)),a=n(8129),s=n(2199);function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n["return"]||n["return"]()}finally{if(s)throw o}}}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&this.$refs["tk-replies"]&&(this.hasExpand=this.$refs["tk-replies"].scrollHeight>236)},showContentExpandIfNeed:function(){this.hasContentExpand=this.hasContentExpand||this.$refs["tk-content"].scrollHeight>500},showContentExpandIfNeedAfterImagesLoaded:function(){var e=this;this.$refs["tk-content"].querySelectorAll("img").forEach((function(t){t.onload=e.showContentExpandIfNeed}))},scrollToComment:function(){-1!==window.location.hash.indexOf(this.comment.id)&&(this.$refs["tk-comment"].scrollIntoView({behavior:"smooth"}),this.$emit("expand"))},onLike:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.likeLoading){t.next=2;break}return t.abrupt("return");case 2:return e.likeLoading=!0,t.next=5,(0,a.call)(e.$tcb,"COMMENT_LIKE",{id:e.comment.id});case 5:e.liked?e.like--:e.like++,e.liked=!e.liked,e.likeLoading=!1;case 8:case"end":return t.stop()}}),t)})))()},onReply:function(e){this.pid=e,this.$emit("reply",this.comment.id)},onReplyReply:function(e){this.pid=e,e?this.$emit("reply",this.comment.id):this.$emit("reply","")},onCancel:function(){this.pid="",this.$emit("reply","")},onLoad:function(){this.comment.replies.length>0&&this.$refs["tk-replies"].lastElementChild.scrollIntoView({behavior:"smooth",block:"center"}),this.pid="",this.$emit("reply",""),this.$emit("load"),this.onExpand()},onExpand:function(){this.isExpanded=!0},onCollapse:function(){this.isExpanded=!1},onContentExpand:function(){this.isContentExpanded=!0},onContentCollapse:function(){this.isContentExpanded=!1},checkAuth:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.$tcb){t.next=7;break}return t.next=3,e.$tcb.auth.getCurrenUser();case 3:n=t.sent,e.isLogin="CUSTOM"===n.loginType,t.next=8;break;case 7:e.isLogin=e.$twikoo.serverConfig&&e.$twikoo.serverConfig.IS_ADMIN;case 8:case"end":return t.stop()}}),t)})))()},handleSpam:function(e,t){t.preventDefault(),this.setComment({isSpam:e})},handleTop:function(e,t){t.preventDefault(),this.setComment({top:e})},popupLightbox:function(e){if("true"===this.$twikoo.serverConfig.LIGHTBOX){var t=e.target;if("IMG"===t.tagName&&!t.classList.contains("tk-owo-emotion")){var n=document.createElement("div");n.className="tk-lightbox";var r=document.createElement("img");r.className="tk-lightbox-image",r.src=t.src,n.appendChild(r),n.addEventListener("click",(function(){document.body.removeChild(n)})),document.body.appendChild(n)}}},setComment:function(e){var t=this;return(0,o["default"])(i["default"].mark((function n(){return i["default"].wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return t.loading=!0,n.next=3,(0,a.call)(t.$tcb,"COMMENT_SET_FOR_ADMIN",{id:t.comment.id,set:e});case 3:t.loading=!1,t.$emit("load");case 5:case"end":return n.stop()}}),n)})))()}},mounted:function(){var e=this;this.$nextTick(this.showContentExpandIfNeed),this.$nextTick(this.showContentExpandIfNeedAfterImagesLoaded),this.$nextTick(this.showExpandIfNeed),this.$nextTick(this.scrollToComment),this.$nextTick((function(){(0,a.renderLinks)(e.$refs.comment),(0,a.renderMath)(e.$refs.comment,e.$twikoo.katex)})),this.checkAuth()},watch:{"comment.like":{handler:function(e){this.like=this.comment.like,this.liked=this.comment.liked},immediate:!0},"config.HIGHLIGHT":{handler:function(e){var t=this;"true"===e&&this.$nextTick((function(){(0,a.renderCode)(t.$refs.comment,t.config.HIGHLIGHT_THEME,t.config.HIGHLIGHT_PLUGIN)}))},immediate:!0}}}},4333:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(479)),o=r(n(4964)),a=n(8129),s=r(n(5438)),u=r(n(417)),c=r(n(504)),l=r(n(9966)),d=r(n(4478));t.A={components:{TkSubmit:s["default"],TkComment:u["default"]},props:{showAdminEntry:Boolean},data:function(){return{loading:!0,loadingMore:!1,errorMessage:"",config:{},comments:[],showExpand:!0,count:0,replyId:"",iconSetting:c["default"],iconRefresh:l["default"]}},methods:{t:a.t,initConfig:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,a.call)(e.$tcb,"GET_CONFIG");case 2:(n=t.sent)&&n.result&&n.result.config&&(e.config=n.result.config,d["default"].prototype.$twikoo.serverConfig=n.result.config);case 4:case"end":return t.stop()}}),t)})))()},initComments:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.loading=!0,n=(0,a.getUrl)(e.$twikoo.path),t.next=4,e.getComments({url:n});case 4:e.loading=!1;case 5:case"end":return t.stop()}}),t)})))()},refresh:function(){this.comments=[],this.initComments()},onExpand:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n,r;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.loadingMore){t.next=2;break}return t.abrupt("return");case 2:return e.loadingMore=!0,n=(0,a.getUrl)(e.$twikoo.path),r=e.comments.filter((function(e){return!e.top})).map((function(e){return e.created})).sort((function(e,t){return e-t}))[0],t.next=7,e.getComments({url:n,before:r});case 7:e.loadingMore=!1;case 8:case"end":return t.stop()}}),t)})))()},onCommentLoaded:function(){"function"==typeof this.$twikoo.onCommentLoaded&&this.$twikoo.onCommentLoaded()},getComments:function(e){var t=this;return(0,o["default"])(i["default"].mark((function n(){var r;return i["default"].wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,(0,a.call)(t.$tcb,"COMMENT_GET",e);case 3:(r=n.sent)&&r.result&&r.result.data&&(t.comments=e.before?t.comments.concat(r.result.data):r.result.data,t.showExpand=r.result.more,t.count=r.result.count||t.comments.length||0,t.$nextTick(t.onCommentLoaded)),n.next=10;break;case 7:n.prev=7,n.t0=n["catch"](0),t.errorMessage=n.t0.message;case 10:case"end":return n.stop()}}),n,null,[[0,7]])})))()},onReply:function(e){this.replyId=e},openAdmin:function(){this.$emit("admin")}},mounted:function(){this.initConfig(),this.initComments()}}},418:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(479)),o=r(n(4964)),a=n(2199),s=n(8129);t.A={data:function(){return{version:a.version,counter:{}}},methods:{getCounter:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n,r,o,a;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=document.getElementById("twikoo_visitors")){t.next=3;break}return t.abrupt("return");case 3:if(-1===["localhost","127.0.0.1","0.0.0.0"].indexOf(window.location.hostname)){t.next=5;break}return t.abrupt("return");case 5:return r=(0,s.getUrl)(e.$twikoo.path),o=(0,s.getHref)(e.$twikoo.href),t.next=9,(0,s.call)(e.$tcb,"COUNTER_GET",{url:r,href:o,title:document.title});case 9:a=t.sent,e.counter=a.result,(e.counter.time||0===e.counter.time)&&(n.innerHTML=e.counter.time);case 12:case"end":return t.stop()}}),t)})))()}},mounted:function(){this.getCounter()}}},2362:function(e,t,n){"use strict";Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var r=n(1085),i=n(8129),o=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;t.A={props:{nick:String,mail:String,link:String,config:Object},data:function(){return{metaInputs:[{key:"nick",locale:(0,i.t)("META_INPUT_NICK"),name:"nick",type:"text"},{key:"mail",locale:(0,i.t)("META_INPUT_MAIL"),name:"mail",type:"email"},{key:"link",locale:(0,i.t)("META_INPUT_LINK"),name:"link",type:"text"}],metaData:{nick:"",mail:"",link:""}}},computed:{displayedFields:function(){var e=this.config.DISPLAYED_FIELDS;return{nick:!e||-1!==e.indexOf("nick"),mail:!e||-1!==e.indexOf("mail"),link:!e||-1!==e.indexOf("link")}},displayedInputs:function(){var e=this;return this.metaInputs.filter((function(t){return!!e.displayedFields[t.key]}))},requiredFields:function(){var e=this.config.REQUIRED_FIELDS;return{nick:!e||-1!==e.indexOf("nick"),mail:!e||-1!==e.indexOf("mail"),link:!!e&&-1!==e.indexOf("link")}}},methods:{t:i.t,initMeta:function(){var e=localStorage.getItem("twikoo");if(e){var t=JSON.parse(e);this.metaData.nick=t.nick,this.metaData.mail=t.mail,this.metaData.link=t.link}this.updateMeta()},updateMeta:function(){localStorage.setItem("twikoo",JSON.stringify(this.metaData)),this.$emit("update",{meta:this.metaData,valid:this.checkValid()})},checkValid:function(){var e=o.test(this.metaData.mail);return(this.metaData.nick||!this.requiredFields.nick)&&(e||!this.requiredFields.mail)&&(this.metaData.link||!this.requiredFields.link)},checkQQ:function(){if((0,i.isQQ)(this.metaData.nick)){var e=this.metaData.nick.replace(/@qq.com/gi,""),t="".concat(e,"@qq.com");this.metaData.mail=t,this.getQQNick(e)}},getQQNick:function(e){var t=this,n="https://api.qjqq.cn/api/qqinfo?qq=".concat(e),r=new XMLHttpRequest;r.onreadystatechange=function(){if(4===r.readyState&&200===r.status){var e=JSON.parse(r.responseText);t.metaData.nick=e.name,t.updateMeta()}},r.open("GET",n),r.send()},checkAdminCrypt:function(){var e=this.$root.$children[0],t=!this.config.HIDE_ADMIN_CRYPT||this.config.HIDE_ADMIN_CRYPT===this.metaData.nick;e.onShowAdminEntry(t)},onMetaChange:function(){this.checkQQ(),this.updateMeta(),this.checkAdminCrypt()}},watch:{nick:function(e){this.metaData.nick=e},mail:function(e){this.metaData.mail=e},link:function(e){this.metaData.link=e},requiredFields:{handler:function(e,t){this.$emit("update",{meta:this.metaData,valid:this.checkValid()})},deep:!0},"config.VERSION":function(){this.checkAdminCrypt()}},mounted:function(){r.app.$on("initMeta",this.initMeta),this.initMeta()}}},9171:function(e,t,n){"use strict";Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var r=n(8129);t.A={props:{pageSize:{type:Number,"default":10},total:{type:Number,"default":0}},data:function(){return{currentPage:1,userInput:0,userPageSize:0,pagers:[]}},computed:{pageCount:function(){return Math.ceil(this.total/this.pageSize)}},methods:{t:r.t,generatePager:function(){for(var e=[],t=1;t<=this.pageCount;t++)Math.abs(this.currentPage-t)<3||1===t||t===this.pageCount?e.push({title:"".concat(t),page:t}):Math.abs(this.currentPage-t)<4&&e.push({title:"...",page:t});this.pagers=e},currentChange:function(e){this.currentPage=parseInt(e),this.currentPage>this.pageCount&&(this.currentPage=this.pageCount),this.userInput=0,this.$emit("current-change",this.currentPage),this.generatePager()},pageSizeChamge:function(e){this.userPageSize=0,this.$emit("page-size-change",parseInt(e))},handleInput:function(e){this.userInput=parseInt(e)},handleInputPageSize:function(e){this.userPageSize=parseInt(e)}},watch:{total:{handler:function(){this.generatePager()},immediate:!0},pageSize:{handler:function(){this.generatePager()}}}}},147:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"B",{value:!0}),t.A=void 0;var i=r(n(479)),o=r(n(4964)),a=r(n(1423)),s=r(n(6639)),u=r(n(5171)),c=r(n(2573)),l=r(n(4785)),d=r(n(3415)),f=n(8129),p=r(n(1628)),h=["apng","bmp","gif","jpeg","jpg","png","svg","tif","tiff","webp"];t.A={components:{TkAvatar:l["default"],TkMetaInput:d["default"]},directives:{Clickoutside:c["default"]},props:{replyId:String,pid:String,config:Object},data:function(){return{isSending:!1,isPreviewing:!1,isMetaValid:!1,errorMessage:"",owo:null,comment:"",commentHtml:"",nick:"",mail:"",link:"",turnstileLoad:null,iconMarkdown:a["default"],iconEmotion:s["default"],iconImage:u["default"]}},computed:{canSend:function(){return!this.isSending&&!!this.isMetaValid&&!!this.comment.trim()},textarea:function(){return this.$refs.textarea?this.$refs.textarea.$refs.textarea:null},commentPlaceholder:function(){var e=this.$twikoo.placeholder||this.config.COMMENT_PLACEHOLDER||"";return e=e.replace(/
    /g,"\n")},maxLength:function(){var e=parseInt(this.config.LIMIT_LENGTH);return Number.isNaN(e)&&(e=500),e>0?e:null}},methods:{t:f.t,initDraft:function(){var e=localStorage.getItem("twikoo-draft");!this.comment&&e&&(this.comment=e)},saveDraft:function(){localStorage.setItem("twikoo-draft",this.comment)},initOwo:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if("true"!==e.config.SHOW_EMOTION){t.next=6;break}return t.next=3,(0,f.initOwoEmotions)(e.config.EMOTION_CDN||"https://owo.imaegoo.com/owo.json");case 3:n=t.sent,e.owo=new p["default"]({logo:s["default"],container:e.$refs.owo,target:e.textarea,odata:n,position:"down",maxHeight:"250px"}),f.marked.setOptions({odata:(0,f.initMarkedOwo)(n)});case 6:case"end":return t.stop()}}),t)})))()},initTurnstile:function(){var e=this;this.config.TURNSTILE_SITE_KEY&&(window.turnstile?this.turnstileLoad=Promise.resolve():this.turnstileLoad=new Promise((function(t,n){var r=document.createElement("script");r.src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",r.onload=t,r.onerror=n,e.$refs["turnstile-container"].appendChild(r)})))},getTurnstileToken:function(){var e=this;return new Promise((function(t,n){e.turnstileLoad.then((function(){var r=window.turnstile.render(e.$refs.turnstile,{sitekey:e.config.TURNSTILE_SITE_KEY,callback:function(e){t(e),setTimeout((function(){window.turnstile.remove(r)}),5e3)},"error-callback":n})}))}))},onMetaUpdate:function(e){this.nick=e.meta.nick,this.mail=e.meta.mail,this.link=e.meta.link,this.isMetaValid=e.valid},cancel:function(){this.$emit("cancel")},onCommentInput:function(){this.saveDraft(),this.updatePreview()},preview:function(){this.isPreviewing=!this.isPreviewing,this.updatePreview()},updatePreview:function(){var e=this;this.isPreviewing&&(this.commentHtml=(0,f.marked)(this.comment),this.$nextTick((function(){(0,f.renderLinks)(e.$refs["comment-preview"]),(0,f.renderMath)(e.$refs["comment-preview"],e.$twikoo.katex),"true"===e.config.HIGHLIGHT&&(0,f.renderCode)(e.$refs["comment-preview"],e.config.HIGHLIGHT_THEME,e.config.HIGHLIGHT_PLUGIN)})))},send:function(){var e=this;return(0,o["default"])(i["default"].mark((function t(){var n,r;return i["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.isSending=!0,t.prev=1,!e.comment.match(new RegExp("!\\[".concat((0,f.t)("IMAGE_UPLOAD_PLACEHOLDER"),".+\\]\\(\\)")))){t.next=4;break}throw new Error((0,f.t)("IMAGE_UPLOAD_PLEASE_WAIT"));case 4:return t.t0=e.nick,t.t1=e.mail,t.t2=e.link,t.next=9,(0,f.getUserAgent)();case 9:if(t.t3=t.sent,t.t4=(0,f.getUrl)(e.$twikoo.path),t.t5=(0,f.getHref)(e.$twikoo.href),t.t6=(0,f.marked)(e.comment),t.t7=e.pid?e.pid:e.replyId,t.t8=e.replyId,n={nick:t.t0,mail:t.t1,link:t.t2,ua:t.t3,url:t.t4,href:t.t5,comment:t.t6,pid:t.t7,rid:t.t8},!e.config.TURNSTILE_SITE_KEY){t.next=20;break}return t.next=19,e.getTurnstileToken();case 19:n.turnstileToken=t.sent;case 20:return t.next=22,(0,f.call)(e.$tcb,"COMMENT_SUBMIT",n);case 22:if(!((r=t.sent)&&r.result&&r.result.id)){t.next=30;break}e.comment="",e.errorMessage="",e.$emit("load"),e.saveDraft(),t.next=31;break;case 30:throw new Error(r.result.message);case 31:t.next=37;break;case 33:t.prev=33,t.t9=t["catch"](1),f.logger.error("评论失败",t.t9),e.errorMessage="".concat((0,f.t)("COMMENT_FAILED"),": ").concat(t.t9&&t.t9.message);case 37:return t.prev=37,e.isSending=!1,t.finish(37);case 40:case"end":return t.stop()}}),t,null,[[1,33,37,40]])})))()},addEventListener:function(){this.textarea&&this.textarea.addEventListener("paste",this.onPaste)},onBgImgChange:function(){this.config.COMMENT_BG_IMG&&this.textarea&&(this.textarea.style["background-image"]='url("'.concat(this.config.COMMENT_BG_IMG,'")'))},onEnterKeyUp:function(e){(e.ctrlKey||e.metaKey)&&this.canSend&&(this.send(),e.preventDefault())},closeOwo:function(){this.owo&&this.owo.container.classList.contains("OwO-open")&&this.owo.toggle()},openSelectImage:function(){this.$refs.inputFile.click()},onSelectImage:function(){var e=this.$refs.inputFile.files[0];this.parseAndUploadPhoto(e)},onPaste:function(e){var t;e.clipboardData&&(e.clipboardData.files[0]?t=e.clipboardData.files[0]:e.clipboardData.items[0]&&e.clipboardData.items[0].getAsFile()&&(t=e.clipboardData.items[0].getAsFile()),this.parseAndUploadPhoto(t))},parseAndUploadPhoto:function(e){if(e&&"true"===this.config.SHOW_IMAGE){var t=e.name.split("."),n=t.length>1?t.pop():"";if(-1!==h.indexOf(n.toLowerCase())){var r=this.getUserId(),i="".concat(Date.now(),"-").concat(r),o=t.join(".");this.paste(this.getImagePlaceholder(i,n));var a=this.config.IMAGE_CDN;!this.$tcb||a&&"qcloud"!==a?a?this.uploadPhotoToThirdParty(i,o,n,e):this.uploadFailed(i,n,(0,f.t)("IMAGE_UPLOAD_FAILED_NO_CONF")):this.uploadPhotoToQcloud(i,o,n,e)}}},getUserId:function(){return this.$tcb?this.$tcb.auth.currentUser.uid:localStorage.getItem("twikoo-access-token")},uploadPhotoToQcloud:function(e,t,n,r){var a=this;return(0,o["default"])(i["default"].mark((function s(){var o,u,c;return i["default"].wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.prev=0,i.next=3,a.$tcb.app.uploadFile({cloudPath:"tk-img/".concat(e,".").concat(n),filePath:r});case 3:if(!(o=i.sent).fileID){i.next=10;break}return i.next=7,a.$tcb.app.getTempFileURL({fileList:[o.fileID]});case 7:u=i.sent,c=u.fileList[0].tempFileURL,a.uploadCompleted(e,t,n,c);case 10:i.next=16;break;case 12:i.prev=12,i.t0=i["catch"](0),console.error(i.t0),a.uploadFailed(e,n,i.t0.message);case 16:case"end":return i.stop()}}),s,null,[[0,12]])})))()},uploadPhotoToThirdParty:function(e,t,n,r){var a=this;return(0,o["default"])(i["default"].mark((function s(){var o,u,c;return i["default"].wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.prev=0,i.t0=f.call,i.t1=a.$tcb,i.t2="".concat(e,".").concat(n),i.next=6,(0,f.blobToDataURL)(r);case 6:return i.t3=i.sent,i.t4={fileName:i.t2,photo:i.t3},i.next=10,(0,i.t0)(i.t1,"UPLOAD_IMAGE",i.t4);case 10:u=i.sent,(c=u.result).data?a.uploadCompleted(e,t,n,c.data.url):1040===c.code&&c.err&&(o=c.err.match(/this image exists at: (http[^ ]+)/))?(console.warn(c),a.uploadCompleted(e,t,n,o[1])):(console.error(c),a.uploadFailed(e,n,c.err)),i.next=19;break;case 15:i.prev=15,i.t5=i["catch"](0),console.error(i.t5),a.uploadFailed(e,n,i.t5.message);case 19:case"end":return i.stop()}}),s,null,[[0,15]])})))()},uploadCompleted:function(e,t,n,r){t=t.replace(/[[\]]/g,"_"),this.comment=this.comment.replace(this.getImagePlaceholder(e,n),"![".concat(t,"](").concat(r,")")),this.$refs.inputFile.value=""},uploadFailed:function(e,t,n){this.comment=this.comment.replace(this.getImagePlaceholder(e,t),"_".concat((0,f.t)("IMAGE_UPLOAD_FAILED"),": ").concat(n,"_")),this.$refs.inputFile.value=""},paste:function(e){if(document.selection)document.selection.createRange().text=e;else if(this.textarea.selectionStart||0===this.textarea.selectionStart){var t=this.textarea.selectionStart,n=this.textarea.selectionEnd;this.comment=this.comment.substring(0,t)+e+this.comment.substring(n,this.comment.length),this.textarea.selectionStart=t+e.length,this.textarea.selectionEnd=t+e.length}else this.comment+=e},getImagePlaceholder:function(e,t){return"![".concat((0,f.t)("IMAGE_UPLOAD_PLACEHOLDER")," ").concat(e,".").concat(t,"]()")}},mounted:function(){this.pid&&this.$refs["tk-submit"].scrollIntoView({behavior:"instant",block:"center"}),this.initDraft(),this.initOwo(),this.addEventListener(),this.onBgImgChange(),this.initTurnstile()},watch:{"config.SHOW_EMOTION":function(){this.initOwo()},"config.COMMENT_BG_IMG":function(){this.onBgImgChange()},"config.TURNSTILE_SITE_KEY":function(){this.initTurnstile()}}}},1573:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"twikoo",attrs:{id:"twikoo"}},[t("tk-comments",{attrs:{"show-admin-entry":e.showAdminEntry},on:{admin:function(t){e.showAdmin=!0}}}),e._v(" "),t("tk-footer"),e._v(" "),t("tk-admin",{attrs:{show:e.showAdmin},on:{close:function(t){e.showAdmin=!1}}})],1)},t.Yp=[]},7090:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-action"},[t("a",{staticClass:"tk-action-link","class":{"tk-liked":e.liked},on:{click:e.onLike}},[t("span",{staticClass:"tk-action-icon",domProps:{innerHTML:e._s(e.iconLike)}}),e._v(" "),t("span",{staticClass:"tk-action-icon tk-action-icon-solid",domProps:{innerHTML:e._s(e.iconLikeSolid)}}),e._v(" "),t("span",{staticClass:"tk-action-count"},[e._v(e._s(e.likeCountStr))])]),e._v(" "),t("a",{staticClass:"tk-action-link",on:{click:e.onReply}},[t("span",{staticClass:"tk-action-icon",domProps:{innerHTML:e._s(e.iconComment)}}),e._v(" "),t("span",{staticClass:"tk-action-icon tk-action-icon-solid",domProps:{innerHTML:e._s(e.iconCommentSolid)}}),e._v(" "),t("span",{staticClass:"tk-action-count"},[e._v(e._s(e.repliesCountStr))])])])},t.Yp=[]},7236:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-admin-container"},[t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"tk-admin","class":{__show:e.show}},[t("a",{staticClass:"tk-admin-close",domProps:{innerHTML:e._s(e.iconClose)},on:{click:e.onClose}}),e._v(" "),e.needUpdate?t("div",{staticClass:"tk-login-title"},[t("div",[e._v(e._s(e.t("ADMIN_NEED_UPDATE")))]),e._v(" "),t("a",{attrs:{href:"https://twikoo.js.org/update.html",target:"_blank"}},[e._v("https://twikoo.js.org/update.html")])]):e._e(),e._v(" "),e.needUpdate?e._e():t("div",[!e.isLogin&&e.isSetPassword?t("div",{staticClass:"tk-login"},[t("div",{staticClass:"tk-login-title"},[e._v(e._s(e.t("ADMIN_LOGIN_TITLE")))]),e._v(" "),t("form",[t("input",{attrs:{type:"hidden"}}),e._v(" "),t("el-input",{ref:"focusme",staticClass:"tk-password",attrs:{placeholder:e.t("ADMIN_PASSWORD_PLACEHOLDER"),"show-password":""},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.onLogin.apply(null,arguments)}},model:{value:e.password,callback:function(t){e.password=t},expression:"password"}},[t("template",{slot:"prepend"},[e._v(e._s(e.t("ADMIN_PASSWORD")))]),e._v(" "),t("el-button",{attrs:{slot:"append"},on:{click:e.onLogin},slot:"append"},[e._v(e._s(e.t("ADMIN_LOGIN")))])],2)],1),e._v(" "),e.loginErrorMessage?t("div",{staticClass:"tk-login-msg"},[e._v("\n "+e._s(e.loginErrorMessage)+"\n "),t("a",{attrs:{href:"https://twikoo.js.org/faq.html",rel:"noopener noreferrer",target:"_blank"}},[e._v(e._s(e.t("ADMIN_FORGOT")))])]):e._e()]):e._e(),e._v(" "),e.isLogin||e.isSetPassword?e._e():t("div",{staticClass:"tk-regist"},[t("div",{staticClass:"tk-login-title"},[e._v(e._s(e.t("ADMIN_LOGIN_TITLE")))]),e._v(" "),t("form",[e.isSetCredentials?e._e():t("el-input",{ref:"focusme",staticClass:"tk-password",attrs:{placeholder:e.t("ADMIN_CREDENTIALS_PLACEHOLDER")},model:{value:e.credentials,callback:function(t){e.credentials=t},expression:"credentials"}},[t("template",{slot:"prepend"},[e._v(e._s(e.t("ADMIN_CREDENTIALS")))])],2),e._v(" "),t("el-input",{staticClass:"tk-password",attrs:{placeholder:e.t("ADMIN_SET_PASSWORD_PLACEHOLDER"),"show-password":""},model:{value:e.password,callback:function(t){e.password=t},expression:"password"}},[t("template",{slot:"prepend"},[e._v(e._s(e.t("ADMIN_SET_PASSWORD")))])],2),e._v(" "),t("el-input",{staticClass:"tk-password",attrs:{placeholder:e.t("ADMIN_SET_PASSWORD_CONFIRM_PLACEHOLDER"),"show-password":""},model:{value:e.passwordConfirm,callback:function(t){e.passwordConfirm=t},expression:"passwordConfirm"}},[t("template",{slot:"prepend"},[e._v(e._s(e.t("ADMIN_SET_PASSWORD_CONFIRM")))])],2)],1),e._v(" "),t("el-button",{staticClass:"tk-regist-button",attrs:{disabled:!e.canRegist},on:{click:e.onRegist}},[e._v(e._s(e.t("ADMIN_REGIST")))]),e._v(" "),e.loginErrorMessage?t("div",{staticClass:"tk-login-msg"},[e._v(e._s(e.loginErrorMessage))]):e._e(),e._v(" "),e.isSetCredentials?e._e():t("div",{staticClass:"tk-login-msg"},[t("a",{attrs:{href:"https://twikoo.js.org/faq.html",rel:"noopener noreferrer",target:"_blank"}},[e._v(e._s(e.t("ADMIN_CREDENTIALS_FAQ")))])])],1),e._v(" "),e.isLogin?t("div",{staticClass:"tk-panel"},[t("div",{staticClass:"tk-panel-title"},[t("div",[e._v(e._s(e.t("ADMIN_TITLE")))]),e._v(" "),t("a",{staticClass:"tk-panel-logout",on:{click:e.onLogout}},[e._v(e._s(e.t("ADMIN_LOGOUT")))])]),e._v(" "),t("div",{staticClass:"tk-tabs"},[t("div",{staticClass:"tk-tab","class":{__active:"comment"===e.activeTabName},on:{click:function(t){e.activeTabName="comment"}}},[e._v(e._s(e.t("ADMIN_COMMENT")))]),e._v(" "),t("div",{staticClass:"tk-tab","class":{__active:"config"===e.activeTabName},on:{click:function(t){e.activeTabName="config"}}},[e._v(e._s(e.t("ADMIN_CONFIG")))]),e._v(" "),t("div",{staticClass:"tk-tab","class":{__active:"import"===e.activeTabName},on:{click:function(t){e.activeTabName="import"}}},[e._v(e._s(e.t("ADMIN_IMPORT")))]),e._v(" "),t("div",{staticClass:"tk-tab","class":{__active:"export"===e.activeTabName},on:{click:function(t){e.activeTabName="export"}}},[e._v(e._s(e.t("ADMIN_EXPORT")))])]),e._v(" "),t("tk-admin-comment",{directives:[{name:"show",rawName:"v-show",value:"comment"===e.activeTabName,expression:"activeTabName === 'comment'"}]}),e._v(" "),t("tk-admin-config",{directives:[{name:"show",rawName:"v-show",value:"config"===e.activeTabName,expression:"activeTabName === 'config'"}]}),e._v(" "),t("tk-admin-import",{directives:[{name:"show",rawName:"v-show",value:"import"===e.activeTabName,expression:"activeTabName === 'import'"}]}),e._v(" "),t("tk-admin-export",{directives:[{name:"show",rawName:"v-show",value:"export"===e.activeTabName,expression:"activeTabName === 'export'"}]})],1):e._e()])])])},t.Yp=[]},3227:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"tk-admin-comment"},[e.clientVersion!==e.serverVersion?t("div",{staticClass:"tk-admin-warn"},[t("span",[e._v(e._s(e.t("ADMIN_CLIENT_VERSION"))+e._s(e.clientVersion)+",")]),e._v(" "),t("span",[e._v(e._s(e.t("ADMIN_SERVER_VERSION"))+e._s(e.serverVersion)+",")]),e._v(" "),e._m(0)]):e._e(),e._v(" "),t("div",{staticClass:"tk-admin-comment-filter"},[t("el-input",{staticClass:"tk-admin-comment-filter-keyword",attrs:{size:"small",placeholder:e.t("ADMIN_COMMENT_SEARCH_PLACEHOLDER")},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.getComments.apply(null,arguments)}},model:{value:e.filter.keyword,callback:function(t){e.$set(e.filter,"keyword",t)},expression:"filter.keyword"}}),e._v(" "),t("select",{directives:[{name:"model",rawName:"v-model",value:e.filter.type,expression:"filter.type"}],staticClass:"tk-admin-comment-filter-type",on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){return"_value"in e?e._value:e.value}));e.$set(e.filter,"type",t.target.multiple?n:n[0])}}},[t("option",{attrs:{value:""}},[e._v(e._s(e.t("ADMIN_COMMENT_FILTER_ALL")))]),e._v(" "),t("option",{attrs:{value:"VISIBLE"}},[e._v(e._s(e.t("ADMIN_COMMENT_FILTER_VISIBLE")))]),e._v(" "),t("option",{attrs:{value:"HIDDEN"}},[e._v(e._s(e.t("ADMIN_COMMENT_FILTER_HIDDEN")))])]),e._v(" "),t("el-button",{attrs:{size:"small",type:"primary"},on:{click:e.getComments}},[e._v(e._s(e.t("ADMIN_COMMENT_SEARCH")))])],1),e._v(" "),t("div",{ref:"comment-list",staticClass:"tk-admin-comment-list"},e._l(e.comments,(function(n){return t("div",{key:n._id,staticClass:"tk-admin-comment-item"},[t("div",{staticClass:"tk-admin-comment-meta"},[t("tk-avatar",{attrs:{config:e.serverConfig,avatar:n.avatar,nick:n.nick,mail:n.mail,link:n.link}}),e._v(" "),n.link?e._e():t("span",[e._v(e._s(n.nick)+" ")]),e._v(" "),n.link?t("a",{attrs:{href:e.convertLink(n.link),target:"_blank"}},[e._v(e._s(n.nick)+" ")]):e._e(),e._v(" "),n.mail?t("span",[e._v("("),t("a",{attrs:{href:"mailto:".concat(n.mail)}},[e._v(e._s(n.mail))]),e._v(") ")]):e._e(),e._v(" "),n.isSpam?t("span",[e._v(e._s(e.t("ADMIN_COMMENT_IS_SPAM_SUFFIX"))+" ")]):e._e(),e._v(" "),t("span",{staticClass:"tk-time"},[e._v(e._s(e.displayCreated(n))+" ")]),e._v(" "),t("span",{attrs:{title:n.ua}},[e._v(e._s(n.ipRegion))])],1),e._v(" "),t("div",{ref:"comments",refInFor:!0,staticClass:"tk-content",domProps:{innerHTML:e._s(n.comment)}}),e._v(" "),t("div",{staticClass:"tk-admin-actions"},[t("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(t){return e.handleView(n)}}},[e._v(e._s(e.t("ADMIN_COMMENT_VIEW")))]),e._v(" "),n.isSpam?t("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(t){return e.handleSpam(n,!1)}}},[e._v(e._s(e.t("ADMIN_COMMENT_SHOW")))]):e._e(),e._v(" "),n.isSpam?e._e():t("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(t){return e.handleSpam(n,!0)}}},[e._v(e._s(e.t("ADMIN_COMMENT_HIDE")))]),e._v(" "),!n.rid&&n.top?t("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(t){return e.handleTop(n,!1)}}},[e._v(e._s(e.t("ADMIN_COMMENT_UNTOP")))]):e._e(),e._v(" "),n.rid||n.top?e._e():t("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(t){return e.handleTop(n,!0)}}},[e._v(e._s(e.t("ADMIN_COMMENT_TOP")))]),e._v(" "),t("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(t){return e.handleDelete(n)}}},[e._v(e._s(e.t("ADMIN_COMMENT_DELETE")))])],1)])})),0),e._v(" "),t("tk-pagination",{attrs:{"page-size":e.pageSize,total:e.count},on:{"page-size-change":e.onPageSizeChange,"current-change":e.switchPage}})],1)},t.Yp=[function(){var e=this,t=e._self._c;return t("span",[e._v("请参考 "),t("a",{attrs:{href:"https://twikoo.js.org/update.html",target:"_blank"}},[e._v("版本更新")]),e._v(" 进行升级")])}]},74:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"tk-admin-config"},[e.clientVersion!==e.serverVersion?t("div",{staticClass:"tk-admin-warn"},[t("span",[e._v(e._s(e.t("ADMIN_CLIENT_VERSION"))+e._s(e.clientVersion)+",")]),e._v(" "),t("span",[e._v(e._s(e.t("ADMIN_SERVER_VERSION"))+e._s(e.serverVersion)+",")]),e._v(" "),e._m(0)]):e._e(),e._v(" "),t("div",{staticClass:"tk-admin-config-groups"},[e._l(e.settings,(function(n){return t("details",{key:n.name,staticClass:"tk-admin-config-group"},[t("summary",{staticClass:"tk-admin-config-group-title"},[e._v(e._s(n.name))]),e._v(" "),e._l(n.items,(function(n){return t("div",{key:n.key,staticClass:"tk-admin-config-item"},[t("div",{staticClass:"tk-admin-config-title",attrs:{title:n.key}},[e._v(e._s(n.key))]),e._v(" "),t("div",{staticClass:"tk-admin-config-input"},[t("el-input",{attrs:{placeholder:n.ph,size:"small","show-password":n.secret},model:{value:n.value,callback:function(t){e.$set(n,"value",t)},expression:"setting.value"}})],1),e._v(" "),t("div"),e._v(" "),t("div",{staticClass:"tk-admin-config-desc"},[e._v(e._s(n.desc))])])}))],2)})),e._v(" "),t("details",{staticClass:"tk-admin-config-group"},[t("summary",{staticClass:"tk-admin-config-group-title"},[e._v(e._s(e.t("ADMIN_CONFIG_EMAIL_TEST")))]),e._v(" "),t("div",{staticClass:"tk-admin-config-email-test"},[t("div",{staticClass:"tk-admin-config-email-test-desc"},[e._v(e._s(e.t("ADMIN_CONFIG_EMAIL_TEST_HELP")))]),e._v(" "),t("div",{staticClass:"tk-admin-config-input"},[t("el-input",{attrs:{size:"small"},model:{value:e.emailTestAddress,callback:function(t){e.emailTestAddress=t},expression:"emailTestAddress"}},[t("el-button",{attrs:{slot:"append",type:"info"},on:{click:e.testEmail},slot:"append"},[e._v(e._s(e.t("ADMIN_CONFIG_EMAIL_TEST_BTN")))])],1)],1),e._v(" "),t("div",{staticClass:"tk-admin-config-email-test-desc"},[e._v(e._s(e.t("ADMIN_CONFIG_EMAIL_TEST_RESULT"))+e._s(e.emailTestResult))])])])],2),e._v(" "),t("div",{staticClass:"tk-admin-config-actions"},[t("el-button",{attrs:{size:"small",type:"primary"},on:{click:e.saveConfig}},[e._v(e._s(e.t("ADMIN_CONFIG_SAVE")))]),e._v(" "),t("el-button",{attrs:{size:"small",type:"info"},on:{click:e.resetConfig}},[e._v(e._s(e.t("ADMIN_CONFIG_RESET")))])],1),e._v(" "),t("div",{staticClass:"tk-admin-config-message"},[e._v(e._s(e.message))])])},t.Yp=[function(){var e=this,t=e._self._c;return t("span",[e._v("请参考 "),t("a",{attrs:{href:"https://twikoo.js.org/update.html",target:"_blank"}},[e._v("版本更新")]),e._v(" 进行升级")])}]},9976:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-admin-export"},[t("div",{staticClass:"tk-admin-warn tk-admin-import-warn"},[t("p",[e._v(e._s(e.t("ADMIN_EXPORT_WARN")))])]),e._v(" "),t("el-button",{attrs:{size:"small",disabled:e.loading},on:{click:function(t){return e.doExport("comment")}}},[e._v(e._s(e.t("ADMIN_EXPORT_COMMENT")))]),e._v(" "),t("el-button",{attrs:{size:"small",disabled:e.loading},on:{click:function(t){return e.doExport("counter")}}},[e._v(e._s(e.t("ADMIN_EXPORT_COUNTER")))])],1)},t.Yp=[]},872:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-admin-import"},[t("div",{staticClass:"tk-admin-warn tk-admin-import-warn"},[t("p",[e._v(e._s(e.t("ADMIN_IMPORT_WARN")))]),e._v(" "),t("p",[e._v(e._s(e.warnText[e.source]))])]),e._v(" "),t("div",{staticClass:"tk-admin-import-label"},[e._v(e._s(e.t("ADMIN_IMPORT_SELECT_SOURCE")))]),e._v(" "),t("select",{directives:[{name:"model",rawName:"v-model",value:e.source,expression:"source"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){return"_value"in e?e._value:e.value}));e.source=t.target.multiple?n:n[0]}}},[t("option",{attrs:{disabled:"",value:""}},[e._v(e._s(e.t("ADMIN_IMPORT_SELECT")))]),e._v(" "),t("option",{attrs:{value:"valine"}},[e._v("Valine (JSON)")]),e._v(" "),t("option",{attrs:{value:"disqus"}},[e._v("Disqus (XML)")]),e._v(" "),t("option",{attrs:{value:"artalk"}},[e._v("Artalk v1 (JSON)")]),e._v(" "),t("option",{attrs:{value:"artalk2"}},[e._v("Artalk v2 (Artrans)")]),e._v(" "),t("option",{attrs:{value:"twikoo"}},[e._v("Twikoo (JSON)")])]),e._v(" "),t("div",{staticClass:"tk-admin-import-label"},[e._v(e._s(e.t("ADMIN_IMPORT_SELECT_FILE")))]),e._v(" "),t("input",{ref:"inputFile",attrs:{type:"file",value:""}}),e._v(" "),t("el-button",{attrs:{size:"small",disabled:e.loading},on:{click:e.uploadFile}},[e._v(e._s(e.t("ADMIN_IMPORT_START")))]),e._v(" "),t("el-input",{ref:"logTextArea",attrs:{type:"textarea",rows:10,placeholder:e.t("ADMIN_IMPORT_LOG"),readonly:""},model:{value:e.logText,callback:function(t){e.logText=t},expression:"logText"}})],1)},t.Yp=[]},5897:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-avatar","class":{"tk-clickable":!!e.link,"tk-has-avatar":!!e.avatarInner},on:{click:e.onClick}},[e.avatarInner?e._e():t("div",{staticClass:"tk-avatar-img",domProps:{innerHTML:e._s(e.iconUser)}}),e._v(" "),e.avatarInner?t("img",{staticClass:"tk-avatar-img",attrs:{src:e.avatarInner,alt:""}}):e._e()])},t.Yp=[]},3827:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{ref:"tk-comment",staticClass:"tk-comment","class":{"tk-master":e.comment.master},attrs:{id:e.comment.id}},[t("tk-avatar",{attrs:{config:e.config,nick:e.comment.nick,avatar:e.comment.avatar,"mail-md5":e.comment.mailMd5,link:e.convertedLink}}),e._v(" "),t("div",{staticClass:"tk-main"},[t("div",{staticClass:"tk-row"},[t("div",{staticClass:"tk-meta"},[e.convertedLink?e._e():t("strong",{staticClass:"tk-nick"},[e._v(e._s(e.comment.nick))]),e._v(" "),e.convertedLink?t("a",{staticClass:"tk-nick tk-nick-link",attrs:{href:e.convertedLink,target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v(e._s(e.comment.nick))])]):e._e(),e._v(" "),e.comment.master?t("span",{staticClass:"tk-tag tk-tag-green"},[e._v(e._s(e.config.MASTER_TAG||e.t("COMMENT_MASTER_TAG")))]):e._e(),e._v(" "),e.comment.top?t("span",{staticClass:"tk-tag tk-tag-red"},[e._v(e._s(e.t("COMMENT_TOP_TAG")))]):e._e(),e._v(" "),e.comment.isSpam?t("span",{staticClass:"tk-tag tk-tag-yellow"},[e._v(e._s(e.t("COMMENT_REVIEWING_TAG")))]):e._e(),e._v(" "),t("small",{staticClass:"tk-time"},[t("time",{attrs:{datetime:e.jsonTimestamp,title:e.localeTime}},[e._v(e._s(e.displayCreated))])]),e._v(" "),e.isLogin?t("small",{staticClass:"tk-actions"},[e.comment.isSpam?t("a",{on:{click:function(t){return e.handleSpam(!1,t)}}},[e._v(e._s(e.t("ADMIN_COMMENT_SHOW")))]):e._e(),e._v(" "),e.comment.isSpam?e._e():t("a",{on:{click:function(t){return e.handleSpam(!0,t)}}},[e._v(e._s(e.t("ADMIN_COMMENT_HIDE")))]),e._v(" "),!e.comment.rid&&e.comment.top?t("a",{on:{click:function(t){return e.handleTop(!1,t)}}},[e._v(e._s(e.t("ADMIN_COMMENT_UNTOP")))]):e._e(),e._v(" "),e.comment.rid||e.comment.top?e._e():t("a",{on:{click:function(t){return e.handleTop(!0,t)}}},[e._v(e._s(e.t("ADMIN_COMMENT_TOP")))])]):e._e()]),e._v(" "),t("tk-action",{attrs:{liked:e.liked,"like-count":e.like,"replies-count":e.comment.replies.length},on:{like:e.onLike,reply:e.onReply}})],1),e._v(" "),t("div",{ref:"tk-content",staticClass:"tk-content","class":{"tk-content-expand":e.isContentExpanded||!e.showContentExpand}},[e.comment.pid?t("span",[e._v(e._s(e.t("COMMENT_REPLIED"))+" "),t("a",{staticClass:"tk-ruser",attrs:{href:"#".concat(e.comment.pid)}},[e._v("@"+e._s(e.comment.ruser))]),e._v(" :")]):e._e(),e._v(" "),t("span",{ref:"comment",domProps:{innerHTML:e._s(e.comment.comment)},on:{click:e.popupLightbox}})]),e._v(" "),e.showContentExpand?t("div",{staticClass:"tk-expand-wrap"},[t("div",{staticClass:"tk-expand",on:{click:e.onContentExpand}},[e._v(e._s(e.t("COMMENT_EXPAND")))])]):e._e(),e._v(" "),e.showContentCollapse?t("div",{staticClass:"tk-collapse-wrap"},[t("div",{staticClass:"tk-expand _collapse",on:{click:e.onContentCollapse}},[e._v(e._s(e.t("COMMENT_COLLAPSE")))])]):e._e(),e._v(" "),e.comment.ipRegion||e.comment.os||e.comment.browser?t("div",{staticClass:"tk-extras"},[e.comment.ipRegion?t("div",{staticClass:"tk-extra"},[t("span",{staticClass:"tk-icon __comment",domProps:{innerHTML:e._s(e.iconLocation)}}),e._v(" "),t("span",{staticClass:"tk-extra-text"},[e._v(" "+e._s(e.comment.ipRegion))])]):e._e(),e._v(" "),e.comment.os?t("div",{staticClass:"tk-extra"},[t("span",{staticClass:"tk-icon __comment",domProps:{innerHTML:e._s(e.iconOs)}}),e._v(" "),t("span",{staticClass:"tk-extra-text"},[e._v(" "+e._s(e.comment.os))])]):e._e(),e._v(" "),e.comment.browser?t("div",{staticClass:"tk-extra"},[t("span",{staticClass:"tk-icon __comment",domProps:{innerHTML:e._s(e.iconBrowser)}}),e._v(" "),t("span",{staticClass:"tk-extra-text"},[e._v(" "+e._s(e.comment.browser))])]):e._e()]):e._e(),e._v(" "),e.replying&&!e.pid?t("tk-submit",{attrs:{"reply-id":e.replyId?e.replyId:e.comment.id,pid:e.comment.id,config:e.config},on:{load:e.onLoad,cancel:e.onCancel}}):e._e(),e._v(" "),t("div",{ref:"tk-replies",staticClass:"tk-replies","class":{"tk-replies-expand":e.isExpanded||!e.showExpand||e.replying}},e._l(e.comment.replies,(function(n){return t("tk-comment",{key:n.id,attrs:{comment:n,replyId:e.comment.id,replying:e.replying&&e.pid===n.id,config:e.config},on:{expand:e.onExpand,load:e.onLoad,reply:e.onReplyReply}})})),1),e._v(" "),e.showExpand&&!e.replying?t("div",{staticClass:"tk-expand-wrap"},[t("div",{staticClass:"tk-expand",on:{click:e.onExpand}},[e._v(e._s(e.t("COMMENT_EXPAND")))])]):e._e(),e._v(" "),e.showCollapse&&!e.replying?t("div",{staticClass:"tk-collapse-wrap"},[t("div",{staticClass:"tk-expand _collapse",on:{click:e.onCollapse}},[e._v(e._s(e.t("COMMENT_COLLAPSE")))])]):e._e()],1)],1)},t.Yp=[]},2048:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-comments"},[t("tk-submit",{attrs:{config:e.config},on:{load:e.initComments}}),e._v(" "),t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"tk-comments-container"},[t("div",{staticClass:"tk-comments-title"},[t("span",{staticClass:"tk-comments-count","class":{__hidden:!e.comments.length}},[t("span",[e._v(e._s(e.count))]),e._v(" "),t("span",[e._v(e._s(e.t("COMMENTS_COUNT_SUFFIX")))])]),e._v(" "),t("span",[e.loading||e.loadingMore?e._e():t("span",{staticClass:"tk-icon __comments",domProps:{innerHTML:e._s(e.iconRefresh)},on:{click:e.refresh}}),e.showAdminEntry?t("span",{staticClass:"tk-icon __comments",domProps:{innerHTML:e._s(e.iconSetting)},on:{click:e.openAdmin}}):e._e()])]),e._v(" "),e.loading||e.comments.length?e._e():t("div",{staticClass:"tk-comments-no"},[e.errorMessage?e._e():t("span",[e._v(e._s(e.t("COMMENTS_NO_COMMENTS")))]),e._v(" "),e.errorMessage?t("span",{staticClass:"tk-comments-error"},[e._v(e._s(e.errorMessage))]):e._e()]),e._v(" "),e._l(e.comments,(function(n){return t("tk-comment",{key:n.id,attrs:{comment:n,replying:e.replyId===n.id,config:e.config},on:{reply:e.onReply,load:e.initComments}})})),e._v(" "),e.showExpand&&!e.loading?t("div",{staticClass:"tk-expand-wrap"},[t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loadingMore,expression:"loadingMore"}],staticClass:"tk-expand",on:{click:e.onExpand}},[e._v(e._s(e.t("COMMENTS_EXPAND")))])]):e._e()],2)],1)},t.Yp=[]},2080:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-footer"},[e._v("\n Powered by "),t("a",{attrs:{href:"https://twikoo.js.org",target:"_blank"}},[e._v("Twikoo")]),e._v("\n v"+e._s(e.version)+"\n")])},t.Yp=[]},1412:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-meta-input"},e._l(e.displayedInputs,(function(n){return t("el-input",{key:n.key,attrs:{name:n.name,type:n.type,placeholder:e.requiredFields[n.key]?e.t("META_INPUT_REQUIRED"):e.t("META_INPUT_NOT_REQUIRED"),size:"small"},on:{change:e.onMetaChange},model:{value:e.metaData[n.key],callback:function(t){e.$set(e.metaData,n.key,t)},expression:"metaData[metaInput.key]"}},[t("template",{slot:"prepend"},[e._v(e._s(n.locale))])],2)})),1)},t.Yp=[]},8675:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{staticClass:"tk-pagination"},[e.pageCount?t("div",{staticClass:"tk-pagination-options"},[t("div",[t("span",[e._v(e._s(e.t("PAGINATION_COUNT_PREFIX")))]),e._v(" "),t("span",[e._v(e._s(e.total))]),e._v(" "),t("span",[e._v(e._s(e.t("PAGINATION_COUNT_SUFFIX")))])]),e._v(" "),t("el-input",{attrs:{type:"number",min:"1",max:"100",value:e.userPageSize?e.userPageSize:e.pageSize},on:{input:e.handleInputPageSize,change:e.pageSizeChamge}}),e._v(" "),t("span",[e._v(e._s(e.t("PAGINATION_PAGESIZE")))])],1):e._e(),e._v(" "),t("div",{staticClass:"tk-pagination-pagers"},e._l(e.pagers,(function(n){return t("div",{key:n.page,staticClass:"tk-pagination-pager","class":{__current:n.page===e.currentPage},on:{click:function(t){return e.currentChange(n.page)}}},[e._v(e._s(n.title))])})),0),e._v(" "),e.pageCount?t("div",{staticClass:"tk-pagination-options"},[t("span",[e._v(e._s(e.t("PAGINATION_GOTO_PREFIX")))]),e._v(" "),t("el-input",{attrs:{type:"number",min:"1",max:e.pageCount,value:e.userInput?e.userInput:e.currentPage},on:{input:e.handleInput,change:e.currentChange}}),e._v(" "),t("span",[e._v(e._s(e.t("PAGINATION_GOTO_SUFFIX")))])],1):e._e()])},t.Yp=[]},9564:function(e,t){"use strict";t.Yp=t.XX=void 0,t.XX=function(){var e=this,t=e._self._c;return t("div",{ref:"tk-submit",staticClass:"tk-submit tk-fade-in"},[t("div",{staticClass:"tk-row"},[t("tk-avatar",{attrs:{config:e.config,mail:e.mail,nick:e.nick}}),e._v(" "),t("div",{staticClass:"tk-col"},[t("tk-meta-input",{attrs:{nick:e.nick,mail:e.mail,link:e.link,config:e.config},on:{update:e.onMetaUpdate}}),e._v(" "),t("el-input",{ref:"textarea",staticClass:"tk-input",attrs:{type:"textarea","show-word-limit":"",placeholder:e.commentPlaceholder,autosize:{minRows:3},maxlength:e.maxLength},on:{input:e.onCommentInput},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.onEnterKeyUp(t)}},model:{value:e.comment,callback:function(t){e.comment=t},expression:"comment"}})],1)],1),e._v(" "),t("div",{staticClass:"tk-row actions"},[t("div",{staticClass:"tk-row-actions-start"},[t("div",{directives:[{name:"show",rawName:"v-show",value:"true"===e.config.SHOW_EMOTION,expression:"config.SHOW_EMOTION === 'true'"},{name:"clickoutside",rawName:"v-clickoutside",value:e.closeOwo,expression:"closeOwo"}],ref:"owo",staticClass:"tk-submit-action-icon OwO",domProps:{innerHTML:e._s(e.iconEmotion)}}),e._v(" "),t("div",{directives:[{name:"show",rawName:"v-show",value:"true"===e.config.SHOW_IMAGE,expression:"config.SHOW_IMAGE === 'true'"}],staticClass:"tk-submit-action-icon",domProps:{innerHTML:e._s(e.iconImage)},on:{click:e.openSelectImage}}),e._v(" "),t("input",{ref:"inputFile",staticClass:"tk-input-image",attrs:{type:"file",accept:"image/*",value:""},on:{change:e.onSelectImage}}),e._v(" "),t("div",{staticClass:"tk-error-message"},[e._v(e._s(e.errorMessage))])]),e._v(" "),t("a",{staticClass:"tk-submit-action-icon __markdown",attrs:{alt:"Markdown is supported",href:"https://guides.github.com/features/mastering-markdown/",target:"_blank",rel:"noopener noreferrer"},domProps:{innerHTML:e._s(e.iconMarkdown)}}),e._v(" "),e.replyId?t("el-button",{staticClass:"tk-cancel",attrs:{size:"small"},on:{click:e.cancel}},[e._v(e._s(e.t("SUBMIT_CANCEL")))]):e._e(),e._v(" "),t("el-button",{staticClass:"tk-preview",attrs:{size:"small"},on:{click:e.preview}},[e._v(e._s(e.t("SUBMIT_PREVIEW")))]),e._v(" "),t("el-button",{staticClass:"tk-send",attrs:{type:"primary",size:"small",disabled:!e.canSend},on:{click:e.send}},[e._v(e._s(e.isSending?e.t("SUBMIT_SENDING"):e.t("SUBMIT_SEND")))]),e._v(" "),t("div",{ref:"turnstile-container",staticClass:"tk-turnstile-container"},[t("div",{ref:"turnstile",staticClass:"tk-turnstile"})])],1),e._v(" "),e.isPreviewing?t("div",{ref:"comment-preview",staticClass:"tk-preview-container",domProps:{innerHTML:e._s(e.commentHtml)}}):e._e()])},t.Yp=[]},5547:function(e,t){"use strict";t.A=function(e,t){for(var n=[],r={},i=0;i=0&&Math.floor(t)===t&&isFinite(e)}function _(e){return l(e)&&"function"==typeof e.then&&"function"==typeof e["catch"]}function y(e){return null==e?"":Array.isArray(e)||g(e)&&e.toString===m?JSON.stringify(e,b,2):String(e)}function b(e,t){return t&&t.__v_isRef?t.value:t}function k(e){var t=parseFloat(e);return isNaN(t)?e:t}function w(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(r,1)}}var C=Object.prototype.hasOwnProperty;function x(e,t){return C.call(e,t)}function I(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var D=/-(\w)/g,S=I((function(e){return e.replace(D,(function(e,t){return t?t.toUpperCase():""}))})),O=I((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),T=/\B([A-Z])/g,M=I((function(e){return e.replace(T,"-$1").toLowerCase()})),N=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function P(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function F(e,t){for(var n in t)e[n]=t[n];return e}function L(e){for(var t={},n=0;n0,ne=Z&&Z.indexOf("edge/")>0;Z&&Z.indexOf("android");var re=Z&&/iphone|ipad|ipod|ios/.test(Z);Z&&/chrome\/\d+/.test(Z),Z&&/phantomjs/.test(Z);var ie,oe=Z&&Z.match(/firefox\/(\d+)/),ae={}.watch,se=!1;if(Q)try{var ue={};Object.defineProperty(ue,"passive",{get:function(){se=!0}}),window.addEventListener("test-passive",null,ue)}catch(s){}var ce=function(){return void 0===ie&&(ie=!Q&&"undefined"!=typeof n.g&&n.g.process&&"server"===n.g.process.env.VUE_ENV),ie},le=Q&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function de(e){return"function"==typeof e&&/native code/.test(e.toString())}var fe,pe="undefined"!=typeof Symbol&&de(Symbol)&&"undefined"!=typeof Reflect&&de(Reflect.ownKeys);fe="undefined"!=typeof Set&&de(Set)?Set:function(){function e(){(0,i["default"])(this,e),this.set=Object.create(null)}return(0,o["default"])(e,[{key:"has",value:function(e){return!0===this.set[e]}},{key:"add",value:function(e){this.set[e]=!0}},{key:"clear",value:function(){this.set=Object.create(null)}}]),e}();var he=null;function me(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;e||he&&he._scope.off(),he=e,e&&e._scope.on()}var ge=function(){function e(t,n,r,o,a,s,u,c){(0,i["default"])(this,e),this.tag=t,this.data=n,this.children=r,this.text=o,this.elm=a,this.ns=void 0,this.context=s,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=n&&n.key,this.componentOptions=u,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return(0,o["default"])(e,[{key:"child",get:function(){return this.componentInstance}}]),e}(),ve=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"",t=new ge;return t.text=e,t.isComment=!0,t};function _e(e){return new ge(void 0,void 0,void 0,String(e))}function ye(e){var t=new ge(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var be=0,ke=[],we=function(){for(var e=0;e1&&arguments[1]!==undefined&&arguments[1],r=arguments.length>2&&arguments[2]!==undefined&&arguments[2];if((0,i["default"])(this,e),this.value=t,this.shallow=n,this.mock=r,this.dep=r?Ne:new Ee,this.vmCount=0,K(t,"__ob__",this),u(t)){if(!r)if(J)t.__proto__=De;else for(var o=0,a=Se.length;o6&&undefined;var a=new Ee,s=Object.getOwnPropertyDescriptor(e,t);if(!s||!1!==s.configurable){var c=s&&s.get,l=s&&s.set;c&&!l||n!==Oe&&2!==arguments.length||(n=e[t]);var d=i?n&&n.__ob__:Fe(n,!1,o);return Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=c?c.call(e):n;return Ee.target&&(a.depend(),d&&(d.dep.depend(),u(t)&&$e(t))),Ve(t)&&!i?t.value:t},set:function(t){var r=c?c.call(e):n;if(z(r,t)){if(l)l.call(e,t);else{if(c)return;if(!i&&Ve(r)&&!Ve(t))return void(r.value=t);n=t}d=i?t&&t.__ob__:Fe(t,!1,o),a.notify()}}}),a}}function Re(e,t,n){if(!He(e)){var r=e.__ob__;return u(e)&&v(t)?(e.length=Math.max(e.length,t),e.splice(t,1,n),r&&!r.shallow&&r.mock&&Fe(n,!1,!0),n):t in e&&!(t in Object.prototype)?(e[t]=n,n):e._isVue||r&&r.vmCount?n:r?(Le(r.value,t,n,void 0,r.shallow,r.mock),r.dep.notify(),n):(e[t]=n,n)}}function je(e,t){if(u(e)&&v(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||He(e)||x(e,t)&&(delete e[t],n&&n.dep.notify())}}function $e(e){for(var t,n=0,r=e.length;n2&&arguments[2]!==undefined?arguments[2]:s,o=i.immediate,a=i.deep,c=i.flush,l=void 0===c?"pre":c,d=(i.onTrack,i.onTrigger,he),f=function(e,t){var n=en(e,null,arguments.length>2&&arguments[2]!==undefined?arguments[2]:null,d,t);return a&&n&&n.__ob__&&n.__ob__.dep.depend(),n},h=!1,m=!1;if(Ve(e)?(n=function(){return e.value},h=ze(e)):Ge(e)?(n=function(){return e.__ob__.dep.depend(),e},a=!0):u(e)?(m=!0,h=e.some((function(e){return Ge(e)||ze(e)})),n=function(){return e.map((function(e){return Ve(e)?e.value:Ge(e)?(e.__ob__.dep.depend(),On(e)):p(e)?f(e,rt):void 0}))}):n=p(e)?t?function(){return f(e,rt)}:function(){if(!d||!d._isDestroyed)return r&&r(),f(e,tt,[v])}:R,t&&a){var g=n;n=function(){return On(g())}}var v=function(e){r=_.onStop=function(){f(e,it)}};if(ce())return v=R,t?o&&f(t,nt,[n(),m?[]:void 0,v]):n(),R;var _=new Pn(he,n,R,{lazy:!0});_.noRecurse=!t;var y=m?[]:st;return _.run=function(){if(_.active)if(t){var e=_.get();(a||h||(m?e.some((function(e,t){return z(e,y[t])})):z(e,y)))&&(r&&r(),f(t,nt,[e,y===st?void 0:y,v]),y=e)}else _.get()},"sync"===l?_.update=_.run:"post"===l?(_.post=!0,_.update=function(){return nr(_)}):_.update=function(){if(d&&d===he&&!d._isMounted){var e=d._preWatchers||(d._preWatchers=[]);e.indexOf(_)<0&&e.push(_)}else nr(_)},t?o?_.run():y=_.get():"post"===l&&d?d.$once("hook:mounted",(function(){return _.get()})):_.get(),function(){_.teardown()}}var ct=function(){function e(){var t=arguments.length>0&&arguments[0]!==undefined&&arguments[0];(0,i["default"])(this,e),this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=at,!t&&at&&(this.index=(at.scopes||(at.scopes=[])).push(this)-1)}return(0,o["default"])(e,[{key:"run",value:function(e){if(this.active){var t=at;try{return at=this,e()}finally{at=t}}}},{key:"on",value:function(){at=this}},{key:"off",value:function(){at=this.parent}},{key:"stop",value:function(e){if(this.active){var t,n;for(t=0,n=this.effects.length;t0&&(_t((r=yt(r,"".concat(t||"","_").concat(n)))[0])&&_t(o)&&(a[i]=_e(o.text+r[0].text),r.shift()),a.push.apply(a,r)):f(r)?_t(o)?a[i]=_e(o.text+r):""!==r&&a.push(_e(r)):_t(r)&&_t(o)?a[i]=_e(o.text+r.text):(d(e._isVList)&&l(r.tag)&&c(r.key)&&l(t)&&(r.key="__vlist".concat(t,"_").concat(n,"__")),a.push(r)));return a}function bt(e,t){var n,r,i,o,a=null;if(u(e)||"string"==typeof e)for(a=new Array(e.length),n=0,r=e.length;n0,a=t?!!t.$stable:!o,u=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==s&&u===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=$t(e,n,c,t[c]))}else i={};for(var l in n)l in i||(i[l]=Ut(n,l));return t&&Object.isExtensible(t)&&(t._normalized=i),K(i,"$stable",a),K(i,"$key",u),K(i,"$hasNormal",o),i}function $t(e,t,n,r){var i=function(){var t=he;me(e);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==(0,a["default"])(n)&&!u(n)?[n]:vt(n))&&n[0];return me(t),n&&(!i||1===n.length&&i.isComment&&!Rt(i))?void 0:n};return r.proxy&&Object.defineProperty(t,n,{get:i,enumerable:!0,configurable:!0}),i}function Ut(e,t){return function(){return e[t]}}function Bt(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};K(t,"_v_attr_proxy",!0),Gt(t,e.$attrs,s,e,"$attrs")}return e._attrsProxy},get listeners(){return e._listenersProxy||Gt(e._listenersProxy={},e.$listeners,s,e,"$listeners"),e._listenersProxy},get slots(){return function(e){return e._slotsProxy||Ht(e._slotsProxy={},e.$scopedSlots),e._slotsProxy}(e)},emit:N(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Xe(e,t,n)}))}}}function Gt(e,t,n,r,i){var o=!1;for(var a in t)a in e?t[a]!==n[a]&&(o=!0):(o=!0,zt(e,a,r,i));for(var s in e)s in t||(o=!0,delete e[s]);return o}function zt(e,t,n,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[r][t]}})}function Ht(e,t){for(var n in t)e[n]=t[n];for(var r in e)r in t||delete e[r]}function qt(){var e=he;return e._setupContext||(e._setupContext=Bt(e))}var Vt=null;function Wt(e,t){return(e.__esModule||pe&&"Module"===e[Symbol.toStringTag])&&(e=e["default"]),h(e)?t.extend(e):e}function Xt(e){if(u(e))for(var t=0;t1&&arguments[1]!==undefined?arguments[1]:he;if(n)return function(e,t,n){var r=e.$options;r[t]=gr(r[t],n)}(n,e,t)}}var mn=hn("beforeMount"),gn=hn("mounted"),vn=hn("beforeUpdate"),_n=hn("updated"),yn=hn("beforeDestroy"),bn=hn("destroyed"),kn=hn("activated"),wn=hn("deactivated"),En=hn("serverPrefetch"),An=hn("renderTracked"),Cn=hn("renderTriggered"),xn=hn("errorCaptured"),In="2.7.16",Dn=Object.freeze({__proto__:null,version:In,defineComponent:function(e){return e},ref:function(e){return We(e,!1)},shallowRef:function(e){return We(e,!0)},isRef:Ve,toRef:Ke,toRefs:function(e){var t=u(e)?new Array(e.length):{};for(var n in e)t[n]=Ke(e,n);return t},unref:function(e){return Ve(e)?e.value:e},proxyRefs:function(e){if(Ge(e))return e;for(var t={},n=Object.keys(e),r=0;r2&&arguments[2]!==undefined&&arguments[2],r=he;if(r){var i=r.$parent&&r.$parent._provided;if(i&&e in i)return i[e];if(arguments.length>1)return n&&p(t)?t.call(r):t}},h:function(e,t,n){return Jt(he,e,t,n,2,!0)},getCurrentInstance:function(){return he&&{proxy:he}},useSlots:function(){return qt().slots},useAttrs:function(){return qt().attrs},useListeners:function(){return qt().listeners},mergeDefaults:function(e,t){var n=u(e)?e.reduce((function(e,t){return e[t]={},e}),{}):e;for(var r in t){var i=n[r];i?u(i)||p(i)?n[r]={type:i,"default":t[r]}:i["default"]=t[r]:null===i&&(n[r]={"default":t[r]})}return n},nextTick:pn,set:Re,del:je,useCssModule:function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"$style";return he&&he[e]||s},useCssVars:function(e){if(Q){var t=he;t&&ot((function(){var n=t.$el,r=e(t,t._setupProxy);if(n&&1===n.nodeType){var i=n.style;for(var o in r)i.setProperty("--".concat(o),r[o])}}))}},defineAsyncComponent:function(e){p(e)&&(e={loader:e});var t=e,n=t.loader,r=t.loadingComponent,i=t.errorComponent,o=t.delay,a=void 0===o?200:o,s=t.timeout,u=(t.suspensible,t.onError),c=null,l=0,d=function f(){var e;return c||(e=c=n()["catch"]((function(e){if(e=e instanceof Error?e:new Error(String(e)),u)return new Promise((function(t,n){u(e,(function(){return t((l++,c=null,f()))}),(function(){return n(e)}),l+1)}));throw e})).then((function(t){return e!==c&&c?c:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t["default"]),t)})))};return function(){return{component:d(),delay:a,timeout:s,error:i,loading:r}}},onBeforeMount:mn,onMounted:gn,onBeforeUpdate:vn,onUpdated:_n,onBeforeUnmount:yn,onUnmounted:bn,onActivated:kn,onDeactivated:wn,onServerPrefetch:En,onRenderTracked:An,onRenderTriggered:Cn,onErrorCaptured:function(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:he;xn(e,t)}}),Sn=new fe;function On(e){return Tn(e,Sn),Sn.clear(),e}function Tn(e,t){var n,r,i=u(e);if(!(!i&&!h(e)||e.__v_skip||Object.isFrozen(e)||e instanceof ge)){if(e.__ob__){var o=e.__ob__.dep.id;if(t.has(o))return;t.add(o)}if(i)for(n=e.length;n--;)Tn(e[n],t);else if(Ve(e))Tn(e.value,t);else for(n=(r=Object.keys(e)).length;n--;)Tn(e[r[n]],t)}}var Mn,Nn=0,Pn=function(){function e(t,n,r,o,a){(0,i["default"])(this,e),function(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:at;t&&t.active&&t.effects.push(e)}(this,at&&!at._vm?at:t?t._scope:void 0),(this.vm=t)&&a&&(t._watcher=this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=r,this.id=++Nn,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new fe,this.newDepIds=new fe,this.expression="",p(n)?this.getter=n:(this.getter=function(e){if(!Y.test(e)){var t=e.split(".");return function(e){for(var n=0;n3&&arguments[3]!==undefined)||arguments[3];Ce();var i=he,o=lt();r&&me(e);var a=e.$options[t],s="".concat(t," hook");if(a)for(var u=0,c=a.length;udocument.createEvent("Event").timeStamp&&(Qn=function(){return Zn.now()})}var er=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function tr(){var e,t;for(Jn=Qn(),Kn=!0,qn.sort(er),Yn=0;YnYn&&qn[n].id>e.id;)n--;qn.splice(n+1,0,e)}else qn.push(e);Xn||(Xn=!0,pn(tr))}}function rr(e,t){if(e){for(var n=Object.create(null),r=pe?Reflect.ownKeys(e):Object.keys(e),i=0;i2&&arguments[2]!==undefined)||arguments[2];if(!t)return e;for(var a=pe?Reflect.ownKeys(t):Object.keys(t),s=0;s-1)if(o&&!x(i,"default"))a=!1;else if(""===a||a===M(e)){var u=Cr(String,i.type);(u<0||s-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===m.call(n)&&e.test(t));var n}function $r(e,t){var n=e.cache,r=e.keys,i=e._vnode,o=e.$vnode;for(var a in n){var s=n[a];if(s){var u=s.name;u&&!t(u)&&Ur(n,a,r,i)}}o.componentOptions.children=void 0}function Ur(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,A(n,t)}!function(e){e.prototype._init=function(e){var t=this;t._uid=Pr++,t._isVue=!0,t.__v_skip=!0,t._scope=new ct(!0),t._scope.parent=void 0,t._scope._vm=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=yr(Fr(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._provided=n?n._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&jn(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,r=n&&n.context;e.$slots=Ft(t._renderChildren,r),e.$scopedSlots=n?jt(e.$parent,n.data.scopedSlots,e.$slots):s,e._c=function(t,n,r,i){return Jt(e,t,n,r,i,!1)},e.$createElement=function(t,n,r,i){return Jt(e,t,n,r,i,!0)};var i=n&&n.data;Le(e,"$attrs",i&&i.attrs||s,null,!0),Le(e,"$listeners",t._parentListeners||s,null,!0)}(t),Hn(t,"beforeCreate",void 0,!1),function(e){var t=rr(e.$options.inject,e);t&&(Me(!1),Object.keys(t).forEach((function(n){Le(e,n,t[n])})),Me(!0))}(t),Dr(t),function(e){var t=e.$options.provide;if(t){var n=p(t)?t.call(e):t;if(!h(n))return;for(var r=dt(e),i=pe?Reflect.ownKeys(n):Object.keys(n),o=0;o1?P(n):n;for(var r=P(arguments,1),i='event handler for "'.concat(e,'"'),o=0,a=n.length;oparseInt(this.max)&&Ur(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Ur(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){$r(e,(function(e){return jr(t,e)}))})),this.$watch("exclude",(function(t){$r(e,(function(e){return!jr(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots["default"],t=Xt(e),n=t&&t.componentOptions;if(n){var r=Rr(n),i=this.include,o=this.exclude;if(i&&(!r||!jr(i,r))||o&&r&&jr(o,r))return t;var a=this.cache,s=this.keys,u=null==t.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):t.key;a[u]?(t.componentInstance=a[u].componentInstance,A(s,u),s.push(u)):(this.vnodeToCache=t,this.keyToCache=u),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return W}};Object.defineProperty(e,"config",t),e.util={warn:fr,extend:F,mergeOptions:yr,defineReactive:Le},e.set=Re,e["delete"]=je,e.nextTick=pn,e.observable=function(e){return Fe(e),e},e.options=Object.create(null),q.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,F(e.options.components,Gr),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=P(arguments,1);return n.unshift(this),p(e.install)?e.install.apply(e,n):p(e)&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=yr(this.options,e),this}}(e),function(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,i=e._Ctor||(e._Ctor={});if(i[r])return i[r];var o=sr(e)||sr(n.options),a=function(e){this._init(e)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=t++,a.options=yr(n.options,e),a["super"]=n,a.options.props&&function(e){var t=e.options.props;for(var n in t)Ir(e.prototype,"_props",n)}(a),a.options.computed&&function(e){var t=e.options.computed;for(var n in t)Or(e.prototype,n,t[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,q.forEach((function(e){a[e]=n[e]})),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=F({},a.options),i[r]=a,a}}(e),function(e){q.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&g(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&p(n)&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(Lr),Object.defineProperty(Lr.prototype,"$isServer",{get:ce}),Object.defineProperty(Lr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Lr,"FunctionalRenderContext",{value:ir}),Lr.version=In;var zr=w("style,class"),Hr=w("input,textarea,option,select,progress"),qr=w("contenteditable,draggable,spellcheck"),Vr=w("events,caret,typing,plaintext-only"),Wr=function(e,t){return Qr(t)||"false"===t?"false":"contenteditable"===e&&Vr(t)?t:"true"},Xr=w("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Kr="http://www.w3.org/1999/xlink",Yr=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Jr=function(e){return Yr(e)?e.slice(6,e.length):""},Qr=function(e){return null==e||!1===e};function Zr(e,t){return{staticClass:ei(e.staticClass,t.staticClass),"class":l(e["class"])?[e["class"],t["class"]]:t["class"]}}function ei(e,t){return e?t?e+" "+t:e:t||""}function ti(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,i=e.length;r-1?Ci(e,t,n):Xr(t)?Qr(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):qr(t)?e.setAttribute(t,Wr(t,n)):Yr(t)?Qr(n)?e.removeAttributeNS(Kr,Jr(t)):e.setAttributeNS(Kr,t,n):Ci(e,t,n)}function Ci(e,t,n){Qr(n)?e.removeAttribute(t):(!ee||te||"TEXTAREA"!==e.tagName||"placeholder"!==t||""===n||e.__ieph||(e.addEventListener("input",(function r(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)})),e.__ieph=!0),e.setAttribute(t,n))}var xi={create:Ei,update:Ei};function Ii(e,t){var n=t.elm,r=t.data,i=e.data;if(!(c(r.staticClass)&&c(r["class"])&&(c(i)||c(i.staticClass)&&c(i["class"])))){var o=function(e){for(var t=e.data,n=e,r=e;l(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=Zr(r.data,t));for(;l(n=n.parent);)n&&n.data&&(t=Zr(t,n.data));return function(e,t){return l(e)||l(t)?ei(e,ti(t)):""}(t.staticClass,t["class"])}(t),a=n._transitionClasses;l(a)&&(o=ei(o,ti(a))),o!==n._prevClass&&(n.setAttribute("class",o),n._prevClass=o)}}var Di,Si={create:Ii,update:Ii},Oi="__r",Ti="__c";function Mi(e,t,n){var r=Di;return function i(){null!==t.apply(null,arguments)&&Fi(e,i,n,r)}}var Ni=on&&!(oe&&Number(oe[1])<=53);function Pi(e,t,n,r){if(Ni){var i=Jn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Di.addEventListener(e,t,se?{capture:n,passive:r}:n)}function Fi(e,t,n,r){(r||Di).removeEventListener(e,t._wrapper||t,n)}function Li(e,t){if(!c(e.data.on)||!c(t.data.on)){var n=t.data.on||{},r=e.data.on||{};Di=t.elm||e.elm,function(e){if(l(e[Oi])){var t=ee?"change":"input";e[t]=[].concat(e[Oi],e[t]||[]),delete e[Oi]}l(e[Ti])&&(e.change=[].concat(e[Ti],e.change||[]),delete e[Ti])}(n),ht(n,r,Pi,Fi,Mi,t.context),Di=void 0}}var Ri,ji={create:Li,update:Li,destroy:function(e){return Li(e,fi)}};function $i(e,t){if(!c(e.data.domProps)||!c(t.data.domProps)){var n,r,i=t.elm,o=e.data.domProps||{},a=t.data.domProps||{};for(n in(l(a.__ob__)||d(a._v_attr_proxy))&&(a=t.data.domProps=F({},a)),o)n in a||(i[n]="");for(n in a){if(r=a[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),r===o[n])continue;1===i.childNodes.length&&i.removeChild(i.childNodes[0])}if("value"===n&&"PROGRESS"!==i.tagName){i._value=r;var s=c(r)?"":String(r);Ui(i,s)&&(i.value=s)}else if("innerHTML"===n&&ii(i.tagName)&&c(i.innerHTML)){(Ri=Ri||document.createElement("div")).innerHTML="".concat(r,"");for(var u=Ri.firstChild;i.firstChild;)i.removeChild(i.firstChild);for(;u.firstChild;)i.appendChild(u.firstChild)}else if(r!==o[n])try{i[n]=r}catch(e){}}}}function Ui(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(l(r)){if(r.number)return k(n)!==k(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var Bi={create:$i,update:$i},Gi=I((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function zi(e){var t=Hi(e.style);return e.staticStyle?F(e.staticStyle,t):t}function Hi(e){return Array.isArray(e)?L(e):"string"==typeof e?Gi(e):e}var qi,Vi=/^--/,Wi=/\s*!important$/,Xi=function(e,t,n){if(Vi.test(t))e.style.setProperty(t,n);else if(Wi.test(n))e.style.setProperty(M(t),n.replace(Wi,""),"important");else{var r=Yi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(Zi).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" ".concat(e.getAttribute("class")||""," ");n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function to(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Zi).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" ".concat(e.getAttribute("class")||""," "),r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function no(e){if(e){if("object"==(0,a["default"])(e)){var t={};return!1!==e.css&&F(t,ro(e.name||"v")),F(t,e),t}return"string"==typeof e?ro(e):void 0}}var ro=I((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),io=Q&&!te,oo="transition",ao="animation",so="transition",uo="transitionend",co="animation",lo="animationend";io&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(so="WebkitTransition",uo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(co="WebkitAnimation",lo="webkitAnimationEnd"));var fo=Q?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function po(e){fo((function(){fo(e)}))}function ho(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),eo(e,t))}function mo(e,t){e._transitionClasses&&A(e._transitionClasses,t),to(e,t)}function go(e,t,n){var r=_o(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===oo?uo:lo,u=0,c=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++u>=a&&c()};setTimeout((function(){u0&&(n=oo,l=a,d=o.length):t===ao?c>0&&(n=ao,l=c,d=u.length):d=(n=(l=Math.max(a,c))>0?a>c?oo:ao:null)?n===oo?o.length:u.length:0,{type:n,timeout:l,propCount:d,hasTransform:n===oo&&vo.test(r[so+"Property"])}}function yo(e,t){for(;e.length1}function Co(e,t){!0!==t.data.show&&ko(t)}var xo=function(e){var t,n,r={},i=e.modules,o=e.nodeOps;for(t=0;th?y(e,c(n[v+1])?null:n[v+1].elm,n,p,v,r):p>v&&k(t,f,h)}(f,m,v,n,u):l(v)?(l(e.text)&&o.setTextContent(f,""),y(f,null,v,0,v.length-1,n)):l(m)?k(m,0,m.length-1):l(e.text)&&o.setTextContent(f,""):e.text!==t.text&&o.setTextContent(f,t.text),l(h)&&l(p=h.hook)&&l(p=p.postpatch)&&p(e,t)}}}function x(e,t,n){if(d(n)&&l(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r-1,a.selected!==o&&(a.selected=o);else if(U(To(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Oo(e,t){return t.every((function(t){return!U(t,e)}))}function To(e){return"_value"in e?e._value:e.value}function Mo(e){e.target.composing=!0}function No(e){e.target.composing&&(e.target.composing=!1,Po(e.target,"input"))}function Po(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Fo(e){return!e.componentInstance||e.data&&e.data.transition?e:Fo(e.componentInstance._vnode)}var Lo={bind:function(e,t,n){var r=t.value,i=(n=Fo(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,ko(n,(function(){e.style.display=o}))):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Fo(n)).data&&n.data.transition?(n.data.show=!0,r?ko(n,(function(){e.style.display=e.__vOriginalDisplay})):wo(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}},Ro={model:Io,show:Lo},jo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function $o(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?$o(Xt(t.children)):e}function Uo(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[S(o)]=i[o];return t}function Bo(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var Go=function(e){return e.tag||Rt(e)},zo=function(e){return"show"===e.name},Ho={name:"transition",props:jo,abstract:!0,render:function(e){var t=this,n=this.$slots["default"];if(n&&(n=n.filter(Go)).length){var r=this.mode,i=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return i;var o=$o(i);if(!o)return i;if(this._leaving)return Bo(e,i);var a="__transition-".concat(this._uid,"-");o.key=null==o.key?o.isComment?a+"comment":a+o.tag:f(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var s=(o.data||(o.data={})).transition=Uo(this),u=this._vnode,c=$o(u);if(o.data.directives&&o.data.directives.some(zo)&&(o.data.show=!0),c&&c.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(o,c)&&!Rt(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var l=c.data.transition=F({},s);if("out-in"===r)return this._leaving=!0,mt(l,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Bo(e,i);if("in-out"===r){if(Rt(o))return u;var d,p=function(){d()};mt(s,"afterEnter",p),mt(s,"enterCancelled",p),mt(l,"delayLeave",(function(e){d=e}))}}return i}}},qo=F({tag:String,moveClass:String},jo);delete qo.mode;var Vo={props:qo,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Un(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots["default"]||[],o=this.children=[],a=Uo(this),s=0;s-1?ai[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:ai[e]=/HTMLUnknownElement/.test(t.toString())},F(Lr.options.directives,Ro),F(Lr.options.components,Yo),Lr.prototype.__patch__=Q?xo:R,Lr.prototype.$mount=function(e,t){return function(e,t,n){var r;e.$el=t,e.$options.render||(e.$options.render=ve),Hn(e,"beforeMount"),r=function(){e._update(e._render(),n)},new Pn(e,r,R,{before:function(){e._isMounted&&!e._isDestroyed&&Hn(e,"beforeUpdate")}},!0),n=!1;var i=e._preWatchers;if(i)for(var o=0;o.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}t.Lexer=function(){function e(t){(0,i["default"])(this,e),this.tokens=[],this.tokens.links=Object.create(null),this.options=t||s.defaults,this.options.tokenizer=this.options.tokenizer||new a.Tokenizer,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};var n={block:u.block.normal,inline:u.inline.normal};this.options.pedantic?(n.block=u.block.pedantic,n.inline=u.inline.pedantic):this.options.gfm&&(n.block=u.block.gfm,this.options.breaks?n.inline=u.inline.breaks:n.inline=u.inline.gfm),this.tokenizer.rules=n}return(0,o["default"])(e,[{key:"lex",value:function(e){var t;for(e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens);t=this.inlineQueue.shift();)this.inlineTokens(t.src,t.tokens);return this.tokens}},{key:"blockTokens",value:function(e){var t,n,r,i,o=this,a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];this.options.pedantic&&(e=e.replace(/^ +$/gm,""));for(var s,u=function(){if(o.options.extensions&&o.options.extensions.block&&o.options.extensions.block.some((function(n){return!!(t=n.call({lexer:o},e,a))&&(e=e.substring(t.raw.length),a.push(t),!0)})))return 0;if(t=o.tokenizer.space(e))return e=e.substring(t.raw.length),1===t.raw.length&&a.length>0?a[a.length-1].raw+="\n":a.push(t),0;if(t=o.tokenizer.code(e))return e=e.substring(t.raw.length),!(n=a[a.length-1])||"paragraph"!==n.type&&"text"!==n.type?a.push(t):(n.raw+="\n"+t.raw,n.text+="\n"+t.text,o.inlineQueue[o.inlineQueue.length-1].src=n.text),0;if(t=o.tokenizer.fences(e))return e=e.substring(t.raw.length),a.push(t),0;if(t=o.tokenizer.heading(e))return e=e.substring(t.raw.length),a.push(t),0;if(t=o.tokenizer.hr(e))return e=e.substring(t.raw.length),a.push(t),0;if(t=o.tokenizer.blockquote(e))return e=e.substring(t.raw.length),a.push(t),0;if(t=o.tokenizer.list(e))return e=e.substring(t.raw.length),a.push(t),0;if(t=o.tokenizer.html(e))return e=e.substring(t.raw.length),a.push(t),0;if(t=o.tokenizer.def(e))return e=e.substring(t.raw.length),!(n=a[a.length-1])||"paragraph"!==n.type&&"text"!==n.type?o.tokens.links[t.tag]||(o.tokens.links[t.tag]={href:t.href,title:t.title}):(n.raw+="\n"+t.raw,n.text+="\n"+t.raw,o.inlineQueue[o.inlineQueue.length-1].src=n.text),0;if(t=o.tokenizer.table(e))return e=e.substring(t.raw.length),a.push(t),0;if(t=o.tokenizer.lheading(e))return e=e.substring(t.raw.length),a.push(t),0;if(r=e,o.options.extensions&&o.options.extensions.startBlock){var s,u=Infinity,c=e.slice(1);o.options.extensions.startBlock.forEach((function(e){"number"==typeof(s=e.call({lexer:this},c))&&s>=0&&(u=Math.min(u,s))})),u=0&&(r=e.substring(0,u+1))}if(o.state.top&&(t=o.tokenizer.paragraph(r)))return n=a[a.length-1],i&&"paragraph"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,o.inlineQueue.pop(),o.inlineQueue[o.inlineQueue.length-1].src=n.text):a.push(t),i=r.length!==e.length,e=e.substring(t.raw.length),0;if(t=o.tokenizer.text(e))return e=e.substring(t.raw.length),(n=a[a.length-1])&&"text"===n.type?(n.raw+="\n"+t.raw,n.text+="\n"+t.text,o.inlineQueue.pop(),o.inlineQueue[o.inlineQueue.length-1].src=n.text):a.push(t),0;if(e){var l="Infinite loop on byte: "+e.charCodeAt(0);if(o.options.silent)return console.error(l),1;throw new Error(l)}};e&&(0===(s=u())||1!==s););return this.state.top=!0,a}},{key:"inline",value:function(e,t){this.inlineQueue.push({src:e,tokens:t})}},{key:"inlineTokens",value:function(e){var t,n,r,i,o,a,s=this,u=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[],f=e;if(this.tokens.links){var p=Object.keys(this.tokens.links);if(p.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(f));)p.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(f=f.slice(0,i.index)+"["+(0,c.repeatString)("a",i[0].length-2)+"]"+f.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(f));)f=f.slice(0,i.index)+"["+(0,c.repeatString)("a",i[0].length-2)+"]"+f.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.escapedEmSt.exec(f));)f=f.slice(0,i.index)+"++"+f.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(var h,m=function(){if(o||(a=""),o=!1,t=s.tokenizer.owo(e))return e=e.substring(t.raw.length),t.type&&u.push(t),0;if(s.options.extensions&&s.options.extensions.inline&&s.options.extensions.inline.some((function(n){return!!(t=n.call({lexer:s},e,u))&&(e=e.substring(t.raw.length),u.push(t),!0)})))return 0;if(t=s.tokenizer.escape(e))return e=e.substring(t.raw.length),u.push(t),0;if(t=s.tokenizer.tag(e))return e=e.substring(t.raw.length),(n=u[u.length-1])&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):u.push(t),0;if(t=s.tokenizer.link(e))return e=e.substring(t.raw.length),u.push(t),0;if(t=s.tokenizer.reflink(e,s.tokens.links))return e=e.substring(t.raw.length),(n=u[u.length-1])&&"text"===t.type&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):u.push(t),0;if(t=s.tokenizer.emStrong(e,f,a))return e=e.substring(t.raw.length),u.push(t),0;if(t=s.tokenizer.codespan(e))return e=e.substring(t.raw.length),u.push(t),0;if(t=s.tokenizer.br(e))return e=e.substring(t.raw.length),u.push(t),0;if(t=s.tokenizer.del(e))return e=e.substring(t.raw.length),u.push(t),0;if(t=s.tokenizer.autolink(e,d))return e=e.substring(t.raw.length),u.push(t),0;if(!s.state.inLink&&(t=s.tokenizer.url(e,d)))return e=e.substring(t.raw.length),u.push(t),0;if(r=e,s.options.extensions&&s.options.extensions.startInline){var i,c=Infinity,p=e.slice(1);s.options.extensions.startInline.forEach((function(e){"number"==typeof(i=e.call({lexer:this},p))&&i>=0&&(c=Math.min(c,i))})),c=0&&(r=e.substring(0,c+1))}if(t=s.tokenizer.inlineText(r,l))return e=e.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(a=t.raw.slice(-1)),o=!0,(n=u[u.length-1])&&"text"===n.type?(n.raw+=t.raw,n.text+=t.text):u.push(t),0;if(e){var h="Infinite loop on byte: "+e.charCodeAt(0);if(s.options.silent)return console.error(h),1;throw new Error(h)}};e&&(0===(h=m())||1!==h););return u}}],[{key:"rules",get:function(){return{block:u.block,inline:u.inline}}},{key:"lex",value:function(t,n){return new e(n).lex(t)}},{key:"lexInline",value:function(t,n){return new e(n).inlineTokens(t)}}]),e}()},2817:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=void 0;var i=r(n(8850)),o=r(n(1332)),a=n(7565),s=n(1674),u=n(2123),c=n(4008),l=n(9105);t.Parser=function(){function e(t){(0,i["default"])(this,e),this.options=t||c.defaults,this.options.renderer=this.options.renderer||new a.Renderer,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new s.TextRenderer,this.slugger=new u.Slugger}return(0,o["default"])(e,[{key:"parse",value:function(e){var t,n,r,i,o,a,s,u,c,d,f,p,h,m,g,v,_,y,b,k=!(arguments.length>1&&arguments[1]!==undefined)||arguments[1],w="",E=e.length;for(t=0;t0&&"paragraph"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),c+=this.renderer.listitem(m,_,v);w+=this.renderer.list(c,f,p);continue;case"html":w+=this.renderer.html(d.text);continue;case"paragraph":w+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(c=d.tokens?this.parseInline(d.tokens):d.text;t+1':":"+e+":"}},{key:"code",value:function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return e=e.replace(/\n$/,"")+"\n",r?'
    '+(n?e:(0,s.escape)(e,!0))+"
    \n":"
    "+(n?e:(0,s.escape)(e,!0))+"
    \n"}},{key:"blockquote",value:function(e){return"
    \n"+e+"
    \n"}},{key:"html",value:function(e){return e}},{key:"heading",value:function(e,t,n,r){return this.options.headerIds?"'+e+"\n":""+e+"\n"}},{key:"hr",value:function(){return this.options.xhtml?"
    \n":"
    \n"}},{key:"list",value:function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}},{key:"listitem",value:function(e){return"
  • "+e+"
  • \n"}},{key:"checkbox",value:function(e){return" "}},{key:"paragraph",value:function(e){return"

    "+e+"

    \n"}},{key:"table",value:function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"}},{key:"tablerow",value:function(e){return"\n"+e+"\n"}},{key:"tablecell",value:function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"}},{key:"strong",value:function(e){return""+e+""}},{key:"em",value:function(e){return""+e+""}},{key:"codespan",value:function(e){return""+e+""}},{key:"br",value:function(){return this.options.xhtml?"
    ":"
    "}},{key:"del",value:function(e){return""+e+""}},{key:"link",value:function(e,t,n){if(null===(e=(0,s.cleanUrl)(this.options.sanitize,this.options.baseUrl,e)))return n;var r='"}},{key:"image",value:function(e,t,n){if(null===(e=(0,s.cleanUrl)(this.options.sanitize,this.options.baseUrl,e)))return n;var r=''+n+'":">"}},{key:"text",value:function(e){return e}}]),e}()},2123:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.Slugger=void 0;var i=r(n(8850)),o=r(n(1332));t.Slugger=function(){function e(){(0,i["default"])(this,e),this.seen={}}return(0,o["default"])(e,[{key:"serialize",value:function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}},{key:"getNextSafeSlug",value:function(e,t){var n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{n=e+"-"+ ++r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}},{key:"slug",value:function(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}}]),e}()},1674:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.TextRenderer=void 0;var i=r(n(8850)),o=r(n(1332));t.TextRenderer=function(){function e(){(0,i["default"])(this,e)}return(0,o["default"])(e,[{key:"strong",value:function(e){return e}},{key:"em",value:function(e){return e}},{key:"codespan",value:function(e){return e}},{key:"del",value:function(e){return e}},{key:"html",value:function(e){return e}},{key:"text",value:function(e){return e}},{key:"link",value:function(e,t,n){return""+n}},{key:"image",value:function(e,t,n){return""+n}},{key:"br",value:function(){return""}}]),e}()},4001:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.Tokenizer=void 0;var i=r(n(8850)),o=r(n(1332)),a=r(n(9272)),s=n(4008),u=n(9105);function c(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n["return"]||n["return"]()}finally{if(s)throw o}}}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0)return{type:"space",raw:t[0]}}},{key:"code",value:function(e){var t=this.rules.block.code.exec(e);if(t){var n=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:(0,u.rtrim)(n,"\n")}}}},{key:"fences",value:function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],r=function(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var r=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:(0,a["default"])(t,1)[0].length>=r.length?e.slice(r.length):e})).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:r}}}},{key:"heading",value:function(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();if(/#$/.test(n)){var r=(0,u.rtrim)(n,"#");this.options.pedantic?n=r.trim():r&&!/ $/.test(r)||(n=r.trim())}var i={type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:[]};return this.lexer.inline(i.text,i.tokens),i}}},{key:"hr",value:function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}},{key:"blockquote",value:function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(n,[]),text:n}}}},{key:"list",value:function(e){var t=this.rules.block.list.exec(e);if(t){var n,r,i,o,a,s,u,l,d,f,p,h,m=t[1].trim(),g=m.length>1,v={type:"list",raw:"",ordered:g,start:g?+m.slice(0,-1):"",loose:!1,items:[]};m=g?"\\d{1,9}\\".concat(m.slice(-1)):"\\".concat(m),this.options.pedantic&&(m=g?m:"[*+-]");for(var _=new RegExp("^( {0,3}".concat(m,")((?: [^\\n]*)?(?:\\n|$))"));e&&(h=!1,t=_.exec(e))&&!this.rules.block.hr.test(e);){if(n=t[0],e=e.substring(n.length),l=t[2].split("\n",1)[0],d=e.split("\n",1)[0],this.options.pedantic?(o=2,p=l.trimLeft()):(o=(o=t[2].search(/[^ ]/))>4?1:o,p=l.slice(o),o+=t[1].length),s=!1,!l&&/^ *$/.test(d)&&(n+=d+"\n",e=e.substring(d.length+1),h=!0),!h)for(var y=new RegExp("^ {0,".concat(Math.min(3,o-1),"}(?:[*+-]|\\d{1,9}[.)])"));e&&(l=f=e.split("\n",1)[0],this.options.pedantic&&(l=l.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!y.test(l));){if(l.search(/[^ ]/)>=o||!l.trim())p+="\n"+l.slice(o);else{if(s)break;p+="\n"+l}s||l.trim()||(s=!0),n+=f+"\n",e=e.substring(f.length+1)}v.loose||(u?v.loose=!0:/\n *\n *$/.test(n)&&(u=!0)),this.options.gfm&&(r=/^\[[ xX]\] /.exec(p))&&(i="[ ] "!==r[0],p=p.replace(/^\[[ xX]\] +/,"")),v.items.push({type:"list_item",raw:n,task:!!r,checked:i,loose:!1,text:p}),v.raw+=n}v.items[v.items.length-1].raw=n.trimRight(),v.items[v.items.length-1].text=p.trimRight(),v.raw=v.raw.trimRight();var b=v.items.length;for(a=0;a1)return!0}catch(i){r.e(i)}finally{r.f()}return!1}));!v.loose&&k.length&&w&&(v.loose=!0,v.items[a].loose=!0)}return v}}},{key:"html",value:function(e){var t=this.rules.block.html.exec(e);if(t){var n={type:"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:t[0]};return this.options.sanitize&&(n.type="paragraph",n.text=this.options.sanitizer?this.options.sanitizer(t[0]):(0,u.escape)(t[0]),n.tokens=[],this.lexer.inline(n.text,n.tokens)),n}}},{key:"def",value:function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{type:"def",tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}},{key:"table",value:function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:(0,u.splitCells)(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var r,i,o,a,s=n.align.length;for(r=0;r/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):(0,u.escape)(t[0]):t[0]}}},{key:"link",value:function(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;var r=(0,u.rtrim)(n.slice(0,-1),"\\");if((n.length-r.length)%2==0)return}else{var i=(0,u.findClosingBracket)(t[2],"()");if(i>-1){var o=(0===t[0].indexOf("!")?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,o).trim(),t[3]=""}}var a=t[2],s="";if(this.options.pedantic){var c=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(a);c&&(a=c[1],s=c[3])}else s=t[3]?t[3].slice(1,-1):"";return a=a.trim(),/^$/.test(n)?a.slice(1):a.slice(1,-1)),d(t,{href:a?a.replace(this.rules.inline._escapes,"$1"):a,title:s?s.replace(this.rules.inline._escapes,"$1"):s},t[0],this.lexer)}}},{key:"reflink",value:function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var r=(n[2]||n[1]).replace(/\s+/g," ");if(!(r=t[r.toLowerCase()])||!r.href){var i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return d(n,r,n[0],this.lexer)}}},{key:"emStrong",value:function(e,t){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"",r=this.rules.inline.emStrong.lDelim.exec(e);if(r&&(!r[3]||!n.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/))){var i=r[1]||r[2]||"";if(!i||i&&(""===n||this.rules.inline.punctuation.exec(n))){var o,a,s=r[0].length-1,u=s,c=0,l="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+s);null!=(r=l.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6])if(a=o.length,r[3]||r[4])u+=a;else if(!((r[5]||r[6])&&s%3)||(s+a)%3){if(!((u-=a)>0)){if(a=Math.min(a,a+u+c),Math.min(s,a)%2){var d=e.slice(1,s+r.index+a);return{type:"em",raw:e.slice(0,s+r.index+a+1),text:d,tokens:this.lexer.inlineTokens(d,[])}}var f=e.slice(2,s+r.index+a-1);return{type:"strong",raw:e.slice(0,s+r.index+a+1),text:f,tokens:this.lexer.inlineTokens(f,[])}}}else c+=a}}}},{key:"codespan",value:function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),r=/[^ ]/.test(n),i=/^ /.test(n)&&/ $/.test(n);return r&&i&&(n=n.substring(1,n.length-1)),n=(0,u.escape)(n,!0),{type:"codespan",raw:t[0],text:n}}}},{key:"br",value:function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}},{key:"del",value:function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2],[])}}},{key:"owo",value:function(e){var t=this.rules.inline.owo.exec(e);if(t&&t[0].length>1)return{type:"owo",raw:t[0],text:t[1]}}},{key:"autolink",value:function(e,t){var n,r,i=this.rules.inline.autolink.exec(e);if(i)return r="@"===i[2]?"mailto:"+(n=(0,u.escape)(this.options.mangle?t(i[1]):i[1])):n=(0,u.escape)(i[1]),{type:"link",raw:i[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},{key:"url",value:function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var r,i;if("@"===n[2])i="mailto:"+(r=(0,u.escape)(this.options.mangle?t(n[0]):n[0]));else{var o;do{o=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(o!==n[0]);r=(0,u.escape)(n[0]),i="www."===n[1]?"http://"+r:r}return{type:"link",raw:n[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}},{key:"inlineText",value:function(e,t){var n,r=this.rules.inline.text.exec(e);if(r)return n=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):(0,u.escape)(r[0]):r[0]:(0,u.escape)(this.options.smartypants?t(r[0]):r[0]),{type:"text",raw:r[0],text:n}}}]),e}()},4008:function(e,t){"use strict";function n(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}Object.defineProperty(t,"__esModule",{value:!0}),t.changeDefaults=function(e){t.defaults=e},t.defaults=void 0,t.getDefaults=n,t.defaults={baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}},9105:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkSanitizeDeprecation=function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},t.cleanUrl=function(e,t,n){if(e){var r;try{r=decodeURIComponent(c(n)).replace(d,"").toLowerCase()}catch(i){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!f.test(n)&&(n=v(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(i){return null}return n},t.edit=function(e,t){e=e.source||e,t=t||"";var n={replace:function(t,r){return r=(r=r.source||r).replace(l,"$1"),e=e.replace(t,r),n},getRegex:function(){return new RegExp(e,t)}};return n},t.escape=function(e,t){if(t){if(n.test(e))return e.replace(r,s)}else if(i.test(e))return e.replace(o,s);return e},t.findClosingBracket=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,r=0,i=0;i1;)1&t&&(n+=e),t>>=1,e+=e;return n+e},t.resolveUrl=v,t.rtrim=_,t.splitCells=function(e,t){var n=e.replace(/\|/g,(function(e,t,n){for(var r=!1,i=t;--i>=0&&"\\"===n[i];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>t)n.splice(t);else for(;n.length"']/,r=/[&<>"']/g,i=/[<>"']|&(?!#?\w+;)/,o=/[<>"']|&(?!#?\w+;)/g,a={"&":"&","<":"<",">":">",'"':""","'":"'"},s=function(e){return a[e]},u=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function c(e){return e.replace(u,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var l=/(^|[^\[])\^/g,d=/[^\w:]/g,f=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i,p={},h=/^[^:]+:\/*[^/]*$/,m=/^([^:]+:)[\s\S]*$/,g=/^([^:]+:\/*[^/]*)[\s\S]*$/;function v(e,t){p[" "+e]||(h.test(e)?p[" "+e]=e+"/":p[" "+e]=_(e,"/",!0));var n=-1===(e=p[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(m,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(g,"$1")+t:e+t}function _(e,t,n){var r=e.length;if(0===r)return"";for(var i=0;i=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n["return"]||n["return"]()}finally{if(s)throw o}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nAn error occurred:

    "+(0,c.escape)(d.message+"",!0)+"
    ";throw d}}p.options=p.setOptions=function(e){return(0,c.merge)(p.defaults,e),(0,l.changeDefaults)(p.defaults),p},p.getDefaults=l.getDefaults,p.defaults=l.defaults,p.use=function(){for(var e=arguments.length,t=new Array(e),n=0;nAn error occurred:

    "+(0,c.escape)(o.message+"",!0)+"
    ";throw o}},p.Parser=i.Parser,p.parser=i.Parser.parse,p.Renderer=a.Renderer,p.TextRenderer=s.TextRenderer,p.Lexer=r.Lexer,p.lexer=r.Lexer.lex,p.Tokenizer=o.Tokenizer,p.Slugger=u.Slugger,p.parse=p,t.options=p.options,t.setOptions=p.setOptions,t.use=p.use,t.walkTokens=p.walkTokens,t.parseInline=p.parseInline,t.parse=p,t.parser=i.Parser.parse,t.lexer=r.Lexer.lex},5779:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.inline=t.block=void 0;var r=n(9105),i=t.block={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:r.noopTest,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/};i._label=/(?!\s*\])(?:\\.|[^\[\]\\])+/,i._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,i.def=(0,r.edit)(i.def).replace("label",i._label).replace("title",i._title).getRegex(),i.bullet=/(?:[*+-]|\d{1,9}[.)])/,i.listItemStart=(0,r.edit)(/^( *)(bull) */).replace("bull",i.bullet).getRegex(),i.list=(0,r.edit)(i.list).replace(/bull/g,i.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+i.def.source+")").getRegex(),i._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",i._comment=/|$)/,i.html=(0,r.edit)(i.html,"i").replace("comment",i._comment).replace("tag",i._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),i.paragraph=(0,r.edit)(i._paragraph).replace("hr",i.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",i._tag).getRegex(),i.blockquote=(0,r.edit)(i.blockquote).replace("paragraph",i.paragraph).getRegex(),i.normal=(0,r.merge)({},i),i.gfm=(0,r.merge)({},i.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),i.gfm.table=(0,r.edit)(i.gfm.table).replace("hr",i.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",i._tag).getRegex(),i.gfm.paragraph=(0,r.edit)(i._paragraph).replace("hr",i.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",i.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",i._tag).getRegex(),i.pedantic=(0,r.merge)({},i.normal,{html:(0,r.edit)("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",i._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:r.noopTest,paragraph:(0,r.edit)(i.normal._paragraph).replace("hr",i.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",i.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var o=t.inline={owo:/^:(\S*):/,escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:r.noopTest,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:r.noopTest,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~",o.punctuation=(0,r.edit)(o.punctuation).replace(/punctuation/g,o._punctuation).getRegex(),o.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,o.escapedEmSt=/\\\*|\\_/g,o._comment=(0,r.edit)(i._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),o.emStrong.lDelim=(0,r.edit)(o.emStrong.lDelim).replace(/punct/g,o._punctuation).getRegex(),o.emStrong.rDelimAst=(0,r.edit)(o.emStrong.rDelimAst,"g").replace(/punct/g,o._punctuation).getRegex(),o.emStrong.rDelimUnd=(0,r.edit)(o.emStrong.rDelimUnd,"g").replace(/punct/g,o._punctuation).getRegex(),o._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,o._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,o._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,o.autolink=(0,r.edit)(o.autolink).replace("scheme",o._scheme).replace("email",o._email).getRegex(),o._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,o.tag=(0,r.edit)(o.tag).replace("comment",o._comment).replace("attribute",o._attribute).getRegex(),o._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,o._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,o._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,o.link=(0,r.edit)(o.link).replace("label",o._label).replace("href",o._href).replace("title",o._title).getRegex(),o.reflink=(0,r.edit)(o.reflink).replace("label",o._label).replace("ref",i._label).getRegex(),o.nolink=(0,r.edit)(o.nolink).replace("ref",i._label).getRegex(),o.reflinkSearch=(0,r.edit)(o.reflinkSearch,"g").replace("reflink",o.reflink).replace("nolink",o.nolink).getRegex(),o.normal=(0,r.merge)({},o),o.pedantic=(0,r.merge)({},o.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:(0,r.edit)(/^!?\[(label)\]\((.*?)\)/).replace("label",o._label).getRegex(),reflink:(0,r.edit)(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",o._label).getRegex()}),o.gfm=(0,r.merge)({},o.normal,{escape:(0,r.edit)(o.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\'.concat(e.logo,"
    ")+'
    ',r=0;r');for(var i=this.odata[this.packages[r]].container,o=0;o').concat(a,"")}n+=""}n+='
      ';for(var s=0;s".concat(this.packages[s],"");n+="
    ",this.container.innerHTML=n,this.logo=this.container.getElementsByClassName("OwO-logo")[0],this.logo.addEventListener("click",(function(){t.toggle()})),this.container.getElementsByClassName("OwO-body")[0].addEventListener("click",(function(e){var n=null;if(e.target.classList.contains("OwO-item")?n=e.target:e.target.parentNode.classList.contains("OwO-item")&&(n=e.target.parentNode),n){var r=t.area.selectionEnd,i=t.area.value,o=n.innerHTML;if(-1!==o.indexOf("2&&f[2]!==undefined?f[2]:{},o=e||(s.app?s.app.$tcb:null),a=r.envId||s.app.$twikoo.envId,u=r.funcName||(null===s.app||void 0===s.app?void 0:s.app.$twikoo.funcName)||"twikoo",!o){t.next=33;break}return t.prev=5,t.next=8,o.app.callFunction({name:u,data:c({event:n},r)});case 8:case 27:case 36:return t.abrupt("return",t.sent);case 11:t.prev=11,t.t0=t["catch"](5),t.t1=n,t.next="COMMENT_LIKE"===t.t1?16:"COMMENT_GET"===t.t1?18:"COMMENT_SUBMIT"===t.t1?20:"COUNTER_GET"===t.t1?22:24;break;case 16:return d="comment-like",t.abrupt("break",24);case 18:return d="comment-get",t.abrupt("break",24);case 20:return d="comment-submit",t.abrupt("break",24);case 22:return d="counter-get",t.abrupt("break",24);case 24:if(!d){t.next=30;break}return t.next=27,o.app.callFunction({name:d,data:r});case 30:throw new Error("请升级 Twikoo 云函数版本再试,如果仍无法解决,请删除并重新创建 Twikoo 云函数 - https://twikoo.js.org");case 31:t.next=40;break;case 33:if(!l(a)){t.next=39;break}return t.next=36,new Promise((function(e,t){try{var i=localStorage.getItem("twikoo-access-token"),o=new XMLHttpRequest;o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var n=JSON.parse(o.responseText);n.accessToken&&localStorage.setItem("twikoo-access-token",n.accessToken),e({result:n})}else t(o.status)},o.open("POST",a),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify(c({event:n,accessToken:i},r)))}catch(s){t(s)}}));case 39:throw new Error("缺少 envId 配置 - https://twikoo.js.org");case 40:case"end":return t.stop()}}),t,null,[[5,11]])})));return function(t,n){return e.apply(this,arguments)}}()},7080:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getQQAvatar=function(e){var t=e.replace(/@qq.com/gi,"");return"https://thirdqq.qlogo.cn/g?b=sdk&nk=".concat(t,"&s=140")},t.isQQ=function(e){return/^[1-9][0-9]{4,10}$/.test(e)||/^[1-9][0-9]{4,10}@qq.com$/i.test(e)},t.normalizeMail=function(e){return String(e).trim().toLowerCase()}},9212:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.initMarkedOwo=function(e){if(e&&Object.values(e)){var t={};return Object.values(e).forEach((function(e){e.container.forEach((function(e){var n=p(e.icon);n&&(t[e.text]=n)}))})),t}},t.initOwoEmotions=function(e){return d.apply(this,arguments)};var i=r(n(479)),o=r(n(1819)),a=r(n(4964)),s=n(8129);function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n["return"]||n["return"]()}finally{if(s)throw o}}}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=200&&n.status<300||304===n.status){var e=function(e){try{return Object.values(e).forEach((function(e){if("image"===e.type){var t,n=u(e.container);try{for(n.s();!(t=n.n()).done;){var r=t.value;r.text||(r.text=h(p(r.icon)))}}catch(i){n.e(i)}finally{n.f()}}})),e}catch(t){s.logger.warn("OwO data is bad: ",t)}}(JSON.parse(n.responseText));t(e)}else s.logger.warn("OwO data request was unsuccessful: "+n.status)},n.open("get",e,!0),n.send(null)}))}function d(){return(d=(0,a["default"])(i["default"].mark((function e(t){var n,r;return i["default"].wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={},e.next=3,Promise.all(t.split(",").map((function(e){return l(e.trim())})));case 3:return r=e.sent,Object.assign.apply(Object,[n].concat((0,o["default"])(r))),e.abrupt("return",n);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var f=document.createElement("template");function p(e){try{return f.innerHTML=e,f.content.childNodes[0].src}catch(t){return""}}function h(e){return e.split("#").shift().split("?").shift().split("/").pop()}},4161:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=void 0;var r,i,o=n(1085),a=function(e,t){var n=document.getElementById("twikoo");i&&n.contains(i)||!e||"none"===e||((i=document.createElement("link")).href="default"===e?"".concat(t,"/themes/prism.min.css"):"".concat(t,"/themes/prism-").concat(e,".min.css"),i.rel="stylesheet",i.type="text/css",n.appendChild(i))};t["default"]=function(e,t,i){var s=o.app&&o.app.$twikoo.prismCdn?o.app.$twikoo.prismCdn:"https://cdn.jsdelivr.net/npm/prismjs@1.28.0";window.Prism=window.Prism||{},window.Prism.manual=!0,r||(r=n(1965),n(210),r.plugins.autoloader.languages_path="".concat(s,"/components/"),i&&(n(8072),i.split(",").map((function(e){return e.trim()})).forEach((function(e){"showLanguage"===e?n(4296):"copyButton"===e&&n(5472)})))),a(t,s),r.highlightAllUnder(e)}},7564:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=void 0;var i,o=r(n(3852)),a="ADMIN_COMMENT",s="ADMIN_CONFIG_CATEGORY",u="ADMIN_CONFIG_ITEM",c="ADMIN_IMPORT",l=["qmsg","serverchan","pushplus","pushplushxtrip","dingtalk","wecom","bark","gocqhttp","atri","pushdeer","igot","telegram","feishu"].map((function(e){return'"'.concat(e,'"')})),d=["126","163","1und1","AOL","DebugMail","DynectEmail","FastMail","GandiMail","Gmail","Godaddy","GodaddyAsia","GodaddyEurope","Hotmail","Mail.ru","Maildev","Mailgun","Mailjet","Mailosaur","Mandrill","Naver","OpenMailBox","Outlook365","Postmark","QQ","QQex","SES","SES-EU-WEST-1","SES-US-EAST-1","SES-US-WEST-2","SendCloud","SendGrid","SendPulse","SendinBlue","Sparkpost","Yahoo","Yandex","Zoho","hot.ee","iCloud","mail.ee","qiye.aliyun"].map((function(e){return'"'.concat(e,'"')})),f=["default","coy","dark","funky","okaidia","solarizedlight","tomorrow","twilight"].map((function(e){return'"'.concat(e,'"')})),p=["showLanguage","copyButton"].map((function(e){return'"'.concat(e,'"')})),h=["qcloud","7bu (https://7bu.top)","smms (https://sm.ms)","lskypro","piclist","easyimage"].map((function(e){return'"'.concat(e,'"')})),m=["lskypro","piclist","easyimage"].map((function(e){return'"'.concat(e,'"')})),g=["404","mp","identicon","monsterid","wavatar","retro","robohash","blank"].map((function(e){return'"'.concat(e,'"')}));t["default"]=(i={ADMIN_CLIENT_VERSION:["前端版本:","前端版本:","前端版本:","Client version: ","Клиент версияси: ","クライアントバージョン:","클라이언트 버전: "],ADMIN_SERVER_VERSION:["云函数版本:","云函數版本:","雲端函式版本:","Server version: ","Сервернинг версияси: ","サーバーサイドバージョン: ","서버 버전: "]},(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,a,["评论管理","評論管理","留言管理","Comment","Изоҳ","コメント管理","댓글 관리"]),a+"_DELETE",["删除","刪除","移除","Delete","Ўчирмоқ","削除","삭제"]),a+"_DELETE_CONFIRM",["确认删除?","確認刪除?","確認移除?","Confirm deletion?","Ўчириш тасдиқлансинми?","本当に削除しますか?","정말 삭제하시겠습니까?"]),a+"_FILTER_ALL",["全部","全部","全部","All","Ҳаммаси","全部","전체"]),a+"_FILTER_VISIBLE",["只看可见","只看可見","只看可見","Visible","Кўринадиган","表示中のみ","표시 댓글"]),a+"_FILTER_HIDDEN",["只看隐藏","只看隱藏","只看隱藏","Hidden","Яширилган","非表示中のみ","숨김 댓글"]),a+"_HIDE",["隐藏","隱藏","隱藏","Hide","Яширмоқ","非表示","숨기기"]),a+"_IS_SPAM_SUFFIX",[" (已隐藏)"," (已隱藏)"," (已隱藏)"," (Hidden)"," (Яширилган)"," (非表示)"," (숨김 처리됨)"]),a+"_SEARCH",["搜索","搜索","搜尋","Search","Излаш","検索","검색"]),a+"_SEARCH_PLACEHOLDER",["搜索昵称、邮箱、网址、IP、评论正文、文章地址","搜索暱稱、郵箱、網址、IP、評論正文、文章地址","搜索暱稱、郵件、網址、IP、留言正文、文章路徑","Search by nick, mail, website, IP, comment, or article path","Тахаллус, почта, веб-сайт, ИП, шарҳ ёки мақола йўли бўйича излаш","名前、メールアドレス、ウェブサイトURL、IPアドレス、コメント内容、記事のURLを検索","닉네임, 이메일, 웹사이트, IP, 댓글 내용, 게시글 주소로 검색"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,a+"_SHOW",["显示","顯示","顯示","Show","Кўрсатиш","表示","표시"]),a+"_TOP",["置顶","置頂","置頂","Pin","Қадамоқ","固定する","고정"]),a+"_UNTOP",["取消置顶","取消置頂","取消置頂","Unpin","Қадоқни ечмоқ","固定を解除","고정 해제"]),a+"_VIEW",["查看","查看","檢視","View","Кўриниш","閲覧","보기"]),"ADMIN_CONFIG",["配置管理","配置管理","設定值管理","Configuration","Конфигурация","設定管理","환경설정"]),s+"_COMMON",["通用","通用","一般","General","Умумий","一般","일반"]),s+"_IM",["即时通知","即時通知","即時通知","Instant notification","Тезкор хабарнома","即時通知","실시간 알림"]),s+"_MAIL",["邮件通知","郵件通知","郵件通知","Email notification","Электрон почта хабарномаси","メール通知","이메일 알림"]),s+"_PLUGIN",["插件","插件","擴充功能","Plugin","Плагин","プラグイン","플러그인"]),s+"_PRIVACY",["隐私","隱私","隱私權","Privacy","Шахсий қоидалар","プライバシー","개인정보"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,s+"_SPAM",["反垃圾","反垃圾","防垃圾","Spam","Спам","スパム対策","스팸 관리"]),"ADMIN_CONFIG_EMAIL_TEST",["邮件通知测试","郵件通知測試","郵件通知測試","Email notification test","Электрон почта хабарномаси тести","メール通知テスト","이메일 알림 테스트"]),"ADMIN_CONFIG_EMAIL_TEST_BTN",["发送测试邮件","發送測試郵件","發送測試郵件","Send test mail","Синов хатини юбориш","テストメールを送信","테스트 메일 발송"]),"ADMIN_CONFIG_EMAIL_TEST_HELP",["输入一个邮箱地址,发送测试邮件","輸入一個郵箱位址,發送測試郵件","輸入一個郵箱帳號,發送測試郵件","Input an email address & send test mail","Э-почта манзилини киритинг ва синов хатини юборинг","メールアドレスを入力してテストメールを送信","이메일 주소를 입력하고 테스트 메일을 발송하세요"]),"ADMIN_CONFIG_EMAIL_TEST_RESULT",["测试结果:","測試結果:","測試結果:","Test result: ","Тест натижаси: ","テスト結果:","테스트 결과: "]),"ADMIN_CONFIG_EXAMPLE",["示例:","示例:","範例:","Example: ","Намуна: ","例:","예시: "]),u+"_AKISMET_KEY",['Akismet 反垃圾评论,用于垃圾评论检测,设为 "MANUAL_REVIEW" 开启人工审核,留空不使用反垃圾。注册:https://akismet.com','Akismet 反垃圾評論,用於垃圾評論檢測,設為 "MANUAL_REVIEW" 開啟人工審核,留空不使用反垃圾。註冊:https://akismet.com','Akismet 防垃圾留言,用於垃圾留言檢測,設為 "MANUAL_REVIEW" 以開啟人工審核,留空則不使用防垃圾。註冊:https://akismet.com','Akismet spam protection. Set to "MANUAL_REVIEW" to enable manual review. Leave it blank to not use anti-spam. Register Akismet: https://akismet.com','Акисмет спам ҳимояси. Қўлда кўриб чиқишни ёқиш учун "MANUAL_REVIEW" га созланг. Анти-спамдан фойдаланмаслик учун уни бўш қолдиринг. Акисметни рўйхатдан ўтказиш: https://akismet.com','Akismetは、スパムコメントの検出に使用されるアンチスパムサービスです。"MANUAL_REVIEW"に設定することで、手動レビューを有効化します。コメントのスパム対策にAkismetを使用することで、不要なコメントをブロックし、サイトのセキュリティを向上させることができます。 Akismetの詳細情報と登録は、https://akismet.com で提供されています。','Akismet 스팸 방지. 스팸 댓글 감지에 사용합니다. "MANUAL_REVIEW"를 설정하면 수동 검토를 활성화합니다. 비워두면 스팸 수동 검토를 사용하지 않습니다. Akismet 등록: https://akismet.com']),u+"_BLOGGER_NICK",["博主的昵称。","博主的昵稱。","站長的暱稱。","Admin nick name.","Админ исми.","管理者の名前。","관리자 닉네임."]),u+"_BLOGGER_EMAIL",["博主的邮箱地址,用于邮件通知、博主标识。","博主的郵箱地址,用於郵件通知、博主標識。","站長的郵箱帳號,用於郵件通知、站長認證。","Admin Email address. Used for Email notification and admin identification.","Админ электрон почта манзили. Электрон почта хабарномаси ва администратор идентификацияси учун фойдаланилади.","管理者のメールアドレス。メール通知と管理者の識別に使用されます。","관리자 이메일 주소. 이메일 알림 및 관리자 식별에 사용됩니다."]),u+"_COMMENT_BG_IMG",["评论框自定义背景图片 URL 地址。","評論框自定義背景圖片 URL 地址。","留言區塊自訂背景圖片 URL 網址。","URL for custom background image.","Махсус фон расми учун УРЛ.","コメントボックスのカスタム背景画像のURL。","댓글창 배경 이미지 URL 주소."]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,u+"_COMMENT_PAGE_SIZE",["评论列表分页大小,默认为 8。","評論列表分頁大小,預設為 8。","留言列表分頁大小,預設為 8。","Comment page size. Default: 8.","Изоҳ саҳифаси ўлчами. Стандарт: 8.","コメントリストのページサイズ。デフォルトは8。","한 페이지당 표시 댓글 수. 기본값: 8."]),u+"_COMMENT_PLACEHOLDER",["评论框提示信息,可用
    换行,默认为空","評論框提示信息,可用
    換行,預設為空","留言區塊提示資訊,可用
    換行,預設空白","Comment placeholder. Use
    to start a newline. Default: empty.","Изоҳ тўлдирувчиси. Янги қаторни бошлаш учун <бр> дан фойдаланинг. Стандарт: бўш.","コメントボックスのヒントメッセージ。
    で改行。デフォルトは空。","댓글 입력창에 표시될 기본 문구.
    태그로 줄바꿈 가능. 기본값: 비어 있음."]),u+"_CORS_ALLOW_ORIGIN",["CORS 安全域名,注意:如果您不了解什么是 CORS,此项请留空,错误设置会导致无法加载,默认为空,格式为 https://blog.example.com;如需添加多域名请使用,分隔","CORS 安全域名,注意:错误设置会导致无法加載,默認為空,格式为 https://blog.example.com;如需添加多域名請使用,分隔","CORS 安全網域,注意:設定錯誤將會導致載入失敗,預設空白,格式應為 https://blog.example.com;如需添加多域名請使用,分隔","CORS allow origin, note: incorrect settings can cause loading failure. Default: blank, format: https://blog.example.com; If you need to add multiple domain names, please use, separate","Версел СОРС келиб чиқишига рухсат беради, эътибор беринг: нотўғри созламалар юклашда хатоликка олиб келиши мумкин. Стандарт: бўш, формат: https://blog.example.com; Агар сиз бир нечта домен номларини қўшмоқчи бўлсангиз, илтимос, ажратишдан фойдаланинг.","CORS セキュアドメイン。注意:誤った設定は読み込みエラーを引き起こす可能性があります。デフォルトは空、形式は https://blog.example.com です。複数のドメインを追加する場合は、コンマで区切ってください。","댓글 서버 접근 허용 웹사이트 주소. 참고: 등록된 웹사이트만 댓글 시스템과 안전하게 통신합니다. 주소 오류 시 댓글창이 사라질 수 있습니다. 기본값: 비어 있음(보안 취약), 형식: https://blog.example.com; 여러 주소는 쉼표(,)로 구분."]),u+"_DEFAULT_GRAVATAR",['默认的头像显示。默认值(留空)为 "initials",可选:'.concat(g.join("、")),'預設的頭像顯示。預設值(留空)為 "initials",可選:'.concat(g.join("、")),'預設的大頭貼照圖示。預設值(留空)為 "initials",選項:'.concat(g.join("、")),'Avatar placeholder. Default (when empty): "initials". Choose from: '.concat(g.join(", ")),"Аватар тўлдирувчиси. Стандарт (агар бўш қолдирилса): «идентификатор». Қуйидагилардан танланг: ".concat(g.join(", ")),'デフォルトのプロフィール画像表示。デフォルト(空欄時)は "initials" で、選択肢は:'.concat(g.join("、")," です"),'프로필 기본 이미지. 기본값(비워둘 경우): "initials". 사용 가능 스타일: '.concat(g.join(", "))]),u+"_EMOTION_CDN",["表情 CDN,英文逗号分隔。默认为:https://owo.imaegoo.com/owo.json","表情 CDN,英文逗號分隔。預設為:https://owo.imaegoo.com/owo.json","表情 CDN 來源,使用英文逗號分隔。預設為:https://owo.imaegoo.com/owo.json","Emoji CDN. Separate by comma. Default: https://owo.imaegoo.com/owo.json","Emoji CDN. Вергул билан ажратинг. Default: https://owo.imaegoo.com/owo.json","顔文字CDN。コンマで区切ってください。デフォルト:https://owo.imaegoo.com/owo.json","이모티콘 데이터 웹 주소. 쉼표(,)로 구분. 기본값: https://owo.imaegoo.com/owo.json"]),u+"_FORBIDDEN_WORDS",["违禁词配置,包含违禁词的内容会直接标记为垃圾评论。英文逗号分隔。","違禁詞配置,包含違禁詞的內容會直接標記為垃圾評論。英文逗號分隔。","禁用詞語設定,包含禁用詞語的內容會直接標記為垃圾留言。使用英文逗號分隔。","Configure prohibited words. Comments containing prohibited words will be auto spammed. Separate by comma.","Тақиқланган сўзларни созланг. Тақиқланган сўзларни ўз ичига олган шарҳлар автоматик равишда спамга юборилади. Вергул билан ажратинг.","禁止ワード設定。禁止ワードを含むコンテンツは直ちにスパムコメントとしてマークされます。コンマで区切ってください。","금지어 설정. 금지어 포함 댓글은 스팸으로 숨김 처리 됩니다. 쉼표로 구분."]),u+"_BLOCKED_WORDS",["屏蔽词配置,包含屏蔽词的内容会直接评论失败。英文逗号分隔。","屏蔽词配置,包含屏蔽词的内容会直接评论失败。英文逗号分隔。","屏蔽词配置,包含屏蔽词的内容会直接评论失败。英文逗号分隔。","Configure blocked words. Comments containing blocked words will fail to send. Separate by comma.","Configure blocked words. Comments containing blocked words will fail to send. Separate by comma.","ブロックワード設定。ブロックワードを含むコンテンツは送信に失敗します。コンマで区切ってください。","차단어 설정. 차단어 포함 댓글은 등록에 실패합니다. 쉼표로 구분."]),u+"_GRAVATAR_CDN",["自定义头像 CDN 地址。如:cn.gravatar.com, weavatar.com, cravatar.cn, sdn.geekzu.org, gravatar.loli.net,默认:weavatar.com","自定義頭像 CDN 地址。如:cn.gravatar.com, weavatar.com, cravatar.cn, sdn.geekzu.org, gravatar.loli.net,預設:weavatar.com","自訂大頭貼照 CDN 來源。如:cn.gravatar.com, weavatar.com, cravatar.cn, sdn.geekzu.org, gravatar.loli.net,預設:weavatar.com","Custom avator CDN. (Examples: gravatar.com) Default: weavatar.com.","Custom avator CDN. (Мисоллар: gravatar.com) Default: weavatar.com.","カスタムプロフィール画像CDNアドレス。例:cn.gravatar.com、weavatar.com、cravatar.cn、sdn.geekzu.org、gravatar.loli.net、デフォルト:weavatar.com","프로필 이미지(아바타) Gravatar 서버 주소. 더 빠르거나 안정적인 서버를 선택할 수 있습니다. (예: gravatar.com) 기본값: weavatar.com."]),u+"_HIDE_ADMIN_CRYPT",["隐藏管理面板入口。可设置一个“暗号”,只有在“昵称”一栏输入相同的“暗号”时,管理面板入口才会显示,留空则不隐藏管理入口","隱藏管理面板入口。可設定一個“暗號”,只有在“暱稱”一欄輸入相同的“暗號”時,管理面板入口才會顯示,留空則不隱藏管理入口","隱藏管理控制台入口。可設定一個“暗號”,只有在「暱稱」一欄輸入相同的「暗號」時,管理控制台入口才會顯示,留白則不隱藏管理入口","Set a cipher to hide the management panel entrance, only when the same cipher is entered in the nickname field the management panel entry will be displayed. Leave it blank to not hide the management entrance.","Бошқарув панелига киришни яшириш учун шифрни ўрнатинг, фақат тахаллус майдонига худди шу шифр киритилганда бошқарув панелидаги ёзув кўрсатилади. Бошқарув киришини яширмаслик учун уни бўш қолдиринг.",'管理パネルのログイン画面を非表示にする。 "パスワード" を設定でき、 "名前" フィールドに同じ "パスワード" を入力した場合のみ、管理パネルのログイン画面が表示されます。空白の場合、管理パネルのログイン画面は非表示にされません。',"환경설정 버튼을 숨깁니다. 암호를 설정하여, 닉네임 입력란에 동일한 암호를 입력해야만 환경설정 버튼이 표시됩니다. 비워두면 버튼을 숨기지 않습니다."]),u+"_HIGHLIGHT",["启用代码高亮功能。如果您的主题和代码高亮有冲突,请设为 false。默认:true","啟用代碼高亮功能。如果您的主題和代碼高亮有衝突,請設為 false。預設:true","啟用程式碼醒目顯示功能。如果您的主題和此功能發生衝突,請設定為 false。預設:true","Enable code highlighting. If your theme conflicts with code highlighting, please set it to false. Default: true.","Кодни ажратиб кўрсатишни ёқинг. Агар мавзуингиз кодни ажратиб кўрсатишга зид бўлса, уни «фалсе» га ўрнатинг. Стандарт: рост.","コードハイライト機能を有効にします。テーマとコードハイライトに競合がある場合、falseに設定してください。デフォルト:true","코드 하이라이팅 기능을 활성화합니다. 테마와 코드 하이라이팅이 충돌하면 false로 설정하세요. 기본값: true."]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,u+"_HIGHLIGHT_THEME",["代码高亮主题,可选:".concat(f.join("、"),",访问 https://prismjs.com 可预览主题效果。如果您的主题和代码高亮有冲突,请设为 none。默认:none"),"代碼高亮主題,可選:".concat(f.join("、"),",訪問 https://prismjs.com 可預覽主題效果。如果您的主題和代碼高亮有衝突,請設為 none。預設:none"),"程式碼醒目顯示主題,選項:".concat(f.join("、"),",瀏覽 https://prismjs.com 可預覽主題效果。如果您的主題和此功能發生衝突,請設定為 none。預設:none"),"Code highlighting theme. Select from: ".concat(f.join(", "),". Visit https://prismjs.com for preview. If your theme conflicts with code highlighting, please set it to none. Default: none."),"Кодни таъкидлаш мавзуси. Қуйидагилардан танланг: ".concat(f.join(", "),". Олдиндан кўриш учун https://prismjs.com сайтига ташриф буюринг. Агар мавзуингиз кодни ажратиб кўрсатишга зид бўлса, уни «Ҳеч» га ўрнатинг. Стандарт: йўқ."),"コードハイライトのテーマ。選択肢:".concat(f.join("、"),"、テーマの効果をプレビューするには https://prismjs.com を訪問してください。テーマとコードハイライトに競合がある場合、noneに設定してください。デフォルト:none"),"코드 하이라이팅 테마. 사용 가능 테마: ".concat(f.join(", "),". https://prismjs.com 에서 미리보기를 확인하세요. 테마와 코드 하이라이팅이 충돌하면 none으로 설정하세요. 기본값: none.")]),u+"_HIGHLIGHT_PLUGIN",["代码高亮插件,可选:".concat(p.join("、"),",分别表示:展示代码语言、展示代码拷贝按钮。可以同时设置多个选项,如果想要不添加任何代码高亮插件,请设为 none。默认:none。"),"代碼高亮插件,可選:".concat(p.join("、"),",分別表示:展示代碼語言、展示代碼拷貝按鈕。可以同時設置多個選項,如果想要不添加任何代碼高亮插件,請設為 none。預設:none。"),"代碼高亮外掛程式,可選:".concat(p.join("、"),",分別表示:展示代碼語言、展示代碼拷貝按鈕。 可以同時設置多個選項,如果想要不添加任何代碼高亮外掛程式,請設定為 none。預設:none。"),"Code highlight plug-in, optional: ".concat(p.join(", "),", respectively: show code language, show code copy button. Multiple options can be set at the same time, if you want to add no code highlighting plug-ins, please set it to none. Default: none. "),"Плагин подсветки кода, опционально: ".concat(p.join(","),", соответственно: показывать язык кода, показывать кнопку копирования кода. Вы можете установить несколько опций одновременно, если вы хотите не добавлять плагин подсветки кода, установите значение none. по умолчанию: none."),"コード・ハイライト・プラグイン。オプション: ".concat(p.join(","),", それぞれ: コード言語の表示、コード・コピー・ボタンの表示。複数のオプションを同時に設定できますが、コード・ハイライト・プラグインを追加したくない場合は、noneに設定してください。"),"코드 하이라이트 추가 기능. 선택 가능: ".concat(p.join(", "),". (코드 언어 표시, 복사 버튼) 여러 기능을 동시에 설정할 수 있으며, 추가하지 않으려면 none으로 설정하세요. 기본값: none.")]),u+"_IMAGE_CDN",["插入图片所使用的图床,目前支持:".concat(h.join("、")),"插入圖片所使用的圖床,目前支持:".concat(h.join("、")),"插入圖片所使用的圖床,目前支援:".concat(h.join("、")),"The image bed for image uploading. Select from: ".concat(h.join(", ")),"Расм юклаш учун расм тўшаги. Қуйидагилардан танланг: ".concat(h.join(", ")),"画像のアップロードに使用する画像ホスティングサービス。次のうちから選択してください:".concat(h.join("、")),"댓글 이미지 업로드 기능에 사용될 호스팅 서비스. 사용 가능 목록: ".concat(h.join(", "))]),u+"_IMAGE_CDN_URL",["图床的 URL,仅当 IMAGE_CDN 为 ".concat(m.join(" / ")," 时需要填写"),"圖床的 URL,僅當 IMAGE_CDN 為 ".concat(m.join(" / ")," 時需要填寫"),"圖床的 URL,僅當 IMAGE_CDN 為 ".concat(m.join(" / ")," 時需要填寫"),"The URL for the image bed. Required if your IMAGE_CDN is one of these: ".concat(m.join(", ")),"IMAGE_CDN томонидан белгиланган расм тўшаги URL. Агар сизнинг IMAGE_CDN шулардан бири бўлса: ".concat(m.join(", ")),"IMAGE_CDNで設定した画像ホスティングサービスのURL。IMAGE_CDNが以下のいずれかの場合は入力が必要です:".concat(m.join("、")),"이미지 저장소 URL. IMAGE_CDN 설정이 다음 중 하나인 경우 필요합니다: ${customImageBedServices.join(",")}"]),u+"_IMAGE_CDN_TOKEN",["图床 token。qcloud 图床无需设置","图床 token。qcloud 图床无需设置","圖床 token。qcloud 圖床不需設定","The image bed token. Unnessessary for qcloud","Тасвир токен белгиси. Қслоуд учун кераксиз","画像ホスティングトークン。qcloud画像ホスティングを利用する場合は設定の必要はありません","이미지 호스팅 토큰. qcloud은 설정 불필요."]),u+"_LIGHTBOX",["使用简易图片点击放大效果。默认:false","使用簡易圖片點擊放大效果。預設:false","使用簡易圖片點擊放大效果。預設:false","Use simple Lightbox effect. Default: false","Используйте простые эффекты лайтбокса. По умолчанию: false","シンプルな画像拡大機能を使用します。デフォルト:false","라이트박스 효과, 댓글 이미지 클릭 시 확대 효과 사용. 기본값: false"]),u+"_LIMIT_PER_MINUTE",["单个 IP 发言频率限制(条/10分钟),0 为无限制,默认:10","單個 IP 發言頻率限制(條/10分鐘),0 為無限制,預設:10","單個 IP 留言頻率限制(則/10分鐘),0 為無限,預設:10","How many comments can be posted by each IP every 10 minutes, 0 is unlimited, default: 10.","Ҳар бир ИП ҳар 10 дақиқада қанча шарҳ қолдириши мумкин, 0 чексиз, стандарт: 10.","同一IPにおける10分ごとの投稿回数制限。0は無制限、デフォルト:10","IP별 댓글 작성 빈도 제한 (10분당 건수), 0은 무제한. 기본값: 10."]),u+"_LIMIT_PER_MINUTE_ALL",["全站发言频率限制(条/10分钟),0 为无限制,默认:10","全站發言頻率限制(條/10分鐘),0 為無限制,預設:10","全站留言頻率限制(則/10分鐘),0 為無限,預設:10","How many comments can be posted by all IPs every 10 minutes, 0 is unlimited, default: 10.","Барча ИП-лар ҳар 10 дақиқада қанча шарҳ қўйиши мумкин, 0 чексиз, стандарт: 10.","全IPにおける10分ごとの投稿回数制限。0は無制限、デフォルト:10","10분당 사이트 전체에 작성 가능한 총 댓글 수 제한. 0은 무제한. 기본값: 10."]),u+"_LIMIT_LENGTH",["评论长度限制,0 为无限制,默认:500","評論長度限制,0 為無限制,預設:500","留言長度限制,0 為無限,預設:500","Comment length limitation, 0 is unlimited, default: 500.","Шарҳ узунлиги чеклови, 0 чексиз, стандарт: 500.","コメント長さの制限。0は無制限、デフォルト:500","댓글 길이 제한. 0은 무제한. 기본값: 500."]),u+"_MAIL_SUBJECT",["自定义通知邮件主题,留空则使用默认主题。","自定義通知郵件主題,留空則使用預設主題。","自訂通知郵件主題,留白則使用預設主題。","Custom Email notification subject. Leave it blank to use the default subject.","Махсус электрон почта хабарномаси мавзуси. Стандарт мавзуни ишлатиш учун уни бўш қолдиринг.","カスタム通知メールの件名。空白の場合はデフォルトの件名を使用します。","댓글 알림 이메일 제목 설정. 비워두면 기본 제목을 사용합니다."]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,u+"_MAIL_SUBJECT_ADMIN",["自定义博主通知邮件主题,留空则使用默认主题。","自定義博主通知郵件主題,留空則使用預設主題。","自訂站長通知郵件主題,留白則使用預設主題。","Custom admin Email notification subject. Leave it blank to use the default subject.","Махсус администратор электрон почта хабарномаси мавзуси. Стандарт мавзуни ишлатиш учун уни бўш қолдиринг.","管理者へのカスタム通知メールの件名。空白の場合はデフォルトの件名を使用します。","관리자에게 발송되는 댓글 알림 이메일 제목 설정. 비워두면 기본 제목을 사용합니다."]),u+"_MAIL_TEMPLATE",["自定义通知邮件模板,留空则使用默认模板。可包含的字段:${SITE_URL}, ${SITE_NAME}, ${PARENT_NICK}, ${PARENT_COMMENT}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IMG}, ${PARENT_IMG}","自定義通知郵件模板,留空則使用預設模板。可包含的字段:${SITE_URL}, ${SITE_NAME}, ${PARENT_NICK}, ${PARENT_COMMENT}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IMG}, ${PARENT_IMG}","自訂通知郵件模板,留白則使用預設模板。可包含的欄位:${SITE_URL}, ${SITE_NAME}, ${PARENT_NICK}, ${PARENT_COMMENT}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IMG}, ${PARENT_IMG}","Custom Email notification template. Leave it blank to use the default template. Fields that can be included: ${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IMG}, ${PARENT_IMG}","Махсус электрон почта хабарномаси шаблони. Стандарт шаблонни ишлатиш учун уни бўш қолдиринг. Қўшилиши мумкин бўлган майдонлар: ${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IMG}, ${PARENT_IMG}","カスタム通知メールテンプレート。空白の場合はデフォルトテンプレートを使用します。使用可能なフィールド:${SITE_URL}、${SITE_NAME}、${PARENT_NICK}、${PARENT_COMMENT}、${NICK}、${COMMENT}、${POST_URL}、${IMG}、${PARENT_IMG}","댓글 알림 이메일 템플릿 설정. 비워두면 기본 템플릿 사용. 다음 변수를 사용하면 해당 값으로 자동 치환됩니다: ${SITE_URL}, ${SITE_NAME}, ${PARENT_NICK}, ${PARENT_COMMENT}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IMG}, ${PARENT_IMG}"]),u+"_MAIL_TEMPLATE_ADMIN",["自定义博主通知邮件模板,留空则使用默认模板。可包含的字段:${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IP}, ${MAIL}, ${IMG}","自定義博主通知郵件模板,留空則使用預設模板。可包含的字段:${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IP}, ${MAIL}, ${IMG}","自訂站長通知郵件模板,留白則使用預設模板。可包含的欄位:${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IP}, ${MAIL}, ${IMG}","Custom admin Email notification template. Leave it blank to use the default template. Fields that can be included: ${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IP}, ${MAIL}, ${IMG}","Махсус администратор электрон почта хабарномаси шаблони. Стандарт шаблонни ишлатиш учун уни бўш қолдиринг. Қўшилиши мумкин бўлган майдонлар: ${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IMG}, ${PARENT_IMG}","管理者へのカスタム通知メールテンプレート。空白の場合はデフォルトテンプレートを使用します。使用可能なフィールド:${SITE_URL}、${SITE_NAME}、${NICK}、${COMMENT}、${POST_URL}、${IP}、${MAIL}、${IMG}","관리자 알림 이메일 템플릿 설정. 비워두면 기본 템플릿 사용. 다음 변수를 사용하면 해당 값으로 자동 치환됩니다: ${SITE_URL}, ${SITE_NAME}, ${NICK}, ${COMMENT}, ${POST_URL}, ${IP}, ${MAIL}, ${IMG}"]),u+"_MASTER_TAG",["博主标识自定义文字,默认为 “博主”。","博主標識自定義文字,預設為 “博主”。","站長認證自訂文字,預設為「博主」。","Custom admin identifier.","Махсус администратор идентификатори.",'管理者を表すカスタムテキスト。デフォルト:"ブロガー"',"관리자 태그 설정. (닉네임 옆에 표시됨. 예: 관리자)"]),u+"_NOTIFY_SPAM",["垃圾评论是否发送通知,默认:true","垃圾評論是否發送通知,默認:true","垃圾留言是否發送通知,預設:true","Notifications for spam comments. Default: true.","Спам шарҳлар учун билдиришномалар. Стандарт: рост.","スパムコメントの通知を送信するかどうか。デフォルト:true","스팸 댓글 알림 발송 여부. 기본값: true."]),u+"_TURNSTILE_SITE_KEY",["Turnstile 验证码的站点密钥。申请地址: https://dash.cloudflare.com/?to=/:account/turnstile","Turnstile 验证码的站点密钥。申请地址: https://dash.cloudflare.com/?to=/:account/turnstile","Turnstile 验证码的站点密钥。申请地址: https://dash.cloudflare.com/?to=/:account/turnstile","Turnstile CAPTCHA Site Key. Get from: https://dash.cloudflare.com/?to=/:account/turnstile","Turnstile CAPTCHA Site Key. Get from: https://dash.cloudflare.com/?to=/:account/turnstile","Turnstile CAPTCHAのサイトキー。参照: https://dash.cloudflare.com/?to=/:account/turnstile","Turnstile CAPTCHA(스팸봇 방지) 사이트 키. 발급처: https://dash.cloudflare.com/?to=/:account/turnstile"]),u+"_TURNSTILE_SECRET_KEY",["Turnstile 验证码的密钥","Turnstile 验证码的密钥","Turnstile 验证码的密钥","Turnstile CAPTCHA Secret Key","Turnstile CAPTCHA Secret Key","Turnstile CAPTCHAのシークレットキー","Turnstile CAPTCHA Secret Key"]),u+"_QCLOUD_SECRET_ID",["腾讯云 secret id,用于垃圾评论检测。同时设置腾讯云和 Akismet 时,只有腾讯云会生效。注册:https://twikoo.js.org/cms.html","騰訊雲 secret id,用於垃圾評論檢測。同時設定騰訊雲和 Akismet 時,只有騰訊雲會生效。註冊:https://twikoo.js.org/cms.html","騰訊雲 Secret ID,用於垃圾留言檢測。同時設定騰訊雲和 Akismet 時,只有騰訊雲會被啟用。註冊:https://twikoo.js.org/cms.html","Tencent Cloud secret id for spam detection. When Tencent Cloud and Akismet are set at the same time, only Tencent Cloud will take effect. Register: https://twikoo.js.org/cms.html","Спамни аниқлаш учун Тенсент Слоуд махфий идентификатори. Тенсент Слоуд ва Акисмет бир вақтнинг ўзида ўрнатилганда, фақат Тенсент Слоуд кучга киради. Рўйхатдан ўтиш: https://twikoo.js.org/cms.html","Tencent CloudのシークレットID。スパムコメントの検出に使用されます。同時にTencent CloudとAkismetを設定した場合、Tencent Cloudのみが有効になります。登録:https://twikoo.js.org/cms.html","Tencent Cloud secret id (스팸 감지용). Tencent Cloud와 Akismet 동시 설정 시 Tencent Cloud만 적용. 등록: https://twikoo.js.org/cms.html"]),u+"_QCLOUD_CMS_BIZTYPE",["腾讯云内容安全 Biztype 名称,用于垃圾评论策略。可以自定义垃圾拦截规则","騰訊雲內容安全 Biztype 名稱,用於垃圾評論策略。可以自定義垃圾攔截規則","騰訊雲內容安全 Biztype 名稱,用於垃圾評論策略。可以自定義垃圾攔截規則","Tencent Cloud Content Security Biztype name for spam comment policy. Spam blocking rules can be customized","Tencent Cloud Content Security Biztype име, използвано за спам политика. Може да персонализира правилата за блокиране на спам","Tencent Cloud Content Security Biztype name スパムコメントポリシー。スパムブロックルールはカスタマイズ可能","Tencent Cloud Content Security Biztype 이름 (스팸 댓글 정책용). 스팸 차단 규칙 설정 가능."]),u+"_QCLOUD_SECRET_KEY",["腾讯云 secret key","騰訊雲 secret key","騰訊雲 Secret Key","Tencent Cloud secret key.","Тенсент Клауд махфий калити.","Tencent Cloudのシークレットキー","Tencent Cloud Secret Key."]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,u+"_PUSHOO_CHANNEL",["即时消息推送平台名称,支持:".concat(l.join("、")," 等"),"即時消息推送平台名称,支持:".concat(l.join("、")," 等"),"即時訊息推送平台名稱,支援:".concat(l.join("、")," 等"),"IM notification push channel. Support: ".concat(l.join(", ")),"ИМ билдиришномаси суриш канали. Қўллаб-қувватлаш: ".concat(l.join(", ")),"即時メッセージプッシュプラットフォームの名前。".concat(l.join("、")," などに対応しています。"),"실시간 알림을 받을 서비스 설정. 지원: ".concat(l.join(", "))]),u+"_PUSHOO_TOKEN",["即时消息推送 token。请参考 https://pushoo.js.org 里的详细说明配置","即時消息推送 token。请参考 https://pushoo.js.org 里的详细说明配置","即時訊息推送 Token。請参考 https://pushoo.js.org 裡的詳細說明進行設定","IM notification push token. See https://pushoo.js.org for details","ИМ билдиришномаси пуш токени. Тафсилотлар учун https://pushoo.js.org га қаранг","即時メッセージプッシュトークン。詳細な設定については、https://pushoo.js.org の説明をご覧ください","선택한 실시간 알림 서비스 인증 토큰. 설정 방법은 https://pushoo.js.org 를 참조."]),u+"_DISPLAYED_FIELDS",["界面上展示的输入框,默认:nick,mail,link","界面上顯示的輸入框,預設:nick,mail,link","界面上顯示的輸入框,預設:nick,mail,link","Input boxes displayed on the interface. Default: nick,mail,link","Поля ввода, отображаемые на интерфейсе, Стандарт: nick,mail,link","画面に表示される入力欄。デフォルト:nick,mail,link","화면에 표시할 정보 입력란. 기본값: nick,mail,link"]),u+"_REQUIRED_FIELDS",["评论必填信息,设为 nick,mail,link 代表全必填,设为 none 代表全选填,默认:nick,mail","評論必填信息,設為 nick,mail,link 代表全必填,設為 none 代表全選填,預設:nick,mail","留言必填資訊,設為 nick,mail,link 代表全必填,設為 none 代表全選填,預設:nick,mail",'Required fields for comments. Set to "nick,mail,link" means all fields are required. Set to "none" means all fields are optional. Default: nick,mail.',"Шарҳлар учун зарур майдонлар. «Ниск,маил,линк» га ўрнатилган бўлса, барча майдонлар талаб қилинади. «Йўқ» га ўрнатилиши барча майдонлар ихтиёрий эканлигини англатади. Стандарт: ник, почта.","コメント必須項目。すべてを必須にする場合は nick,mail,link に設定、すべてを任意にする場合はnoneに設定してください。デフォルト:nick,mail",'댓글 작성 시 필수 입력 정보. "nick,mail,link"는 모두 필수, "none"은 모두 선택 압력. 기본값: nick,mail.']),u+"_SC_MAIL_NOTIFY",["是否同时通过 IM 和邮件 2 种方式通知博主,默认只通过 IM 通知博主,默认:false","是否同時通過 IM 和郵件 2 種方式通知博主,預設只通過 IM 通知博主,預設:false","是否同時透過 IM 和郵件 2 種方式通知博主,預設只透過 IM 通知博主,預設:false","Whether to notify admin via IM and email at the same time, the default is to notify admin only via IM. Default: false.","Администраторни бир вақтнинг ўзида ИМ ва электрон почта орқали хабардор қилиш керакми, сукут бўйича администраторни фақат ИМ орқали хабардор қилиш керак. Стандарт: нотўғри.","管理者にIMとメールで同時に通知するかどうか。デフォルトはIMのみで通知、デフォルト:false","실시간 알림과 이메일로 동시에 관리자에게 알릴지 여부. 기본값은 실시간 알림만 사용. 기본값: false."]),u+"_SENDER_EMAIL",["邮件通知邮箱地址。对于大多数邮箱服务商,SENDER_EMAIL 必须和 SMTP_USER 保持一致,否则无法发送邮件。","郵件通知郵箱地址。對於大多數郵箱服務商,SENDER_EMAIL 必須和 SMTP_USER 保持一致,否則無法發送郵件。","郵件通知郵箱帳號。對於大多數電郵服務提供商,SENDER_EMAIL 必須和 SMTP_USER 保持一致,否則無法傳送郵件。","Email address for Email notification. For most email service providers, SENDER_EMAIL must be consistent with SMTP_USER, otherwise emails cannot be sent.","Электрон почта хабарномаси учун электрон почта манзили. Аксарият электрон почта хизмати провайдерлари учун SENDER_EMAIL билан мос келиши керак, акс ҳолда электрон почта хабарларини юбориб бўлмайди.","メール通知のメールアドレス。 ほとんどのメールボックス・プロバイダでは、SENDER_EMAILはSMTP_USERと同じでなければなりません。","알림 이메일 발신 주소. 대부분의 이메일 서비스 제공자의 경우 SENDER_EMAIL과 SMTP_USER가 일치해야 메일 발송이 가능합니다."]),u+"_SENDER_NAME",["邮件通知标题。","郵件通知標題。","郵件通知標題。","The title for Email notification.","Электрон почта хабарномаси сарлавҳаси.","メール通知のタイトル","알림 이메일 발신자 이름."]),u+"_SHOW_EMOTION",["启用插入表情功能,默认为:true","啟用插入表情功能,預設為:true","啟用插入表情功能,預設為:true","Enable emojis. Default: true.","Кулгичларни ёқинг. Стандарт: рост.","顔文字の挿入を有効にするかどうか。デフォルト:true","이모티콘 삽입 기능 활성화. 기본값: true."]),u+"_SHOW_IMAGE",["启用插入图片功能,默认为:true","啟用插入圖片功能,預設為:true","啟用插入圖片功能,預設為:true","Enable picture uploading. Default: true.","Расм юклашни ёқинг. Стандарт: рост.","画像のアップロードを有効にするかどうか。デフォルト:true","이미지 업로드 기능 활성화. 기본값: true."]),u+"_SHOW_UA",["是否显示用户系统和浏览器,默认为:true","是否顯示使用者系統和瀏覽器,預設為:true","是否顯示使用者作業系統和瀏覽器,預設為:true","Show users' OS and browser. Default: true.","Фойдаланувчиларнинг ОС ва браузерини кўрсатиш. Стандарт: рост.","ユーザーのOSとブラウザーの情報を表示するかどうか。デフォルト:true","댓글 작성자의 운영체제 및 브라우저 표시 여부. 기본값: true."]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,u+"_SHOW_REGION",["是否显示用户 IP 属地到省,可能不准确,不支持 IPv6,默认为:false","是否顯示使用者 IP 屬地到省,預設為:false","是否顯示使用者 IP 所屬地(精確到省),預設為:false","Show users' IP region (province). Default: false.","Фойдаланувчиларнинг ИП ҳудудини (вилоят) кўрсатиш. Стандарт: нотўғри.","ユーザーIPの所在地(省)を表示するかどうか。正確でない場合があります。IPv6はサポートされていません。デフォルト:false","사용자 IP 지역(도/시 단위) 표시 여부 (부정확할 수 있음, IPv6 미지원). 기본값: false."]),u+"_SITE_NAME",["网站名称","網站名稱","網站名稱","Website name.","Вебсайт номи.","ウェブサイト名","웹사이트 이름."]),u+"_SITE_URL",["网站地址","網站地址","網站網址","Website URL.","Вебсайт URL.","ウェブサイトのアドレス","웹사이트 주소."]),u+"_SMTP_HOST",["自定义 SMTP 服务器地址。如您已配置 SMTP_SERVICE,此项请留空。","自定義 SMTP 伺服器地址。如您已配置 SMTP_SERVICE,此項請留空。","自訂 SMTP 伺服器位址。如您已設定 SMTP_SERVICE,此項請留白。","Custom SMTP server address. If you have configured SMTP_SERVICE, please leave it empty.","Махсус СМТП сервер манзили. Агар сиз СМТП_СEРВИСE созлаган бўлсангиз, уни бўш қолдиринг.","自定义 SMTP 服务器地址。如您已配置 SMTP_SERVICE,此项请留空。","カスタムSMTPサーバのアドレス。SMTP_SERVICEを設定している場合は空白のままにします。","SMTP 서버 주소. SMTP_SERVICE를 설정한 경우 비워두세요."]),u+"_SMTP_PASS",["邮件通知邮箱密码,QQ、163邮箱请填写授权码。","郵件通知郵箱密碼,QQ、163郵箱請填寫授權碼。","郵件通知郵箱密碼,QQ、163 郵箱請填寫授權碼。","Email notification mailbox password. Enter authorization code for QQ/163 mail.","Электрон почта хабарномаси почта қутиси пароли. ҚҚ/163 почтаси учун авторизация кодини киритинг.","メール通知のメールボックスパスワード。QQ、163メールは認証コードを入力してください","알림 이메일 계정 SMTP용 비밀번호. (QQ, 163 등 대부분 별도의 앱 비밀번호/인증 코드 사용)"]),u+"_SMTP_PORT",["自定义 SMTP 端口。如您已配置 SMTP_SERVICE,此项请留空。","自定義 SMTP 端口。如您已配置 SMTP_SERVICE,此項請留空。","自訂 SMTP 連接埠。如您已設定 SMTP_SERVICE,此項請留白。","Custom SMTP port. If you have configured SMTP_SERVICE, please leave it empty.","Махсус СМТП порти. Агар сиз СМТП_СEРВИС созлаган бўлсангиз, уни бўш қолдиринг.","カスタムSMTPポート。SMTP_SERVICEを設定している場合は、空白のままにします。","SMTP 포트. SMTP_SERVICE를 설정한 경우 비워두세요."]),u+"_SMTP_SECURE",["自定义 SMTP 是否使用TLS,请填写 true 或 false。如您已配置 SMTP_SERVICE,此项请留空。","自定義 SMTP 是否使用TLS,請填寫 true 或 false。如您已配置 SMTP_SERVICE,此項請留空。","自訂 SMTP 是否使用 TLS,請填寫 true 或 false。如您已設定 SMTP_SERVICE,此項請留白。",'Custom TLS for SMTP. Enter "true" or "false". If you have configured SMTP_SERVICE, please leave it empty.',"СМТП учун махсус ТЛС. «Тўғри» ёки «нотўғри» ни киритинг. Агар сиз СМТП_СEРВИС созлаган бўлсангиз, уни бўш қолдиринг.","SMTPがTLSを使用するかどうかをカスタマイズします。trueまたはfalseを記入してください。SMTP_SERVICEを設定している場合は、この項目を空白にしてください。","SMTP TLS 사용 여부 (true 또는 false 입력). SMTP_SERVICE를 설정한 경우 비워두세요."]),u+"_SMTP_SERVICE",["邮件通知邮箱服务商。支持:".concat(d.join("、")),"郵件通知郵箱服務商。支持:".concat(d.join("、")),"郵件通知郵箱服務提供商。支援:".concat(d.join("、")),"Email service provider for Email notification. Support: ".concat(d.join(", ")),"Электрон почта хабарномаси учун электрон почта хизмати провайдери. Қўллаб-қувватлаш: ".concat(d.join(", ")),"メール通知メールボックスサービスプロバイダ。サポート: ".concat(d.join(","),"."),"알림 발송 이메일 서비스 선택. 지원 목록: ".concat(d.join(", "))]),u+"_SMTP_USER",["邮件通知邮箱用户名。","郵件通知郵箱用户名。","郵件通知郵箱使用者名稱。","Email notification mailbox username.","Электрон почта хабарномаси почта қутиси фойдаланувчи номи.","メール通知のメールボックスユーザー名。","선택한 이메일 알림 서비스 아이디"]),"ADMIN_CONFIG_RESET",["重置","重置","還原","Reset","Ресет","リセット","초기화"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,"ADMIN_CONFIG_SAVE",["保存","保存","儲存","Save","Сақлаш","保存","저장"]),"ADMIN_CREDENTIALS",["私钥文件","私鑰文件","私鑰檔案","Private key file","Shaxsiy kalit fayli","秘密鍵ファイル","개인 키 파일"]),"ADMIN_CREDENTIALS_FAQ",["如何获得私钥","如何獲得私鑰","如何獲取私鑰","How to get the private key","Shaxsiy kalitni qanday olish mumkin","秘密鍵を取得する方法","개인 키 발급 방법"]),"ADMIN_CREDENTIALS_PLACEHOLDER",["请粘贴私钥文件内容","請貼上私鑰文件內容","請貼上私鑰檔案內容","Please paste the contents of the private key file","Iltimos, shaxsiy kalit faylining mazmunini joylashtiring","秘密鍵ファイルの内容を貼り付けてください","개인 키 파일 내용을 붙여넣으세요"]),"ADMIN_FORGOT",["忘记密码","忘記密碼","忘記密碼","Forget your password","Парол унутилган","パスワードを忘れた","비밀번호 찾기"]),"ADMIN_EXPORT",["导出","匯出","匯出","Export","Экспорт","エクスポート","내보내기"]),"ADMIN_EXPORT_WARN",["将全部数据导出为 JSON 文件。如果遇到评论较多、导出失败或缺失数据,请连接数据库手动导出","將全部數據匯出為 JSON 檔。如果遇到評論較多、匯出失敗或缺失數據,請連接資料庫手動匯出","將全部數據匯出為 JSON 檔。如果遇到評論較多、匯出失敗或缺失數據,請連接資料庫手動匯出","Export all data as a JSON file. If you encounter export failures or missing data, connect to the database to export manually","Барча маълумотларни ЖСОН файли сифатида экспорт қилинг. Экспорт хатоси ёки этишмаётган маълумотларга дуч келсангиз, қўлда экспорт қилиш учун маълумотлар базасига уланинг","すべてのデータをJSONファイルとしてエクスポートします。コメントが多く、エクスポートに失敗したりデータが欠落している場合は、データベースに手動で接続してエクスポートしてください","모든 데이터를 JSON 파일로 내보냅니다. 댓글이 많아 내보내기 실패 또는 데이터 누락 발생 시, 데이터베이스에 직접 연결하여 수동으로 내보내세요."]),"ADMIN_EXPORT_COMMENT",["导出评论","匯出評論","匯出評論","Export comment","Изохни экспорт килиш","コメントをエクスポート","댓글 내보내기"]),"ADMIN_EXPORT_COUNTER",["导出访问量","匯出訪問量","匯出訪問量","Export counter","Экспорт сони","ページビューをエクスポート","통계 내보내기"]),c,["导入","匯入","匯入","Import","Импорт","インポート","가져오기"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,c+"_FILE_REQUIRED",["未选择文件","未選擇文件","未選擇檔案","No file selected","Файлни танланмади","ファイルが選択されていません","파일이 선택되지 않았습니다"]),c+"_IMPORTED",["完成导入 ","完成匯入 ","完成匯入 ","Imported ","Импорт қилинди ","インポート完了 ","가져오기 완료 "]),c+"_IMPORTING",["开始导入 ","開始匯入 ","開始匯入 ","Importing ","Импорт қилинмоқда ","インポートを開始 ","가져오는 중 "]),c+"_LOG",["日志","日誌","日誌","Log","Лог","システムログ","로그"]),c+"_SELECT",["请选择","請選擇","請選擇","Select","Танланг","選択してください","선택하세요"]),c+"_SELECT_FILE",["选择文件","選擇文件","選擇檔案","Select file","Файлни танланг","ファイルを選択","파일 선택"]),c+"_SELECT_SOURCE",["选择源系统","選擇源系統","選擇來源系統","Select source","Манба танланг","ソースを選択","가져올 댓글 데이터 선택"]),c+"_SOURCE_REQUIRED",["未选择源系统","未選擇源系統","未選擇來源系統","No source selected.","Ҳеч қандай манба танланмаган.","ソースが選択されていません","가져올 댓글 데이터가 선택되지 않았습니다."]),c+"_START",["开始导入","開始匯入","開始匯入","Start import","Импортни бошлаш","インポートを開始","가져오기 시작"]),c+"_STARTING",["开始导入","開始匯入","開始匯入","Importing","Импорт қилинмоқда","インポート中です","가져오는 중"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,c+"_TIP_ARTALK",["请上传 JSON 格式的 Artalk 导出文件,文件名通常为 comments.data.json","請上傳 JSON 格式的 Artalk 導出文件,文件名通常為 comments.data.json","請上傳 JSON 格式的 Artalk 匯出檔案,檔名通常為 comments.data.json","Please upload the Artalk export file in JSON format.The file name is usually comments.data.json","Арталк экспорт файлини ЖСОН форматида юкланг. Файл номи одатда comments.data.json бўлади.","JSON形式のArtalkエクスポートファイルをアップロードしてください。ファイル名は通常、comments.data.jsonです。","JSON 형식의 Artalk 내보내기 파일을 업로드하세요. 파일 이름은 보통 comments.data.json 입니다."]),c+"_TIP_DISQUS",["请上传 XML 格式的 Disqus 导出文件,文件名通常为 [网站名称]-[导出时间]-all.xml","請上傳 XML 格式的 Disqus 導出文件,文件名通常為 [網站名稱]-[導出時間]-all.xml","請上傳 XML 格式的 Disqus 匯出檔案,檔名通常為 [網站名稱]-[匯出時間]-all.xml","Please upload the Disqus export file in XML format. The file name is usually [website name]-[export time]-all.xml","Disqus экспорт файлини ХМЛ форматида юкланг. Файл номи одатда [веб-сайт номи]-[экспорт vaqti]-all.xml","DisqusエクスポートファイルをXML形式でアップロードしてください。ファイル名は通常、[サイト名]-[エクスポート時間]-all.xmlです。","XML 형식의 Disqus 내보내기 파일을 업로드하세요. 파일 이름은 보통 [웹사이트이름]-[내보내기시간]-all.xml 입니다."]),c+"_TIP_VALINE",["请上传 JSON 格式的 Valine 导出文件,文件名通常为 Comment.json","請上傳 JSON 格式的 Valine 導出文件,文件名通常為 Comment.json","請上傳 JSON 格式的 Valine 匯出檔案,檔名通常為 Comment.json","Please upload the Valine export file in JSON format. The file name is usually Comment.json","Илтимос, Валине экспорт файлини ЖСОН форматида юкланг. Файл номи одатда Comment.json","JSON形式のValineエクスポートファイルをアップロードしてください。ファイル名は通常、Comment.jsonです。","JSON 형식의 Valine 내보내기 파일을 업로드하세요. 파일 이름은 보통 Comment.json 입니다."]),c+"_UPLOADED",["上传完成 ","上傳完成 ","上傳完成 ","Uploaded ","Юкланди ","アップロード完了","업로드 완료 "]),c+"_UPLOADING",["已上传 ","已上傳 ","已上傳 ","Uploading ","Юкланмоқда ","アップロード中です","업로드 중 "]),c+"_WARN",["支持从其他评论系统的备份文件导入评论。\n数据是安全的,导入功能完全在您的云环境进行。\n建议在导入前备份 comment 数据库。","支持從其他評論系統的備份文件匯入評論。\n數據是安全的,匯入功能完全在您的雲環境進行。\n建議在匯入前備份 comment 數據庫。","支援從其他留言系統的備份檔案匯入留言。\n資料是安全的,匯入功能完全在您的雲端環境進行。\n建議在匯入前備份 comment 資料庫。","Import comments from other comment systems.\nThe data is safe, and the import function is performed entirely in your cloud environment.\nPlease backup your comment database before importing.","Бошқа шарҳ тизимларидан шарҳларни импорт қилинг.\nМаълумотлар хавфсиз ва импорт функцияси тўлиқ булутли муҳитда амалга оширилади.\nИмпорт қилишдан олдин шарҳлар маълумотлар базасини захираланг.","他のコメントシステムのバックアップファイルからのインポートに対応。\nデータは安全で、インポート機能はすべてクラウド環境で実行されます。\nインポート前にコメントデータベースをバックアップすることを推奨します。","다른 댓글 시스템의 백업 파일에서 댓글을 가져올 수 있습니다.\n데이터 가져오기는 설정하신 클라우드에서만 안전하게 진행됩니다.\n가져오기 전에 댓글 데이터베이스를 백업하는 것이 좋습니다."]),"ADMIN_LOGIN",["登录","登入","登入","Sign in","Тизимга кириш","ログイン","로그인"]),"ADMIN_LOGIN_TITLE",["Twikoo 评论管理","Twikoo 評論管理","Twikoo 留言管理","Twikoo Management Panel","Twikoo Бошқарув Панели","Twikoo コメント管理","Twikoo 관리자 패널"]),"ADMIN_LOGOUT",["退出登录","退出登入","登出","Sign out","Тизимдан чиқиш","ログアウト","로그아웃"]),"ADMIN_NEED_UPDATE",["若要使用评论管理,请更新 Twikoo 云函数","若要使用評論管理,請更新 Twikoo 雲函數","若要使用留言管理功能,請更新 Twikoo 雲端函數","A new version of Twikoo is required for comment management.","Фикрларни бошқариш учун Твикоо нинг янги версияси талаб қилинади.","コメント管理を使用するには、Twikoo クラウド関数を更新してください","새 버전의 댓글 관리를 사용하려면 Twikoo Cloud Function을 업데이트하세요."]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,"ADMIN_PASSWORD",["密码","密碼","密碼","Password","Пароль","パスワード","비밀번호"]),"ADMIN_PASSWORD_PLACEHOLDER",["请输入","請輸入","請輸入","Enter your password...","Паролингизни киритинг...","入力してください","비밀번호를 입력하세요..."]),"ADMIN_PASSWORD_REQUIRED",["请输入密码","請輸入密碼","請輸入密碼","Please enter your password","Илтимос, паролингизни киритинг","パスワードを入力してください","비밀번호를 입력하세요"]),"ADMIN_REGIST",["注册","註冊","註冊","Register","Рўйхатдан ўтиш","登録","관리자 등록"]),"ADMIN_REGIST_FAILED",["注册失败","註冊失敗","註冊失敗","Register failed","Рўйхатдан ўтиш амалга ошмади","登録に失敗しました","관리자 등록 실패"]),"ADMIN_SET_PASSWORD",["设置密码","設置密碼","設定密碼","Set password","Пароль қўйиш","パスワードの設定","비밀번호 설정"]),"ADMIN_SET_PASSWORD_CONFIRM",["确认密码","確認密碼","確認密碼","Confirm password","Паролни тасдиқланг","パスワードの確認","비밀번호 확인"]),"ADMIN_SET_PASSWORD_CONFIRM_PLACEHOLDER",["确认密码","確認密碼","確認密碼","Confirm password...","Паролни тасдиқлаш...","パスワードの確認","비밀번호 확인..."]),"ADMIN_SET_PASSWORD_PLACEHOLDER",["密码","密碼","密碼","Password","Пароль","パスワード","비밀번호"]),"ADMIN_TITLE",["Twikoo 管理面板","Twikoo 管理面板","Twikoo 管理控制台","Twikoo Management Panel","Twikoo Бошқарув Панели","Twikoo管理パネル","Twikoo 관리 패널"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,"COMMENTS_COUNT_SUFFIX",[" 条评论"," 條評論"," 則留言"," comments"," изоҳлар"," 件のコメント","개의 댓글"]),"COMMENTS_EXPAND",["查看更多","查看更多","檢視更多","Load more","Давомини юклаш","もっと見る","더 보기"]),"COMMENTS_NO_COMMENTS",["没有评论","沒有評論","沒有留言","No comment","Изоҳларсиз","コメントはありません","아직 댓글이 없습니다."]),"COMMENT_EXPAND",["展开","展開","展開","Read more","Давомини ўқиш","全文を表示","더 보기"]),"COMMENT_COLLAPSE",["收起","收起","閉合","Collapse","Очиш","折りたたむ","접기"]),"COMMENT_MASTER_TAG",["博主","博主","站長","Admin","Модератор","管理者","관리자"]),"COMMENT_REPLIED",["回复","回覆","回覆","Reply","Жавоб бериш","返信","답글"]),"COMMENT_REVIEWING_TAG",["审核中","審核中","審核中","Pending","Кутилмоқда","検討中","검토 중"]),"COMMENT_TOP_TAG",["置顶","置頂","置頂","Pinned","Қадоқланган","固定","고정됨"]),"COMMENT_FAILED",["评论失败","評論失敗","評論失敗","Comment failed","Фикр билдирилмади","コメント失敗","댓글 등록 실패"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,"META_INPUT_LINK",["网址","網址","網址","Website","Веб-сайт","ウェブサイト","웹사이트"]),"META_INPUT_MAIL",["邮箱","郵箱","郵箱","Email","Email","メールアドレス","이메일"]),"META_INPUT_NICK",["昵称","暱稱","暱稱","Nickname","Исм","名前","닉네임"]),"META_INPUT_NOT_REQUIRED",["选填","選填","選填","Optional","Ихтиёрий","任意","선택"]),"META_INPUT_REQUIRED",["必填","必填","必填","Required","Мажбурий","必須","필수"]),"PAGINATION_COUNT_PREFIX",["共 ","共 ","共 ","","","合計 ","총 "]),"PAGINATION_COUNT_SUFFIX",[" 条"," 條"," 條"," entries"," ёзувлар"," 件","개"]),"PAGINATION_GOTO_PREFIX",["前往","前往","前往","Goto page","Саҳифага ўтиш","ページに移動","이동할 페이지: "]),"PAGINATION_GOTO_SUFFIX",["页","頁","頁","","ページ",""]),"PAGINATION_PAGESIZE",["条/页","條/頁","則/頁","entries/page","ёзувлар/саҳифа","件/ページ","개/페이지"]),(0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])((0,o["default"])(i,"SUBMIT_CANCEL",["取消","取消","取消","Cancel","Бекор қилиш","キャンセル","취소"]),"SUBMIT_PREVIEW",["预览","預覽","預覽","Preview","Кўриб чиқиш","プレビュー","미리보기"]),"SUBMIT_SEND",["发送","發送","傳送","Send","Юбормоқ","送信","등록"]),"IMAGE_UPLOAD_PLACEHOLDER",["图片上传中","圖片上傳中","圖片上傳中","Uploading image","Расм юклаш","画像のアップロード中","이미지 업로드 중"]),"IMAGE_UPLOAD_FAILED",["图片上传失败","圖片上傳失敗","圖片上傳失敗","IMAGE UPLOAD FAILED","РАСМ ЮКЛАНМАДИ","画像のアップロード失敗","이미지 업로드 실패"]),"IMAGE_UPLOAD_FAILED_NO_CONF",["博主未配置图床服务","博主未配置圖床服務","博主未配置圖床服務","The blogger didn't configured any image bed service","Муаллиф ҳеч қандай тасвир хизматини созламаган","管理者が画像配信サービスを設定していません","블로거가 이미지 호스팅 서비스를 설정하지 않았습니다."]),"IMAGE_UPLOAD_PLEASE_WAIT",["图片上传中,请稍候再发送","圖片上傳中,請稍候再發送","圖片上傳中,請稍候再傳送","Uploading image, please try again later","Расм юкланмоқда, кейинроқ қайта уриниб кўринг","画像のアップロードが完了するまでお待ちください","이미지 업로드 중입니다. 잠시 후 다시 시도해주세요."]),"SUBMIT_SENDING",["发送中","發送中","正在傳送","Sending","Юбориш","送信中","등록 중"]),"TIMEAGO_DAYS",["天前","天前","天前","days ago","кунлар олдин","日前","일 전"]),"TIMEAGO_HOURS",["小时前","小時前","小時前","hours ago","соатлар олдин","時間前","시간 전"]),(0,o["default"])((0,o["default"])((0,o["default"])(i,"TIMEAGO_MINUTES",["分钟前","分鐘前","分鐘前","minutes ago","дақиқалар олдин","分前","분 전"]),"TIMEAGO_NOW",["刚刚","剛剛","剛剛","Just now","Ҳозиргина","たった今","방금 전"]),"TIMEAGO_SECONDS",["秒前","秒前","秒前","seconds ago","сониялар олдин","秒前","초 전"]))},5878:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.setLanguage=t["default"]=void 0;var i=r(n(7564)),o={zh:0,"zh-cn":0,"zh-hk":1,"zh-tw":2,"en-us":3,"en-gb":3,en:3,uz:4,"uz-uz":4,ja:5,"ja-jp":5,ko:6,"ko-kr":6},a="";t.setLanguage=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};e.lang&&e.lang.toLowerCase()in o&&(a=e.lang)},t["default"]=function(e,t){var n=(t||a||navigator.language).toLowerCase();return(n&&o[n]?i["default"][e][o[n]]:i["default"][e][o["zh-cn"]])||""}},8129:function(e,t,n){"use strict";var r=n(477),i=n(9367);Object.defineProperty(t,"__esModule",{value:!0}),t.blobToDataURL=void 0,Object.defineProperty(t,"call",{enumerable:!0,get:function(){return p.call}}),t.getHref=t.getFuncVer=t.getCommentsCountApi=t.convertLink=void 0,Object.defineProperty(t,"getQQAvatar",{enumerable:!0,get:function(){return h.getQQAvatar}}),t.getUserAgent=t.getUrl=t.getRecentCommentsApi=void 0,Object.defineProperty(t,"initMarkedOwo",{enumerable:!0,get:function(){return m.initMarkedOwo}}),Object.defineProperty(t,"initOwoEmotions",{enumerable:!0,get:function(){return m.initOwoEmotions}}),t.isNotSet=void 0,Object.defineProperty(t,"isQQ",{enumerable:!0,get:function(){return h.isQQ}}),Object.defineProperty(t,"isUrl",{enumerable:!0,get:function(){return p.isUrl}}),t.logger=void 0,Object.defineProperty(t,"marked",{enumerable:!0,get:function(){return d["default"]}}),Object.defineProperty(t,"normalizeMail",{enumerable:!0,get:function(){return h.normalizeMail}}),t.readAsText=void 0,Object.defineProperty(t,"renderCode",{enumerable:!0,get:function(){return f["default"]}}),t.renderMath=t.renderLinks=void 0,Object.defineProperty(t,"setLanguage",{enumerable:!0,get:function(){return c.setLanguage}}),Object.defineProperty(t,"t",{enumerable:!0,get:function(){return c["default"]}}),Object.defineProperty(t,"timeago",{enumerable:!0,get:function(){return l["default"]}}),t.timestamp=void 0;var o,a=r(n(479)),s=r(n(1819)),u=r(n(4964)),c=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=i(e)&&"function"!=typeof e)return{"default":e};var n=g(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=o?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=e[a]}return r["default"]=e,n&&n.set(e,r),r}(n(5878)),l=r(n(7435)),d=r(n(37)),f=r(n(4161)),p=n(585),h=n(7080),m=n(9212);function g(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(g=function(e){return e?n:t})(e)}function v(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return _(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n["return"]||n["return"]()}finally{if(s)throw o}}}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==undefined?arguments[0]:new Date).getTime()},t.convertLink=function(e){return e?"http"!==e.substring(0,4)?"http://".concat(e):e:""},t.getFuncVer=function(){var e=(0,u["default"])(a["default"].mark((function t(e){return a["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(o){t.next=4;break}return t.next=3,(0,p.call)(e,"GET_FUNC_VERSION");case 3:o=t.sent;case 4:return t.abrupt("return",o);case 5:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}(),t.getCommentsCountApi=function(){var e=(0,u["default"])(a["default"].mark((function t(e,n){var r;return a["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.urls instanceof Array){t.next=2;break}throw new Error("urls 参数有误");case 2:if(0!==n.urls.length){t.next=4;break}return t.abrupt("return",[]);case 4:return t.next=6,(0,p.call)(e,"GET_COMMENTS_COUNT",n);case 6:return r=t.sent,t.abrupt("return",r.result.data);case 8:case"end":return t.stop()}}),t)})));return function(t,n){return e.apply(this,arguments)}}(),t.getRecentCommentsApi=function(){var e=(0,u["default"])(a["default"].mark((function t(e,n){var r,i,o,s;return a["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,p.call)(e,"GET_RECENT_COMMENTS",n);case 2:r=t.sent,i=v(r.result.data);try{for(i.s();!(o=i.n()).done;)(s=o.value).relativeTime=(0,l["default"])(s.created)}catch(a){i.e(a)}finally{i.f()}return t.abrupt("return",r.result.data);case 6:case"end":return t.stop()}}),t)})));return function(t,n){return e.apply(this,arguments)}}(),t.getUserAgent=function(){var e=(0,u["default"])(a["default"].mark((function t(){var e,n,r,i,o,s;return a["default"].wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e=window.navigator.userAgent,t.prev=1,"Windows"!==(n=navigator.userAgentData.platform)&&"macOS"!==n){t.next=10;break}return t.next=6,navigator.userAgentData.getHighEntropyValues(["platformVersion"]);case 6:r=t.sent,i=r.platformVersion,o=parseInt(i.split(".")[0]),"Windows"===n&&o>=13?e=e.replace(/Windows NT 10\.0/i,"Windows NT ".concat("11.0")):"macOS"===n&&o>=11&&(s=i.replace(/\./g,"_"),e=e.replace(/Mac OS X 10_[0-9]+_[0-9]+/i,"Mac OS X ".concat(s)));case 10:t.next=14;break;case 12:t.prev=12,t.t0=t["catch"](1);case 14:return t.abrupt("return",e);case 15:case"end":return t.stop()}}),t,null,[[1,12]])})));return function(){return e.apply(this,arguments)}}(),t.getUrl=function(e){var t;if(window.TWIKOO_MAGIC_PATH)t=window.TWIKOO_MAGIC_PATH;else if(e&&"string"==typeof e)switch(e){case"location.pathname":case"window.location.pathname":t=window.location.pathname;break;case"location.href":case"window.location.href":t=window.location.href;break;default:t=e}else t=window.location.pathname;return t},t.getHref=function(e){var t,n;return null!==(t=null!==(n=window.TWIKOO_MAGIC_HREF)&&void 0!==n?n:e)&&void 0!==t?t:window.location.href},t.readAsText=function(e){return new Promise((function(t,n){var r=new FileReader;r.readAsText(e),r.onloadend=function(){r.error?n(r.error):t(r.result)}}))},t.renderLinks=function(e){var t=[];e instanceof Array?e.forEach((function(e){var n;(n=t).push.apply(n,(0,s["default"])(e.getElementsByTagName("a")))})):e instanceof Element&&(t=e.getElementsByTagName("a"));var n,r=v(t);try{for(r.s();!(n=r.n()).done;){var i=n.value;i.setAttribute("target","_blank"),i.setAttribute("rel","noopener noreferrer")}}catch(o){r.e(o)}finally{r.f()}},t.renderMath=function(e,t){"function"==typeof renderMathInElement&&renderMathInElement(e,t||{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],throwOnError:!1})},t.blobToDataURL=function(e){return new Promise((function(t){var n=new FileReader;n.onload=function(e){var n=e.target.result;t(n)},n.readAsDataURL(e)}))}},37:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=void 0;var r=n(78);r.marked.setOptions({renderer:new r.marked.Renderer,gfm:!0,tables:!0,breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0}),t["default"]=r.marked},824:function(e,t,n){"use strict";var r=n(477);Object.defineProperty(t,"__esModule",{value:!0}),t.install=function(e){return d.apply(this,arguments)},t.tcb=void 0;var i=r(n(479)),o=r(n(4964)),a=n(8129);function s(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n["return"]||n["return"]()}finally{if(s)throw o}}}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&r[1]!==undefined?r[1]:{},l.sdk=t,f(n),e.next=5,p(n);case 5:return e.abrupt("return",l);case 6:case"end":return e.stop()}}),e)}))),d.apply(this,arguments)}function f(e){var t,n=[],r=s(c);try{for(r.s();!(t=r.n()).done;){var i=t.value;i["default"]&&(0,a.isNotSet)(e[i.key])?e[i.key]=i["default"]:i.required&&(0,a.isNotSet)(e[i.key])&&n.push(i.key)}}catch(d){r.e(d)}finally{r.f()}if(n.length>0){var o,u=s(n);try{for(u.s();!(o=u.n()).done;){var l=o.value;a.logger.warn("".concat(l," is required"))}}catch(d){u.e(d)}finally{u.f()}throw new Error("Twikoo: failed to init")}}function p(e){return h.apply(this,arguments)}function h(){return(h=(0,o["default"])(i["default"].mark((function e(t){return i["default"].wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return m(t),e.next=3,g();case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function m(e){l.app=l.sdk.init({env:e.envId,region:e.region})}function g(){return v.apply(this,arguments)}function v(){return(v=(0,o["default"])(i["default"].mark((function e(){return i["default"].wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e,t){l.auth=l.app.auth({persistence:"local"}),l.auth.hasLoginState()?e():l.auth.anonymousAuthProvider().signIn().then(e)["catch"](t)})));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}},7435:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=void 0;var r=n(8129),i=function(e){var t=o(e.getDate(),2),n=o(e.getMonth()+1,2),r=o(e.getFullYear(),2);return"".concat(r,"-").concat(n,"-").concat(t)},o=function(e,t){for(var n=e.toString();n.length1&&arguments[1]!==undefined?arguments[1]:{};return i["default"].prototype.$tcb=e,i["default"].prototype.$twikoo=n,t.app=c=new i["default"]({render:function(e){return e(o["default"])}}),c.$mount(n.el||"#twikoo"),c}},3723:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,".el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#FFF}.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#FFF}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group .el-button--danger:last-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:last-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:last-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:last-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:last-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child),.el-button-group>.el-dropdown>.el-button{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:first-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:first-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:first-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:first-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-right-color:rgba(255,255,255,.5)}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0}",""]),t["default"]=a},1315:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,".el-input__inner,.el-textarea__inner{background-image:none;-webkit-box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;border:1px solid #DCDFE6;border-radius:4px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input,.el-input__inner{font-size:inherit}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;border-radius:4px;border:1px solid #DCDFE6;box-sizing:border-box;color:#606266;display:inline-block;height:40px;line-height:40px;outline:0;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;text-align:center;height:100%;color:#C0C4CC}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{right:5px;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}",""]),t["default"]=a},9211:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,".el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}",""]),t["default"]=a},9737:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.twikoo {\r\n position: relative;\n}\n.twikoo svg {\r\n width: 100%;\r\n height: 100%;\r\n fill: currentColor;\n}\r\n\r\n/* 全局 CSS */\n.tk-expand {\r\n width: 100%;\r\n cursor: pointer;\r\n padding: 0.75em;\r\n text-align: center;\r\n transition: all 0.5s;\n}\n.tk-expand:hover {\r\n background-color: rgba(0,0,0,0.13);\n}\n.tk-expand:active {\r\n background-color: rgba(0,0,0,0.19);\n}\n.tk-content img {\r\n max-width: 300px;\r\n max-height: 300px;\r\n vertical-align: middle;\n}\n.tk-owo-emotion,\r\n.twikoo .OwO-item img {\r\n width: 3em;\r\n height: auto;\n}\r\n\r\n/* element-ui overwrite */\n.twikoo .el-input__inner,\r\n.twikoo .el-textarea__inner {\r\n color: currentColor;\r\n background-color: transparent;\r\n border-color: rgba(144,147,153,0.31);\n}\n.twikoo .el-input__inner:hover,\r\n.twikoo .el-textarea__inner:hover {\r\n border-color: rgba(144,147,153,0.50);\n}\n.twikoo .el-input__inner:focus,\r\n.twikoo .el-textarea__inner:focus {\r\n border-color: #409eff;\n}\n.twikoo .el-input-group__append,\r\n.twikoo .el-input-group__prepend {\r\n color: currentColor;\r\n background-clip: padding-box;\r\n background-color: rgba(144,147,153,0.13);\r\n border-color: rgba(144,147,153,0.31);\n}\n.twikoo .el-button:not(.el-button--primary):not(.el-button--text) {\r\n color: currentColor;\r\n background-color: rgba(144,147,153,0.063);\r\n border-color: rgba(144,147,153,0.31);\n}\n.twikoo .el-button:not(.el-button--primary):not(.el-button--text):active,\r\n.twikoo .el-button:not(.el-button--primary):not(.el-button--text):focus,\r\n.twikoo .el-button:not(.el-button--primary):not(.el-button--text):hover {\r\n color: #409eff;\r\n background-color: rgba(64,158,255,0.063);\r\n border-color: rgba(64,158,255,0.50);\n}\n.twikoo .el-button--primary.is-disabled,\r\n.twikoo .el-button--primary.is-disabled:active,\r\n.twikoo .el-button--primary.is-disabled:focus,\r\n.twikoo .el-button--primary.is-disabled:hover {\r\n color: rgba(255,255,255,0.63);\r\n background-color: rgba(64,158,255,0.50);\r\n border-color: transparent;\n}\n.twikoo .el-loading-mask {\r\n background-color: transparent;\r\n backdrop-filter: opacity(20%);\n}\n.twikoo .el-textarea .el-input__count {\r\n color: currentColor;\r\n background: transparent;\n}\n.tk-admin-warn {\r\n padding: 1rem 1.5rem;\r\n background-color: #fff7d0;\r\n border-left: 0.5rem solid #e7c000;\r\n color: #6b5900;\r\n align-self: stretch;\n}\r\n",""]),t["default"]=a},6404:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-action {\r\n display: flex;\r\n align-items: center;\n}\n.tk-action-link {\r\n margin-left: 0.5rem;\r\n color: #409eff;\r\n text-decoration: none;\r\n display: flex;\r\n align-items: center;\n}\n.tk-action-link .tk-action-icon-solid {\r\n display: none;\n}\n.tk-action-link.tk-liked .tk-action-icon,\r\n.tk-action-link:hover .tk-action-icon {\r\n display: none;\n}\n.tk-action-link.tk-liked .tk-action-icon-solid,\r\n.tk-action-link:hover .tk-action-icon-solid {\r\n display: block;\n}\n.tk-action-count {\r\n margin-left: 0.25rem;\r\n font-size: 0.75rem;\r\n height: 1.5rem;\r\n line-height: 1.5rem;\n}\n.tk-action-icon {\r\n display: inline-block;\r\n height: 1em;\r\n width: 1em;\r\n line-height: 0;\r\n color: #409eff;\n}\r\n",""]),t["default"]=a},3422:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-admin-container {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n pointer-events: none;\n}\n.tk-admin {\r\n position: absolute;\r\n top: 0;\r\n left: 100%;\r\n width: 100%;\r\n height: 100%;\r\n overflow-y: auto;\r\n pointer-events: all;\r\n color: #ffffff;\r\n background-color: rgba(0,0,0,0.60);\r\n backdrop-filter: blur(5px);\r\n transition: all 0.5s ease;\r\n visibility: hidden;\n}\n.tk-admin::-webkit-scrollbar {\r\n width: 5px;\r\n background-color: transparent;\n}\n.tk-admin::-webkit-scrollbar-track {\r\n background-color: transparent;\n}\n.tk-admin::-webkit-scrollbar-thumb {\r\n background-color: rgba(255,255,255,0.31);\n}\n.tk-admin.__show {\r\n left: 0;\r\n visibility: visible;\n}\n.tk-admin-close {\r\n position: sticky;\r\n float: right;\r\n display: block;\r\n top: 0;\r\n right: 0;\r\n width: 1rem;\r\n height: 1rem;\r\n padding: 1rem;\r\n box-sizing: content-box;\r\n color: #ffffff;\n}\n.tk-login,\r\n.tk-regist {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n width: 100%;\r\n padding: 0 2rem;\n}\n.tk-login-title {\r\n color: #ffffff;\r\n font-size: 1.25rem;\r\n text-align: center;\r\n margin-top: 10rem;\n}\n.tk-password,\r\n.tk-login-msg {\r\n color: #ffffff;\r\n width: 80%;\r\n text-align: center;\r\n margin-top: 1rem;\n}\n.tk-password .el-input__inner {\r\n min-width: 100px;\n}\n.tk-login-msg a {\r\n color: #ffffff;\r\n margin-left: 1em;\r\n text-decoration: underline;\n}\n.tk-regist-button {\r\n margin-top: 1rem;\n}\n.tk-panel {\r\n color: #ffffff;\r\n padding: 2rem;\n}\n.tk-panel-title {\r\n font-size: 1.5rem;\r\n display: flex;\r\n align-items: flex-end;\r\n justify-content: space-between;\n}\n.tk-panel-logout {\r\n color: #ffffff;\r\n font-size: 1rem;\r\n text-decoration: underline;\n}\n.tk-panel .tk-tabs {\r\n display: flex;\r\n margin-bottom: 1em;\r\n border-bottom: 2px solid #c0c4cc;\n}\n.tk-panel .tk-tab {\r\n color: #c0c4cc;\r\n cursor: pointer;\r\n line-height: 2em;\r\n margin-right: 2em;\r\n margin-bottom: -2px;\n}\n.tk-panel .tk-tab.__active {\r\n color: #ffffff;\r\n border-bottom: 2px solid #ffffff;\n}\r\n",""]),t["default"]=a},3301:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-admin-comment {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\n}\n.tk-admin-comment a {\r\n color: currentColor;\r\n text-decoration: underline;\n}\n.tk-admin-warn {\r\n margin-bottom: 1em;\n}\n.tk-admin-comment-filter {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\n}\n.tk-admin-comment-filter-keyword {\r\n flex: 1;\n}\n.tk-admin-comment-filter-type {\r\n height: 32px;\r\n margin: 0 0.5em;\r\n padding: 0 0.5em;\r\n color: #ffffff;\r\n background: none;\r\n border: 1px solid rgba(144,147,153,0.31);\r\n border-radius: 4px;\r\n position: relative;\r\n -moz-appearance: none;\r\n -webkit-appearance: none;\n}\n.tk-admin-comment-filter-type:focus {\r\n border-color: #409eff;\n}\n.tk-admin-comment-filter-type option {\r\n color: initial;\n}\n.tk-admin-comment-list {\r\n margin-top: 1em;\n}\n.tk-admin-comment-list,\r\n.tk-admin-comment-item {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: stretch;\n}\n.tk-admin-comment-meta {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n margin-bottom: 0.5em;\n}\n.tk-admin-comment .tk-avatar {\r\n margin-right: 0.5em;\n}\n.tk-admin-comment .tk-content {\r\n max-height: none;\n}\n.tk-admin-actions {\r\n display: flex;\r\n margin-bottom: 1em;\r\n border-bottom: 1px solid rgba(255,255,255,0.5);\n}\r\n",""]),t["default"]=a},6384:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-admin-config-groups {\r\n overflow-y: auto;\r\n padding-right: 0.5em;\n}\n.tk-admin-config-groups .tk-admin-config-group,\r\n.tk-admin-config-groups .tk-admin-config-group-title {\r\n background: transparent;\n}\n.tk-admin-config-group-title {\r\n margin-top: 1em;\r\n font-size: 1.25rem;\r\n font-weight: bold;\n}\n.tk-admin-config-item {\r\n display: grid;\r\n align-items: center;\r\n grid-template-columns: 30% 70%;\r\n margin-top: 1em;\n}\n.tk-admin-config-title {\r\n text-align: right;\r\n margin-right: 1em;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\n}\n.tk-admin-config-desc {\r\n margin-top: 0.5em;\r\n font-size: 0.75em;\r\n overflow-wrap: break-word;\n}\n.tk-admin-config-actions {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-top: 1em;\n}\n.tk-admin-config-message {\r\n margin-top: 0.5em;\r\n text-align: center;\n}\n.tk-admin-config-email-test-desc {\r\n margin: 1em 0;\n}\r\n",""]),t["default"]=a},8120:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-admin-import {\r\n display: flex;\r\n flex-direction: column;\n}\n.tk-admin-import-label {\r\n margin-top: 1em;\r\n font-size: 1.25rem;\r\n font-weight: bold;\n}\n.tk-admin-import select,\r\n.tk-admin-import input,\r\n.tk-admin-import .el-button,\r\n.tk-admin-import .el-textarea {\r\n margin-top: 1em;\n}\r\n",""]),t["default"]=a},269:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-avatar {\r\n flex-shrink: 0;\r\n height: 2.5rem;\r\n width: 2.5rem;\r\n overflow: hidden;\r\n text-align: center;\r\n border-radius: 5px;\r\n margin-right: 1rem;\n}\n.tk-comment .tk-submit .tk-avatar,\r\n.tk-replies .tk-avatar {\r\n height: 1.6rem;\r\n width: 1.6rem;\n}\n.tk-avatar.tk-has-avatar {\r\n background-color: rgba(144,147,153,0.13);\n}\n.tk-avatar.tk-clickable {\r\n cursor: pointer;\n}\n.tk-avatar .tk-avatar-img {\r\n height: 2.5rem;\r\n color: #c0c4cc;\n}\n.tk-comment .tk-submit .tk-avatar .tk-avatar-img,\r\n.tk-replies .tk-avatar .tk-avatar-img {\r\n height: 1.6rem;\n}\r\n",""]),t["default"]=a},4653:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-main {\r\n flex: 1;\r\n width: 0;\n}\n.tk-row {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\n}\n.tk-nick-link {\r\n color: inherit;\r\n text-decoration: none;\n}\n.tk-replies .tk-nick-link {\r\n font-size: .9em;\n}\n.tk-nick-link:hover {\r\n color: #409eff;\n}\n.tk-actions {\r\n display: none;\r\n margin-left: 1em;\n}\n.tk-comment:hover .tk-actions {\r\n display: inline;\n}\n.tk-extras {\r\n color: #999999;\r\n font-size: 0.875em;\r\n display: flex;\r\n flex-wrap: wrap;\n}\n.tk-extra {\r\n margin-top: 0.5rem;\r\n margin-right: 0.75rem;\r\n display: flex;\r\n align-items: center;\n}\n.tk-icon.__comment {\r\n height: 1em;\r\n width: 1em;\r\n line-height: 1;\n}\n.tk-extra-text {\r\n line-height: 1;\n}\n.tk-tag {\r\n display: inline-block;\r\n padding: 0 0.5em;\r\n font-size: 0.75em;\r\n background-color: #f2f6fc;\n}\n.tk-tag-green {\r\n background-color: rgba(103,194,58,0.13);\r\n border: 1px solid rgba(103,194,58,0.50);\r\n border-radius: 2px;\r\n color: #67c23a;\n}\n.tk-tag-yellow {\r\n background-color: rgba(230,162,60,0.13);\r\n border: 1px solid rgba(230,162,60,0.50);\r\n border-radius: 2px;\r\n color: #e6a23c;\n}\n.tk-tag-blue {\r\n background-color: rgba(64,158,255,0.13);\r\n border: 1px solid rgba(64,158,255,0.50);\r\n border-radius: 2px;\r\n color: #409eff;\n}\n.tk-tag-red {\r\n background-color: rgba(245,108,108,0.13);\r\n border: 1px solid rgba(245,108,108,0.50);\r\n border-radius: 2px;\r\n color: #f56c6c;\n}\n.tk-comment {\r\n margin-top: 1rem;\r\n display: flex;\r\n flex-direction: row;\r\n word-break: break-all;\n}\n.tk-content {\r\n margin-top: 0.5rem;\r\n overflow: hidden;\r\n max-height: 500px;\r\n position: relative;\n}\n.tk-content-expand {\r\n max-height: none;\n}\n.tk-replies .tk-content {\r\n font-size: .9em;\n}\n.tk-comment .vemoji {\r\n max-height: 2em;\r\n vertical-align: middle;\n}\n.tk-replies {\r\n max-height: 200px;\r\n overflow: hidden;\r\n position: relative;\n}\n.tk-replies-expand {\r\n max-height: none;\r\n overflow: unset;\n}\n.tk-submit {\r\n margin-top: 1rem;\n}\n.tk-expand {\r\n font-size: 0.75em;\n}\n.tk-lightbox {\r\n display: block;\r\n position: fixed;\r\n background-color: rgba(0, 0, 0, 0.3);\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 999;\n}\n.tk-lightbox-image {\r\n min-width: 100px;\r\n min-height: 30px;\r\n width: auto;\r\n height: auto;\r\n max-width: 95%;\r\n max-height: 95%;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n background: linear-gradient(90deg, #eeeeee 50%, #e3e3e3 0);\r\n background-size: 40px 100%;\n}\r\n",""]),t["default"]=a},3650:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-comments-title {\r\n font-size: 1.25rem;\r\n font-weight: bold;\r\n margin-bottom: 1rem;\r\n display: flex;\r\n align-items: baseline;\r\n justify-content: space-between;\n}\n.tk-comments-count.__hidden {\r\n visibility: hidden;\n}\n.tk-comments-container {\r\n min-height: 10rem;\r\n display: flex;\r\n flex-direction: column;\n}\n.tk-comments-no {\r\n flex: 1;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\n}\n.tk-comments-error {\r\n font-size: 0.75em;\r\n color: #ff0000;\n}\n.tk-icon.__comments {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n vertical-align: sub;\r\n margin-left: 0.5em;\r\n height: 0.75em;\r\n width: 0.75em;\r\n line-height: 0;\r\n cursor: pointer;\r\n color: #409eff;\n}\n.twikoo div.code-toolbar {\r\n position: relative;\r\n border-radius: .3em\n}\n.twikoo div.code-toolbar>.toolbar {\r\n position: absolute;\r\n right: 4px;\r\n top: 4px;\r\n font-size: .8125rem;\r\n font-weight: 500;\r\n display: flex;\n}\n.twikoo div.code-toolbar>.toolbar>.toolbar-item {\r\n margin-left: .3em\n}\n.twikoo div.code-toolbar>.toolbar>.toolbar-item>a,\r\n.twikoo div.code-toolbar>.toolbar>.toolbar-item>button,\r\n.twikoo div.code-toolbar>.toolbar>.toolbar-item>span {\r\n padding: 2px 4px;\r\n border-radius: .3em;\n}\n.twikoo div.code-toolbar>.toolbar>.toolbar-item>button {\r\n border: 1px solid rgba(128, 128, 128, 0.31);\n}\n.twikoo div.code-toolbar>.toolbar>.toolbar-item>button:hover {\r\n cursor: pointer;\n}\r\n",""]),t["default"]=a},8440:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-footer {\r\n width: 100%;\r\n text-align: end;\r\n font-size: 0.75em;\r\n color: #999999;\r\n margin-top: 1em;\n}\r\n",""]),t["default"]=a},7618:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-meta-input {\r\n display: flex;\n}\n.tk-meta-input .el-input {\r\n width: auto;\r\n width: calc((100% - 1rem) / 3); /* Fix Safari */\r\n flex: 1;\n}\n.tk-meta-input .el-input + .el-input {\r\n margin-left: 0.5rem;\n}\n.tk-meta-input .el-input .el-input-group__prepend {\r\n padding: 0 1rem;\n}\n.tk-meta-input .el-input input:invalid {\r\n border: 1px solid #f56c6c;\r\n box-shadow: none;\n}\n@media screen and (max-width: 767px) {\n.tk-meta-input {\r\n flex-direction: column;\n}\n.tk-meta-input .el-input {\r\n width: auto;\n}\n.tk-meta-input .el-input + .el-input {\r\n margin-left: 0;\r\n margin-top: 0.5rem;\n}\n}\r\n",""]),t["default"]=a},6785:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-pagination,\r\n.tk-pagination-pagers {\r\n display: flex;\n}\n.tk-pagination {\r\n width: 100%;\r\n align-items: center;\r\n justify-content: space-between;\r\n flex-wrap: wrap;\n}\n.tk-pagination-options {\r\n display: flex;\r\n align-items: center;\n}\n.tk-pagination-pager {\r\n width: 2em;\r\n height: 2em;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\n}\n.tk-pagination-pager.__current {\r\n background-color: #409eff;\r\n pointer-events: none;\n}\n.tk-pagination .el-input {\r\n width: 50px;\n}\n.tk-pagination .el-input .el-input__inner {\r\n padding: 0;\r\n height: 28px;\r\n text-align: center;\r\n -moz-appearance: textfield;\r\n appearance: textfield;\n}\n.tk-pagination .el-input .el-input__inner::-webkit-inner-spin-button,\r\n.tk-pagination .el-input .el-input__inner::-webkit-outer-spin-button {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n margin: 0;\n}\r\n",""]),t["default"]=a},7786:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,"\n.tk-submit {\r\n display: flex;\r\n flex-direction: column;\n}\n.tk-row {\r\n display: flex;\r\n flex-direction: row;\n}\n.tk-col {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\n}\n.tk-meta-input {\r\n margin-bottom: 0.5rem;\n}\n.tk-row.actions {\r\n position: relative;\r\n margin-top: 1rem;\r\n margin-bottom: 1rem;\r\n margin-left: 3.5rem;\r\n align-items: center;\r\n justify-content: flex-end;\n}\n.tk-row-actions-start {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\n}\n.tk-submit-action-icon {\r\n align-self: center;\r\n display: inline-block;\r\n width: 1.25em;\r\n line-height: 0;\r\n margin-right: 10px;\r\n cursor: pointer;\r\n flex-shrink: 0;\n}\n.tk-submit-action-icon svg:hover {\r\n opacity: 0.8;\n}\n.tk-submit-action-icon.__markdown {\r\n color: #909399;\n}\n.tk-error-message {\r\n word-break: break-all;\r\n color: #ff0000;\r\n font-size: 0.75em;\r\n flex-shrink: 1;\n}\n.tk-input-image {\r\n display: none;\n}\n.tk-input {\r\n flex: 1;\n}\n.tk-input .el-textarea__inner {\r\n background-position: right bottom;\r\n background-repeat: no-repeat;\n}\n.tk-turnstile-container {\r\n position: absolute;\r\n right: 0;\r\n bottom: -75px;\r\n z-index: 1;\n}\n.tk-turnstile {\r\n display: flex;\r\n flex-direction: column;\n}\n.tk-preview-container {\r\n margin-left: 3rem;\r\n margin-bottom: 1rem;\r\n padding: 5px 15px;\r\n border: 1px solid rgba(128,128,128,0.31);\r\n border-radius: 4px;\r\n word-break: break-word;\n}\n.tk-fade-in {\r\n animation: tkFadeIn .3s;\n}\n@keyframes tkFadeIn {\n0% {\r\n opacity: 0\n}\nto {\r\n opacity: 1\n}\n}\r\n",""]),t["default"]=a},6810:function(e,t,n){"use strict";n.r(t);var r=n(5346),i=n.n(r),o=n(9067),a=n.n(o)()(i());a.push([e.id,'/*!\r\n * OwO v1.0.2\r\n * Source: https://github.com/DIYgod/OwO/blob/master/dist/OwO.min.css\r\n * Author: DIYgod\r\n * Modified by: iMaeGoo\r\n * Released under the MIT License.\r\n */\r\n\r\n.OwO {\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.OwO.OwO-open .OwO-body {\r\n display: block;\r\n}\r\n\r\n.OwO .OwO-logo {\r\n width: 1.125em;\r\n display: flex;\r\n}\r\n\r\n.OwO .OwO-body {\r\n display: none;\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n max-width: 500px;\r\n color: #4a4a4a;\r\n background-color: #ffffff;\r\n border: 1px solid rgba(144,147,153,0.31);\r\n top: 2em;\r\n border-radius: 0 4px 4px;\r\n z-index: 1000;\r\n}\r\n\r\n.night .OwO .OwO-body,\r\n.darkmode .OwO .OwO-body,\r\n.DarkMode .OwO .OwO-body,\r\n[data-theme="dark"] .OwO .OwO-body,\r\n[data-user-color-scheme="dark"] .OwO .OwO-body {\r\n color: #ffffff;\r\n background-color: #4a4a4a;\r\n}\r\n\r\n.OwO .OwO-body .OwO-items {\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n display: none;\r\n padding: 10px;\r\n padding-right: 0;\r\n margin: 0;\r\n overflow: auto;\r\n font-size: 0;\r\n}\r\n\r\n.OwO .OwO-body .OwO-items .OwO-item {\r\n list-style-type: none;\r\n padding: 5px 10px;\r\n border-radius: 5px;\r\n display: inline-block;\r\n font-size: 12px;\r\n line-height: 14px;\r\n cursor: pointer;\r\n -webkit-transition: .3s;\r\n transition: .3s;\r\n text-align: center;\r\n}\r\n\r\n.OwO .OwO-body .OwO-items .OwO-item:hover {\r\n background-color: rgba(144,147,153,0.13);\r\n box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);\r\n}\r\n\r\n.OwO .OwO-body .OwO-items-emoji .OwO-item {\r\n font-size: 20px;\r\n line-height: 19px;\r\n}\r\n\r\n.OwO .OwO-body .OwO-items-image .OwO-item {\r\n width: 14%;\r\n box-sizing: border-box;\r\n}\r\n\r\n@media screen and (max-width: 600px) {\r\n #twikoo .OwO-items > .OwO-item {\r\n width: 16%;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 460px) {\r\n #twikoo .OwO-items > .OwO-item {\r\n width: 20%;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 400px) {\r\n #twikoo .OwO-items > .OwO-item {\r\n width: 25%;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 330px) {\r\n #twikoo .OwO-items > .OwO-item {\r\n width: 33%;\r\n }\r\n}\r\n\r\n\r\n.OwO .OwO-body .OwO-items-image .OwO-item img {\r\n max-width: 100%;\r\n}\r\n\r\n.OwO .OwO-body .OwO-items-show {\r\n display: block;\r\n}\r\n\r\n.OwO .OwO-body .OwO-bar {\r\n width: 100%;\r\n border-top: 1px solid rgba(144,147,153,0.31);\r\n border-radius: 0 0 4px 4px;\r\n}\r\n\r\n.OwO .OwO-body .OwO-bar .OwO-packages {\r\n margin: 0;\r\n padding: 0;\r\n font-size: 0;\r\n}\r\n\r\n.OwO .OwO-body .OwO-bar .OwO-packages li {\r\n list-style-type: none;\r\n display: inline-block;\r\n line-height: 30px;\r\n font-size: 14px;\r\n padding: 0 10px;\r\n cursor: pointer;\r\n margin-right: 3px;\r\n}\r\n\r\n.OwO .OwO-body .OwO-bar .OwO-packages li:nth-child(1) {\r\n border-radius: 0 0 0 3px;\r\n}\r\n\r\n.OwO .OwO-body .OwO-bar .OwO-packages li:hover {\r\n background-color: rgba(144,147,153,0.13);\r\n}\r\n\r\n.OwO .OwO-body .OwO-bar .OwO-packages .OwO-package-active {\r\n background-color: rgba(144,147,153,0.13);\r\n -webkit-transition: .3s;\r\n transition: .3s;\r\n}\r\n',""]),t["default"]=a},6937:function(e){e.exports=''},9396:function(e){e.exports=''},58:function(e){e.exports=''},7051:function(e){e.exports=''},8443:function(e){e.exports=''},3793:function(e){e.exports=''},8974:function(e){e.exports=''},1423:function(e){e.exports=''},740:function(e){e.exports=''},7397:function(e){e.exports=''},2531:function(e){e.exports=''},3491:function(e){e.exports=''},5171:function(e){e.exports=''},6639:function(e){e.exports=''},6359:function(e){e.exports=''},9039:function(e){e.exports=''},504:function(e){e.exports=''},6370:function(e){e.exports=''},3982:function(e){e.exports=''},9966:function(e){e.exports=''},5910:function(e){e.exports=''},9671:function(e){e.exports=''},9587:function(e){e.exports=''},6768:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(1573),i=n(8926),o=i.A,a=(n(1288),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},4185:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(7090),i=n(3397),o=i.A,a=(n(5713),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},6619:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(7236),i=n(4238),o=i.A,a=(n(6177),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},8559:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(3227),i=n(4555),o=i.A,a=(n(7908),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},1140:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(74),i=n(4868),o=i.A,a=(n(7891),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},9097:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(9976),i=n(3396),o=i.A,a=(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports},9985:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(872),i=n(9865),o=i.A,a=(n(8087),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},4785:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(5897),i=n(4064),o=i.A,a=(n(4624),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},417:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(3827),i=n(3572),o=i.A,a=(n(7246),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},8323:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(2048),i=n(4333),o=i.A,a=(n(3111),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},1452:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(2080),i=n(418),o=i.A,a=(n(3457),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},3415:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(1412),i=n(2362),o=i.A,a=(n(2418),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},6431:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(8675),i=n(9171),o=i.A,a=(n(292),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},5438:function(e,t,n){"use strict";n.r(t),n.d(t,{__esModule:function(){return i.B},"default":function(){return a}});var r=n(9564),i=n(147),o=i.A,a=(n(5107),(0,n(4486).A)(o,r.XX,r.Yp,!1,null,null,null).exports)},4486:function(e,t,n){"use strict";function r(e,t,n,r,i,o,a,s){var u,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),r&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=u):i&&(u=s?function(){i.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:i),u)if(c.functional){c._injectStyles=u;var l=c.render;c.render=function(e,t){return u.call(t),l(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,u):[u]}return{exports:e,options:c}}n.d(t,{A:function(){return r}})},622:function(e,t,n){var r=n(3723);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("0e5ef982",r,!0,{})},8848:function(e,t,n){var r=n(1315);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("1a92f302",r,!0,{})},6756:function(e,t,n){var r=n(9211);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("e6b19834",r,!0,{})},1288:function(e,t,n){var r=n(9737);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("5049e71b",r,!0,{})},5713:function(e,t,n){var r=n(6404);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("2367f441",r,!0,{})},6177:function(e,t,n){var r=n(3422);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("39ba9d98",r,!0,{})},7908:function(e,t,n){var r=n(3301);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("1287f7b8",r,!0,{})},7891:function(e,t,n){var r=n(6384);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("6a83638c",r,!0,{})},8087:function(e,t,n){var r=n(8120);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("59ad6a1e",r,!0,{})},4624:function(e,t,n){var r=n(269);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("5a1fa943",r,!0,{})},7246:function(e,t,n){var r=n(4653);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("f24b54b6",r,!0,{})},3111:function(e,t,n){var r=n(3650);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("5dbb03ca",r,!0,{})},3457:function(e,t,n){var r=n(8440);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("042e8a68",r,!0,{})},2418:function(e,t,n){var r=n(7618);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("59ca4f90",r,!0,{})},292:function(e,t,n){var r=n(6785);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("88983344",r,!0,{})},5107:function(e,t,n){var r=n(7786);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("cfea80b2",r,!0,{})},4707:function(e,t,n){var r=n(6810);r.__esModule&&(r=r["default"]),"string"==typeof r&&(r=[[e.id,r,""]]),r.locals&&(e.exports=r.locals),(0,n(5083).A)("8be46386",r,!0,{})},5083:function(e,t,n){"use strict";n.d(t,{A:function(){return h}});var r=n(5547),i="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!i)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var o={},a=i&&(document.head||document.getElementsByTagName("head")[0]),s=null,u=0,c=!1,l=function(){},d=null,f="data-vue-ssr-id",p="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function h(e,t,n,i){c=n,d=i||{};var a=(0,r.A)(e,t);return m(a),function(t){for(var n=[],i=0;in.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--i){var o=this.tryEntries[i],s=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var u=a.call(o,"catchLoc"),c=a.call(o,"finallyLoc");if(u&&c){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&a.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),M(n),y}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;M(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:P(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),y}},n}e.exports=i,e.exports.__esModule=!0,e.exports["default"]=e.exports},9272:function(e,t,n){"use strict";var r=n(8554),i=n(4805),o=n(2075),a=n(2971);e.exports=function(e,t){return r(e)||i(e,t)||o(e,t)||a()},e.exports.__esModule=!0,e.exports["default"]=e.exports},1819:function(e,t,n){"use strict";var r=n(8198),i=n(6884),o=n(2075),a=n(5838);e.exports=function(e){return r(e)||i(e)||o(e)||a()},e.exports.__esModule=!0,e.exports["default"]=e.exports},7278:function(e,t,n){"use strict";var r=n(9367)["default"];e.exports=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=r(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports["default"]=e.exports},3987:function(e,t,n){"use strict";var r=n(9367)["default"],i=n(7278);e.exports=function(e){var t=i(e,"string");return"symbol"==r(t)?t:String(t)},e.exports.__esModule=!0,e.exports["default"]=e.exports},9367:function(e){"use strict";function t(n){return e.exports=t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports["default"]=e.exports,t(n)}e.exports=t,e.exports.__esModule=!0,e.exports["default"]=e.exports},2075:function(e,t,n){"use strict";var r=n(6530);e.exports=function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}},e.exports.__esModule=!0,e.exports["default"]=e.exports},479:function(e,t,n){"use strict";var r=n(477)(n(9367)),i=n(7120)();e.exports=i;try{regeneratorRuntime=i}catch(o){"object"===("undefined"==typeof globalThis?"undefined":(0,r["default"])(globalThis))?globalThis.regeneratorRuntime=i:Function("r","regeneratorRuntime = r")(i)}},5707:function(e){"use strict";e.exports=JSON.parse('{"name":"@cloudbase/js-sdk","version":"1.7.2","description":"cloudbase javascript sdk","main":"dist/index.cjs.js","module":"dist/index.esm.js","miniprogram":"miniprogram_dist","typings":"./index.d.ts","scripts":{"lint":"eslint --fix \\"./src/**/*.ts\\" \\"./database/**/*.ts\\"","build":"rm -rf dist/ && gulp build","build:cdn":"gulp cdn","build:miniapp":"gulp miniapp","build:e2e":"rm -rf dist/ && NODE_ENV=e2e gulp e2e"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/TencentCloudBase/cloudbase-js-sdk"},"keywords":["tcb","cloudbase","Cloudbase","serverless","Serverless","javascript","JavaScript"],"files":["miniprogram_dist","**/dist/","/index.d.ts","**/package.json"],"components":["app","auth","database","functions","storage"],"author":"","license":"ISC","dependencies":{"@cloudbase/analytics":"^1.1.1-alpha.0","@cloudbase/app":"^1.4.1","@cloudbase/auth":"^1.6.1","@cloudbase/database":"0.9.18-next","@cloudbase/functions":"^1.3.4","@cloudbase/realtime":"^1.1.4-alpha.0","@cloudbase/storage":"^1.3.4","@cloudbase/types":"^1.1.3-alpha.0","@cloudbase/utilities":"^1.3.4"},"devDependencies":{"@babel/core":"^7.9.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-transform-runtime":"^7.9.0","@babel/preset-env":"^7.9.5","@babel/preset-typescript":"^7.9.0","@typescript-eslint/eslint-plugin":"^3.8.0","@typescript-eslint/parser":"^3.8.0","awesome-typescript-loader":"^5.2.1","babel-loader":"^8.1.0","eslint":"^7.6.0","eslint-config-alloy":"^3.7.4","gulp":"^4.0.2","gulp-clean":"^0.4.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^2.6.5","gulp-typescript":"^6.0.0-alpha.1","json-loader":"^0.5.7","merge-stream":"^2.0.0","package-json-cleanup-loader":"^1.0.3","typescript":"^3.8.3","webpack":"4.41.3","webpack-cli":"^3.3.11","webpack-node-externals":"^1.7.2","webpack-stream":"^5.2.1","webpack-visualizer-plugin":"^0.1.11"},"browserslist":["last 2 version","> 1%","not dead","chrome 53"],"gitHead":"29ca0bf24318daa1fbb230910edf0b1545e17e7f"}')}},t={};function n(r){var i=t[r];if(i!==undefined)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r](o,o.exports,n),o.loaded=!0,o.exports}n.amdO={},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e};var r={};return function(){"use strict";var e=r,t=n(477);Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=void 0,e.getCommentsCount=function(){return m.apply(this,arguments)},e.getRecentComments=function(){return g.apply(this,arguments)},e.init=p,Object.defineProperty(e,"version",{enumerable:!0,get:function(){return a.version}});var i=t(n(479)),o=t(n(4964)),a=n(2199),s=n(824),u=n(1085),c=n(8129),l=t(n(9459));function d(e){return f.apply(this,arguments)}function f(){return(f=(0,o["default"])(i["default"].mark((function e(t){return i["default"].wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,s.install)(l["default"],t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(){return h.apply(this,arguments)}function h(){return h=(0,o["default"])(i["default"].mark((function e(){var t,n,r=arguments;return i["default"].wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=r.length>0&&r[0]!==undefined?r[0]:{},!(0,c.isUrl)(t.envId)){e.next=5;break}e.t0=null,e.next=8;break;case 5:return e.next=7,d(t);case 7:e.t0=e.sent;case 8:n=e.t0,(0,c.setLanguage)(t),(0,u.render)(n,t);case 11:case"end":return e.stop()}}),e)}))),h.apply(this,arguments)}function m(){return m=(0,o["default"])(i["default"].mark((function e(){var t,n,r=arguments;return i["default"].wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=r.length>0&&r[0]!==undefined?r[0]:{},!(0,c.isUrl)(t.envId)){e.next=5;break}e.t0=null,e.next=8;break;case 5:return e.next=7,d(t);case 7:e.t0=e.sent;case 8:return n=e.t0,e.next=11,(0,c.getCommentsCountApi)(n,t);case 11:return e.abrupt("return",e.sent);case 12:case"end":return e.stop()}}),e)}))),m.apply(this,arguments)}function g(){return g=(0,o["default"])(i["default"].mark((function e(){var t,n,r=arguments;return i["default"].wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=r.length>0&&r[0]!==undefined?r[0]:{},!(0,c.isUrl)(t.envId)){e.next=5;break}e.t0=null,e.next=8;break;case 5:return e.next=7,d(t);case 7:e.t0=e.sent;case 8:return n=e.t0,e.next=11,(0,c.getRecentCommentsApi)(n,t);case 11:return e.abrupt("return",e.sent);case 12:case"end":return e.stop()}}),e)}))),g.apply(this,arguments)}n(9744),n(7441),n(5417),e["default"]=p}(),r}()},"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.twikoo=t():e.twikoo=t(); \ No newline at end of file diff --git a/public/assets/js/highlight.min.js b/public/assets/js/highlight.min.js new file mode 100644 index 0000000..5d699ae --- /dev/null +++ b/public/assets/js/highlight.min.js @@ -0,0 +1,1213 @@ +/*! + Highlight.js v11.9.0 (git: f47103d4f1) + (c) 2006-2023 undefined and other contributors + License: BSD-3-Clause + */ +var hljs=function(){"use strict";function e(n){ +return n instanceof Map?n.clear=n.delete=n.set=()=>{ +throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{ +throw Error("set is read-only") +}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{ +const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a) +})),n}class n{constructor(e){ +void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} +ignoreMatch(){this.isMatchIgnored=!0}}function t(e){ +return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") +}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] +;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope +;class r{constructor(e,n){ +this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ +this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{ +if(e.startsWith("language:"))return e.replace("language:","language-") +;if(e.includes(".")){const t=e.split(".") +;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") +}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)} +closeNode(e){i(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}const s=(e={})=>{const n={children:[]} +;return Object.assign(n,e),n};class o{constructor(){ +this.rootNode=s(),this.stack=[this.rootNode]}get top(){ +return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ +this.top.children.push(e)}openNode(e){const n=s({scope:e}) +;this.add(n),this.stack.push(n)}closeNode(){ +if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ +for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ +return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), +n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ +"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ +o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e} +addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ +this.closeNode()}__addSublanguage(e,n){const t=e.root +;n&&(t.scope="language:"+n),this.add(t)}toHTML(){ +return new r(this,this.options).value()}finalize(){ +return this.closeAllNodes(),!0}}function c(e){ +return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")} +function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")} +function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{ +const n=e[e.length-1] +;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} +})(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"} +function p(e){return RegExp(e.toString()+"|").exec("").length-1} +const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ +;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t +;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break} +i+=a.substring(0,e.index), +a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0], +"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)} +const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",N="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",w="\\b(0b[01]+)",v={ +begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'", +illegal:"\\n",contains:[v]},k={scope:"string",begin:'"',end:'"',illegal:"\\n", +contains:[v]},x=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n, +contains:[]},t);i.contains.push({scope:"doctag", +begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", +end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) +;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) +;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i +},M=x("//","$"),S=x("/\\*","\\*/"),A=x("#","$");var C=Object.freeze({ +__proto__:null,APOS_STRING_MODE:O,BACKSLASH_ESCAPE:v,BINARY_NUMBER_MODE:{ +scope:"number",begin:w,relevance:0},BINARY_NUMBER_RE:w,COMMENT:x, +C_BLOCK_COMMENT_MODE:S,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:{scope:"number", +begin:N,relevance:0},C_NUMBER_RE:N,END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:A,IDENT_RE:f, +MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+E,relevance:0}, +NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, +PHRASAL_WORDS_MODE:{ +begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ +},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, +end:/\/[gimuy]*/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,contains:[v]}]}, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const n=/^#![ ]*\// +;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n, +end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, +TITLE_MODE:{scope:"title",begin:f,relevance:0},UNDERSCORE_IDENT_RE:E, +UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0}});function T(e,n){ +"."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){ +void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){ +n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function I(e,n){ +Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){ +if(e.match){ +if(e.begin||e.end)throw Error("begin & end are not supported with match") +;e.begin=e.match,delete e.match}}function B(e,n){ +void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return +;if(e.starts)throw Error("beforeMatch cannot be used with starts") +;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] +})),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={ +relevance:0,contains:[Object.assign(t,{endsParent:!0})] +},e.relevance=0,delete t.beforeMatch +},z=["of","and","for","in","not","or","if","then","parent","list","value"],F="keyword" +;function U(e,n,t=F){const a=Object.create(null) +;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{ +Object.assign(a,U(e[t],n,t))})),a;function i(e,t){ +n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") +;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){ +return n?Number(n):(e=>z.includes(e.toLowerCase()))(e)?0:1}const P={},K=e=>{ +console.error(e)},H=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{ +P[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),P[`${e}/${n}`]=!0) +},G=Error();function Z(e,n,{key:t}){let a=0;const i=e[t],r={},s={} +;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1]) +;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function W(e){(e=>{ +e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, +delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ +_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope +}),(e=>{if(Array.isArray(e.begin)){ +if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), +G +;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"), +G;Z(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{ +if(Array.isArray(e.end)){ +if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"), +G +;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"), +G;Z(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function Q(e){ +function n(n,t){ +return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) +}class t{constructor(){ +this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} +addRule(e,n){ +n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), +this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|" +}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex +;const n=this.matcherRe.exec(e);if(!n)return null +;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] +;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){ +this.rules=[],this.multiRegexes=[], +this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ +if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t +;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), +n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ +this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ +const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex +;let t=n.exec(e) +;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ +const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} +return t&&(this.regexIndex+=t.position+1, +this.regexIndex===this.count&&this.considerAll()),t}} +if(e.compilerExtensions||(e.compilerExtensions=[]), +e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") +;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r +;if(r.isCompiled)return o +;[R,L,W,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))), +r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null +;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), +l=r.keywords.$pattern, +delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)), +o.keywordPatternRe=n(l,!0), +s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), +r.end&&(o.endRe=n(o.end)), +o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)), +r.illegal&&(o.illegalRe=n(r.illegal)), +r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{ +variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{ +starts:e.starts?a(e.starts):null +}):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o) +})),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i +;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){ +return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{ +constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} +const J=t,Y=a,ee=Symbol("nomatch"),ne=t=>{ +const a=Object.create(null),i=Object.create(null),r=[];let s=!0 +;const o="Could not find the language '{}', did you forget to load/include a language module?",c={ +disableAutodetect:!0,name:"Plain text",contains:[]};let p={ +ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, +languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", +cssSelector:"pre code",languages:null,__emitter:l};function _(e){ +return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i="" +;"object"==typeof n?(a=e, +t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."), +q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};x("before:highlight",r) +;const s=r.result?r.result:f(r.language,r.code,t) +;return s.code=r.code,x("after:highlight",s),s}function f(e,t,i,r){ +const l=Object.create(null);function c(){if(!x.keywords)return void S.addText(A) +;let e=0;x.keywordPatternRe.lastIndex=0;let n=x.keywordPatternRe.exec(A),t="" +;for(;n;){t+=A.substring(e,n.index) +;const i=w.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,x.keywords[a]);if(r){ +const[e,a]=r +;if(S.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{ +const t=w.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0] +;e=x.keywordPatternRe.lastIndex,n=x.keywordPatternRe.exec(A)}var a +;t+=A.substring(e),S.addText(t)}function d(){null!=x.subLanguage?(()=>{ +if(""===A)return;let e=null;if("string"==typeof x.subLanguage){ +if(!a[x.subLanguage])return void S.addText(A) +;e=f(x.subLanguage,A,!0,M[x.subLanguage]),M[x.subLanguage]=e._top +}else e=E(A,x.subLanguage.length?x.subLanguage:null) +;x.relevance>0&&(C+=e.relevance),S.__addSublanguage(e._emitter,e.language) +})():c(),A=""}function g(e,n){ +""!==e&&(S.startScope(n),S.addText(e),S.endScope())}function u(e,n){let t=1 +;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue} +const a=w.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(A=i,c(),A=""),t++}} +function b(e,n){ +return e.scope&&"string"==typeof e.scope&&S.openNode(w.classNameAliases[e.scope]||e.scope), +e.beginScope&&(e.beginScope._wrap?(g(A,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), +A=""):e.beginScope._multi&&(u(e.beginScope,n),A="")),x=Object.create(e,{parent:{ +value:x}}),x}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n) +;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e) +;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){ +for(;e.endsParent&&e.parent;)e=e.parent;return e}} +if(e.endsWithParent)return m(e.parent,t,a)}function _(e){ +return 0===x.matcher.regexIndex?(A+=e[0],1):(D=!0,0)}function h(e){ +const n=e[0],a=t.substring(e.index),i=m(x,e,a);if(!i)return ee;const r=x +;x.endScope&&x.endScope._wrap?(d(), +g(n,x.endScope._wrap)):x.endScope&&x.endScope._multi?(d(), +u(x.endScope,e)):r.skip?A+=n:(r.returnEnd||r.excludeEnd||(A+=n), +d(),r.excludeEnd&&(A=n));do{ +x.scope&&S.closeNode(),x.skip||x.subLanguage||(C+=x.relevance),x=x.parent +}while(x!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length} +let y={};function N(a,r){const o=r&&r[0];if(A+=a,null==o)return d(),0 +;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){ +if(A+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`) +;throw n.languageName=e,n.badRule=y.rule,n}return 1} +if(y=r,"begin"===r.type)return(e=>{ +const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]] +;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t) +;return a.skip?A+=t:(a.excludeBegin&&(A+=t), +d(),a.returnBegin||a.excludeBegin||(A=t)),b(a,e),a.returnBegin?0:t.length})(r) +;if("illegal"===r.type&&!i){ +const e=Error('Illegal lexeme "'+o+'" for mode "'+(x.scope||"")+'"') +;throw e.mode=x,e}if("end"===r.type){const e=h(r);if(e!==ee)return e} +if("illegal"===r.type&&""===o)return 1 +;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches") +;return A+=o,o.length}const w=v(e) +;if(!w)throw K(o.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const O=Q(w);let k="",x=r||O;const M={},S=new p.__emitter(p);(()=>{const e=[] +;for(let n=x;n!==w;n=n.parent)n.scope&&e.unshift(n.scope) +;e.forEach((e=>S.openNode(e)))})();let A="",C=0,T=0,R=0,D=!1;try{ +if(w.__emitTokens)w.__emitTokens(t,S);else{for(x.matcher.considerAll();;){ +R++,D?D=!1:x.matcher.considerAll(),x.matcher.lastIndex=T +;const e=x.matcher.exec(t);if(!e)break;const n=N(t.substring(T,e.index),e) +;T=e.index+n}N(t.substring(T))}return S.finalize(),k=S.toHTML(),{language:e, +value:k,relevance:C,illegal:!1,_emitter:S,_top:x}}catch(n){ +if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t), +illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T, +context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:k},_emitter:S};if(s)return{ +language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:S,_top:x} +;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{ +const n={value:J(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)} +;return n._emitter.addText(e),n})(e),i=n.filter(v).filter(k).map((n=>f(n,e,!1))) +;i.unshift(t);const r=i.sort(((e,n)=>{ +if(e.relevance!==n.relevance)return n.relevance-e.relevance +;if(e.language&&n.language){if(v(e.language).supersetOf===n.language)return 1 +;if(v(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s +;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{ +let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" +;const t=p.languageDetectRe.exec(n);if(t){const n=v(t[1]) +;return n||(H(o.replace("{}",t[1])), +H("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} +return n.split(/\s+/).find((e=>_(e)||v(e)))})(e);if(_(t))return +;if(x("before:highlightElement",{el:e,language:t +}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) +;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), +console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), +console.warn("The element with unescaped HTML:"), +console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML) +;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a) +;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&i[n]||t +;e.classList.add("hljs"),e.classList.add("language-"+a) +})(e,t,r.language),e.result={language:r.language,re:r.relevance, +relevance:r.relevance},r.secondBest&&(e.secondBest={ +language:r.secondBest.language,relevance:r.secondBest.relevance +}),x("after:highlightElement",{el:e,result:r,text:a})}let N=!1;function w(){ +"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(y):N=!0 +}function v(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]} +function O(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +i[e.toLowerCase()]=n}))}function k(e){const n=v(e) +;return n&&!n.disableAutodetect}function x(e,n){const t=e;r.forEach((e=>{ +e[t]&&e[t](n)}))} +"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ +N&&w()}),!1),Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:w, +highlightElement:y, +highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"), +q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Y(p,e)}, +initHighlighting:()=>{ +w(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, +initHighlightingOnLoad:()=>{ +w(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") +},registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){ +if(K("Language definition for '{}' could not be registered.".replace("{}",e)), +!s)throw n;K(n),i=c} +i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&O(i.aliases,{ +languageName:e})},unregisterLanguage:e=>{delete a[e] +;for(const n of Object.keys(i))i[n]===e&&delete i[n]}, +listLanguages:()=>Object.keys(a),getLanguage:v,registerAliases:O, +autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ +e["before:highlightBlock"](Object.assign({block:n.el},n)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ +e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}, +removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{ +s=!1},t.safeMode=()=>{s=!0},t.versionString="11.9.0",t.regex={concat:b, +lookahead:d,either:m,optional:u,anyNumberOfTimes:g} +;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t +},te=ne({});te.newInstance=()=>ne({});var ae=te;const ie=e=>({IMPORTANT:{ +scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{ +scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/}, +FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/}, +ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", +contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ +scope:"number", +begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", +relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} +}),re=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],se=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],oe=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],le=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],ce=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),de=oe.concat(le) +;var ge="[0-9](_*[0-9])*",ue=`\\.(${ge})`,be="[0-9a-fA-F](_*[0-9a-fA-F])*",me={ +className:"number",variants:[{ +begin:`(\\b(${ge})((${ue})|\\.)?|(${ue}))[eE][+-]?(${ge})[fFdD]?\\b`},{ +begin:`\\b(${ge})((${ue})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ +begin:`(${ue})[fFdD]?\\b`},{begin:`\\b(${ge})[fFdD]\\b`},{ +begin:`\\b0[xX]((${be})\\.?|(${be})?\\.(${be}))[pP][+-]?(${ge})[fFdD]?\\b`},{ +begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${be})[lL]?\\b`},{ +begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], +relevance:0};function pe(e,n,t){return-1===t?"":e.replace(n,(a=>pe(e,n,t-1)))} +const _e="[A-Za-z$_][0-9A-Za-z$_]*",he=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fe=["true","false","null","undefined","NaN","Infinity"],Ee=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],ye=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ne=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],we=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ve=[].concat(Ne,Ee,ye) +;function Oe(e){const n=e.regex,t=_e,a={begin:/<[A-Za-z0-9\\._:-]+/, +end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ +const t=e[0].length+e.index,a=e.input[t] +;if("<"===a||","===a)return void n.ignoreMatch();let i +;">"===a&&(((e,{after:n})=>{const t="",M={ +match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(x)], +keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]} +;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{ +PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/, +contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ +label:"use_strict",className:"meta",relevance:10, +begin:/^\s*['"]use (strict|asm)['"]/ +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{ +className:"attr",begin:t+n.lookahead(":"),relevance:0},M,{ +begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", +keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{ +className:"function",begin:x,returnBegin:!0,end:"\\s*=>",contains:[{ +className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ +className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, +excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0},{match:/\s+/, +relevance:0},{variants:[{begin:"<>",end:""},{ +match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, +"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ +begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},N,{ +beginKeywords:"while if switch catch for"},{ +begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", +returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t, +className:"title.function"})]},{match:/\.\.\./,relevance:0},O,{match:"\\$"+t, +relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, +contains:[f]},w,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},E,k,{match:/\$[(.]/}]}} +const ke=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),xe=["Protocol","Type"].map(ke),Me=["init","self"].map(ke),Se=["Any","Self"],Ae=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ce=["false","nil","true"],Te=["assignment","associativity","higherThan","left","lowerThan","none","right"],Re=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],De=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Ie=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Le=m(Ie,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Be=b(Ie,Le,"*"),$e=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ze=m($e,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),Fe=b($e,ze,"*"),Ue=b(/[A-Z]/,ze,"*"),je=["attached","autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,Fe,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],Pe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] +;var Ke=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ +begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} +;Object.assign(t,{className:"variable",variants:[{ +begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] +},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, +keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"], +literal:["true","false"], +built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] +},contains:[l,e.SHEBANG(),c,o,e.HASH_COMMENT_MODE,r,{match:/(\/[a-z._-]+)+/},s,{ +match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}, +grmr_c:e=>{const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ +match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" +},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], +type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"], +literal:"true false NULL", +built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" +},b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:b.concat(["self"]),relevance:0}]),relevance:0},p={ +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})], +relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/, +keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/, +end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s] +}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, +disableAutodetect:!0,illegal:"=]/,contains:[{ +beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c, +strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{ +contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" +},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], +keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], +literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], +_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] +},b={className:"function.dispatch",relevance:0,keywords:{ +_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] +}, +begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/)) +},m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function", +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{ +begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{ +className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, +contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u, +relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}] +},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{ +match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], +className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={ +keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]), +built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], +literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{ +begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{ +begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] +},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/, +keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/, +end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ +},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{ +begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/, +contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]}) +;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE], +o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{ +illegal:/\n/})];const g={variants:[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},u={begin:"<",end:">",contains:[{beginKeywords:"in out"},t] +},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={ +begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], +keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, +contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ +begin:"\x3c!--|--\x3e"},{begin:""}]}] +}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", +end:"$",keywords:{ +keyword:"if else elif endif define undef warning error line region endregion pragma checksum" +}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, +illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" +},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", +relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", +begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ +className:"string",begin:/"/,end:/"/}]},{ +beginKeywords:"new return throw await else",relevance:0},{className:"function", +begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ +beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", +relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params", +begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, +contains:[g,a,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{ +const n=e.regex,t=ie(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{ +name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{ +keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"}, +contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ +},t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 +},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 +},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ +begin:":("+oe.join("|")+")"},{begin:":(:)?("+le.join("|")+")"}] +},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b"},{ +begin:/:/,end:/[;}{]/, +contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{ +begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" +},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0, +excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]", +relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ +},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ +$pattern:/[a-z-]+/,keyword:"and or not only",attribute:se.join(" ")},contains:[{ +begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{ +className:"selector-tag",begin:"\\b("+re.join("|")+")\\b"}]}},grmr_diff:e=>{ +const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{ +className:"meta",relevance:10, +match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) +},{className:"comment",variants:[{ +begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), +end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ +className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, +end:/$/}]}},grmr_go:e=>{const n={ +keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], +type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], +literal:["true","false","iota","nil"], +built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] +};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{const n=e.regex;return{name:"GraphQL",aliases:["gql"], +case_insensitive:!0,disableAutodetect:!1,keywords:{ +keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"], +literal:["true","false","null"]}, +contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ +scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation", +begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/, +end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{ +scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)), +relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={ +className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{ +begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/, +end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{ +begin:/\$\{(.*?)\}/}]},r={className:"literal", +begin:/\bon|off|true|false|yes|no\b/},s={className:"string", +contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ +begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] +},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0 +},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ +name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, +contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ +begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)), +className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{ +const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+pe("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={ +keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"], +literal:["false","true","null"], +type:["char","boolean","long","float","int","byte","short","double"], +built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{ +begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} +;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, +relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ +begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, +className:"string",contains:[e.BACKSLASH_ESCAPE] +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ +match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{ +1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ +begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type", +3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword", +3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"new throw return else",relevance:0},{ +begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ +2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0, +contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,me,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},me,r]}},grmr_javascript:Oe, +grmr_json:e=>{const n=["true","false","null"],t={scope:"literal", +beginKeywords:n.join(" ")};return{name:"JSON",keywords:{literal:n},contains:[{ +className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{ +match:/[{}[\],:]/,className:"punctuation",relevance:0 +},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], +illegal:"\\S"}},grmr_kotlin:e=>{const n={ +keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", +built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", +literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" +},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={ +className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", +variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'", +illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, +contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={ +className:"meta", +begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" +},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, +end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] +},l=me,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={ +variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, +contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g], +{name:"Kotlin",aliases:["kt","kts"],keywords:n, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", +begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword", +begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", +begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$", +returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, +keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, +endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, +endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0 +},e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{ +begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ +3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, +illegal:"extends implements",contains:[{ +beginKeywords:"public protected internal private constructor" +},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, +excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, +excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env", +end:"$",illegal:"\n"},l]}},grmr_less:e=>{ +const n=ie(e),t=de,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({ +className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n, +relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only", +attribute:se.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c, +relevance:0} +;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{ +begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", +excludeEnd:!0} +},n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{ +className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0 +},n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({ +begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0, +contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:", +returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ +},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b", +end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}] +},m={className:"keyword", +begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", +starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={ +className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a +}],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{ +begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0, +returnEnd:!0,illegal:"[<='$\"]",relevance:0, +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{ +begin:"\\b("+re.join("|")+")\\b",className:"selector-tag" +},n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{ +className:"selector-pseudo",begin:":("+oe.join("|")+")"},{ +className:"selector-pseudo",begin:":(:)?("+le.join("|")+")"},{begin:/\(/, +end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={ +begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]} +;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH), +{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}}, +grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"] +},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10 +})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE, +literal:"true false nil", +keyword:"and break do else elseif end for goto if in local not or repeat return then until while", +built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" +},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)", +contains:[e.inherit(e.TITLE_MODE,{ +begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", +begin:"\\(",endsWithParent:!0,contains:i}].concat(i) +},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", +begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={ +className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{ +const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={ +variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{ +begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, +relevance:2},{ +begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), +relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ +begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ +},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, +returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", +excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", +end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[], +variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] +},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ +begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[] +}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r) +;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o) +})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ +className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{ +begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", +contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", +end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o, +end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ +begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ +begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", +contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ +begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ +className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ +className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}},grmr_objectivec:e=>{ +const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n, +keyword:["@interface","@class","@protocol","@implementation"]};return{ +name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], +keywords:{"variable.language":["this","super"],$pattern:n, +keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], +literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], +built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], +type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] +},illegal:"/,end:/$/,illegal:"\\n" +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", +begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t, +contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, +relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={ +$pattern:/[\w.]+/, +keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" +},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/, +end:/\}/},s={variants:[{begin:/\$\d/},{ +begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") +},{begin:/[$%@][^\s\w{]/,relevance:0}] +},o=[e.BACKSLASH_ESCAPE,i,s],l=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],c=(e,a,i="\\1")=>{ +const r="\\1"===i?i:n.concat(i,a) +;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t) +},d=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),g=[s,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ +endsWithParent:!0}),r,{className:"string",contains:o,variants:[{ +begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", +end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ +begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", +relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", +contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ +begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number", +begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", +relevance:0},{ +begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", +keywords:"split return print reverse grep",relevance:0, +contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ +begin:c("s|tr|y",n.either(...l,{capture:!0}))},{begin:c("s|tr|y","\\(","\\)")},{ +begin:c("s|tr|y","\\[","\\]")},{begin:c("s|tr|y","\\{","\\}")}],relevance:2},{ +className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ +begin:d("(?:m|qr)?",/\//,/\//)},{begin:d("m|qr",n.either(...l,{capture:!0 +}),/\1/)},{begin:d("m|qr",/\(/,/\)/)},{begin:d("m|qr",/\[/,/\]/)},{ +begin:d("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub", +end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{ +begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$", +subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}] +}];return i.contains=g,r.contains=g,{name:"Perl",aliases:["pl","pm"],keywords:a, +contains:g}},grmr_php:e=>{ +const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r={ +scope:"variable",match:"\\$+"+a},s={scope:"subst",variants:[{begin:/\$\w+/},{ +begin:/\{\$/,end:/\}/}]},o=e.inherit(e.APOS_STRING_MODE,{illegal:null +}),l="[ \t\n]",c={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ +illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(s)}),o,{ +begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/, +contains:e.QUOTE_STRING_MODE.contains.concat(s),"on:begin":(e,n)=>{ +n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({ +begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},d={scope:"number",variants:[{ +begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ +begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ +begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" +}],relevance:0 +},g=["false","null","true"],u=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],b=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],m={ +keyword:u,literal:(e=>{const n=[];return e.forEach((e=>{ +n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase()) +})),n})(g),built_in:b},p=e=>e.map((e=>e.replace(/\|\d+$/,""))),_={variants:[{ +match:[/new/,n.concat(l,"+"),n.concat("(?!",p(b).join("\\b|"),"\\b)"),i],scope:{ +1:"keyword",4:"title.class"}}]},h=n.concat(a,"\\b(?!\\()"),f={variants:[{ +match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{2:"variable.constant" +}},{match:[/::/,/class/],scope:{2:"variable.language"}},{ +match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{1:"title.class", +3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))], +scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class", +3:"variable.language"}}]},E={scope:"attr", +match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},y={relevance:0, +begin:/\(/,end:/\)/,keywords:m,contains:[E,r,f,e.C_BLOCK_COMMENT_MODE,c,d,_] +},N={relevance:0, +match:[/\b/,n.concat("(?!fn\\b|function\\b|",p(u).join("\\b|"),"|",p(b).join("\\b|"),"\\b)"),a,n.concat(l,"*"),n.lookahead(/(?=\()/)], +scope:{3:"title.function.invoke"},contains:[y]};y.contains.push(N) +;const w=[E,f,e.C_BLOCK_COMMENT_MODE,c,d,_];return{case_insensitive:!1, +keywords:m,contains:[{begin:n.concat(/#\[\s*/,i),beginScope:"meta",end:/]/, +endScope:"meta",keywords:{literal:g,keyword:["new","array"]},contains:[{ +begin:/\[/,end:/]/,keywords:{literal:g,keyword:["new","array"]}, +contains:["self",...w]},...w,{scope:"meta",match:i}] +},e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{ +scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, +keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, +contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ +begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ +begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},r,N,f,{ +match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},_,{ +scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, +excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" +},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", +begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:m, +contains:["self",r,f,e.C_BLOCK_COMMENT_MODE,c,d]}]},{scope:"class",variants:[{ +beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", +illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ +beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ +beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, +contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ +beginKeywords:"use",relevance:0,end:";",contains:[{ +match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},c,d]} +},grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{ +begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*", +end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0 +},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null, +skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null, +contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text", +aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{ +const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={ +$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, +built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], +literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], +type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] +},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/, +end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={ +className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, +end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/, +relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ +begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, +end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, +contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={ +className:"number",relevance:0,variants:[{ +begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ +begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ +begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` +},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})` +}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i, +contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ +className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, +end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i, +contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{ +name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i, +illegal:/(<\/|\?)|=>/,contains:[r,u,{begin:/\bself\b/},{beginKeywords:"if", +relevance:0},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{ +1:"keyword",3:"title.function"},contains:[m]},{variants:[{ +match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], +scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ +className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}, +grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", +starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ +begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{ +const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) +;return{name:"R",keywords:{$pattern:t, +keyword:"function if in break next repeat else for while", +literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", +built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" +},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, +starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), +endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ +scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 +}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] +}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], +variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', +relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ +1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"}, +match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{ +2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"}, +match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{ +match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`", +contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{ +const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={ +"variable.constant":["__FILE__","__LINE__","__ENCODING__"], +"variable.language":["self","super"], +keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], +built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], +literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={ +begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s] +}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 +}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/, +end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c], +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ +begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ +begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, +end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ +begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ +begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ +begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ +begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ +begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), +contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, +contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number", +relevance:0,variants:[{ +begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ +begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" +},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ +begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ +begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{ +className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, +keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ +match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", +4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{ +2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{ +1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{ +match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{ +begin:e.IDENT_RE+"::"},{className:"symbol", +begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", +begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable", +begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ +className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0, +relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", +keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c], +illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ +begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", +end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l) +;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m} +},{className:"meta.prompt", +begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", +starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby", +aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/, +contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}, +grmr_rust:e=>{const n=e.regex,t={className:"title.function.invoke",relevance:0, +begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,e.IDENT_RE,n.lookahead(/\s*\(/)) +},a="([ui](8|16|32|64|128|size)|f(32|64))?",i=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],r=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] +;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:r, +keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"], +literal:["true","false","Some","None","Ok","Err"],built_in:i},illegal:""},t]}}, +grmr_scss:e=>{const n=ie(e),t=le,a=oe,i="@[a-z-]+",r={className:"variable", +begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", +case_insensitive:!0,illegal:"[=/|']", +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ +className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ +className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 +},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", +begin:"\\b("+re.join("|")+")\\b",relevance:0},{className:"selector-pseudo", +begin:":("+a.join("|")+")"},{className:"selector-pseudo", +begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/, +contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", +begin:"\\b("+ce.join("|")+")\\b"},{ +begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" +},{begin:/:/,end:/[;}{]/,relevance:0, +contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH] +},{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{ +begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, +keyword:"and or not only",attribute:se.join(" ")},contains:[{begin:i, +className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" +},r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] +},n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session", +aliases:["console","shellsession"],contains:[{className:"meta.prompt", +begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, +subLanguage:"bash"}}]}),grmr_sql:e=>{ +const n=e.regex,t=e.COMMENT("--","$"),a=["true","false","unknown"],i=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],r=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=r,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!r.includes(e))),c={ +begin:n.concat(/\b/,n.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}} +;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ +$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t +;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e)) +})(l,{when:e=>e.length<3}),literal:a,type:i, +built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] +},contains:[{begin:n.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/, +keyword:l.concat(s),literal:a,type:i}},{className:"type", +begin:n.either("double precision","large object","with timezone","without timezone") +},c,{className:"variable",begin:/@[a-z0-9][a-z0-9_]*/},{className:"string", +variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/, +contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{ +className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/, +relevance:0}]}},grmr_swift:e=>{const n={match:/\s+/,relevance:0 +},t=e.COMMENT("/\\*","\\*/",{contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={ +match:[/\./,m(...xe,...Me)],className:{2:"keyword"}},r={match:b(/\./,m(...Ae)), +relevance:0},s=Ae.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{ +className:"keyword", +match:m(...Ae.filter((e=>"string"!=typeof e)).concat(Se).map(ke),...Me)}]},l={ +$pattern:m(/\b\w+/,/#\w+/),keyword:s.concat(Re),literal:Ce},c=[i,r,o],g=[{ +match:b(/\./,m(...De)),relevance:0},{className:"built_in", +match:b(/\b/,m(...De),/(?=\()/)}],u={match:/->/,relevance:0},p=[u,{ +className:"operator",relevance:0,variants:[{match:Be},{match:`\\.(\\.|${Le})+`}] +}],_="([0-9]_*)+",h="([0-9a-fA-F]_*)+",f={className:"number",relevance:0, +variants:[{match:`\\b(${_})(\\.(${_}))?([eE][+-]?(${_}))?\\b`},{ +match:`\\b0x(${h})(\\.(${h}))?([pP][+-]?(${_}))?\\b`},{match:/\b0o([0-7]_*)+\b/ +},{match:/\b0b([01]_*)+\b/}]},E=(e="")=>({className:"subst",variants:[{ +match:b(/\\/,e,/[0\\tnr"']/)},{match:b(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}] +}),y=(e="")=>({className:"subst",match:b(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/) +}),N=(e="")=>({className:"subst",label:"interpol",begin:b(/\\/,e,/\(/),end:/\)/ +}),w=(e="")=>({begin:b(e,/"""/),end:b(/"""/,e),contains:[E(e),y(e),N(e)] +}),v=(e="")=>({begin:b(e,/"/),end:b(/"/,e),contains:[E(e),N(e)]}),O={ +className:"string", +variants:[w(),w("#"),w("##"),w("###"),v(),v("#"),v("##"),v("###")] +},k=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0, +contains:[e.BACKSLASH_ESCAPE]}],x={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//, +contains:k},M=e=>{const n=b(e,/\//),t=b(/\//,e);return{begin:n,end:t, +contains:[...k,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},S={ +scope:"regexp",variants:[M("###"),M("##"),M("#"),x]},A={match:b(/`/,Fe,/`/) +},C=[A,{className:"variable",match:/\$\d+/},{className:"variable", +match:`\\$${ze}+`}],T=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{ +contains:[{begin:/\(/,end:/\)/,keywords:Pe,contains:[...p,f,O]}]}},{ +scope:"keyword",match:b(/@/,m(...je))},{scope:"meta",match:b(/@/,Fe)}],R={ +match:d(/\b[A-Z]/),relevance:0,contains:[{className:"type", +match:b(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,ze,"+") +},{className:"type",match:Ue,relevance:0},{match:/[?!]+/,relevance:0},{ +match:/\.\.\./,relevance:0},{match:b(/\s+&\s+/,d(Ue)),relevance:0}]},D={ +begin://,keywords:l,contains:[...a,...c,...T,u,R]};R.contains.push(D) +;const I={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{ +match:b(Fe,/\s*:/),keywords:"_|0",relevance:0 +},...a,S,...c,...g,...p,f,O,...C,...T,R]},L={begin://, +keywords:"repeat each",contains:[...a,R]},B={begin:/\(/,end:/\)/,keywords:l, +contains:[{begin:m(d(b(Fe,/\s*:/)),d(b(Fe,/\s+/,Fe,/\s*:/))),end:/:/, +relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params", +match:Fe}]},...a,...c,...p,f,O,...T,R,I],endsParent:!0,illegal:/["']/},$={ +match:[/(func|macro)/,/\s+/,m(A.match,Fe,Be)],className:{1:"keyword", +3:"title.function"},contains:[L,B,n],illegal:[/\[/,/%/]},z={ +match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, +contains:[L,B,n],illegal:/\[|%/},F={match:[/operator/,/\s+/,Be],className:{ +1:"keyword",3:"title"}},U={begin:[/precedencegroup/,/\s+/,Ue],className:{ +1:"keyword",3:"title"},contains:[R],keywords:[...Te,...Ce],end:/}/} +;for(const e of O.variants){const n=e.contains.find((e=>"interpol"===e.label)) +;n.keywords=l;const t=[...c,...g,...p,f,O,...C];n.contains=[...t,{begin:/\(/, +end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:l, +contains:[...a,$,z,{beginKeywords:"struct protocol class extension enum actor", +end:"\\{",excludeEnd:!0,keywords:l,contains:[e.inherit(e.TITLE_MODE,{ +className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...c] +},F,U,{beginKeywords:"import",end:/$/,contains:[...a],relevance:0 +},S,...c,...g,...p,f,O,...C,...T,R,I]}},grmr_typescript:e=>{ +const n=Oe(e),t=_e,a=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],i={ +beginKeywords:"namespace",end:/\{/,excludeEnd:!0, +contains:[n.exports.CLASS_REFERENCE]},r={beginKeywords:"interface",end:/\{/, +excludeEnd:!0,keywords:{keyword:"interface extends",built_in:a}, +contains:[n.exports.CLASS_REFERENCE]},s={$pattern:_e, +keyword:he.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]), +literal:fe,built_in:ve.concat(a),"variable.language":we},o={className:"meta", +begin:"@"+t},l=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n)) +;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)} +;return Object.assign(n.keywords,s), +n.exports.PARAMS_CONTAINS.push(o),n.contains=n.contains.concat([o,i,r]), +l(n,"shebang",e.SHEBANG()),l(n,"use_strict",{className:"meta",relevance:10, +begin:/^\s*['"]use strict['"]/ +}),n.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(n,{ +name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),n},grmr_vbnet:e=>{ +const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={ +className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ +begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ +begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}] +},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] +}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) +;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, +classNameAliases:{label:"symbol"},keywords:{ +keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", +built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", +type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", +literal:"true false nothing"}, +illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ +className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, +end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0, +variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ +},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ +begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ +className:"label",begin:/^\w+:/},o,l,{className:"meta", +begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, +end:/$/,keywords:{ +keyword:"const disable else elseif enable end externalsource if region then"}, +contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/) +;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/, +keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"] +},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/], +className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{ +match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{ +begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword", +3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/, +className:"type"},{className:"keyword", +match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ +},{className:"number",relevance:0, +match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ +}]}},grmr_xml:e=>{ +const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={ +className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/, +contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] +},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{ +className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={ +endsWithParent:!0,illegal:/`]+/}]}]}]};return{ +name:"HTML, XML", +aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], +case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{ +className:"meta",begin://,contains:[i,r,o,s]}]}] +},e.COMMENT(//,{relevance:10}),{begin://, +relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, +relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{ +end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{ +end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ +className:"tag",begin:/<>|<\/>/},{className:"tag", +begin:n.concat(//,/>/,/\s/)))), +end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{ +className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{ +className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]} +},grmr_yaml:e=>{ +const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={ +className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ +},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", +variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{ +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),r={ +end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},s={begin:/\{/, +end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={begin:"\\[",end:"\\]", +contains:[r],illegal:"\\n",relevance:0},l=[{className:"attr",variants:[{ +begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ +begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", +relevance:10},{className:"string", +begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ +begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, +relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type", +begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t +},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", +begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", +relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ +className:"number", +begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" +},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,a],c=[...l] +;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0, +aliases:["yml"],contains:l}}});const He=ae;for(const e of Object.keys(Ke)){ +const n=e.replace("grmr_","").replace("_","-");He.registerLanguage(n,Ke[e])} +return He}() +;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); \ No newline at end of file diff --git a/public/assets/js/marked.min.js b/public/assets/js/marked.min.js new file mode 100644 index 0000000..4bdacb5 --- /dev/null +++ b/public/assets/js/marked.min.js @@ -0,0 +1,74 @@ +/** + * marked v16.2.1 - a markdown parser + * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +/** + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ + */ +(function(g,f){if(typeof exports=="object"&&typeof module<"u"){module.exports=f()}else if("function"==typeof define && define.amd){define("marked",f)}else {g["marked"]=f()}}(typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : this,function(){var exports={};var __exports=exports;var module={exports}; +"use strict";var H=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var Oe=Object.prototype.hasOwnProperty;var Te=(a,e)=>{for(var t in e)H(a,t,{get:e[t],enumerable:!0})},we=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Re(e))!Oe.call(a,r)&&r!==t&&H(a,r,{get:()=>e[r],enumerable:!(n=be(e,r))||n.enumerable});return a};var ye=a=>we(H({},"__esModule",{value:!0}),a);var dt={};Te(dt,{Hooks:()=>$,Lexer:()=>x,Marked:()=>A,Parser:()=>b,Renderer:()=>P,TextRenderer:()=>S,Tokenizer:()=>y,defaults:()=>O,getDefaults:()=>_,lexer:()=>ht,marked:()=>d,options:()=>it,parse:()=>pt,parseInline:()=>ut,parser:()=>ct,setOptions:()=>ot,use:()=>at,walkTokens:()=>lt});module.exports=ye(dt);function _(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=_();function N(a){O=a}var C={exec:()=>null};function h(a,e=""){let t=typeof a=="string"?a:a.source,n={replace:(r,i)=>{let s=typeof i=="string"?i:i.source;return s=s.replace(m.caret,"$1"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^
    /i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:a=>new RegExp(`^( {0,3}${a})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}#`),htmlBeginRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}<(?:[a-z].*>|!--)`,"i")},Pe=/^(?:[ \t]*(?:\n|$))+/,Se=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,$e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,I=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,_e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,F=/(?:[*+-]|\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,oe=h(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Le=h(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Q=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Me=/^[^\n]+/,U=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,ze=h(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",U).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Ae=h(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,F).getRegex(),v="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",K=/|$))/,Ee=h("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",K).replace("tag",v).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ae=h(Q).replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Ce=h(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ae).getRegex(),W={blockquote:Ce,code:Se,def:ze,fences:$e,heading:_e,hr:I,html:Ee,lheading:oe,list:Ae,newline:Pe,paragraph:ae,table:C,text:Me},se=h("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Ie={...W,lheading:Le,table:se,paragraph:h(Q).replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",se).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex()},Be={...W,html:h(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",K).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:C,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:h(Q).replace("hr",I).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",oe).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},qe=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ve=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,le=/^( {2,}|\\)\n(?!\s*$)/,De=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,ce=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,je=h(ce,"u").replace(/punct/g,D).getRegex(),Fe=h(ce,"u").replace(/punct/g,pe).getRegex(),he="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Qe=h(he,"gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,X).replace(/punct/g,D).getRegex(),Ue=h(he,"gu").replace(/notPunctSpace/g,He).replace(/punctSpace/g,Ge).replace(/punct/g,pe).getRegex(),Ke=h("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,X).replace(/punct/g,D).getRegex(),We=h(/\\(punct)/,"gu").replace(/punct/g,D).getRegex(),Xe=h(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Je=h(K).replace("(?:-->|$)","-->").getRegex(),Ve=h("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Je).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),q=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,Ye=h(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",q).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),de=h(/^!?\[(label)\]\[(ref)\]/).replace("label",q).replace("ref",U).getRegex(),ke=h(/^!?\[(ref)\](?:\[\])?/).replace("ref",U).getRegex(),et=h("reflink|nolink(?!\\()","g").replace("reflink",de).replace("nolink",ke).getRegex(),J={_backpedal:C,anyPunctuation:We,autolink:Xe,blockSkip:Ne,br:le,code:ve,del:C,emStrongLDelim:je,emStrongRDelimAst:Qe,emStrongRDelimUnd:Ke,escape:qe,link:Ye,nolink:ke,punctuation:Ze,reflink:de,reflinkSearch:et,tag:Ve,text:De,url:C},tt={...J,link:h(/^!?\[(label)\]\((.*?)\)/).replace("label",q).getRegex(),reflink:h(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",q).getRegex()},j={...J,emStrongRDelimAst:Ue,emStrongLDelim:Fe,url:h(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},ge=a=>rt[a];function w(a,e){if(e){if(m.escapeTest.test(a))return a.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(a))return a.replace(m.escapeReplaceNoEncode,ge);return a}function V(a){try{a=encodeURI(a).replace(m.percentDecode,"%")}catch{return null}return a}function Y(a,e){let t=a.replace(m.findPipe,(i,s,o)=>{let l=!1,u=s;for(;--u>=0&&o[u]==="\\";)l=!l;return l?"|":" |"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length0?-2:-1}function me(a,e,t,n,r){let i=e.href,s=e.title||null,o=a[1].replace(r.other.outputLinkReplace,"$1");n.state.inLink=!0;let l={type:a[0].charAt(0)==="!"?"image":"link",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,l}function st(a,e,t){let n=a.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(` +`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(` +`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:z(n,` +`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=st(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:z(t[0],` +`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],` +`).split(` +`),r="",i="",s=[];for(;n.length>0;){let o=!1,l=[],u;for(u=0;u1,i={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:"[*+-]");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p="",c="";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,Z=>" ".repeat(3*Z.length)),k=e.split(` +`,1)[0],R=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):R?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),R&&this.rules.other.blankLine.test(k)&&(p+=k+` +`,e=e.substring(k.length+1),u=!0),!u){let Z=this.rules.other.nextBulletRegex(g),te=this.rules.other.hrRegex(g),ne=this.rules.other.fencesBeginRegex(g),re=this.rules.other.headingBeginRegex(g),xe=this.rules.other.htmlBeginRegex(g);for(;e;){let G=e.split(` +`,1)[0],E;if(k=G,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting," "),E=k):E=k.replace(this.rules.other.tabCharGlobal," "),ne.test(k)||re.test(k)||xe.test(k)||Z.test(k)||te.test(k))break;if(E.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=` +`+E.slice(g);else{if(R||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||ne.test(f)||re.test(f)||te.test(f))break;c+=` +`+k}!R&&!k.trim()&&(R=!0),p+=G+` +`,e=e.substring(G.length+1),f=E.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,ee;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(ee=T[0]!=="[ ] ",c=c.replace(this.rules.other.listReplaceTask,""))),i.items.push({type:"list_item",raw:p,task:!!T,checked:ee,loose:!1,text:c,tokens:[]}),i.raw+=p}let l=i.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;uf.type==="space"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u({text:l,tokens:this.lexer.inline(l),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=fe(t[2],"()");if(s===-2)return;if(s>-1){let l=(t[0].indexOf("!")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,l).trim(),t[3]=""}}let r=t[2],i="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,l,u=s,p=0,c=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(l=[...o].length,r[3]||r[4]){u+=l;continue}else if((r[5]||r[6])&&s%3&&!((s+l)%3)){p+=l;continue}if(u-=l,u>0)continue;l=Math.min(l,l+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+l);if(Math.min(s,l)%2){let g=k.slice(1,-1);return{type:"em",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let R=k.slice(2,-2);return{type:"strong",raw:k,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]==="@"?(n=t[1],r="mailto:"+n):(n=t[1],r=n),{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]==="@")n=t[0],r="mailto:"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(i!==t[0]);n=t[0],t[1]==="www."?r="http://"+t[0]:r=t[0]}return{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}};var x=class a{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:B.normal,inline:M.normal};this.options.pedantic?(t.block=B.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=B.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:B,inline:M}}static lex(e,t){return new a(t).lex(e)}static lexInline(e,t){return new a(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let t=0;t(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=` +`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),l;this.options.extensions.startBlock.forEach(u=>{l=u.call({lexer:this},o),typeof l=="number"&&l>=0&&(s=Math.min(s,l))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+r.raw,s.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,s="";for(;e;){i||(s=""),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type==="text"&&u?.type==="text"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let l=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c=="number"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(l=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(l)){e=e.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type==="text"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return""}code({text:e,lang:t,escaped:n}){let r=(t||"").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,"")+` +`;return r?'
    '+(n?i:w(i,!0))+`
    +`:"
    "+(n?i:w(i,!0))+`
    +`}blockquote({tokens:e}){return`
    +${this.parser.parse(e)}
    +`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} +`}hr(e){return`
    +`}list(e){let t=e.ordered,n=e.start,r="";for(let o=0;o +`+r+" +`}listitem(e){let t="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let t="",n="";for(let i=0;i${r}`),` + +`+t+` +`+r+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${w(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=V(e);if(i===null)return r;e=i;let s='
    ",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=V(e);if(i===null)return w(n);e=i;let s=`${n}{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let l=i.renderer.apply(this,o);return l===!1&&(l=s.apply(this,o)),l}:t.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let o=s,l=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=l.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||""}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let o=s,l=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=l.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new $;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let o=s,l=n.hooks[o],u=i[o];$.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async)return Promise.resolve(l.call(i,p)).then(f=>u.call(i,f));let c=l.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=l.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let l=[];return l.push(s.call(this,o)),i&&(l=l.concat(i.call(this,o))),l}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let l=s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline,u=s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>l(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=l(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let r="

    An error occurred:

    "+w(n.message+"",!0)+"
    ";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var L=new A;function d(a,e){return L.parse(a,e)}d.options=d.setOptions=function(a){return L.setOptions(a),d.defaults=L.defaults,N(d.defaults),d};d.getDefaults=_;d.defaults=O;d.use=function(...a){return L.use(...a),d.defaults=L.defaults,N(d.defaults),d};d.walkTokens=function(a,e){return L.walkTokens(a,e)};d.parseInline=L.parseInline;d.Parser=b;d.parser=b.parse;d.Renderer=P;d.TextRenderer=S;d.Lexer=x;d.lexer=x.lex;d.Tokenizer=y;d.Hooks=$;d.parse=d;var it=d.options,ot=d.setOptions,at=d.use,lt=d.walkTokens,ut=d.parseInline,pt=d,ct=b.parse,ht=x.lex; + +if(__exports != exports)module.exports = exports;return module.exports})); +//# sourceMappingURL=marked.umd.js.map diff --git a/public/assets/music/cover/109951169585655912.jpg b/public/assets/music/cover/109951169585655912.jpg new file mode 100644 index 0000000..3a21394 Binary files /dev/null and b/public/assets/music/cover/109951169585655912.jpg differ diff --git a/public/assets/music/使一颗心免于哀伤-哼唱.wav b/public/assets/music/使一颗心免于哀伤-哼唱.wav new file mode 100644 index 0000000..b90044e Binary files /dev/null and b/public/assets/music/使一颗心免于哀伤-哼唱.wav differ diff --git a/public/favicon/favicon-dark-128.png b/public/favicon/favicon-dark-128.png new file mode 100644 index 0000000..7422ce8 Binary files /dev/null and b/public/favicon/favicon-dark-128.png differ diff --git a/public/favicon/favicon-dark-180.png b/public/favicon/favicon-dark-180.png new file mode 100644 index 0000000..de0f89b Binary files /dev/null and b/public/favicon/favicon-dark-180.png differ diff --git a/public/favicon/favicon-dark-192.png b/public/favicon/favicon-dark-192.png new file mode 100644 index 0000000..e8d4a2d Binary files /dev/null and b/public/favicon/favicon-dark-192.png differ diff --git a/public/favicon/favicon-dark-32.png b/public/favicon/favicon-dark-32.png new file mode 100644 index 0000000..fce9b80 Binary files /dev/null and b/public/favicon/favicon-dark-32.png differ diff --git a/public/favicon/favicon-light-128.png b/public/favicon/favicon-light-128.png new file mode 100644 index 0000000..83dc7c7 Binary files /dev/null and b/public/favicon/favicon-light-128.png differ diff --git a/public/favicon/favicon-light-180.png b/public/favicon/favicon-light-180.png new file mode 100644 index 0000000..bbb666b Binary files /dev/null and b/public/favicon/favicon-light-180.png differ diff --git a/public/favicon/favicon-light-192.png b/public/favicon/favicon-light-192.png new file mode 100644 index 0000000..2853594 Binary files /dev/null and b/public/favicon/favicon-light-192.png differ diff --git a/public/favicon/favicon-light-32.png b/public/favicon/favicon-light-32.png new file mode 100644 index 0000000..327ee0b Binary files /dev/null and b/public/favicon/favicon-light-32.png differ diff --git a/public/pio/README.md b/public/pio/README.md new file mode 100644 index 0000000..be357d5 --- /dev/null +++ b/public/pio/README.md @@ -0,0 +1,135 @@ +# Spine 看板娘功能使用指南 + +## 功能说明 + +此功能为博客添加了一个可配置的 Spine 动画看板娘,可以显示在页面的角落位置。 + +## 配置选项 + +在 `src/config.ts` 文件中的 `spineModelConfig` 对象包含以下配置选项: + +```typescript +export const spineModelConfig: SpineModelConfig = { + enable: false, // 是否启用看板娘(默认关闭) + model: { + path: "/pio/models/shizuku/shizuku.model.json", // 模型文件路径 + scale: 1.0, // 模型缩放比例 + x: 0, // X轴偏移 + y: 0, // Y轴偏移 + }, + position: { + corner: "bottom-right", // 显示位置: "bottom-left" | "bottom-right" | "top-left" | "top-right" + offsetX: 20, // 距离边缘的X轴偏移(像素) + offsetY: 20, // 距离边缘的Y轴偏移(像素) + }, + size: { + width: 280, // 容器宽度(像素) + height: 400, // 容器高度(像素) + }, + interactive: { + enabled: true, // 是否启用交互功能 + clickAnimation: "tap_body", // 点击时播放的动画名称 + idleAnimations: ["idle"], // 待机动画列表 + idleInterval: 10000, // 待机动画切换间隔(毫秒) + }, + responsive: { + hideOnMobile: true, // 是否在移动端隐藏 + mobileBreakpoint: 768, // 移动端断点(像素) + }, + zIndex: 1000, // CSS 层级 + opacity: 1.0, // 透明度(0.0-1.0) +}; +``` + +## 文件结构要求 + +要使用此功能,您需要准备以下文件: + +### 1. Spine 运行时库 +将 Spine 运行时 JavaScript 文件放置在: +- `public/pio/static/spine-player.js` + +您可以从以下来源获取: +- [Spine官方运行时](http://esotericsoftware.com/spine-runtimes) +- [spine-ts运行时](https://github.com/EsotericSoftware/spine-runtimes/tree/4.1/spine-ts) + +### 2. Spine 模型文件 +将您的 Spine 模型文件放置在: +- `public/pio/models/[模型名称]/` + +每个模型需要包含以下文件: +- `[模型名称].json` - Spine 骨骼数据文件 +- `[模型名称].atlas` - 纹理图集文件 +- `[模型名称].png` - 纹理图像文件 + +例如,对于默认的 shizuku 模型: +- `public/pio/models/shizuku/shizuku.json` +- `public/pio/models/shizuku/shizuku.atlas` +- `public/pio/models/shizuku/shizuku.png` + +## 启用步骤 + +1. **准备 Spine 文件**:将必要的文件按照上述结构放置在 `public/pio/` 目录中 + +2. **修改配置**:在 `src/config.ts` 中将 `spineModelConfig.enable` 设置为 `true` + +3. **自定义设置**:根据您的需求调整其他配置选项 + +4. **测试功能**:重新构建并启动项目,查看看板娘是否正常显示 + +## 动画配置 + +### 点击动画 +设置 `clickAnimation` 为您模型中存在的动画名称,用户点击看板娘时会播放此动画。 + +### 待机动画 +在 `idleAnimations` 数组中添加多个动画名称,系统会按照设定的间隔随机播放这些动画。 + +### 常见动画名称参考 +- `idle` - 待机动画 +- `tap_body` - 点击身体 +- `tap_head` - 点击头部 +- `shake` - 摇摆动画 +- `flick_head` - 轻拍头部 + +(具体动画名称取决于您的 Spine 模型文件) + +## 响应式设计 + +- 默认在移动端隐藏看板娘以提高性能 +- 可以通过 `hideOnMobile` 和 `mobileBreakpoint` 配置响应式行为 +- 支持窗口大小变化时的动态显示/隐藏 + +## 故障排除 + +### 看板娘不显示 +1. 检查 `enable` 是否设置为 `true` +2. 确认模型文件路径是否正确 +3. 检查浏览器控制台是否有错误信息 +4. 验证 Spine 运行时文件是否正确加载 + +### 动画不播放 +1. 检查动画名称是否与模型文件中的动画匹配 +2. 确认模型文件是否包含所需的动画数据 +3. 查看浏览器控制台的错误信息 + +### 位置或大小问题 +1. 调整 `position.offsetX` 和 `position.offsetY` 来微调位置 +2. 修改 `size.width` 和 `size.height` 来调整容器大小 +3. 使用 `model.scale` 来缩放模型本身 + +## 注意事项 + +- Spine 模型文件可能较大,建议优化文件大小以提高加载速度 +- 在移动端默认隐藏以节省带宽和提高性能 +- 确保您有使用 Spine 模型的适当许可证 +- 某些浏览器可能需要用户交互后才能播放动画 + +## 获取 Spine 模型 + +您可以从以下渠道获取或制作 Spine 模型: +- [Spine官方网站](http://esotericsoftware.com/) +- 各种开源 Live2D/Spine 模型资源 +- 自制或委托制作 + +请确保您有合法使用权限的模型文件。 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/illyasviel.moc b/public/pio/models/live2d/illyasviel/illyasviel.moc new file mode 100644 index 0000000..9b182ed Binary files /dev/null and b/public/pio/models/live2d/illyasviel/illyasviel.moc differ diff --git a/public/pio/models/live2d/illyasviel/illyasviel.model.json b/public/pio/models/live2d/illyasviel/illyasviel.model.json new file mode 100644 index 0000000..bb4f715 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/illyasviel.model.json @@ -0,0 +1,40 @@ +{ + "version": "1.0.0", + "model": "illyasviel.moc", + "textures": [ + "textures/texture_00.png" + ], + "layout": { + "center_x":0.0, + "center_y": -0.5, + "width": 3.5 + }, + "hit_areas_custom": { + "head_x": [-0.15, 0.6], + "head_y": [0.15, 0.2], + "body_x": [-0.3, -0.25], + "body_y": [0.2, -0.9] + }, + "motions": { + "idle": [ + {"file":"motions/Ylia_01.mtn"}, + {"file":"motions/Ylia_02.mtn"}, + {"file":"motions/Ylia_07.mtn"}, + {"file":"motions/Ylia_08.mtn"} + ], + "sleepy": [ + {"file":"motions/Ylia_03.mtn"} + ], + "flick_head": [ + {"file":"motions/Ylia_15.mtn"} + ], + "tap_body": [ + {"file":"motions/Ylia_04.mtn"}, + {"file":"motions/Ylia_05.mtn"}, + {"file":"motions/Ylia_06.mtn"}, + {"file":"motions/Ylia_11.mtn"}, + {"file":"motions/Ylia_12.mtn"}, + {"file":"motions/Ylia_14.mtn"} + ] + } +} \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_01.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_01.mtn new file mode 100644 index 0000000..721c31d --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_01.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.12,-0.44,-0.94,-1.56,-2.25,-3,-3.75,-4.44,-5.06,-5.56,-5.88,-6,-5.17,-3.17,-0.5,2.17,4.17,5,4.99,4.96,4.92,4.86,4.79,4.7,4.6,4.49,4.36,4.23,4.08,3.93,3.76,3.59,3.4,3.21,3,2.77,2.56,2.35,2.16,1.97,1.79,1.62,1.46,1.31,1.17,1.03,0.91,0.79,0.68,0.59,0.5,0.41,0.34,0.27,0.21,0.16,0.12,0.08,0.05,0.03,0.013,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_ANGLE_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.03,-3.74,-7.65,-12.12,-16.75,-21.08,-24.77,-27.6,-29.37,-30,-25.49,-14.55,0,14.55,25.49,30,29.48,28.1,25.99,23.37,20.34,17.03,13.5,9.98,6.39,3,-0.23,-3.19,-5.81,-7.95,-9.59,-10.63,-11,-10.28,-8.72,-6.78,-4.76,-2.92,-1.39,-0.38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_ANGLE_Z=0,0.012,0.05,0.1,0.18,0.28,0.4,0.54,0.7,0.87,1.07,1.28,1.51,1.75,2.01,2.29,2.57,2.88,3.19,3.52,3.85,4.2,4.56,4.92,5.3,5.69,6.08,6.48,6.89,7.3,7.72,8.14,8.56,9,9.43,9.86,10.29,10.73,11.16,11.6,12.03,12.46,12.89,13.32,13.75,14.17,14.58,14.99,15.39,15.79,16.18,16.56,16.94,17.31,17.66,18.01,18.34,18.67,18.98,19.28,19.57,19.85,20.11,20.35,20.58,20.8,21,21.18,21.35,21.5,21.63,21.74,21.83,21.9,21.96,21.99,22,21.86,21.46,20.82,20.01,19.01,17.9,16.67,15.37,14,12.61,11.18,9.76,8.38,7.02,5.75,4.56,3.46,2.48,1.64,0.95,0.43,0.11,0 +PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0,0.09,0.31,0.6,0.89,1.11,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,0.99,0.64,0.32,0.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09,0.31,0.6,0.89,1.11,1.2,1.197,1.191,1.18,1.168,1.153,1.137,1.12,1.102,1.085,1.068,1.053,1.038,1.025,1.015,1.007,1.002,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.18,0.48,0.68,0.75,0.75,0.75,0.75,0.69,0.56,0.38,0.19,0.06,0,0,0,0,0,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.987,0.95,0.9,0.84,0.76,0.68,0.6,0.51,0.42,0.34,0.26,0.19,0.13,0.07,0.03,0.01,0 +PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0,0.09,0.31,0.6,0.89,1.11,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,0.99,0.64,0.32,0.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09,0.31,0.6,0.89,1.11,1.2,1.197,1.191,1.18,1.168,1.153,1.137,1.12,1.102,1.085,1.068,1.053,1.038,1.025,1.015,1.007,1.002,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.18,0.48,0.68,0.75,0.75,0.75,0.75,0.69,0.56,0.38,0.19,0.06,0,0,0,0,0,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.987,0.95,0.9,0.84,0.76,0.68,0.6,0.51,0.42,0.34,0.26,0.19,0.13,0.07,0.03,0.01,0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,0.97,0.87,0.74,0.58,0.42,0.26,0.13,0.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,0.97,0.87,0.74,0.58,0.42,0.26,0.13,0.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0 +PARAM_BROW_R_ANGLE=0 +PARAM_BROW_L_FORM=0 +PARAM_BROW_R_FORM=0 +PARAM_MOUTH_FORM=0,-0.05,-0.18,-0.35,-0.52,-0.65,-0.7,-0.34,0.24,0.64,0.77,0.64,0.43,0.2,0.01,-0.13,-0.24,-0.33,-0.4,-0.45,-0.49,-0.52,-0.531,-0.538,-0.54,-0.528,-0.49,-0.43,-0.35,-0.24,-0.13,0,0.27,0.54,0.73,0.83,0.93,0.97,0.991,0.999,1,1,1,1,1,1,1,1,1,1,1,0.93,0.81,0.74,0.71,0.712,0.717,0.726,0.738,0.751,0.767,0.785,0.803,0.823,0.842,0.863,0.882,0.901,0.92,0.937,0.952,0.966,0.978,0.987,0.994,0.999,1,0.994,0.975,0.95,0.91,0.86,0.81,0.76,0.7,0.64,0.57,0.51,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_MOUTH_OPEN_Y=0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.81,0.51,0.3,0.23,0.231,0.233,0.236,0.242,0.25,0.8,1,1,1,1,1,1,1,1,1,1,0.994,0.97,0.92,0.7,0.44,0.22,0.06,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0,0,0,0,0,0,0,-0.34,-1.25,-2.55,-4.04,-5.58,-7.03,-8.26,-9.2,-9.79,-10,-9.85,-9.45,-8.83,-8.06,-7.17,-6.2,-5.17,-4.14,-3.09,-2.1,-1.15,-0.29,0.48,1.11,1.59,1.89,2,1.93,1.75,1.48,1.16,0.84,0.52,0.25,0.07,0,0.005,0.021,0.05,0.08,0.12,0.17,0.23,0.3,0.36,0.44,0.52,0.6,0.68,0.77,0.86,0.94,1.03,1.12,1.21,1.29,1.38,1.46,1.53,1.61,1.68,1.74,1.8,1.85,1.89,1.93,1.96,1.98,1.995,2,1.987,1.95,1.89,1.82,1.73,1.63,1.52,1.4,1.27,1.15,1.02,0.89,0.76,0.64,0.52,0.41,0.31,0.23,0.15,0.09,0.04,0.01,0 +PARAM_BODY_ANGLE_Z=0,0,0,0,0,0,0,-0.1,-0.37,-0.76,-1.21,-1.68,-2.11,-2.48,-2.76,-2.94,-3,-2.994,-2.976,-2.95,-2.91,-2.86,-2.8,-2.74,-2.67,-2.59,-2.5,-2.41,-2.31,-2.21,-2.11,-2,-1.88,-1.77,-1.65,-1.53,-1.41,-1.29,-1.16,-1.04,-0.92,-0.8,-0.68,-0.56,-0.44,-0.33,-0.21,-0.11,0,0.11,0.21,0.3,0.38,0.46,0.53,0.59,0.65,0.7,0.75,0.79,0.82,0.86,0.88,0.91,0.927,0.944,0.958,0.969,0.979,0.986,0.991,0.995,0.997,0.999,1,1,1,0.994,0.975,0.95,0.91,0.86,0.81,0.76,0.7,0.64,0.57,0.51,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.001,0.004,0.008,0.015,0.022,0.032,0.042,0.054,0.067,0.082,0.097,0.113,0.13,0.148,0.166,0.185,0.205,0.224,0.244,0.265,0.29,0.305,0.326,0.346,0.365,0.385,0.404,0.422,0.44,0.457,0.473,0.488,0.503,0.516,0.528,0.538,0.548,0.555,0.562,0.566,0.569,0.57,0.569,0.568,0.565,0.562,0.558,0.552,0.546,0.539,0.532,0.524,0.515,0.505,0.495,0.484,0.472,0.46,0.448,0.435,0.422,0.409,0.395,0.381,0.366,0.352,0.337,0.322,0.308,0.293,0.277,0.262,0.248,0.233,0.218,0.204,0.189,0.175,0.161,0.148,0.135,0.122,0.11,0.098,0.086,0.075,0.065,0.055,0.046,0.038,0.031,0.024,0.018,0.012,0.008,0.005,0.002,0.001,0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.02,-0.08,-0.17,-0.26,-0.36,-0.46,-0.55,-0.63,-0.69,-0.74,-0.75,-0.72,-0.62,-0.48,-0.29,-0.09,0.13,0.34,0.54,0.73,0.87,0.97,1,0.97,0.87,0.74,0.56,0.37,0.17,-0.03,-0.22,-0.38,-0.52,-0.62,-0.69,-0.71,-0.706,-0.696,-0.679,-0.66,-0.63,-0.6,-0.56,-0.53,-0.49,-0.45,-0.4,-0.36,-0.32,-0.28,-0.23,-0.19,-0.16,-0.12,-0.09,-0.07,-0.04,-0.025,-0.011,-0.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_ARM01=0,-0.013,-0.06,-0.12,-0.2,-0.32,-0.43,-0.52,-0.59,-0.64,-0.651,-0.61,-0.51,-0.39,-0.27,-0.18,-0.12,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.1,-0.099,-0.098,-0.096,-0.093,-0.089,-0.085,-0.081,-0.076,-0.07,-0.065,-0.059,-0.054,-0.048,-0.042,-0.037,-0.031,-0.026,-0.021,-0.017,-0.013,-0.009,-0.006,-0.003,-0.002,0,0,-0.019,-0.07,-0.13,-0.21,-0.29,-0.37,-0.44,-0.5,-0.56,-0.59,-0.6,-0.589,-0.56,-0.52,-0.46,-0.4,-0.34,-0.28,-0.21,-0.16,-0.11,-0.06,-0.03,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_RARM02=0,-0.03,-0.035,0.04,0.2,0.55,0.97,1.43,1.92,2.42,2.9,3.36,3.77,4.12,4.41,4.63,4.76,4.8,4.796,4.786,4.769,4.75,4.72,4.7,4.67,4.64,4.61,4.59,4.56,4.54,4.523,4.511,4.503,4.5,4.502,4.506,4.513,4.521,4.532,4.545,4.558,4.573,4.589,4.605,4.622,4.639,4.657,4.673,4.69,4.706,4.722,4.736,4.75,4.762,4.773,4.782,4.79,4.795,4.799,4.8,4.781,4.73,4.64,4.52,4.37,4.21,4.01,3.81,3.58,3.35,3.11,2.86,2.61,2.36,2.11,1.87,1.63,1.41,1.2,1,0.82,0.66,0.51,0.4,0.3,0.22,0.15,0.1,0.05,0.02,0,-0.013,-0.021,-0.023,-0.022,-0.017,-0.012,-0.006,-0.002,0 +PARAM_RARM03=0,0,0,0,0,0.03,0.1,0.22,0.37,0.54,0.72,0.91,1.1,1.27,1.44,1.58,1.7,1.8,1.9,2,2.09,2.18,2.26,2.33,2.41,2.47,2.53,2.59,2.64,2.68,2.72,2.75,2.78,2.8,2.82,2.843,2.861,2.879,2.894,2.908,2.921,2.932,2.942,2.951,2.959,2.966,2.972,2.978,2.982,2.986,2.99,2.992,2.995,2.996,2.998,2.999,2.999,3,3,3,3,3,3,3,3,3,3,3,2.96,2.86,2.71,2.51,2.29,2.05,1.79,1.54,1.27,1.02,0.79,0.57,0.38,0.22,0.1,0.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_LARM01=0,0.04,0.12,0.22,0.3,0.41,0.49,0.54,0.58,0.6,0.612,0.53,0.33,0.09,-0.15,-0.34,-0.46,-0.5,-0.492,-0.47,-0.44,-0.4,-0.35,-0.29,-0.24,-0.18,-0.12,-0.07,-0.02,0.02,0.05,0.08,0.095,0.1,0.099,0.096,0.092,0.086,0.079,0.07,0.061,0.051,0.041,0.03,0.019,0.007,-0.004,-0.016,-0.027,-0.038,-0.048,-0.057,-0.067,-0.075,-0.082,-0.088,-0.093,-0.097,-0.099,-0.1,-0.079,-0.03,0.04,0.12,0.21,0.29,0.37,0.44,0.5,0.53,0.543,0.533,0.51,0.47,0.42,0.36,0.31,0.25,0.19,0.14,0.1,0.06,0.03,0.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_LARM02=0,0.03,0.017,-0.1,-0.3,-0.72,-1.17,-1.64,-2.12,-2.59,-3.04,-3.45,-3.81,-4.12,-4.37,-4.55,-4.66,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.7,-4.68,-4.62,-4.53,-4.4,-4.25,-4.08,-3.87,-3.66,-3.43,-3.18,-2.94,-2.68,-2.42,-2.17,-1.92,-1.67,-1.44,-1.22,-1.01,-0.82,-0.65,-0.5,-0.37,-0.27,-0.2,-0.14,-0.1,-0.06,-0.03,-0.01,0.007,0.016,0.02,0.02,0.018,0.014,0.009,0.005,0.001,0 +PARAM_LARM03=0,0,0,0,0,-0.06,-0.22,-0.46,-0.76,-1.1,-1.46,-1.81,-2.13,-2.42,-2.66,-2.85,-2.96,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.95,-2.85,-2.71,-2.56,-2.4,-2.24,-2.09,-1.96,-1.82,-1.68,-1.55,-1.43,-1.32,-1.21,-1.1,-1.01,-0.92,-0.83,-0.75,-0.67,-0.6,-0.53,-0.47,-0.41,-0.36,-0.31,-0.26,-0.22,-0.19,-0.15,-0.12,-0.09,-0.07,-0.053,-0.036,-0.023,-0.013,-0.006,-0.001,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_01=0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0,-0.01,-0.04,-0.08,-0.13,-0.19,-0.25,-0.32,-0.39,-0.46,-0.53,-0.59,-0.65,-0.7,-0.74,-0.77,-0.793,-0.8,-0.798,-0.791,-0.779,-0.763,-0.74,-0.72,-0.69,-0.65,-0.61,-0.56,-0.51,-0.45,-0.39,-0.33,-0.25,-0.17,-0.09,0,0.1,0.19,0.27,0.36,0.44,0.51,0.59,0.65,0.72,0.78,0.83,0.88,0.93,0.98,1.02,1.05,1.08,1.11,1.13,1.155,1.171,1.184,1.193,1.198,1.2,1.198,1.191,1.18,1.165,1.146,1.12,1.1,1.07,1.04,1,0.97,0.93,0.89,0.85,0.8,0.76,0.71,0.67,0.62,0.58,0.53,0.49,0.44,0.4,0.35,0.31,0.27,0.23,0.2,0.16,0.13,0.1,0.08,0.05,0.035,0.02,0.009,0.002,0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_02.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_02.mtn new file mode 100644 index 0000000..366bc70 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_02.mtn @@ -0,0 +1,76 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,-0.81,-2.55,-4.73,-6.99,-9.05,-10.76,-11.9,-12.32,-12.18,-11.78,-11.17,-10.36,-9.43,-8.38,-7.28,-6.15,-5.03,-3.92,-2.87,-1.89,-1,0,0.77,1.35,1.83,2.24,2.62,3,3.51,3.96,4.36,4.72,5.02,5.28,5.49,5.66,5.79,5.88,5.95,5.99,6,5.97,5.88,5.75,5.57,5.36,5.11,4.83,4.54,4.22,3.89,3.56,3.22,2.87,2.53,2.2,1.87,1.57,1.28,1,0.76,0.54,0.36,0.21,0.09,0.02,0 +PARAM_ANGLE_Y=0,-0.72,-2.28,-4.22,-6.24,-8.08,-9.61,-10.62,-11,-10.83,-10.22,-9.14,-7.53,-5.43,-2.9,0,4.22,8.13,11.82,15.25,18.32,21.1,23.49,25.5,27.13,28.4,29.3,29.83,30,29.04,26.47,22.61,17.76,12.4,6.7,1.11,-4.12,-8.75,-12.63,-15.55,-17.38,-18,-17.91,-17.65,-17.25,-16.71,-16.07,-15.32,-14.5,-13.61,-12.67,-11.68,-10.68,-9.65,-8.6,-7.59,-6.6,-5.62,-4.71,-3.83,-3.01,-2.28,-1.63,-1.07,-0.62,-0.28,-0.07,0 +PARAM_ANGLE_Z=0,-1.07,-3.45,-6.54,-9.91,-13.24,-16.35,-18.98,-21,-22.87,-24.44,-25.76,-26.85,-27.73,-28.43,-28.96,-29.35,-29.63,-29.82,-29.93,-29.98,-30,-29.64,-28.6,-27.05,-25.02,-22.64,-19.94,-17.06,-14.06,-10.97,-7.83,-4.78,-1.81,1.02,3.6,5.98,8.01,9.68,10.92,11.72,12,11.94,11.77,11.5,11.14,10.72,10.22,9.66,9.07,8.45,7.79,7.12,6.43,5.74,5.06,4.4,3.75,3.14,2.55,2.01,1.52,1.09,0.71,0.41,0.19,0.05,0 +PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.74,0.26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.26,0.74,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.995,0.981,0.96,0.93,0.89,0.85,0.81,0.76,0.7,0.65,0.59,0.54,0.48,0.42,0.37,0.31,0.26,0.21,0.17,0.13,0.09,0.06,0.03,0.016,0.004,0 +PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.74,0.26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.26,0.74,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.995,0.981,0.96,0.93,0.89,0.85,0.81,0.76,0.7,0.65,0.59,0.54,0.48,0.42,0.37,0.31,0.26,0.21,0.17,0.13,0.09,0.06,0.03,0.016,0.004,0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5,-0.499,-0.496,-0.492,-0.486,-0.478,-0.469,-0.458,-0.447,-0.434,-0.421,-0.406,-0.391,-0.375,-0.359,-0.342,-0.324,-0.307,-0.289,-0.27,-0.252,-0.234,-0.216,-0.198,-0.181,-0.163,-0.147,-0.13,-0.114,-0.099,-0.085,-0.072,-0.059,-0.047,-0.037,-0.028,-0.02,-0.013,-0.007,-0.003,-0.001,0,-0.003,-0.01,-0.021,-0.036,-0.054,-0.07,-0.1,-0.12,-0.15,-0.18,-0.2,-0.23,-0.26,-0.29,-0.32,-0.34,-0.37,-0.39,-0.42,-0.437,-0.455,-0.47,-0.483,-0.492,-0.498,-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.18,-0.51,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.69,-0.57,-0.37,-0.18,-0.05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.16,-0.44,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.49,-0.32,-0.16,-0.05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0 +PARAM_BROW_R_ANGLE=0 +PARAM_BROW_L_FORM=0 +PARAM_BROW_R_FORM=0 +PARAM_MOUTH_FORM=0,-0.05,-0.18,-0.33,-0.48,-0.6,-0.67,-0.7,-0.34,0.24,0.64,0.77,0.61,0.35,0.11,-0.06,-0.13,-0.13,-0.13,-0.13,-0.13,-0.13,-0.13,-0.112,-0.07,0,0.31,0.68,0.92,1,1,1,1,0.993,0.981,0.971,0.963,0.96,0.97,0.986,0.996,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.97,0.88,0.75,0.6,0.44,0.3,0.17,0.08,0.02,0 +PARAM_MOUTH_OPEN_Y=0,0.07,0.25,0.47,0.68,0.85,0.96,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0.24,0.64,0.91,1,0.8,0.45,0.25,0.33,0.46,0.59,0.68,0.73,0.747,0.751,0.751,0.75,0.741,0.71,0.67,0.62,0.56,0.49,0.42,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0,-0.14,-0.51,-1.04,-1.67,-2.33,-2.96,-3.49,-3.86,-4,-3.95,-3.81,-3.59,-3.3,-2.98,-2.61,-2.24,-1.86,-1.49,-1.14,-0.82,-0.54,-0.31,-0.14,-0.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_Z=0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1,0.998,0.992,0.983,0.971,0.956,0.937,0.92,0.89,0.87,0.84,0.81,0.78,0.75,0.72,0.68,0.65,0.61,0.58,0.54,0.5,0.47,0.43,0.4,0.36,0.33,0.29,0.26,0.23,0.2,0.17,0.14,0.12,0.09,0.074,0.056,0.039,0.025,0.015,0.007,0.002,0,0.005,0.019,0.04,0.07,0.11,0.15,0.19,0.24,0.3,0.35,0.41,0.46,0.52,0.58,0.63,0.69,0.74,0.79,0.83,0.87,0.91,0.94,0.97,0.984,0.996,1 +PARAM_CHEEK_01=0,0.002,0.008,0.017,0.03,0.045,0.063,0.08,0.11,0.13,0.15,0.18,0.21,0.23,0.26,0.29,0.31,0.34,0.36,0.39,0.41,0.428,0.446,0.462,0.475,0.486,0.493,0.498,0.5,0.499,0.496,0.492,0.485,0.477,0.468,0.457,0.446,0.432,0.418,0.403,0.387,0.37,0.353,0.335,0.317,0.298,0.279,0.26,0.24,0.221,0.202,0.183,0.165,0.147,0.13,0.113,0.097,0.082,0.068,0.054,0.043,0.032,0.023,0.015,0.008,0.004,0.001,0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.03,-0.1,-0.2,-0.34,-0.49,-0.65,-0.81,-0.96,-1.1,-1.2,-1.27,-1.3,-1.27,-1.21,-1.11,-0.99,-0.87,-0.75,-0.65,-0.59,-0.56,-0.56,-0.563,-0.572,-0.589,-0.62,-0.66,-0.72,-0.8,-0.9,-1.04,-1.19,-1.32,-1.46,-1.58,-1.69,-1.79,-1.87,-1.93,-1.97,-1.98,-1.97,-1.94,-1.9,-1.84,-1.77,-1.69,-1.59,-1.5,-1.39,-1.28,-1.17,-1.06,-0.95,-0.84,-0.73,-0.62,-0.52,-0.42,-0.33,-0.25,-0.18,-0.12,-0.07,-0.03,-0.01,0 +PARAM_RARM02=0,-0.23,-0.72,-1.35,-2.02,-2.65,-3.21,-3.64,-3.9,-4.05,-4.1,-4.14,-4.18,-4.27,-4.35,-4.42,-4.5,-4.56,-4.63,-4.68,-4.74,-4.79,-4.83,-4.87,-4.9,-4.93,-4.96,-4.975,-4.989,-4.997,-5,-5,-4.996,-4.985,-4.966,-4.93,-4.89,-4.83,-4.75,-4.66,-4.54,-4.4,-4.2,-3.95,-3.66,-3.34,-3.01,-2.66,-2.31,-1.97,-1.64,-1.33,-1.05,-0.79,-0.57,-0.4,-0.26,-0.17,-0.1,-0.05,-0.02,0,0.009,0.01,0.008,0.005,0.001,0 +PARAM_RARM03=0,0.22,0.57,0.9,1.14,1.23,1.12,0.86,0.49,0.07,-0.38,-0.81,-1.22,-1.57,-1.85,-2.03,-2.1,-2,-1.75,-1.37,-0.93,-0.47,-0.03,0.35,0.6,0.7,0.62,0.41,0.12,-0.21,-0.55,-0.89,-1.22,-1.49,-1.71,-1.85,-1.9,-1.894,-1.876,-1.85,-1.81,-1.76,-1.7,-1.64,-1.57,-1.49,-1.41,-1.32,-1.24,-1.15,-1.05,-0.96,-0.87,-0.78,-0.69,-0.6,-0.52,-0.44,-0.36,-0.29,-0.23,-0.17,-0.12,-0.08,-0.05,-0.02,-0.005,0 +PARAM_LARM01=0,0.019,0.07,0.16,0.26,0.39,0.53,0.68,0.82,0.97,1.11,1.24,1.34,1.43,1.48,1.5,1.46,1.36,1.22,1.05,0.88,0.71,0.56,0.46,0.43,0.426,0.426,0.426,0.426,0.426,0.427,0.428,0.431,0.434,0.46,0.51,0.58,0.65,0.74,0.81,0.89,0.95,1,1.04,1.048,1.041,1.022,0.99,0.95,0.91,0.85,0.79,0.73,0.67,0.6,0.53,0.47,0.4,0.33,0.27,0.22,0.16,0.12,0.08,0.05,0.02,0.005,0 +PARAM_LARM02=0,0.17,0.63,1.3,2.09,2.91,3.7,4.37,4.83,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4.999,4.997,4.994,4.99,4.984,4.977,4.969,4.958,4.945,4.93,4.913,4.894,4.87,4.85,4.82,4.75,4.61,4.4,4.15,3.85,3.53,3.19,2.83,2.48,2.12,1.79,1.47,1.17,0.92,0.69,0.51,0.35,0.23,0.14,0.08,0.04,0.01,0.002,0,0 +PARAM_LARM03=0,-0.004,-0.008,-0.007,0.004,0.03,0.07,0.12,0.2,0.37,0.61,0.87,1.17,1.45,1.73,1.98,2.19,2.35,2.46,2.5,2.46,2.36,2.21,2.04,1.86,1.69,1.54,1.44,1.4,1.45,1.58,1.76,1.96,2.17,2.38,2.58,2.75,2.88,2.97,3,2.988,2.95,2.9,2.82,2.73,2.62,2.5,2.37,2.23,2.08,1.92,1.76,1.6,1.44,1.28,1.12,0.97,0.82,0.68,0.55,0.43,0.32,0.23,0.15,0.09,0.04,0.01,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_00=0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0,0.06,0.21,0.4,0.59,0.74,0.8,0.795,0.78,0.76,0.72,0.68,0.64,0.59,0.53,0.47,0.41,0.35,0.28,0.22,0.16,0.09,0.04,-0.02,-0.07,-0.12,-0.16,-0.19,-0.21,-0.226,-0.232,-0.231,-0.23,-0.227,-0.224,-0.22,-0.215,-0.209,-0.203,-0.196,-0.188,-0.18,-0.172,-0.163,-0.154,-0.145,-0.136,-0.127,-0.117,-0.108,-0.098,-0.089,-0.08,-0.071,-0.063,-0.054,-0.046,-0.039,-0.032,-0.026,-0.02,-0.015,-0.011,-0.007,-0.004,-0.002,0,0 +PARAM_leg=0 +VISIBLE:PSD=1 +VISIBLE:ROUGH=1 +VISIBLE:PARTS_01_FACE_001=1 +VISIBLE:PARTS_01_EYE_001=1 +VISIBLE:PARTS_01_EYE_BALL_001=1 +VISIBLE:PARTS_01_BROW_001=1 +VISIBLE:PARTS_01_MOUTH_001=1 +VISIBLE:PARTS_01_NOSE_001=1 +VISIBLE:PARTS_01_EAR_001=1 +VISIBLE:PARTS_01_HAIR_FRONT_001=1 +VISIBLE:PARTS_01_HAIR_SIDE_001=1 +VISIBLE:PARTS_01_HAIR_BACK_001=1 +VISIBLE:PARTS_01_NECK=1 +VISIBLE:PARTS_01_BODY=1 +VISIBLE:PARTS_01_BACKGROUND=1 +VISIBLE:PARTS_01_SKETCH=1 +VISIBLE:PARTS_01_CHEEK=1 +VISIBLE:PARTS_01_ARM_L=1 +VISIBLE:PARTS_01_ARM_R=1 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_03.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_03.mtn new file mode 100644 index 0000000..2a03a4e --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_03.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,-0.18,-0.54,-0.98,-1.47,-2,-2.73,-3.48,-4.23,-4.99,-5.73,-6.45,-7.13,-7.75,-8.32,-8.84,-9.3,-9.68,-10,-10.34,-10.65,-10.94,-11.2,-11.44,-11.65,-11.84,-12.01,-12.17,-12.31,-12.43,-12.54,-12.63,-12.71,-12.78,-12.84,-12.88,-12.92,-12.95,-12.97,-12.989,-12.997,-13,-12.76,-12.08,-11.02,-9.68,-8.09,-6.37,-4.55,-2.7,-0.85,1,3.22,5.04,6.52,7.65,8.52,9.14,9.56,9.82,9.96,10,9.91,9.67,9.3,8.81,8.25,7.6,6.92,6.21,5.47,4.72,4,3.29,2.61,2,1.43,0.95,0.55,0.26,0.07,0 +PARAM_ANGLE_Y=0,-3.4,-8.83,-13.91,-17.57,-19,-18.02,-15.4,-11.45,-6.51,-1.03,4.78,10.49,15.83,20.55,24.52,27.5,29.36,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,28.75,25.41,20.45,14.56,8.12,1.7,-4.37,-9.79,-14.35,-18,-21.65,-24.43,-26.51,-27.95,-28.92,-29.5,-29.82,-29.96,-30,-30,-29.74,-29,-27.89,-26.44,-24.74,-22.81,-20.75,-18.62,-16.4,-14.17,-11.99,-9.86,-7.84,-6,-4.3,-2.85,-1.66,-0.77,-0.2,0 +PARAM_ANGLE_Z=0,0.27,0.97,2.05,3.4,4.95,6.64,8.45,10.25,12.09,13.83,15.48,17,18.34,19.44,20.28,20.81,21,20.984,20.94,20.86,20.76,20.62,20.47,20.28,20.07,19.84,19.58,19.3,19.01,18.69,18.35,18,17.63,17.25,16.84,16.43,16.01,15.57,15.12,14.67,14.2,13.73,13.25,12.78,12.28,11.8,11.3,10.81,10.32,9.82,9.33,8.85,8.36,7.88,7.4,6.93,6.47,6.02,5.57,5.14,4.72,4.31,3.91,3.53,3.16,2.81,2.48,2.16,1.85,1.58,1.32,1.08,0.86,0.66,0.49,0.34,0.22,0.13,0.06,0.01,0 +PARAM_EYE_L_OPEN=1,0.98,0.93,0.85,0.75,0.63,0.51,0.4,0.29,0.19,0.11,0.05,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_L_SMILE=0 +PARAM_EYE_R_OPEN=1,0.98,0.93,0.85,0.75,0.63,0.51,0.4,0.29,0.19,0.11,0.05,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_R_SMILE=0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5 +PARAM_BROW_L_Y=0,-0.013,-0.05,-0.1,-0.16,-0.23,-0.31,-0.38,-0.45,-0.51,-0.56,-0.6,-0.62,-0.63,-0.626,-0.616,-0.6,-0.58,-0.55,-0.52,-0.49,-0.45,-0.41,-0.37,-0.33,-0.29,-0.24,-0.2,-0.16,-0.12,-0.09,-0.05,-0.02,0,0.03,0.045,0.059,0.067,0.07,0.065,0.052,0.03,0,-0.03,-0.06,-0.1,-0.15,-0.19,-0.24,-0.28,-0.33,-0.38,-0.42,-0.46,-0.5,-0.54,-0.57,-0.6,-0.62,-0.636,-0.646,-0.65,-0.63,-0.57,-0.48,-0.39,-0.29,-0.19,-0.11,-0.05,-0.01,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,-0.013,-0.05,-0.1,-0.16,-0.23,-0.31,-0.38,-0.45,-0.51,-0.56,-0.6,-0.62,-0.63,-0.626,-0.616,-0.6,-0.58,-0.55,-0.52,-0.49,-0.45,-0.41,-0.37,-0.33,-0.29,-0.24,-0.2,-0.16,-0.12,-0.09,-0.05,-0.02,0,0.03,0.045,0.059,0.067,0.07,0.066,0.053,0.032,0.01,-0.03,-0.06,-0.1,-0.14,-0.18,-0.23,-0.27,-0.32,-0.36,-0.41,-0.45,-0.48,-0.52,-0.55,-0.58,-0.6,-0.616,-0.626,-0.63,-0.61,-0.55,-0.47,-0.38,-0.28,-0.19,-0.11,-0.05,-0.01,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.008,0.018,0.03,0.046,0.064,0.084,0.11,0.13,0.15,0.18,0.2,0.23,0.25,0.27,0.3,0.32,0.338,0.356,0.372,0.385,0.396,0.403,0.408,0.41,0.407,0.4,0.388,0.373,0.354,0.33,0.31,0.29,0.26,0.23,0.21,0.18,0.16,0.13,0.11,0.08,0.065,0.046,0.03,0.018,0.008,0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_ANGLE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.008,0.018,0.03,0.046,0.064,0.084,0.11,0.13,0.15,0.18,0.2,0.23,0.25,0.27,0.3,0.32,0.338,0.356,0.372,0.385,0.396,0.403,0.408,0.41,0.407,0.4,0.388,0.373,0.354,0.33,0.31,0.29,0.26,0.23,0.21,0.18,0.16,0.13,0.11,0.08,0.065,0.046,0.03,0.018,0.008,0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_FORM=0,-0.006,-0.023,-0.05,-0.08,-0.11,-0.15,-0.19,-0.22,-0.25,-0.28,-0.294,-0.306,-0.31,-0.309,-0.307,-0.304,-0.299,-0.293,-0.287,-0.279,-0.271,-0.262,-0.252,-0.243,-0.232,-0.222,-0.211,-0.201,-0.19,-0.18,-0.169,-0.159,-0.15,-0.141,-0.132,-0.124,-0.117,-0.11,-0.103,-0.096,-0.09,-0.085,-0.079,-0.074,-0.07,-0.066,-0.061,-0.058,-0.054,-0.05,-0.047,-0.044,-0.04,-0.037,-0.034,-0.031,-0.028,-0.025,-0.021,-0.018,-0.015,-0.011,-0.008,-0.005,-0.004,-0.002,-0.001,-0.001,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_FORM=0,-0.001,-0.005,-0.01,-0.016,-0.023,-0.031,-0.038,-0.045,-0.051,-0.056,-0.06,-0.062,-0.063,-0.063,-0.061,-0.059,-0.055,-0.052,-0.047,-0.042,-0.037,-0.031,-0.025,-0.019,-0.012,-0.006,0,0.006,0.012,0.017,0.022,0.026,0.03,0.034,0.036,0.038,0.04,0.04,0.04,0.04,0.04,0.039,0.039,0.039,0.038,0.038,0.037,0.036,0.035,0.034,0.033,0.032,0.031,0.03,0.028,0.027,0.025,0.023,0.021,0.019,0.017,0.015,0.012,0.01,0.007,0.005,0.003,0.002,0.001,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_MOUTH_FORM=0,0.05,0.16,0.29,0.43,0.56,0.66,0.73,0.76,0.73,0.68,0.61,0.53,0.45,0.38,0.32,0.28,0.25,0.22,0.19,0.17,0.14,0.12,0.1,0.083,0.06,0.04,0.02,-0.01,-0.04,-0.07,-0.1,-0.13,-0.15,-0.18,-0.21,-0.25,-0.28,-0.31,-0.35,-0.38,-0.42,-0.5,-0.61,-0.73,-0.84,-0.93,-0.98,-1,-0.97,-0.87,-0.73,-0.56,-0.37,-0.16,0.04,0.23,0.4,0.54,0.64,0.71,0.73,0.724,0.706,0.68,0.64,0.6,0.56,0.51,0.45,0.4,0.34,0.29,0.24,0.19,0.15,0.1,0.07,0.04,0.02,0.005,0 +PARAM_MOUTH_OPEN_Y=0,0.04,0.12,0.22,0.34,0.46,0.58,0.68,0.77,0.86,0.92,0.96,0.98,0.992,0.998,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.88,0.82,0.76,0.69,0.63,0.56,0.5,0.45,0.39,0.35,0.3,0.26,0.22,0.18,0.15,0.13,0.1,0.084,0.067,0.052,0.04,0.03,0.021,0.015,0.009,0.006,0.003,0.001,0,0 +PARAM_BODY_ANGLE_X=0,-0.009,-0.03,-0.07,-0.13,-0.19,-0.26,-0.33,-0.41,-0.49,-0.57,-0.65,-0.72,-0.79,-0.85,-0.9,-0.94,-0.97,-0.993,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.998,-0.993,-0.985,-0.975,-0.961,-0.945,-0.926,-0.91,-0.88,-0.86,-0.83,-0.8,-0.77,-0.74,-0.71,-0.68,-0.64,-0.61,-0.57,-0.54,-0.5,-0.47,-0.43,-0.4,-0.37,-0.33,-0.3,-0.27,-0.24,-0.21,-0.18,-0.15,-0.13,-0.11,-0.09,-0.066,-0.049,-0.035,-0.023,-0.013,-0.006,-0.001,0 +PARAM_BODY_ANGLE_Z=0,-0.09,-0.34,-0.74,-1.26,-1.87,-2.56,-3.32,-4.1,-4.9,-5.7,-6.47,-7.2,-7.88,-8.48,-9,-9.43,-9.74,-9.93,-10,-9.99,-9.96,-9.91,-9.84,-9.76,-9.65,-9.54,-9.4,-9.25,-9.09,-8.91,-8.72,-8.52,-8.31,-8.09,-7.86,-7.62,-7.37,-7.12,-6.85,-6.58,-6.31,-6.03,-5.76,-5.47,-5.19,-4.9,-4.62,-4.33,-4.05,-3.76,-3.49,-3.21,-2.94,-2.67,-2.41,-2.15,-1.91,-1.66,-1.44,-1.21,-1,-0.79,-0.61,-0.46,-0.33,-0.23,-0.15,-0.08,-0.04,0,0.02,0.039,0.046,0.047,0.043,0.035,0.026,0.017,0.008,0.002,0 +PARAM_BREATH=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,0.997,0.987,0.972,0.951,0.93,0.9,0.86,0.82,0.78,0.74,0.7,0.65,0.6,0.55,0.5,0.45,0.4,0.35,0.3,0.26,0.22,0.18,0.14,0.1,0.07,0.05,0.028,0.013,0.003,0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.001,0.003,0.006,0.01,0.015,0.022,0.029,0.037,0.045,0.055,0.064,0.075,0.085,0.096,0.108,0.119,0.131,0.143,0.154,0.166,0.178,0.189,0.2,0.211,0.222,0.232,0.242,0.251,0.259,0.267,0.274,0.281,0.286,0.291,0.295,0.298,0.299,0.3,0.299,0.298,0.296,0.292,0.288,0.283,0.278,0.272,0.265,0.257,0.249,0.241,0.232,0.223,0.213,0.203,0.193,0.183,0.172,0.162,0.151,0.141,0.13,0.12,0.11,0.1,0.09,0.081,0.071,0.063,0.054,0.046,0.039,0.032,0.026,0.02,0.015,0.01,0.007,0.004,0.002,0,0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.003,-0.011,-0.024,-0.042,-0.06,-0.09,-0.12,-0.15,-0.19,-0.23,-0.27,-0.31,-0.36,-0.4,-0.45,-0.51,-0.56,-0.61,-0.67,-0.73,-0.79,-0.84,-0.88,-0.92,-0.95,-0.97,-0.989,-1.003,-1.013,-1.02,-1.023,-1.025,-1.017,-0.997,-0.97,-0.93,-0.88,-0.82,-0.77,-0.71,-0.65,-0.59,-0.53,-0.48,-0.43,-0.39,-0.35,-0.33,-0.3,-0.28,-0.25,-0.23,-0.21,-0.192,-0.174,-0.157,-0.141,-0.127,-0.113,-0.1,-0.088,-0.077,-0.068,-0.058,-0.05,-0.043,-0.036,-0.03,-0.025,-0.02,-0.016,-0.012,-0.009,-0.007,-0.005,-0.003,-0.002,-0.001,0,0,0 +PARAM_RARM02=0,0,0,-0.001,-0.003,-0.004,-0.007,-0.01,-0.015,-0.02,-0.026,-0.034,-0.042,-0.052,-0.063,-0.076,-0.089,-0.104,-0.121,-0.139,-0.16,-0.18,-0.21,-0.23,-0.26,-0.28,-0.3,-0.33,-0.35,-0.37,-0.389,-0.406,-0.422,-0.435,-0.446,-0.455,-0.462,-0.466,-0.467,-0.464,-0.456,-0.443,-0.425,-0.4,-0.38,-0.36,-0.33,-0.3,-0.27,-0.25,-0.22,-0.2,-0.178,-0.161,-0.146,-0.131,-0.118,-0.105,-0.094,-0.083,-0.073,-0.064,-0.056,-0.049,-0.042,-0.035,-0.03,-0.025,-0.021,-0.017,-0.014,-0.011,-0.008,-0.006,-0.004,-0.003,-0.002,-0.001,-0.001,0,0,0 +PARAM_RARM03=0,0.007,0.025,0.05,0.09,0.14,0.18,0.24,0.29,0.34,0.39,0.43,0.47,0.5,0.517,0.523,0.516,0.497,0.47,0.43,0.38,0.32,0.26,0.19,0.13,0.05,-0.02,-0.09,-0.15,-0.22,-0.28,-0.33,-0.38,-0.42,-0.46,-0.48,-0.497,-0.503,-0.501,-0.498,-0.492,-0.484,-0.474,-0.462,-0.449,-0.435,-0.419,-0.402,-0.384,-0.366,-0.347,-0.328,-0.308,-0.288,-0.268,-0.248,-0.228,-0.21,-0.19,-0.166,-0.149,-0.132,-0.117,-0.102,-0.089,-0.077,-0.066,-0.056,-0.047,-0.039,-0.032,-0.026,-0.02,-0.016,-0.012,-0.008,-0.006,-0.004,-0.002,-0.001,0,0 +PARAM_LARM01=0,0.03,0.09,0.17,0.26,0.34,0.41,0.47,0.5,0.52,0.55,0.566,0.584,0.601,0.616,0.629,0.641,0.652,0.661,0.669,0.676,0.682,0.687,0.691,0.694,0.696,0.698,0.699,0.7,0.7,0.693,0.67,0.64,0.59,0.53,0.46,0.38,0.3,0.21,0.11,0,-0.1,-0.21,-0.32,-0.44,-0.55,-0.66,-0.77,-0.87,-0.97,-1.07,-1.16,-1.25,-1.32,-1.39,-1.45,-1.5,-1.55,-1.58,-1.594,-1.6,-1.589,-1.56,-1.51,-1.45,-1.37,-1.28,-1.19,-1.08,-0.97,-0.86,-0.74,-0.63,-0.52,-0.41,-0.32,-0.23,-0.15,-0.09,-0.04,-0.01,0 +PARAM_LARM02=0,-0.07,-0.26,-0.54,-0.9,-1.31,-1.75,-2.18,-2.61,-3,-3.34,-3.63,-3.85,-4,-4.12,-4.23,-4.31,-4.39,-4.44,-4.49,-4.53,-4.55,-4.574,-4.587,-4.595,-4.599,-4.601,-4.601,-4.6,-4.6,-4.57,-4.48,-4.33,-4.14,-3.91,-3.64,-3.35,-3.04,-2.71,-2.38,-2.04,-1.71,-1.39,-1.08,-0.79,-0.54,-0.3,-0.11,0.05,0.17,0.24,0.27,0.267,0.265,0.26,0.255,0.248,0.24,0.231,0.221,0.21,0.199,0.186,0.174,0.16,0.147,0.134,0.121,0.107,0.094,0.082,0.069,0.058,0.047,0.037,0.028,0.02,0.013,0.008,0.003,0.001,0 +PARAM_LARM03=0,0.07,0.23,0.43,0.64,0.82,0.98,1.08,1.12,1.106,1.07,1,0.92,0.82,0.7,0.56,0.42,0.27,0.11,-0.05,-0.22,-0.38,-0.54,-0.7,-0.85,-0.99,-1.12,-1.24,-1.35,-1.43,-1.5,-1.56,-1.59,-1.6,-1.582,-1.53,-1.45,-1.35,-1.22,-1.08,-0.91,-0.75,-0.57,-0.38,-0.2,-0.02,0.16,0.32,0.48,0.62,0.75,0.86,0.94,1.01,1.05,1.062,1.056,1.041,1.02,0.99,0.95,0.9,0.85,0.8,0.75,0.69,0.63,0.57,0.51,0.45,0.39,0.33,0.28,0.23,0.18,0.13,0.1,0.06,0.04,0.017,0.004,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0,0.008,0.03,0.07,0.11,0.17,0.23,0.3,0.37,0.44,0.51,0.59,0.66,0.73,0.79,0.85,0.9,0.96,1.01,1.06,1.11,1.15,1.19,1.23,1.27,1.3,1.33,1.36,1.39,1.41,1.44,1.46,1.477,1.494,1.51,1.524,1.537,1.548,1.558,1.567,1.574,1.581,1.586,1.591,1.594,1.597,1.598,1.599,1.6,1.595,1.583,1.563,1.54,1.5,1.46,1.41,1.36,1.31,1.25,1.18,1.12,1.05,0.98,0.91,0.84,0.76,0.69,0.62,0.55,0.48,0.42,0.35,0.29,0.24,0.19,0.14,0.1,0.06,0.04,0.02,0.004,0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_04.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_04.mtn new file mode 100644 index 0000000..010ae5f --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_04.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,0,0,0,0,0,0,0,-2.21,-7.57,-14.12,-20.51,-25.64,-28.9,-30,-26.06,-17.57,-6.97,4.03,14.08,22.4,27.93,30,27.79,22.43,15.88,9.49,4.36,1.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_ANGLE_Y=0,-2.21,-7.57,-14.12,-20.51,-25.64,-28.9,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-29.62,-28.55,-26.87,-24.74,-22.2,-19.42,-16.49,-13.51,-10.58,-7.8,-5.26,-3.13,-1.45,-0.38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_ANGLE_Z=0 +PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.92,0.74,0.5,0.26,0.08,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_L_SMILE=0 +PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.92,0.74,0.5,0.26,0.08,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_R_SMILE=0 +PARAM_EYE_BALL_X=0,0,0,0,0,0,0,0,0.07,0.25,0.47,0.68,0.85,0.96,1,0.86,0.6,0.27,-0.09,-0.47,-0.82,-0.97,-1,-0.93,-0.75,-0.53,-0.32,-0.15,-0.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_EYE_BALL_Y=-0.5,-0.39,-0.12,0.21,0.53,0.78,0.94,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.981,0.93,0.84,0.74,0.61,0.47,0.32,0.18,0.03,-0.11,-0.24,-0.34,-0.43,-0.48,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.08,-0.26,-0.5,-0.74,-0.92,-1,-0.97,-0.87,-0.74,-0.58,-0.42,-0.26,-0.13,-0.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.08,-0.26,-0.5,-0.74,-0.92,-1,-0.97,-0.87,-0.74,-0.58,-0.42,-0.26,-0.13,-0.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0,-0.009,-0.03,-0.06,-0.08,-0.103,-0.116,-0.12,-0.12,-0.119,-0.118,-0.116,-0.114,-0.111,-0.108,-0.105,-0.101,-0.097,-0.093,-0.089,-0.085,-0.08,-0.075,-0.07,-0.066,-0.061,-0.056,-0.051,-0.046,-0.041,-0.037,-0.032,-0.028,-0.024,-0.02,-0.017,-0.013,-0.01,-0.008,-0.006,-0.004,-0.002,-0.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_ANGLE=0,-0.009,-0.03,-0.06,-0.08,-0.103,-0.116,-0.12,-0.12,-0.119,-0.118,-0.116,-0.114,-0.111,-0.108,-0.105,-0.101,-0.097,-0.093,-0.089,-0.085,-0.08,-0.075,-0.07,-0.066,-0.061,-0.056,-0.051,-0.046,-0.041,-0.037,-0.032,-0.028,-0.024,-0.02,-0.017,-0.013,-0.01,-0.008,-0.006,-0.004,-0.002,-0.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_FORM=0,-0.06,-0.2,-0.37,-0.53,-0.67,-0.75,-0.78,-0.778,-0.773,-0.765,-0.753,-0.739,-0.722,-0.703,-0.68,-0.66,-0.63,-0.61,-0.58,-0.55,-0.52,-0.49,-0.46,-0.43,-0.39,-0.36,-0.33,-0.3,-0.27,-0.24,-0.21,-0.18,-0.16,-0.13,-0.11,-0.09,-0.068,-0.051,-0.036,-0.023,-0.013,-0.006,-0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_FORM=0,-0.06,-0.2,-0.37,-0.53,-0.67,-0.75,-0.78,-0.778,-0.773,-0.765,-0.753,-0.739,-0.722,-0.703,-0.68,-0.66,-0.63,-0.61,-0.58,-0.55,-0.52,-0.49,-0.46,-0.43,-0.39,-0.36,-0.33,-0.3,-0.27,-0.24,-0.21,-0.18,-0.16,-0.13,-0.11,-0.09,-0.068,-0.051,-0.036,-0.023,-0.013,-0.006,-0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_MOUTH_FORM=0,0.07,0.19,0.27,0.3,-0.54,-0.85,-0.22,0.01,-0.26,-0.73,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.97,-0.88,-0.77,-0.64,-0.52,-0.42,-0.35,-0.32,-0.311,-0.309,-0.31,-0.34,-0.4,-0.47,-0.55,-0.63,-0.72,-0.79,-0.85,-0.9,-0.94,-0.97,-0.986,-0.997,-1,-0.993,-0.975,-0.94,-0.91,-0.86,-0.8,-0.74,-0.68,-0.61,-0.54,-0.47,-0.41,-0.34,-0.28,-0.22,-0.17,-0.12,-0.08,-0.04,-0.02,-0.005,0 +PARAM_MOUTH_OPEN_Y=0,0.24,0.64,0.91,1,0.27,0,0.18,0.38,0.65,0.8,0.85,0.838,0.81,0.78,0.75,0.72,0.69,0.676,0.67,0.684,0.72,0.76,0.8,0.84,0.85,0.839,0.81,0.75,0.67,0.56,0.35,0.2,0.09,0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0 +PARAM_BODY_ANGLE_Z=0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.004,0.015,0.034,0.06,0.09,0.12,0.16,0.2,0.25,0.29,0.34,0.39,0.44,0.49,0.54,0.6,0.64,0.69,0.74,0.78,0.82,0.86,0.9,0.93,0.95,0.972,0.987,0.997,1,0.998,0.991,0.98,0.966,0.948,0.93,0.9,0.87,0.84,0.81,0.78,0.74,0.7,0.67,0.63,0.59,0.55,0.51,0.46,0.42,0.38,0.34,0.31,0.27,0.23,0.2,0.17,0.14,0.11,0.09,0.07,0.046,0.03,0.017,0.008,0.002,0 +PARAM_UPBACK=0,-0.04,-0.14,-0.27,-0.39,-0.49,-0.55,-0.57,-0.57,-0.569,-0.567,-0.564,-0.56,-0.555,-0.549,-0.543,-0.534,-0.525,-0.514,-0.503,-0.49,-0.475,-0.459,-0.442,-0.424,-0.404,-0.38,-0.36,-0.34,-0.31,-0.28,-0.25,-0.22,-0.19,-0.17,-0.14,-0.11,-0.09,-0.07,-0.049,-0.032,-0.019,-0.008,-0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.18,-0.46,-0.73,-0.92,-1,-0.76,-0.36,-0.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.01,-0.04,-0.08,-0.13,-0.19,-0.25,-0.31,-0.37,-0.42,-0.46,-0.49,-0.5,-0.497,-0.487,-0.472,-0.453,-0.43,-0.4,-0.37,-0.34,-0.31,-0.27,-0.24,-0.2,-0.17,-0.14,-0.11,-0.08,-0.06,-0.038,-0.022,-0.01,-0.003,0 +PARAM_RARM02=0,0.15,0.55,1.13,1.83,2.55,3.25,3.86,4.29,4.49,4.54,4.59,4.62,4.65,4.666,4.68,4.69,4.696,4.699,4.7,4.7,4.7,4.7,4.7,4.701,4.701,4.701,4.699,4.697,4.692,4.686,4.677,4.666,4.652,4.634,4.61,4.59,4.56,4.53,4.49,4.37,4.13,3.81,3.42,2.99,2.55,2.11,1.68,1.27,0.9,0.6,0.35,0.18,0.1,0.07,0.05,0.029,0.016,0.007,0.001,-0.002,-0.003,-0.003,-0.002,-0.001,0,0 +PARAM_RARM03=0,-0.31,-0.8,-1.27,-1.6,-1.73,-1.39,-0.78,-0.29,0,0.28,0.53,0.74,0.92,1.06,1.19,1.28,1.36,1.42,1.46,1.48,1.496,1.5,1.481,1.43,1.35,1.26,1.15,1.03,0.9,0.77,0.64,0.51,0.39,0.29,0.19,0.11,0.05,0.01,0,0.23,0.77,1.5,2.23,2.77,3,2.97,2.89,2.76,2.56,2.3,1.98,1.58,1.1,0.23,-0.45,-0.95,-1.28,-1.4,-1.31,-1.11,-0.86,-0.61,-0.37,-0.18,-0.05,0 +PARAM_LARM01=0,0.09,0.23,0.36,0.45,0.49,0.23,-0.21,-0.5,-0.6,-0.6,-0.599,-0.597,-0.595,-0.591,-0.587,-0.582,-0.575,-0.567,-0.558,-0.548,-0.536,-0.522,-0.506,-0.489,-0.471,-0.45,-0.43,-0.4,-0.38,-0.35,-0.31,-0.28,-0.24,-0.19,-0.12,-0.06,0.01,0.07,0.14,0.19,0.24,0.28,0.31,0.315,0.313,0.307,0.298,0.285,0.27,0.253,0.234,0.214,0.19,0.17,0.15,0.13,0.11,0.087,0.069,0.052,0.037,0.024,0.014,0.006,0.002,0 +PARAM_LARM02=0,0.021,0.08,0.16,0.25,0.35,0.44,0.52,0.58,0.6,0.599,0.598,0.595,0.592,0.587,0.581,0.575,0.568,0.56,0.551,0.542,0.531,0.521,0.509,0.497,0.485,0.472,0.458,0.444,0.43,0.416,0.401,0.386,0.371,0.355,0.339,0.324,0.308,0.292,0.276,0.261,0.245,0.229,0.214,0.199,0.184,0.17,0.156,0.142,0.128,0.115,0.103,0.091,0.079,0.069,0.058,0.049,0.04,0.032,0.025,0.019,0.013,0.008,0.005,0.002,0.001,0 +PARAM_LARM03=0,-0.05,-0.19,-0.39,-0.63,-0.87,-1.11,-1.31,-1.45,-1.5,-1.499,-1.497,-1.494,-1.489,-1.482,-1.474,-1.464,-1.452,-1.439,-1.424,-1.407,-1.389,-1.37,-1.35,-1.32,-1.29,-1.27,-1.24,-1.2,-1.17,-1.13,-1.09,-1.05,-1.01,-0.96,-0.92,-0.87,-0.82,-0.76,-0.71,-0.65,-0.55,-0.41,-0.24,-0.08,0.03,0.07,0.073,0.071,0.069,0.065,0.061,0.056,0.051,0.046,0.04,0.035,0.03,0.024,0.019,0.015,0.011,0.007,0.004,0.002,0,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_01=0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_05.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_05.mtn new file mode 100644 index 0000000..880e334 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_05.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,-0.45,-1.55,-3,-4.45,-5.55,-6,-5.7,-4.9,-3.66,-2.1,-0.37,1.5,3.37,5.1,6.66,7.9,8.7,9,8.92,8.7,8.37,7.93,7.42,6.84,6.23,5.58,4.92,4.25,3.6,2.96,2.35,1.8,1.29,0.85,0.5,0.23,0.06,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_ANGLE_Y=0,-2.25,-7.73,-15,-22.27,-27.75,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-29.85,-29.42,-28.75,-27.85,-26.79,-25.54,-24.16,-22.68,-21.12,-19.47,-17.8,-16.08,-14.34,-12.66,-11,-9.37,-7.84,-6.38,-5.02,-3.8,-2.72,-1.79,-1.03,-0.47,-0.12,0 +PARAM_ANGLE_Z=0,-1.35,-4.64,-9,-13.36,-16.65,-18,-17.64,-16.68,-15.19,-13.32,-11.25,-9,-6.75,-4.68,-2.81,-1.32,-0.36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_EYE_L_OPEN=1,0.92,0.74,0.5,0.26,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05,0.15,0.29,0.43,0.56,0.67,0.76,0.8,0.82,0.85,0.866,0.885,0.901,0.916,0.93,0.941,0.952,0.961,0.969,0.975,0.981,0.986,0.99,0.993,0.995,0.997,0.999,0.999,1,1 +PARAM_EYE_L_SMILE=0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.993,0.975,0.94,0.91,0.86,0.8,0.74,0.68,0.61,0.54,0.47,0.41,0.34,0.28,0.22,0.17,0.12,0.08,0.04,0.02,0.005,0 +PARAM_EYE_R_OPEN=1,0.92,0.74,0.5,0.26,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05,0.15,0.29,0.43,0.56,0.67,0.76,0.8,0.82,0.85,0.866,0.885,0.901,0.916,0.93,0.941,0.952,0.961,0.969,0.975,0.981,0.986,0.99,0.993,0.995,0.997,0.999,0.999,1,1 +PARAM_EYE_R_SMILE=0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.995,0.981,0.96,0.93,0.89,0.85,0.81,0.76,0.7,0.65,0.59,0.54,0.48,0.42,0.37,0.31,0.26,0.21,0.17,0.13,0.09,0.06,0.03,0.016,0.004,0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5,-0.39,-0.11,0.25,0.61,0.89,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.992,0.97,0.94,0.89,0.84,0.78,0.71,0.63,0.56,0.47,0.39,0.3,0.22,0.13,0.05,-0.03,-0.11,-0.18,-0.25,-0.31,-0.36,-0.41,-0.45,-0.48,-0.494,-0.5 +PARAM_BROW_L_Y=0,-0.05,-0.17,-0.33,-0.5,-0.63,-0.7,-0.72,-0.737,-0.751,-0.762,-0.771,-0.778,-0.783,-0.786,-0.788,-0.789,-0.79,-0.79,-0.788,-0.783,-0.775,-0.764,-0.751,-0.735,-0.717,-0.698,-0.68,-0.65,-0.63,-0.6,-0.58,-0.55,-0.52,-0.49,-0.46,-0.43,-0.4,-0.37,-0.34,-0.3,-0.27,-0.25,-0.22,-0.2,-0.17,-0.152,-0.134,-0.116,-0.1,-0.086,-0.073,-0.061,-0.05,-0.041,-0.033,-0.025,-0.019,-0.014,-0.009,-0.006,-0.003,-0.001,0,0 +PARAM_BROW_R_Y=0,-0.05,-0.17,-0.34,-0.51,-0.64,-0.71,-0.73,-0.751,-0.766,-0.779,-0.789,-0.796,-0.802,-0.806,-0.808,-0.809,-0.81,-0.81,-0.808,-0.803,-0.794,-0.782,-0.768,-0.751,-0.732,-0.71,-0.69,-0.66,-0.64,-0.61,-0.58,-0.56,-0.53,-0.5,-0.46,-0.43,-0.4,-0.37,-0.33,-0.3,-0.27,-0.24,-0.22,-0.19,-0.17,-0.15,-0.132,-0.114,-0.098,-0.084,-0.071,-0.059,-0.049,-0.04,-0.031,-0.024,-0.018,-0.013,-0.009,-0.006,-0.003,-0.001,0,0 +PARAM_BROW_L_X=0,-0.03,-0.11,-0.22,-0.32,-0.4,-0.43,-0.43,-0.428,-0.427,-0.424,-0.421,-0.417,-0.412,-0.407,-0.401,-0.395,-0.388,-0.381,-0.373,-0.365,-0.357,-0.348,-0.338,-0.329,-0.319,-0.309,-0.298,-0.288,-0.277,-0.266,-0.255,-0.244,-0.233,-0.222,-0.211,-0.2,-0.189,-0.178,-0.167,-0.156,-0.145,-0.135,-0.124,-0.114,-0.105,-0.095,-0.086,-0.077,-0.069,-0.06,-0.053,-0.046,-0.039,-0.032,-0.026,-0.021,-0.016,-0.012,-0.009,-0.006,-0.003,-0.001,0,0 +PARAM_BROW_R_X=0,-0.03,-0.11,-0.22,-0.33,-0.41,-0.44,-0.44,-0.438,-0.436,-0.434,-0.43,-0.426,-0.422,-0.416,-0.411,-0.404,-0.397,-0.39,-0.382,-0.374,-0.365,-0.356,-0.346,-0.336,-0.326,-0.316,-0.305,-0.295,-0.284,-0.272,-0.261,-0.25,-0.239,-0.227,-0.216,-0.204,-0.193,-0.182,-0.17,-0.159,-0.149,-0.138,-0.127,-0.117,-0.107,-0.097,-0.088,-0.079,-0.07,-0.062,-0.054,-0.047,-0.04,-0.033,-0.027,-0.022,-0.017,-0.012,-0.009,-0.006,-0.003,-0.001,0,0 +PARAM_BROW_L_ANGLE=0,0.06,0.21,0.4,0.59,0.74,0.8,0.799,0.797,0.794,0.79,0.785,0.78,0.775,0.77,0.766,0.763,0.761,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.76,0.756,0.745,0.728,0.71,0.68,0.65,0.61,0.57,0.54,0.49,0.45,0.41,0.36,0.32,0.28,0.24,0.2,0.16,0.13,0.1,0.07,0.05,0.026,0.012,0.003,0 +PARAM_BROW_R_ANGLE=0,0.04,0.13,0.25,0.38,0.48,0.55,0.58,0.61,0.64,0.658,0.673,0.686,0.695,0.702,0.706,0.709,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.706,0.696,0.68,0.66,0.63,0.6,0.57,0.54,0.5,0.46,0.42,0.38,0.34,0.3,0.26,0.22,0.19,0.15,0.12,0.09,0.06,0.04,0.024,0.011,0.003,0 +PARAM_BROW_L_FORM=0,-0.08,-0.26,-0.5,-0.74,-0.92,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.995,-0.981,-0.96,-0.93,-0.89,-0.85,-0.81,-0.76,-0.7,-0.65,-0.59,-0.54,-0.48,-0.42,-0.37,-0.31,-0.26,-0.21,-0.17,-0.13,-0.09,-0.06,-0.03,-0.016,-0.004,0 +PARAM_BROW_R_FORM=0,-0.08,-0.26,-0.5,-0.74,-0.92,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.995,-0.981,-0.96,-0.93,-0.89,-0.85,-0.81,-0.76,-0.7,-0.65,-0.59,-0.54,-0.48,-0.42,-0.37,-0.31,-0.26,-0.21,-0.17,-0.13,-0.09,-0.06,-0.03,-0.016,-0.004,0 +PARAM_MOUTH_FORM=0,0.09,0.24,0.33,0.24,0.09,0,0.11,0.29,0.41,0.45,0.453,0.458,0.461,0.461,0.454,0.439,0.42,0.38,0.32,0.25,0.18,0.09,0,-0.09,-0.18,-0.28,-0.37,-0.46,-0.55,-0.63,-0.71,-0.78,-0.84,-0.9,-0.94,-0.97,-0.993,-1,-0.995,-0.981,-0.96,-0.93,-0.89,-0.85,-0.81,-0.76,-0.7,-0.65,-0.59,-0.54,-0.48,-0.42,-0.37,-0.31,-0.26,-0.21,-0.17,-0.13,-0.09,-0.06,-0.03,-0.016,-0.004,0 +PARAM_MOUTH_OPEN_Y=0,0.2,0.57,0.77,0.65,0.45,0.33,0.49,0.76,0.94,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.88,0.82,0.76,0.69,0.62,0.55,0.47,0.4,0.33,0.26,0.2,0.14,0.09,0.06,0.03,0.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0,-0.23,-0.77,-1.5,-2.23,-2.77,-3,-2.92,-2.71,-2.38,-1.96,-1.5,-1,-0.5,-0.04,0.38,0.71,0.92,1,0.999,0.994,0.987,0.978,0.966,0.951,0.935,0.916,0.896,0.87,0.85,0.83,0.8,0.77,0.74,0.71,0.68,0.65,0.62,0.59,0.55,0.52,0.49,0.46,0.42,0.39,0.36,0.33,0.3,0.27,0.24,0.21,0.19,0.16,0.14,0.11,0.094,0.076,0.058,0.044,0.031,0.02,0.011,0.005,0.001,0 +PARAM_BODY_ANGLE_Z=0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0,-0.04,-0.14,-0.27,-0.41,-0.53,-0.6,-0.64,-0.67,-0.71,-0.74,-0.76,-0.79,-0.81,-0.83,-0.851,-0.867,-0.881,-0.894,-0.905,-0.914,-0.921,-0.927,-0.932,-0.936,-0.938,-0.94,-0.94,-0.938,-0.932,-0.921,-0.908,-0.891,-0.87,-0.85,-0.82,-0.79,-0.76,-0.73,-0.7,-0.66,-0.63,-0.59,-0.55,-0.51,-0.47,-0.44,-0.4,-0.36,-0.32,-0.29,-0.25,-0.22,-0.19,-0.16,-0.13,-0.11,-0.08,-0.061,-0.043,-0.028,-0.016,-0.007,-0.002,0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.998,0.991,0.98,0.966,0.948,0.93,0.9,0.87,0.84,0.81,0.78,0.74,0.7,0.67,0.63,0.59,0.55,0.51,0.46,0.42,0.38,0.34,0.31,0.27,0.23,0.2,0.17,0.14,0.11,0.09,0.07,0.046,0.03,0.017,0.008,0.002,0 +PARAM_UPBACK=0,-0.04,-0.15,-0.29,-0.42,-0.53,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.57,-0.569,-0.565,-0.559,-0.55,-0.54,-0.528,-0.514,-0.498,-0.481,-0.463,-0.443,-0.42,-0.4,-0.38,-0.36,-0.33,-0.31,-0.29,-0.26,-0.24,-0.22,-0.2,-0.17,-0.15,-0.134,-0.114,-0.096,-0.08,-0.064,-0.05,-0.037,-0.026,-0.017,-0.01,-0.004,-0.001,0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.03,-0.1,-0.2,-0.3,-0.37,-0.4,-0.397,-0.39,-0.379,-0.363,-0.344,-0.32,-0.3,-0.27,-0.24,-0.21,-0.18,-0.15,-0.12,-0.09,-0.07,-0.04,-0.01,0.01,0.03,0.053,0.069,0.082,0.092,0.098,0.1,0.096,0.086,0.069,0.05,0.02,-0.01,-0.04,-0.06,-0.09,-0.12,-0.15,-0.17,-0.186,-0.196,-0.2,-0.198,-0.193,-0.185,-0.175,-0.162,-0.148,-0.133,-0.117,-0.1,-0.083,-0.067,-0.052,-0.038,-0.025,-0.015,-0.007,-0.002,0 +PARAM_RARM02=0,0.33,1.13,2.2,3.26,4.06,4.39,4.39,4.39,4.39,4.39,4.39,4.39,4.389,4.388,4.387,4.385,4.383,4.381,4.378,4.375,4.371,4.367,4.362,4.357,4.351,4.344,4.336,4.328,4.32,4.31,4.3,4.24,4.1,3.89,3.61,3.29,2.94,2.56,2.18,1.8,1.44,1.1,0.81,0.57,0.39,0.3,0.25,0.2,0.17,0.14,0.12,0.102,0.086,0.072,0.059,0.047,0.033,0.019,0.009,0.004,0.001,0,0,0 +PARAM_RARM03=0,0.002,0.009,0.021,0.036,0.054,0.08,0.1,0.13,0.16,0.19,0.22,0.25,0.28,0.32,0.35,0.38,0.41,0.44,0.47,0.5,0.52,0.55,0.564,0.579,0.591,0.598,0.6,0.41,0.11,-0.1,-0.17,0.07,0.63,1.32,2,2.54,2.88,3,2.981,2.92,2.81,2.64,2.41,2.11,1.74,1.28,0.64,-0.05,-0.74,-1.33,-1.74,-1.9,-1.86,-1.76,-1.6,-1.41,-1.19,-0.95,-0.71,-0.49,-0.3,-0.14,-0.04,0 +PARAM_LARM01=0,0.02,0.08,0.15,0.22,0.28,0.3,0.299,0.295,0.289,0.282,0.272,0.261,0.249,0.236,0.222,0.207,0.192,0.177,0.162,0.147,0.133,0.119,0.106,0.094,0.084,0.074,0.066,0.059,0.055,0.052,0.051,0.054,0.063,0.077,0.094,0.12,0.14,0.16,0.19,0.21,0.24,0.26,0.274,0.288,0.297,0.3,0.297,0.29,0.278,0.262,0.244,0.22,0.2,0.17,0.15,0.13,0.1,0.08,0.06,0.038,0.022,0.01,0.003,0 +PARAM_LARM02=0,-0.34,-1.17,-2.28,-3.39,-4.22,-4.56,-4.563,-4.563,-4.563,-4.562,-4.562,-4.562,-4.562,-4.561,-4.56,-4.559,-4.558,-4.556,-4.554,-4.552,-4.549,-4.546,-4.543,-4.539,-4.535,-4.53,-4.525,-4.52,-4.514,-4.507,-4.5,-4.46,-4.34,-4.17,-3.94,-3.67,-3.37,-3.05,-2.71,-2.36,-2.02,-1.67,-1.36,-1.06,-0.81,-0.6,-0.4,-0.25,-0.14,-0.05,0.01,0.06,0.09,0.108,0.12,0.126,0.127,0.118,0.1,0.07,0.04,0.02,0.005,0 +PARAM_LARM03=0,0,-0.001,-0.002,-0.004,-0.007,-0.01,-0.014,-0.019,-0.025,-0.033,-0.041,-0.051,-0.062,-0.075,-0.088,-0.104,-0.121,-0.14,-0.161,-0.18,-0.21,-0.23,-0.26,-0.29,-0.33,-0.36,-0.4,-0.47,-0.57,-0.69,-0.81,-0.94,-1.06,-1.17,-1.26,-1.34,-1.38,-1.4,-1.4,-1.398,-1.391,-1.375,-1.35,-1.31,-1.26,-1.2,-1.01,-0.66,-0.24,0.17,0.48,0.6,0.588,0.56,0.51,0.44,0.37,0.3,0.23,0.16,0.09,0.04,0.01,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_01=0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_06.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_06.mtn new file mode 100644 index 0000000..f56d11e --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_06.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,0,0,0,0,-0.13,-0.5,-1.05,-1.78,-2.63,-3.59,-4.62,-5.69,-6.8,-7.92,-9.01,-10.07,-11.08,-12,-12.85,-13.58,-14.17,-14.61,-14.9,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-14.87,-14.48,-13.88,-13.1,-12.18,-11.12,-9.96,-8.75,-7.5,-6.25,-5.04,-3.88,-2.82,-1.9,-1.12,-0.52,-0.13,0 +PARAM_ANGLE_Y=0,0,0,0,0,-0.87,-3.14,-6.42,-10.17,-14.06,-17.7,-20.8,-23.17,-24.66,-25.18,-25.01,-24.54,-23.86,-23.09,-22.29,-21.54,-20.9,-20.42,-20.11,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-19.82,-19.31,-18.51,-17.47,-16.24,-14.82,-13.28,-11.66,-10,-8.34,-6.72,-5.18,-3.76,-2.53,-1.49,-0.69,-0.18,0 +PARAM_ANGLE_Z=0 +PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0.02,0.07,0.15,0.24,0.33,0.42,0.5,0.56,0.59,0.61,0.615,0.619,0.621,0.624,0.625,0.627,0.629,0.63,0.632,0.634,0.637,0.641,0.645,0.65,0.658,0.671,0.688,0.709,0.73,0.76,0.78,0.81,0.84,0.87,0.89,0.92,0.94,0.96,0.976,0.989,0.997,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.66,0.58,0.5,0.42,0.34,0.26,0.19,0.13,0.07,0.03,0.01,0 +PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0.02,0.07,0.15,0.24,0.33,0.42,0.5,0.56,0.59,0.61,0.615,0.619,0.621,0.624,0.625,0.627,0.629,0.63,0.632,0.634,0.637,0.641,0.645,0.65,0.658,0.671,0.688,0.709,0.73,0.76,0.78,0.81,0.84,0.87,0.89,0.92,0.94,0.96,0.976,0.989,0.997,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.66,0.58,0.5,0.42,0.34,0.26,0.19,0.13,0.07,0.03,0.01,0 +PARAM_EYE_BALL_X=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.03,-0.12,-0.25,-0.4,-0.56,-0.7,-0.83,-0.92,-0.98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.991,-0.97,-0.93,-0.87,-0.81,-0.74,-0.66,-0.58,-0.5,-0.42,-0.34,-0.26,-0.19,-0.13,-0.07,-0.03,-0.01,0 +PARAM_EYE_BALL_Y=-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.517,-0.56,-0.63,-0.7,-0.78,-0.85,-0.91,-0.96,-0.99,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.996,-0.983,-0.963,-0.94,-0.91,-0.87,-0.83,-0.79,-0.75,-0.71,-0.67,-0.63,-0.59,-0.56,-0.54,-0.517,-0.504,-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,-0.004,-0.014,-0.029,-0.049,-0.07,-0.09,-0.12,-0.15,-0.17,-0.2,-0.22,-0.24,-0.262,-0.278,-0.29,-0.297,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.297,-0.29,-0.278,-0.262,-0.244,-0.22,-0.2,-0.17,-0.15,-0.13,-0.1,-0.08,-0.06,-0.038,-0.022,-0.01,-0.003,0 +PARAM_BROW_R_Y=0,0,0,0,0,-0.004,-0.014,-0.029,-0.049,-0.07,-0.09,-0.12,-0.15,-0.17,-0.2,-0.22,-0.24,-0.262,-0.278,-0.29,-0.297,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.3,-0.297,-0.29,-0.278,-0.262,-0.244,-0.22,-0.2,-0.17,-0.15,-0.13,-0.1,-0.08,-0.06,-0.038,-0.022,-0.01,-0.003,0 +PARAM_BROW_L_X=0,0,0,0,0,0,0,0,0,0,-0.013,-0.05,-0.1,-0.18,-0.26,-0.35,-0.45,-0.55,-0.65,-0.74,-0.82,-0.9,-0.95,-0.99,-1,-0.981,-0.93,-0.86,-0.77,-0.67,-0.57,-0.46,-0.36,-0.26,-0.18,-0.11,-0.05,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_X=0,0,0,0,0,0,0,0,0,0,-0.013,-0.05,-0.1,-0.18,-0.26,-0.35,-0.45,-0.55,-0.65,-0.74,-0.82,-0.9,-0.95,-0.99,-1,-0.981,-0.93,-0.86,-0.77,-0.67,-0.57,-0.46,-0.36,-0.26,-0.18,-0.11,-0.05,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_ANGLE=0,0,0,0,0,0,0,0,0,0,0.008,0.03,0.07,0.12,0.17,0.24,0.3,0.37,0.43,0.5,0.55,0.6,0.64,0.66,0.67,0.657,0.62,0.58,0.52,0.45,0.38,0.31,0.24,0.18,0.12,0.07,0.03,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_ANGLE=0,0,0,0,0,0,0,0,0,0,0.013,0.05,0.1,0.18,0.26,0.35,0.45,0.55,0.65,0.74,0.82,0.9,0.95,0.99,1,0.981,0.93,0.86,0.77,0.67,0.57,0.46,0.36,0.26,0.18,0.11,0.05,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_FORM=0,0,0,0,0,-0.18,-0.46,-0.73,-0.92,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.991,-0.97,-0.93,-0.87,-0.81,-0.74,-0.66,-0.58,-0.5,-0.42,-0.34,-0.26,-0.19,-0.13,-0.07,-0.03,-0.01,0 +PARAM_BROW_R_FORM=0,0,0,0,0,-0.18,-0.46,-0.73,-0.92,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.991,-0.97,-0.93,-0.87,-0.81,-0.74,-0.66,-0.58,-0.5,-0.42,-0.34,-0.26,-0.19,-0.13,-0.07,-0.03,-0.01,0 +PARAM_MOUTH_FORM=0,0,0,0,0,0,0,-0.001,-0.002,-0.008,-0.01,-0.008,-0.004,-0.001,0,-0.005,-0.02,-0.04,-0.07,-0.11,-0.16,-0.21,-0.26,-0.32,-0.38,-0.44,-0.5,-0.56,-0.62,-0.68,-0.74,-0.79,-0.84,-0.89,-0.93,-0.96,-0.98,-0.995,-1,-0.991,-0.97,-0.93,-0.87,-0.81,-0.74,-0.66,-0.58,-0.5,-0.42,-0.34,-0.26,-0.19,-0.13,-0.07,-0.03,-0.01,0 +PARAM_MOUTH_OPEN_Y=0,0.17,0.46,0.66,0.72,0.717,0.707,0.688,0.66,0.47,0.4,0.48,0.6,0.69,0.72,0.718,0.712,0.703,0.69,0.674,0.655,0.63,0.61,0.58,0.56,0.53,0.5,0.47,0.43,0.4,0.37,0.34,0.3,0.27,0.24,0.21,0.18,0.16,0.13,0.11,0.087,0.07,0.055,0.042,0.032,0.023,0.016,0.011,0.006,0.003,0.001,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0,0,0,0,0,0,0,0,-0.09,-0.34,-0.74,-1.26,-1.87,-2.56,-3.32,-4.1,-4.9,-5.7,-6.47,-7.2,-7.88,-8.48,-9,-9.43,-9.74,-9.93,-10,-9.97,-9.87,-9.72,-9.51,-9.26,-8.96,-8.62,-8.25,-7.84,-7.41,-6.95,-6.48,-5.99,-5.5,-5,-4.5,-4.01,-3.52,-3.05,-2.59,-2.16,-1.75,-1.38,-1.04,-0.74,-0.49,-0.28,-0.13,-0.03,0 +PARAM_BODY_ANGLE_Z=0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.003,0.013,0.028,0.05,0.07,0.1,0.13,0.17,0.21,0.24,0.28,0.33,0.37,0.41,0.44,0.48,0.52,0.55,0.58,0.6,0.62,0.637,0.647,0.65,0.648,0.642,0.632,0.619,0.603,0.585,0.56,0.54,0.52,0.49,0.46,0.43,0.4,0.37,0.34,0.31,0.28,0.25,0.23,0.2,0.17,0.14,0.12,0.1,0.08,0.057,0.04,0.026,0.015,0.007,0.002,0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0,0.012,0.032,0.045,0.05,0.041,0.01,-0.02,-0.07,-0.13,-0.2,-0.27,-0.35,-0.43,-0.5,-0.58,-0.65,-0.73,-0.79,-0.85,-0.9,-0.94,-0.97,-0.99,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.991,-0.97,-0.93,-0.87,-0.81,-0.74,-0.66,-0.58,-0.5,-0.42,-0.34,-0.26,-0.19,-0.13,-0.07,-0.03,-0.01,0 +PARAM_ARM01=0,-0.003,-0.013,-0.026,-0.042,-0.058,-0.074,-0.087,-0.097,-0.1,-0.097,-0.09,-0.079,-0.065,-0.048,-0.029,-0.01,0.01,0.029,0.048,0.065,0.079,0.09,0.097,0.1,0.1,0.099,0.097,0.095,0.093,0.09,0.087,0.083,0.079,0.075,0.071,0.067,0.062,0.058,0.053,0.048,0.044,0.039,0.035,0.03,0.026,0.022,0.018,0.015,0.012,0.009,0.006,0.004,0.002,0.001,0,0 +PARAM_RARM02=0,0,0,0,0,0,0,0,0,0,-0.005,-0.019,-0.04,-0.07,-0.1,-0.14,-0.18,-0.22,-0.26,-0.3,-0.33,-0.36,-0.38,-0.395,-0.4,-0.399,-0.395,-0.389,-0.381,-0.371,-0.36,-0.347,-0.333,-0.318,-0.301,-0.284,-0.267,-0.249,-0.23,-0.212,-0.193,-0.175,-0.156,-0.138,-0.121,-0.104,-0.088,-0.073,-0.059,-0.046,-0.035,-0.025,-0.016,-0.009,-0.004,-0.001,0 +PARAM_RARM03=0,0.018,0.07,0.14,0.24,0.36,0.49,0.62,0.75,0.88,1,1.11,1.21,1.29,1.35,1.39,1.4,1.37,1.27,1.13,0.95,0.75,0.53,0.29,0.05,-0.19,-0.42,-0.64,-0.84,-1.01,-1.16,-1.27,-1.34,-1.36,-1.353,-1.33,-1.29,-1.24,-1.18,-1.11,-1.03,-0.95,-0.87,-0.78,-0.69,-0.6,-0.52,-0.43,-0.36,-0.28,-0.21,-0.15,-0.1,-0.06,-0.03,-0.007,0 +PARAM_LARM01=0,0.003,0.013,0.026,0.042,0.058,0.074,0.087,0.097,0.1,0.096,0.086,0.069,0.05,0.02,-0.01,-0.04,-0.06,-0.09,-0.12,-0.15,-0.17,-0.186,-0.196,-0.2,-0.199,-0.197,-0.194,-0.19,-0.186,-0.18,-0.173,-0.166,-0.159,-0.151,-0.142,-0.133,-0.124,-0.115,-0.106,-0.096,-0.087,-0.078,-0.069,-0.061,-0.052,-0.044,-0.037,-0.03,-0.023,-0.017,-0.012,-0.008,-0.005,-0.002,-0.001,0 +PARAM_LARM02=0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.004,-0.014,-0.031,-0.05,-0.08,-0.11,-0.14,-0.16,-0.19,-0.22,-0.25,-0.27,-0.286,-0.296,-0.3,-0.299,-0.295,-0.29,-0.282,-0.273,-0.262,-0.25,-0.237,-0.223,-0.208,-0.192,-0.176,-0.16,-0.144,-0.128,-0.112,-0.097,-0.082,-0.068,-0.055,-0.043,-0.032,-0.023,-0.015,-0.009,-0.004,-0.001,0 +PARAM_LARM03=0,0.007,0.027,0.06,0.09,0.14,0.19,0.25,0.3,0.36,0.42,0.48,0.54,0.59,0.64,0.69,0.72,0.76,0.78,0.795,0.8,0.78,0.73,0.64,0.54,0.42,0.29,0.15,0.01,-0.13,-0.27,-0.39,-0.51,-0.62,-0.7,-0.76,-0.81,-0.821,-0.813,-0.79,-0.76,-0.72,-0.67,-0.61,-0.55,-0.48,-0.42,-0.35,-0.29,-0.23,-0.17,-0.12,-0.08,-0.05,-0.02,-0.005,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_07.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_07.mtn new file mode 100644 index 0000000..2e67089 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_07.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,0,0,0,0,0.34,1.25,2.55,4.04,5.58,7.03,8.26,9.2,9.79,10,9.83,9.33,8.59,7.63,6.49,5.21,3.84,2.41,0.94,-0.56,-2.01,-3.42,-4.77,-6,-7.13,-8.1,-8.9,-9.49,-9.87,-10,-9.75,-9.08,-8.05,-6.77,-5.29,-3.68,-1.97,-0.25,1.5,3.15,4.72,6.16,7.43,8.48,9.28,9.78,9.96,9.88,9.66,9.29,8.81,8.23,7.55,6.78,5.95,5.05,4.12,3.15,2.16,1.13,0.11,-0.91,-1.92,-2.91,-3.87,-4.79,-5.67,-6.48,-7.23,-7.92,-8.52,-9.03,-9.44,-9.75,-9.94,-10,-9.68,-8.87,-7.78,-6.5,-5.18,-3.87,-2.63,-1.58,-0.74,-0.2,0 +PARAM_ANGLE_Y=0,0,0,0,0,0,0,0,0,0,-0.16,-0.62,-1.34,-2.26,-3.4,-4.66,-6.05,-7.53,-9.1,-10.67,-12.3,-13.91,-15.48,-17.02,-18.46,-19.82,-21.07,-22.18,-23.14,-23.93,-24.51,-24.87,-25,-24.5,-23.16,-21.09,-18.5,-15.62,-12.5,-9.38,-6.5,-3.91,-1.84,-0.5,0,0,0,0,0,0,0,0,0,0,0,0,-0.29,-1.03,-2.12,-3.46,-4.95,-6.51,-8.09,-9.63,-11.06,-12.35,-13.42,-14.27,-14.81,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-14.52,-13.31,-11.67,-9.75,-7.76,-5.8,-3.94,-2.38,-1.12,-0.3,0 +PARAM_ANGLE_Z=0 +PARAM_EYE_L_OPEN=1,1,1,1,1,0.995,0.978,0.94,0.88,0.78,0.65,0.41,0.14,0,0,0,0.05,0.17,0.32,0.48,0.6,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.48,0.17,0,0,0,0.18,0.46,0.73,0.92,1,0.999,0.997,0.993,0.988,0.982,0.975,0.967,0.958,0.948,0.938,0.928,0.917,0.906,0.894,0.883,0.872,0.862,0.852,0.842,0.833,0.825,0.818,0.812,0.807,0.803,0.801,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.806,0.823,0.84,0.87,0.9,0.92,0.95,0.97,0.985,0.996,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0.08,0.26,0.5,0.74,0.92,1,0.74,0.26,0,0,0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,0.74,0.26,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.97,0.89,0.78,0.65,0.52,0.39,0.26,0.16,0.07,0.02,0 +PARAM_EYE_R_OPEN=1,1,1,1,1,0.995,0.978,0.94,0.88,0.78,0.65,0.41,0.14,0,0,0,0.05,0.17,0.32,0.48,0.6,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.48,0.17,0,0,0,0.18,0.46,0.73,0.92,1,0.999,0.997,0.993,0.988,0.982,0.975,0.967,0.958,0.948,0.938,0.928,0.917,0.906,0.894,0.883,0.872,0.862,0.852,0.842,0.833,0.825,0.818,0.812,0.807,0.803,0.801,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.806,0.823,0.84,0.87,0.9,0.92,0.95,0.97,0.985,0.996,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0.08,0.26,0.5,0.74,0.92,1,0.74,0.26,0,0,0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,0.74,0.26,0,0,0,0.18,0.46,0.73,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.97,0.89,0.78,0.65,0.52,0.39,0.26,0.16,0.07,0.02,0 +PARAM_EYE_BALL_X=0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.93,0.75,0.53,0.32,0.15,0.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_EYE_BALL_Y=-0.5,-0.5,-0.5,-0.5,-0.5,-0.517,-0.56,-0.63,-0.71,-0.79,-0.87,-0.94,-0.98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.85,-0.5,-0.06,0.37,0.71,0.93,1,0.996,0.984,0.966,0.94,0.91,0.87,0.83,0.79,0.74,0.69,0.64,0.58,0.53,0.47,0.42,0.36,0.31,0.26,0.21,0.17,0.13,0.09,0.06,0.03,0.016,0.004,0,0,0,0,0,0,0,0,0,0,0,0,-0.016,-0.06,-0.11,-0.17,-0.24,-0.31,-0.37,-0.42,-0.46,-0.49,-0.5 +PARAM_BROW_L_Y=0 +PARAM_BROW_R_Y=0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0 +PARAM_BROW_R_ANGLE=0 +PARAM_BROW_L_FORM=0 +PARAM_BROW_R_FORM=0 +PARAM_MOUTH_FORM=0,0.06,0.17,0.24,0.26,0.18,-0.01,-0.26,-0.5,-0.69,-0.77,-0.59,-0.31,-0.05,0.15,0.22,0.219,0.217,0.213,0.207,0.199,0.19,0.179,0.166,0.151,0.135,0.117,0.096,0.07,0.05,0.02,0,-0.03,-0.07,-0.1,-0.13,-0.17,-0.21,-0.26,-0.3,-0.35,-0.39,-0.45,-0.51,-0.57,-0.64,-0.73,-0.81,-0.88,-0.93,-0.97,-0.99,-1,-0.986,-0.95,-0.91,-0.87,-0.83,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.82,-0.79,-0.73,-0.64,-0.53,-0.42,-0.32,-0.22,-0.13,-0.06,-0.02,0 +PARAM_MOUTH_OPEN_Y=0,0.18,0.48,0.71,0.83,0.9,0.95,0.98,0.994,0.999,1,0.94,0.83,0.73,0.65,0.6,0.57,0.54,0.51,0.48,0.45,0.43,0.41,0.389,0.37,0.353,0.337,0.323,0.31,0.299,0.289,0.28,0.273,0.266,0.261,0.257,0.254,0.252,0.25,0.25,0.31,0.44,0.63,0.81,0.94,1,0.96,0.85,0.73,0.6,0.5,0.44,0.42,0.46,0.57,0.71,0.85,0.96,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.97,0.89,0.78,0.65,0.52,0.39,0.26,0.16,0.07,0.02,0 +PARAM_BODY_ANGLE_X=0,0,0,0,0,0.07,0.25,0.51,0.81,1.12,1.41,1.65,1.84,1.96,2,1.96,1.83,1.65,1.41,1.12,0.8,0.46,0.1,-0.27,-0.64,-1,-1.36,-1.69,-2,-2.28,-2.53,-2.72,-2.87,-2.97,-3,-2.94,-2.76,-2.48,-2.11,-1.68,-1.19,-0.65,-0.08,0.5,1.08,1.65,2.19,2.68,3.11,3.48,3.76,3.94,4,4,3.998,3.995,3.988,3.977,3.961,3.94,3.91,3.87,3.82,3.77,3.7,3.62,3.53,3.42,3.3,3.16,3,2.83,2.65,2.47,2.28,2.09,1.9,1.71,1.52,1.33,1.15,0.98,0.82,0.66,0.52,0.39,0.28,0.18,0.11,0.05,0.01,0 +PARAM_BODY_ANGLE_Z=0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,0.003,0.01,0.021,0.035,0.052,0.071,0.09,0.11,0.129,0.148,0.165,0.179,0.19,0.197,0.2,0.198,0.194,0.187,0.178,0.166,0.153,0.138,0.122,0.105,0.087,0.069,0.05,0.031,0.013,-0.005,-0.022,-0.038,-0.053,-0.066,-0.078,-0.087,-0.094,-0.098,-0.1,-0.094,-0.078,-0.05,-0.02,0.01,0.05,0.08,0.11,0.14,0.17,0.185,0.196,0.2,0.197,0.191,0.18,0.168,0.153,0.137,0.12,0.102,0.085,0.068,0.053,0.038,0.025,0.015,0.007,0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_RARM02=0,0.001,0.003,0.007,0.013,0.019,0.026,0.033,0.041,0.049,0.057,0.065,0.072,0.079,0.085,0.09,0.094,0.097,0.099,0.1,0.099,0.096,0.09,0.083,0.075,0.065,0.054,0.042,0.029,0.016,0.002,-0.012,-0.026,-0.04,-0.053,-0.066,-0.078,-0.089,-0.099,-0.107,-0.114,-0.12,-0.123,-0.124,-0.12,-0.108,-0.09,-0.07,-0.04,-0.02,0.01,0.03,0.05,0.071,0.085,0.093,0.096,0.093,0.085,0.073,0.057,0.04,0.02,0,-0.021,-0.04,-0.061,-0.08,-0.097,-0.113,-0.125,-0.135,-0.141,-0.143,-0.142,-0.138,-0.132,-0.125,-0.116,-0.106,-0.095,-0.083,-0.071,-0.06,-0.048,-0.037,-0.027,-0.018,-0.011,-0.005,-0.001,0 +PARAM_RARM03=0,-0.03,-0.1,-0.2,-0.31,-0.43,-0.55,-0.66,-0.76,-0.83,-0.88,-0.9,-0.892,-0.87,-0.83,-0.78,-0.73,-0.66,-0.6,-0.52,-0.45,-0.38,-0.31,-0.24,-0.18,-0.12,-0.07,-0.04,-0.01,0.011,0.017,0.005,-0.03,-0.08,-0.15,-0.23,-0.32,-0.42,-0.52,-0.63,-0.73,-0.84,-0.93,-1.02,-1.1,-1.17,-1.22,-1.27,-1.29,-1.3,-1.28,-1.21,-1.12,-0.99,-0.85,-0.68,-0.52,-0.35,-0.19,-0.03,0.11,0.23,0.34,0.41,0.46,0.474,0.472,0.465,0.454,0.44,0.424,0.404,0.38,0.36,0.33,0.31,0.28,0.25,0.23,0.2,0.17,0.15,0.12,0.1,0.08,0.06,0.043,0.028,0.016,0.007,0.002,0 +PARAM_LARM01=0,-0.001,-0.002,-0.006,-0.011,-0.019,-0.029,-0.043,-0.059,-0.08,-0.1,-0.13,-0.17,-0.21,-0.25,-0.3,-0.35,-0.4,-0.46,-0.51,-0.56,-0.6,-0.65,-0.7,-0.74,-0.78,-0.82,-0.86,-0.9,-0.93,-0.96,-0.99,-1.01,-1.03,-1.054,-1.07,-1.083,-1.092,-1.098,-1.1,-1.084,-1.04,-0.98,-0.9,-0.81,-0.71,-0.62,-0.53,-0.45,-0.39,-0.34,-0.31,-0.3,-0.319,-0.37,-0.45,-0.54,-0.65,-0.77,-0.9,-1.03,-1.16,-1.29,-1.41,-1.51,-1.61,-1.69,-1.75,-1.79,-1.8,-1.788,-1.75,-1.7,-1.63,-1.54,-1.45,-1.34,-1.22,-1.1,-0.98,-0.85,-0.73,-0.61,-0.5,-0.39,-0.3,-0.21,-0.14,-0.08,-0.04,-0.01,0 +PARAM_LARM02=0,0.003,0.01,0.022,0.038,0.056,0.077,0.1,0.12,0.15,0.17,0.19,0.22,0.236,0.254,0.27,0.283,0.292,0.298,0.3,0.299,0.295,0.288,0.28,0.27,0.257,0.244,0.23,0.214,0.197,0.181,0.164,0.147,0.13,0.114,0.098,0.084,0.07,0.058,0.048,0.039,0.033,0.029,0.028,0.033,0.049,0.07,0.1,0.13,0.17,0.2,0.23,0.26,0.28,0.298,0.308,0.312,0.312,0.311,0.309,0.306,0.302,0.298,0.293,0.287,0.28,0.272,0.263,0.253,0.241,0.229,0.216,0.202,0.186,0.169,0.152,0.136,0.12,0.106,0.091,0.078,0.065,0.054,0.043,0.034,0.025,0.018,0.011,0.007,0.003,0.001,0 +PARAM_LARM03=0,-0.03,-0.11,-0.22,-0.35,-0.48,-0.61,-0.74,-0.84,-0.93,-0.98,-1,-0.989,-0.96,-0.91,-0.85,-0.77,-0.68,-0.59,-0.5,-0.4,-0.3,-0.2,-0.11,-0.03,0.04,0.11,0.16,0.2,0.22,0.23,0.215,0.17,0.1,0.01,-0.09,-0.21,-0.34,-0.48,-0.62,-0.76,-0.89,-1.02,-1.13,-1.24,-1.33,-1.4,-1.45,-1.49,-1.5,-1.48,-1.41,-1.31,-1.18,-1.03,-0.86,-0.69,-0.52,-0.35,-0.19,-0.04,0.08,0.19,0.27,0.32,0.332,0.33,0.325,0.318,0.308,0.296,0.283,0.267,0.251,0.234,0.215,0.197,0.178,0.159,0.14,0.122,0.104,0.087,0.071,0.056,0.042,0.03,0.02,0.011,0.005,0.001,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_08.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_08.mtn new file mode 100644 index 0000000..927ab55 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_08.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,0,0,0,0,-0.2,-0.77,-1.66,-2.85,-4.3,-5.96,-7.76,-9.74,-11.81,-13.95,-16.05,-18.19,-20.26,-22.24,-24.04,-25.7,-27.15,-28.34,-29.23,-29.8,-30,-29.6,-28.53,-26.88,-24.8,-22.5,-20,-17.5,-15.2,-13.13,-11.47,-10.4,-10,-10.69,-12.53,-15.2,-18.37,-21.63,-24.8,-27.47,-29.31,-30,-29.66,-28.75,-27.45,-25.96,-24.42,-22.97,-21.74,-20.8,-20.21,-20,-20.13,-20.48,-21.03,-21.74,-22.56,-23.47,-24.4,-25.35,-26.28,-27.16,-27.95,-28.65,-29.22,-29.64,-29.91,-30,-29.4,-27.79,-25.38,-22.35,-19,-15.44,-11.94,-8.68,-5.78,-3.35,-1.53,-0.39,0 +PARAM_ANGLE_Y=0,0,0,0,0,-0.07,-0.25,-0.51,-0.81,-1.12,-1.41,-1.65,-1.84,-1.96,-2,-1.6,-0.46,1.33,3.61,6.32,9.28,12.41,15.59,18.72,21.68,24.39,26.67,28.46,29.6,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29.73,28.97,27.77,26.2,24.36,22.24,19.93,17.49,15,12.51,10.07,7.76,5.64,3.8,2.23,1.03,0.27,0 +PARAM_ANGLE_Z=0,0,0,0,0,-0.1,-0.39,-0.83,-1.42,-2.15,-2.98,-3.88,-4.87,-5.91,-6.97,-8.03,-9.09,-10.13,-11.12,-12.02,-12.85,-13.58,-14.17,-14.61,-14.9,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-14.87,-14.48,-13.88,-13.1,-12.18,-11.12,-9.96,-8.75,-7.5,-6.25,-5.04,-3.88,-2.82,-1.9,-1.12,-0.52,-0.13,0 +PARAM_EYE_L_OPEN=1,1,1,1,1,0.993,0.975,0.95,0.92,0.89,0.86,0.83,0.816,0.804,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.59,0.21,0,0,0,0.06,0.2,0.39,0.58,0.73,0.8,0.811,0.821,0.831,0.84,0.85,0.859,0.867,0.876,0.883,0.891,0.899,0.906,0.912,0.919,0.925,0.931,0.936,0.942,0.947,0.952,0.956,0.96,0.964,0.968,0.972,0.975,0.978,0.981,0.984,0.986,0.988,0.99,0.992,0.994,0.995,0.996,0.997,0.998,0.999,0.999,1,1,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0.017,0.06,0.13,0.2,0.28,0.35,0.41,0.46,0.49,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.37,0.13,0,0,0,0.04,0.13,0.25,0.37,0.46,0.5,0.499,0.497,0.493,0.487,0.48,0.472,0.463,0.453,0.441,0.429,0.415,0.401,0.387,0.371,0.355,0.338,0.322,0.305,0.287,0.27,0.252,0.235,0.217,0.2,0.183,0.166,0.15,0.134,0.119,0.104,0.09,0.077,0.065,0.053,0.043,0.033,0.025,0.017,0.011,0.006,0.003,0.001,0 +PARAM_EYE_R_OPEN=1,1,1,1,1,0.993,0.976,0.95,0.92,0.89,0.87,0.84,0.825,0.814,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.6,0.21,0,0,0,0.06,0.2,0.4,0.59,0.74,0.81,0.82,0.83,0.839,0.848,0.857,0.866,0.874,0.882,0.889,0.897,0.904,0.91,0.917,0.923,0.929,0.934,0.94,0.945,0.95,0.954,0.958,0.962,0.966,0.97,0.973,0.976,0.979,0.982,0.984,0.987,0.989,0.991,0.992,0.994,0.995,0.996,0.997,0.998,0.999,0.999,1,1,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0.017,0.06,0.13,0.2,0.28,0.35,0.41,0.46,0.49,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.37,0.13,0,0,0,0.04,0.13,0.25,0.37,0.46,0.5,0.499,0.497,0.493,0.487,0.48,0.472,0.463,0.453,0.441,0.429,0.415,0.401,0.387,0.371,0.355,0.338,0.322,0.305,0.287,0.27,0.252,0.235,0.217,0.2,0.183,0.166,0.15,0.134,0.119,0.104,0.09,0.077,0.065,0.053,0.043,0.033,0.025,0.017,0.011,0.006,0.003,0.001,0 +PARAM_EYE_BALL_X=0,0,0,0,0,0.007,0.025,0.06,0.09,0.14,0.2,0.26,0.32,0.39,0.46,0.53,0.59,0.66,0.72,0.78,0.83,0.88,0.92,0.96,0.98,0.995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.66,0.58,0.5,0.42,0.34,0.26,0.19,0.13,0.07,0.03,0.01,0 +PARAM_EYE_BALL_Y=-0.5,-0.5,-0.5,-0.5,-0.5,-0.503,-0.513,-0.528,-0.547,-0.57,-0.6,-0.63,-0.66,-0.69,-0.73,-0.76,-0.8,-0.83,-0.86,-0.89,-0.92,-0.94,-0.962,-0.978,-0.99,-0.997,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.996,-0.983,-0.963,-0.94,-0.91,-0.87,-0.83,-0.79,-0.75,-0.71,-0.67,-0.63,-0.59,-0.56,-0.54,-0.517,-0.504,-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.11,-0.28,-0.44,-0.55,-0.6,-0.56,-0.45,-0.32,-0.19,-0.09,-0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.1,-0.27,-0.42,-0.54,-0.58,-0.54,-0.43,-0.31,-0.18,-0.08,-0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0 +PARAM_BROW_R_ANGLE=0 +PARAM_BROW_L_FORM=0 +PARAM_BROW_R_FORM=0 +PARAM_MOUTH_FORM=0,0.001,-0.006,-0.023,-0.05,-0.2,-0.39,-0.52,-0.56,-0.45,-0.2,0.14,0.48,0.73,0.84,0.81,0.75,0.66,0.56,0.45,0.34,0.24,0.15,0.08,0.03,0.01,0.003,0,-0.001,-0.001,-0.001,0,0,0,0,0,0,0,0,0,0,0,0,-0.009,-0.03,-0.07,-0.12,-0.18,-0.24,-0.31,-0.38,-0.45,-0.53,-0.6,-0.67,-0.74,-0.8,-0.86,-0.91,-0.94,-0.97,-0.993,-1,-1,-1,-1,-1,-1,-0.991,-0.97,-0.93,-0.87,-0.81,-0.74,-0.66,-0.58,-0.5,-0.42,-0.34,-0.26,-0.19,-0.13,-0.07,-0.03,-0.01,0 +PARAM_MOUTH_OPEN_Y=0,0.06,0.16,0.23,0.25,0.19,0.09,0.02,0,0.05,0.17,0.34,0.5,0.62,0.67,0.655,0.62,0.56,0.5,0.44,0.38,0.32,0.27,0.23,0.2,0.19,0.23,0.31,0.43,0.55,0.65,0.74,0.8,0.86,0.9,0.94,0.96,0.979,0.989,0.995,0.999,1,1,0.991,0.97,0.93,0.88,0.82,0.76,0.69,0.62,0.55,0.47,0.4,0.33,0.26,0.2,0.14,0.09,0.06,0.03,0.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0,0,0,0,0,-0.04,-0.17,-0.35,-0.59,-0.88,-1.2,-1.54,-1.9,-2.27,-2.64,-3,-3.36,-3.69,-4,-4.28,-4.53,-4.72,-4.87,-4.97,-5,-4.96,-4.85,-4.69,-4.48,-4.25,-4,-3.75,-3.52,-3.31,-3.15,-3.04,-3,-3.07,-3.25,-3.52,-3.84,-4.16,-4.48,-4.75,-4.93,-5,-4.94,-4.77,-4.56,-4.3,-4.04,-3.77,-3.53,-3.32,-3.15,-3.04,-3,-3.04,-3.14,-3.31,-3.53,-3.78,-4.06,-4.35,-4.65,-4.94,-5.22,-5.47,-5.69,-5.86,-5.96,-6,-5.89,-5.59,-5.15,-4.62,-4.02,-3.39,-2.76,-2.15,-1.58,-1.06,-0.63,-0.29,-0.08,0 +PARAM_BODY_ANGLE_Z=0,0,0,0,0,-0.03,-0.1,-0.21,-0.36,-0.53,-0.72,-0.92,-1.14,-1.36,-1.58,-1.8,-2.01,-2.22,-2.4,-2.57,-2.72,-2.83,-2.92,-2.98,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2.97,-2.9,-2.78,-2.62,-2.44,-2.22,-1.99,-1.75,-1.5,-1.25,-1.01,-0.78,-0.56,-0.38,-0.22,-0.1,-0.03,0 +PARAM_BREATH=0,0,0,0,0,0.005,0.02,0.04,0.07,0.11,0.16,0.21,0.26,0.32,0.38,0.44,0.5,0.56,0.62,0.68,0.74,0.79,0.84,0.89,0.93,0.96,0.98,0.995,1,0.997,0.989,0.977,0.96,0.94,0.91,0.88,0.85,0.82,0.78,0.74,0.7,0.66,0.62,0.57,0.53,0.48,0.44,0.4,0.35,0.31,0.27,0.23,0.2,0.16,0.13,0.1,0.08,0.05,0.035,0.02,0.009,0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.01,-0.03,-0.07,-0.12,-0.17,-0.22,-0.27,-0.32,-0.37,-0.41,-0.45,-0.48,-0.494,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.494,-0.477,-0.45,-0.42,-0.38,-0.34,-0.3,-0.26,-0.21,-0.17,-0.13,-0.1,-0.06,-0.04,-0.017,-0.004,0 +PARAM_RARM02=0,0.06,0.21,0.44,0.72,1.02,1.35,1.67,1.99,2.29,2.55,2.77,2.95,3.06,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.1,3.101,3.103,3.107,3.112,3.118,3.124,3.131,3.138,3.145,3.153,3.16,3.167,3.174,3.18,3.186,3.191,3.194,3.197,3.199,3.2,3.202,3.205,3.208,3.21,3.209,3.205,3.196,3.182,3.162,3.14,3.1,3.02,2.89,2.71,2.5,2.26,2.01,1.75,1.49,1.23,0.99,0.76,0.55,0.36,0.21,0.1,0.03,0 +PARAM_RARM03=0,-0.002,-0.006,-0.014,-0.025,-0.039,-0.056,-0.075,-0.1,-0.12,-0.15,-0.18,-0.22,-0.26,-0.3,-0.35,-0.41,-0.47,-0.52,-0.58,-0.64,-0.69,-0.74,-0.79,-0.84,-0.91,-0.97,-1.04,-1.1,-1.17,-1.23,-1.3,-1.36,-1.42,-1.48,-1.53,-1.59,-1.64,-1.71,-1.76,-1.81,-1.85,-1.88,-1.9,-1.92,-1.939,-1.95,-1.956,-1.958,-1.945,-1.91,-1.85,-1.78,-1.7,-1.6,-1.49,-1.38,-1.26,-1.14,-1.03,-0.91,-0.79,-0.68,-0.57,-0.48,-0.39,-0.31,-0.25,-0.2,-0.15,-0.12,-0.09,-0.06,-0.042,-0.027,-0.015,-0.007,-0.001,0.002,0.004,0.004,0.004,0.003,0.001,0,0 +PARAM_LARM01=0,0.01,0.03,0.07,0.12,0.17,0.22,0.27,0.32,0.37,0.41,0.45,0.48,0.494,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.494,0.477,0.45,0.42,0.38,0.34,0.3,0.26,0.21,0.17,0.13,0.1,0.06,0.04,0.017,0.004,0 +PARAM_LARM02=0,-0.06,-0.2,-0.41,-0.67,-0.96,-1.26,-1.56,-1.86,-2.14,-2.39,-2.6,-2.76,-2.86,-2.9,-2.891,-2.87,-2.83,-2.79,-2.75,-2.72,-2.69,-2.66,-2.645,-2.64,-2.65,-2.68,-2.72,-2.78,-2.85,-2.94,-3.03,-3.13,-3.24,-3.36,-3.47,-3.59,-3.71,-3.83,-3.94,-4.05,-4.16,-4.25,-4.34,-4.41,-4.47,-4.51,-4.54,-4.549,-4.549,-4.549,-4.549,-4.55,-4.55,-4.55,-4.549,-4.549,-4.548,-4.546,-4.544,-4.542,-4.539,-4.536,-4.532,-4.527,-4.521,-4.515,-4.508,-4.5,-4.43,-4.28,-4.04,-3.75,-3.42,-3.05,-2.67,-2.28,-1.89,-1.52,-1.17,-0.85,-0.56,-0.33,-0.15,-0.04,0 +PARAM_LARM03=0,0.006,0.023,0.06,0.1,0.17,0.26,1.38,1.45,1.51,1.55,1.57,1.59,1.598,1.6,1.586,1.55,1.5,1.44,1.38,1.32,1.27,1.23,1.21,1.201,1.214,1.25,1.3,1.37,1.45,1.53,1.6,1.68,1.74,1.8,1.84,1.86,1.87,1.85,1.78,1.7,1.59,1.47,1.34,1.21,1.09,0.96,0.84,0.74,0.64,0.57,0.51,0.47,0.45,0.436,0.429,0.428,0.428,0.436,0.46,0.49,0.52,0.56,0.59,0.63,0.66,0.68,0.695,0.7,0.691,0.67,0.63,0.59,0.53,0.48,0.42,0.36,0.3,0.24,0.18,0.13,0.09,0.05,0.02,0.006,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_00=0,0,0,0,0,0,0,0.95,0.966,0.977,0.985,0.991,0.995,0.998,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_09.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_09.mtn new file mode 100644 index 0000000..d6335f5 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_09.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0 +PARAM_ANGLE_Y=0,0,0,0,-0.69,-2.49,-5.1,-8.08,-11.17,-14.05,-16.52,-18.4,-19.58,-20,-16.72,-9.64,-0.81,8.36,16.73,23.67,28.28,30,29.7,28.9,27.66,26.1,24.37,22.5,20.63,18.9,17.34,16.1,15.3,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,14.87,14.48,13.9,13.12,12.2,11.16,10.03,8.86,7.65,6.45,5.29,4.2,3.18,2.28,1.49,0.86,0.39,0.1,0 +PARAM_ANGLE_Z=0,0,0,0,-0.19,-0.72,-1.55,-2.61,-3.84,-5.2,-6.6,-8.03,-9.41,-10.74,-11.93,-12.98,-13.84,-14.47,-14.87,-15,-14.81,-14.28,-13.45,-12.39,-11.16,-9.8,-8.4,-6.97,-5.59,-4.26,-3.07,-2.02,-1.16,-0.53,-0.13,0,0,0,0,0,0,0,0,0.6,2.21,4.69,7.8,11.26,15,18.74,22.2,25.31,27.79,29.4,30,29.998,29.986,29.96,29.91,29.83,29.71,29.56,29.35,29.08,28.75,28.35,27.87,27.31,26.66,25.91,25.06,24.09,23,21.71,20.29,18.79,17.18,15.55,13.88,12.2,10.57,8.98,7.44,6.01,4.71,3.53,2.5,1.62,0.93,0.42,0.11,0 +PARAM_EYE_L_OPEN=1,1,1,1,0.82,0.54,0.27,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,0.992,0.97,0.94,0.9,0.86,0.82,0.79,0.77,0.76,0.761,0.763,0.766,0.77,0.775,0.779,0.784,0.788,0.792,0.796,0.798,0.799,0.8,0.8,0.8,0.8,0.8,0.8,0.802,0.807,0.815,0.825,0.837,0.851,0.866,0.882,0.898,0.914,0.929,0.944,0.958,0.97,0.98,0.989,0.995,0.999,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.67,0.59,0.51,0.43,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0 +PARAM_EYE_R_OPEN=1,1,1,1,0.82,0.54,0.27,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,0.992,0.97,0.94,0.9,0.86,0.82,0.79,0.77,0.76,0.761,0.763,0.766,0.77,0.775,0.779,0.784,0.788,0.792,0.796,0.798,0.799,0.8,0.8,0.8,0.8,0.8,0.8,0.802,0.807,0.815,0.825,0.837,0.851,0.866,0.882,0.898,0.914,0.929,0.944,0.958,0.97,0.98,0.989,0.995,0.999,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.67,0.59,0.51,0.43,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07,0.25,0.47,0.68,0.85,0.96,1,0.992,0.972,0.94,0.91,0.88,0.85,0.82,0.79,0.77,0.755,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.743,0.724,0.69,0.66,0.61,0.56,0.5,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07,0.25,0.47,0.68,0.85,0.96,1,0.992,0.972,0.94,0.91,0.88,0.85,0.82,0.79,0.77,0.755,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.743,0.724,0.69,0.66,0.61,0.56,0.5,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0,0,0,0,0,0,0,0.001,0.001,0.002,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.01,0.011,0.013,0.015,0.017,0.019,0.021,0.023,0.026,0.029,0.032,0.035,0.038,0.041,0.045,0.048,0.052,0.056,0.06,0.065,0.069,0.074,0.079,0.085,0.09,0.096,0.101,0.107,0.114,0.12,0.127,0.134,0.141,0.148,0.156,0.164,0.172,0.18,0.193,0.21,0.23,0.26,0.28,0.31,0.34,0.36,0.38,0.397,0.41,0.417,0.42,0.418,0.412,0.402,0.389,0.373,0.354,0.33,0.31,0.29,0.26,0.24,0.21,0.18,0.16,0.13,0.11,0.09,0.07,0.047,0.031,0.018,0.008,0.002,0 +PARAM_BROW_R_ANGLE=0,0,0,0,0,0,0,0.001,0.001,0.002,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.009,0.011,0.012,0.014,0.016,0.018,0.02,0.022,0.025,0.027,0.03,0.033,0.036,0.039,0.042,0.046,0.05,0.054,0.057,0.062,0.066,0.071,0.075,0.08,0.085,0.091,0.096,0.102,0.108,0.114,0.12,0.126,0.133,0.14,0.147,0.155,0.162,0.17,0.181,0.197,0.215,0.24,0.26,0.28,0.3,0.321,0.337,0.351,0.361,0.368,0.37,0.368,0.363,0.354,0.342,0.329,0.312,0.294,0.274,0.25,0.23,0.21,0.19,0.16,0.14,0.12,0.1,0.076,0.058,0.041,0.028,0.016,0.007,0.002,0 +PARAM_BROW_L_FORM=0 +PARAM_BROW_R_FORM=0 +PARAM_MOUTH_FORM=0,-0.04,-0.13,-0.24,-0.36,-0.46,-0.55,-0.61,-0.63,-0.617,-0.58,-0.52,-0.45,-0.36,-0.26,-0.15,-0.03,0.09,0.22,0.34,0.46,0.56,0.64,0.7,0.75,0.78,0.796,0.806,0.809,0.81,0.68,0.37,0,-0.37,-0.67,-0.86,-0.92,-0.913,-0.89,-0.85,-0.78,-0.69,-0.57,-0.43,-0.27,-0.11,0.05,0.21,0.37,0.52,0.65,0.77,0.86,0.91,0.94,0.951,0.961,0.969,0.976,0.982,0.987,0.991,0.994,0.997,0.998,0.999,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.67,0.59,0.51,0.43,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0 +PARAM_MOUTH_OPEN_Y=0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,0.82,0.54,0.27,0.08,0,0.03,0.11,0.22,0.33,0.43,0.52,0.58,0.64,0.7,0.75,0.8,0.84,0.88,0.91,0.94,0.96,0.979,0.99,0.996,0.999,1,1,1,0.96,0.86,0.73,0.6,0.5,0.46,0.464,0.475,0.494,0.52,0.55,0.59,0.64,0.69,0.75,0.8,0.82,0.83,0.813,0.77,0.7,0.62,0.53,0.43,0.33,0.24,0.16,0.09,0.04,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0 +PARAM_BODY_ANGLE_Z=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07,0.25,0.52,0.84,1.16,1.48,1.75,1.93,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1.982,1.93,1.85,1.75,1.63,1.49,1.34,1.18,1.02,0.86,0.71,0.56,0.42,0.3,0.2,0.11,0.05,0.01,0 +PARAM_BREATH=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.013,0.05,0.1,0.17,0.26,0.35,0.44,0.54,0.63,0.72,0.8,0.87,0.92,0.96,0.99,1,0.995,0.98,0.96,0.93,0.89,0.84,0.8,0.74,0.69,0.63,0.57,0.51,0.45,0.39,0.33,0.27,0.22,0.18,0.13,0.09,0.06,0.04,0.016,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.003,0.01,0.022,0.038,0.057,0.08,0.11,0.13,0.16,0.19,0.23,0.26,0.29,0.32,0.35,0.39,0.41,0.44,0.46,0.485,0.502,0.516,0.525,0.53,0.532,0.534,0.536,0.538,0.54,0.541,0.543,0.544,0.546,0.547,0.548,0.549,0.55,0.551,0.552,0.553,0.554,0.555,0.555,0.556,0.556,0.557,0.557,0.558,0.558,0.558,0.559,0.559,0.559,0.559,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.557,0.549,0.536,0.518,0.5,0.47,0.44,0.42,0.38,0.35,0.32,0.28,0.24,0.21,0.18,0.14,0.12,0.09,0.06,0.04,0.024,0.011,0.003,0 +PARAM_UPBACK=0,0,0,0,0.007,0.026,0.06,0.09,0.14,0.2,0.26,0.32,0.39,0.46,0.54,0.61,0.68,0.74,0.8,0.86,0.91,0.94,0.97,0.993,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.67,0.59,0.51,0.43,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,0.001,0.003,0.007,0.012,0.018,0.026,0.035,0.045,0.056,0.069,0.083,0.098,0.114,0.131,0.149,0.168,0.188,0.21,0.23,0.25,0.28,0.3,0.33,0.35,0.38,0.4,0.43,0.46,0.49,0.51,0.54,0.58,0.6,0.63,0.65,0.672,0.689,0.703,0.716,0.726,0.735,0.742,0.748,0.753,0.756,0.758,0.76,0.76,0.76,0.759,0.757,0.754,0.75,0.746,0.74,0.732,0.724,0.713,0.702,0.688,0.673,0.657,0.638,0.62,0.59,0.57,0.54,0.51,0.48,0.44,0.41,0.37,0.34,0.31,0.28,0.25,0.22,0.19,0.17,0.14,0.12,0.1,0.078,0.061,0.045,0.032,0.021,0.012,0.005,0.001,0 +PARAM_RARM02=0,0,-0.002,-0.004,-0.007,-0.012,-0.016,-0.022,-0.028,-0.035,-0.042,-0.05,-0.059,-0.068,-0.077,-0.087,-0.097,-0.107,-0.118,-0.129,-0.14,-0.151,-0.162,-0.173,-0.184,-0.195,-0.206,-0.217,-0.228,-0.238,-0.248,-0.258,-0.267,-0.276,-0.285,-0.293,-0.3,-0.307,-0.313,-0.319,-0.324,-0.328,-0.331,-0.333,-0.335,-0.335,-0.335,-0.335,-0.335,-0.335,-0.335,-0.334,-0.333,-0.332,-0.331,-0.33,-0.329,-0.328,-0.327,-0.326,-0.325,-0.324,-0.322,-0.321,-0.32,-0.318,-0.316,-0.315,-0.313,-0.31,-0.308,-0.306,-0.3,-0.291,-0.278,-0.262,-0.244,-0.225,-0.2,-0.18,-0.16,-0.14,-0.12,-0.1,-0.076,-0.058,-0.041,-0.027,-0.016,-0.007,-0.002,0 +PARAM_RARM03=0,0,-0.001,-0.002,-0.003,-0.005,-0.006,-0.009,-0.011,-0.015,-0.018,-0.022,-0.026,-0.03,-0.035,-0.04,-0.045,-0.051,-0.057,-0.064,-0.071,-0.078,-0.085,-0.093,-0.101,-0.11,-0.118,-0.128,-0.137,-0.147,-0.157,-0.167,-0.178,-0.189,-0.2,-0.212,-0.224,-0.236,-0.249,-0.262,-0.275,-0.288,-0.302,-0.318,-0.333,-0.347,-0.36,-0.373,-0.385,-0.397,-0.408,-0.419,-0.429,-0.44,-0.451,-0.462,-0.472,-0.481,-0.489,-0.497,-0.504,-0.51,-0.516,-0.521,-0.525,-0.529,-0.532,-0.535,-0.537,-0.538,-0.539,-0.539,-0.534,-0.521,-0.501,-0.48,-0.44,-0.41,-0.37,-0.33,-0.29,-0.25,-0.22,-0.18,-0.14,-0.11,-0.08,-0.05,-0.03,-0.014,-0.004,0 +PARAM_LARM01=0,-0.004,-0.014,-0.03,-0.05,-0.08,-0.12,-0.16,-0.2,-0.25,-0.3,-0.36,-0.42,-0.48,-0.54,-0.61,-0.68,-0.75,-0.83,-0.9,-0.97,-1.05,-1.13,-1.2,-1.27,-1.35,-1.42,-1.49,-1.56,-1.62,-1.68,-1.74,-1.8,-1.85,-1.9,-1.94,-1.98,-2.02,-2.05,-2.07,-2.086,-2.096,-2.1,-2.1,-2.101,-2.101,-2.1,-2.098,-2.092,-2.085,-2.077,-2.07,-2.062,-2.054,-2.045,-2.036,-2.026,-2.016,-2.004,-1.992,-1.979,-1.965,-1.95,-1.933,-1.915,-1.896,-1.88,-1.85,-1.83,-1.79,-1.74,-1.67,-1.59,-1.5,-1.4,-1.3,-1.19,-1.08,-0.97,-0.85,-0.74,-0.64,-0.53,-0.43,-0.34,-0.26,-0.19,-0.12,-0.07,-0.03,-0.01,0 +PARAM_LARM02=0,0.001,0.003,0.006,0.011,0.017,0.024,0.033,0.042,0.053,0.064,0.077,0.09,0.104,0.119,0.135,0.151,0.169,0.186,0.204,0.223,0.242,0.261,0.282,0.301,0.322,0.34,0.36,0.384,0.4,0.43,0.45,0.467,0.49,0.507,0.527,0.547,0.566,0.585,0.603,0.621,0.638,0.655,0.67,0.686,0.7,0.71,0.715,0.715,0.712,0.71,0.708,0.708,0.709,0.709,0.708,0.707,0.704,0.701,0.696,0.689,0.68,0.669,0.656,0.641,0.624,0.603,0.58,0.55,0.53,0.49,0.46,0.43,0.4,0.37,0.34,0.3,0.27,0.24,0.21,0.18,0.15,0.13,0.1,0.08,0.06,0.043,0.028,0.016,0.007,0.002,0 +PARAM_LARM03=0,0.001,0.005,0.011,0.019,0.029,0.041,0.054,0.068,0.084,0.1,0.117,0.135,0.153,0.172,0.191,0.21,0.229,0.247,0.265,0.283,0.3,0.316,0.331,0.346,0.359,0.37,0.381,0.389,0.396,0.401,0.405,0.406,0.405,0.402,0.397,0.39,0.38,0.367,0.35,0.33,0.31,0.28,0.25,0.21,0.17,0.12,0.07,0.01,-0.06,-0.13,-0.2,-0.29,-0.38,-0.47,-0.58,-0.7,-0.82,-0.95,-1.08,-1.21,-1.34,-1.48,-1.6,-1.73,-1.84,-1.95,-2.05,-2.14,-2.21,-2.28,-2.32,-2.35,-2.361,-2.34,-2.28,-2.19,-2.06,-1.92,-1.75,-1.57,-1.38,-1.18,-0.98,-0.79,-0.61,-0.44,-0.3,-0.18,-0.08,-0.02,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_10.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_10.mtn new file mode 100644 index 0000000..f452338 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_10.mtn @@ -0,0 +1,78 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,-0.07,-0.28,-0.59,-1.01,-1.5,-2.07,-2.69,-3.33,-4,-4.67,-5.31,-5.93,-6.5,-6.99,-7.41,-7.72,-7.93,-8,-7.84,-7.4,-6.71,-5.82,-4.79,-3.64,-2.46,-1.25,-0.07,1.08,2.11,3.03,3.8,4.4,4.81,5,5.1,5.18,5.27,5.35,5.42,5.48,5.55,5.6,5.65,5.7,5.74,5.78,5.81,5.84,5.87,5.89,5.92,5.933,5.948,5.961,5.971,5.979,5.986,5.991,5.995,5.997,5.999,6,6,6,5.989,5.95,5.9,5.82,5.73,5.62,5.49,5.35,5.19,5.02,4.84,4.65,4.45,4.24,4.03,3.81,3.59,3.37,3.14,2.92,2.69,2.47,2.25,2.03,1.82,1.62,1.42,1.23,1.05,0.88,0.73,0.58,0.45,0.34,0.24,0.15,0.09,0.04,0.01,0 +PARAM_ANGLE_Y=0,-0.27,-1.03,-2.23,-3.8,-5.64,-7.76,-10.07,-12.51,-15,-17.49,-19.93,-22.24,-24.36,-26.2,-27.77,-28.97,-29.73,-30,-29.91,-29.66,-29.24,-28.66,-27.94,-27.09,-26.11,-24.99,-23.78,-22.43,-21.02,-19.51,-17.89,-16.23,-14.51,-12.73,-10.89,-9.01,-7.1,-5.16,-3.2,-1.23,0.75,2.7,4.64,6.59,8.47,10.35,12.16,13.92,15.63,17.29,18.87,20.38,21.78,23.12,24.36,25.47,26.49,27.38,28.16,28.81,29.32,29.7,29.92,30,29.94,29.77,29.49,29.12,28.65,28.09,27.46,26.73,25.95,25.11,24.22,23.25,22.25,21.22,20.16,19.06,17.97,16.84,15.7,14.58,13.44,12.33,11.23,10.16,9.1,8.08,7.09,6.14,5.26,4.41,3.63,2.92,2.27,1.69,1.19,0.77,0.44,0.2,0.05,0 +PARAM_ANGLE_Z=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.12,-0.46,-1.01,-1.73,-2.61,-3.63,-4.79,-6.03,-7.38,-8.78,-10.24,-11.73,-13.27,-14.8,-16.34,-17.86,-19.34,-20.8,-22.18,-23.49,-24.71,-25.84,-26.87,-27.77,-28.54,-29.16,-29.62,-29.9,-30,-29.68,-28.79,-27.48,-25.86,-24.11,-22.27,-20.51,-18.96,-17.75,-16.76,-15.78,-14.83,-13.94,-13.07,-12.23,-11.43,-10.65,-9.91,-9.21,-8.53,-7.87,-7.26,-6.67,-6.11,-5.58,-5.08,-4.61,-4.15,-3.74,-3.34,-2.97,-2.62,-2.3,-2,-1.73,-1.47,-1.24,-1.03,-0.84,-0.68,-0.53,-0.4,-0.29,-0.2,-0.13,-0.07,-0.03,-0.01,0 +PARAM_EYE_L_OPEN=1,1,1,0.999,0.996,0.99,0.981,0.967,0.948,0.92,0.89,0.85,0.8,0.73,0.66,0.58,0.5,0.43,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_L_SMILE=0 +PARAM_EYE_R_OPEN=1,1,1,0.999,0.996,0.99,0.981,0.967,0.948,0.92,0.89,0.85,0.8,0.73,0.66,0.58,0.5,0.43,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.12,0.25,0.4,0.56,0.7,0.83,0.92,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +PARAM_EYE_R_SMILE=0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5,-0.509,-0.53,-0.57,-0.62,-0.68,-0.73,-0.79,-0.85,-0.9,-0.94,-0.97,-0.983,-0.987,-0.991,-0.994,-0.996,-0.998,-0.999,-0.999,-1,-1,-1,-1,-1,-1,-1,-1,-0.999,-0.999,-0.998,-0.997,-0.995,-0.993,-0.991,-0.989,-0.986,-0.983,-0.98,-0.976,-0.972,-0.968,-0.963,-0.959,-0.953,-0.948,-0.942,-0.936,-0.93,-0.923,-0.916,-0.908,-0.901,-0.893,-0.884,-0.875,-0.866,-0.857,-0.847,-0.836,-0.826,-0.815,-0.803,-0.791,-0.779,-0.767,-0.754,-0.741,-0.729,-0.717,-0.706,-0.694,-0.683,-0.672,-0.662,-0.652,-0.641,-0.632,-0.623,-0.614,-0.605,-0.597,-0.588,-0.581,-0.573,-0.566,-0.56,-0.553,-0.547,-0.542,-0.536,-0.531,-0.527,-0.522,-0.519,-0.515,-0.512,-0.509,-0.507,-0.505,-0.503,-0.502,-0.501,-0.5,-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,-0.019,-0.07,-0.14,-0.23,-0.33,-0.43,-0.54,-0.64,-0.74,-0.82,-0.89,-0.95,-0.99,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.97,-0.88,-0.75,-0.6,-0.44,-0.3,-0.17,-0.08,-0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,-0.019,-0.07,-0.14,-0.23,-0.33,-0.43,-0.54,-0.64,-0.74,-0.82,-0.89,-0.95,-0.99,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.97,-0.88,-0.75,-0.6,-0.44,-0.3,-0.17,-0.08,-0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0 +PARAM_BROW_R_ANGLE=0 +PARAM_BROW_L_FORM=0 +PARAM_BROW_R_FORM=0 +PARAM_MOUTH_FORM=0,0.16,0.42,0.6,0.66,0.66,0.655,0.64,0.27,0.02,-0.21,-0.33,-0.37,-0.359,-0.33,-0.29,-0.23,-0.17,-0.1,-0.03,0.05,0.13,0.21,0.29,0.4,0.46,0.51,0.55,0.58,0.62,0.65,0.67,0.691,0.71,0.74,0.76,0.778,0.79,0.806,0.821,0.835,0.849,0.862,0.875,0.887,0.898,0.908,0.919,0.928,0.937,0.945,0.953,0.96,0.966,0.972,0.978,0.982,0.987,0.99,0.993,0.996,0.998,0.999,1,1,0.998,0.992,0.983,0.971,0.955,0.936,0.92,0.89,0.87,0.84,0.81,0.77,0.74,0.71,0.67,0.64,0.6,0.56,0.52,0.49,0.45,0.41,0.37,0.34,0.3,0.27,0.24,0.2,0.18,0.15,0.12,0.1,0.08,0.056,0.04,0.026,0.015,0.007,0.002,0 +PARAM_MOUTH_OPEN_Y=0,0.07,0.19,0.26,0.29,0.29,0.285,0.27,0.07,0,0.24,0.66,0.9,0.889,0.86,0.82,0.76,0.7,0.64,0.57,0.49,0.42,0.34,0.27,0.19,0.16,0.152,0.15,0.15,0.164,0.19,0.21,0.224,0.23,0.215,0.19,0.175,0.17,0.17,0.172,0.173,0.176,0.179,0.183,0.187,0.191,0.196,0.201,0.206,0.212,0.217,0.223,0.228,0.234,0.239,0.244,0.249,0.253,0.257,0.261,0.264,0.267,0.268,0.27,0.27,0.269,0.268,0.265,0.262,0.258,0.253,0.247,0.241,0.234,0.226,0.218,0.209,0.2,0.191,0.181,0.172,0.162,0.152,0.141,0.131,0.121,0.111,0.101,0.091,0.082,0.073,0.064,0.055,0.047,0.04,0.033,0.026,0.02,0.015,0.011,0.007,0.004,0.002,0,0 +PARAM_BODY_ANGLE_X=0 +PARAM_BODY_ANGLE_Z=0,0.07,0.25,0.47,0.68,0.85,0.96,1,0.94,0.77,0.56,0.3,0.04,-0.23,-0.47,-0.68,-0.85,-0.96,-1,-0.96,-0.86,-0.69,-0.48,-0.23,0.04,0.32,0.61,0.88,1.15,1.39,1.6,1.77,1.89,1.97,2,1.95,1.81,1.59,1.3,0.98,0.61,0.24,-0.14,-0.51,-0.86,-1.18,-1.46,-1.69,-1.86,-1.96,-2,-1.998,-1.992,-1.982,-1.969,-1.952,-1.931,-1.91,-1.88,-1.85,-1.82,-1.79,-1.75,-1.71,-1.67,-1.62,-1.58,-1.53,-1.48,-1.43,-1.38,-1.33,-1.28,-1.22,-1.17,-1.11,-1.06,-1,-0.94,-0.89,-0.83,-0.78,-0.72,-0.67,-0.62,-0.57,-0.52,-0.47,-0.42,-0.38,-0.33,-0.29,-0.25,-0.21,-0.18,-0.15,-0.12,-0.09,-0.07,-0.048,-0.031,-0.018,-0.008,-0.002,0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.005,0.019,0.04,0.07,0.11,0.15,0.19,0.24,0.3,0.35,0.41,0.46,0.52,0.58,0.63,0.69,0.74,0.79,0.83,0.87,0.91,0.94,0.97,0.984,0.996,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.998,0.992,0.983,0.971,0.955,0.936,0.92,0.89,0.87,0.84,0.81,0.77,0.74,0.71,0.67,0.64,0.6,0.56,0.52,0.49,0.45,0.41,0.37,0.34,0.3,0.27,0.24,0.2,0.18,0.15,0.12,0.1,0.08,0.056,0.04,0.026,0.015,0.007,0.002,0 +PARAM_UPBACK=0,-0.002,-0.007,-0.015,-0.026,-0.039,-0.054,-0.07,-0.088,-0.107,-0.126,-0.146,-0.17,-0.188,-0.21,-0.228,-0.248,-0.266,-0.283,-0.3,-0.314,-0.327,-0.339,-0.348,-0.354,-0.359,-0.36,-0.358,-0.353,-0.345,-0.334,-0.321,-0.305,-0.287,-0.27,-0.24,-0.22,-0.2,-0.17,-0.14,-0.12,-0.09,-0.06,-0.03,0,0.03,0.06,0.09,0.12,0.15,0.18,0.2,0.23,0.25,0.28,0.3,0.317,0.335,0.352,0.366,0.378,0.387,0.394,0.399,0.4,0.399,0.397,0.393,0.388,0.382,0.375,0.366,0.356,0.346,0.335,0.323,0.31,0.297,0.283,0.269,0.254,0.24,0.225,0.209,0.194,0.179,0.164,0.15,0.135,0.121,0.108,0.095,0.082,0.07,0.059,0.048,0.039,0.03,0.023,0.016,0.01,0.006,0.003,0.001,0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,0.016,0.06,0.12,0.2,0.28,0.37,0.46,0.55,0.63,0.71,0.77,0.82,0.85,0.86,0.86,0.86,0.86,0.859,0.859,0.859,0.858,0.858,0.857,0.857,0.856,0.855,0.854,0.852,0.851,0.85,0.848,0.846,0.844,0.842,0.839,0.837,0.834,0.831,0.828,0.824,0.821,0.817,0.813,0.808,0.804,0.799,0.794,0.788,0.782,0.776,0.77,0.763,0.757,0.749,0.742,0.734,0.726,0.717,0.708,0.699,0.689,0.68,0.669,0.659,0.648,0.636,0.625,0.613,0.6,0.585,0.569,0.552,0.533,0.514,0.49,0.47,0.45,0.43,0.41,0.38,0.36,0.34,0.31,0.29,0.27,0.25,0.22,0.2,0.18,0.16,0.141,0.122,0.104,0.088,0.072,0.058,0.045,0.034,0.024,0.016,0.009,0.004,0.001,0 +PARAM_RARM02=0,-0.006,-0.022,-0.05,-0.07,-0.11,-0.14,-0.18,-0.21,-0.24,-0.27,-0.29,-0.315,-0.329,-0.335,-0.338,-0.341,-0.344,-0.346,-0.349,-0.352,-0.354,-0.356,-0.359,-0.361,-0.363,-0.365,-0.367,-0.369,-0.371,-0.372,-0.374,-0.376,-0.377,-0.379,-0.38,-0.382,-0.383,-0.384,-0.385,-0.386,-0.388,-0.389,-0.39,-0.39,-0.391,-0.392,-0.393,-0.394,-0.394,-0.395,-0.395,-0.396,-0.397,-0.397,-0.397,-0.398,-0.398,-0.398,-0.399,-0.399,-0.399,-0.399,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.4,-0.399,-0.396,-0.391,-0.384,-0.376,-0.366,-0.355,-0.343,-0.33,-0.316,-0.301,-0.285,-0.269,-0.253,-0.236,-0.219,-0.202,-0.185,-0.168,-0.152,-0.135,-0.119,-0.104,-0.09,-0.076,-0.063,-0.051,-0.04,-0.03,-0.021,-0.014,-0.008,-0.004,-0.001,0 +PARAM_RARM03=0,-0.006,-0.021,-0.04,-0.07,-0.1,-0.13,-0.16,-0.19,-0.22,-0.25,-0.27,-0.285,-0.296,-0.3,-0.3,-0.3,-0.299,-0.298,-0.297,-0.296,-0.295,-0.293,-0.292,-0.29,-0.288,-0.285,-0.283,-0.28,-0.278,-0.275,-0.272,-0.269,-0.266,-0.262,-0.259,-0.255,-0.251,-0.247,-0.243,-0.239,-0.235,-0.231,-0.227,-0.222,-0.218,-0.213,-0.209,-0.204,-0.199,-0.194,-0.19,-0.185,-0.18,-0.175,-0.17,-0.165,-0.16,-0.155,-0.15,-0.145,-0.14,-0.135,-0.13,-0.125,-0.12,-0.115,-0.11,-0.106,-0.101,-0.096,-0.091,-0.087,-0.082,-0.078,-0.073,-0.069,-0.065,-0.061,-0.057,-0.053,-0.049,-0.045,-0.041,-0.038,-0.034,-0.031,-0.028,-0.025,-0.022,-0.02,-0.017,-0.015,-0.012,-0.01,-0.008,-0.007,-0.005,-0.004,-0.003,-0.002,-0.001,0,0,0 +PARAM_LARM01=0,-0.07,-0.27,-0.55,-0.88,-1.22,-1.55,-1.83,-2.03,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.1,-2.094,-2.078,-2.05,-2.02,-1.97,-1.92,-1.86,-1.8,-1.73,-1.66,-1.58,-1.5,-1.41,-1.33,-1.24,-1.15,-1.06,-0.97,-0.88,-0.8,-0.71,-0.63,-0.55,-0.47,-0.4,-0.33,-0.27,-0.21,-0.16,-0.11,-0.07,-0.04,-0.02,-0.005,0 +PARAM_LARM02=0,0.02,0.09,0.18,0.29,0.41,0.52,0.61,0.68,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.698,0.693,0.684,0.672,0.658,0.641,0.621,0.6,0.58,0.55,0.53,0.5,0.47,0.44,0.41,0.38,0.35,0.32,0.29,0.27,0.24,0.21,0.18,0.16,0.13,0.11,0.09,0.069,0.052,0.037,0.024,0.014,0.006,0.002,0 +PARAM_LARM03=0,-0.014,-0.05,-0.11,-0.18,-0.25,-0.34,-0.42,-0.51,-0.59,-0.67,-0.74,-0.81,-0.86,-0.9,-0.93,-0.97,-1,-1.03,-1.06,-1.09,-1.12,-1.15,-1.17,-1.2,-1.23,-1.25,-1.27,-1.3,-1.32,-1.34,-1.36,-1.381,-1.4,-1.418,-1.436,-1.453,-1.469,-1.484,-1.499,-1.513,-1.527,-1.54,-1.552,-1.563,-1.574,-1.585,-1.594,-1.604,-1.612,-1.62,-1.628,-1.635,-1.642,-1.648,-1.654,-1.659,-1.663,-1.668,-1.672,-1.675,-1.678,-1.681,-1.683,-1.685,-1.686,-1.687,-1.688,-1.689,-1.689,-1.684,-1.671,-1.65,-1.62,-1.59,-1.55,-1.5,-1.45,-1.39,-1.33,-1.27,-1.2,-1.14,-1.07,-1,-0.93,-0.85,-0.78,-0.71,-0.64,-0.57,-0.5,-0.44,-0.38,-0.32,-0.26,-0.21,-0.17,-0.13,-0.09,-0.06,-0.03,-0.015,-0.004,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 +VISIBLE:ROUGH=1 +VISIBLE:PARTS_01_FACE_001=1 +VISIBLE:PARTS_01_EYE_001=1 +VISIBLE:PARTS_01_EYE_BALL_001=1 +VISIBLE:PARTS_01_BROW_001=1 +VISIBLE:PARTS_01_MOUTH_001=1 +VISIBLE:PARTS_01_NOSE_001=1 +VISIBLE:PARTS_01_EAR_001=1 +VISIBLE:PARTS_01_HAIR_FRONT_001=1 +VISIBLE:PARTS_01_HAIR_SIDE_001=1 +VISIBLE:PARTS_01_HAIR_BACK_001=1 +VISIBLE:PARTS_01_NECK=1 +VISIBLE:PARTS_01_BODY=1 +VISIBLE:PARTS_01_BACKGROUND=0 +VISIBLE:PARTS_01_SKETCH=0 +VISIBLE:PARTS_01_CORE=1 +VISIBLE:PARTS_01_AHO=1 +VISIBLE:PARTS_01_CHEEK=1 +VISIBLE:PARTS_01_ARM_L=1 +VISIBLE:PARTS_01_ARM_R=1 +VISIBLE:PARTS_01_LEG=1 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_11.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_11.mtn new file mode 100644 index 0000000..9342373 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_11.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,-0.08,-0.26,-0.5,-0.74,-0.92,-1,-1,-1,-1,-1,-0.987,-0.95,-0.9,-0.83,-0.74,-0.65,-0.56,-0.46,-0.37,-0.28,-0.2,-0.13,-0.08,-0.04,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_ANGLE_Y=0,-1.88,-6.44,-12.5,-18.56,-23.12,-25,-25,-25,-25,-25,-24.995,-24.976,-24.93,-24.85,-24.73,-24.56,-24.34,-24.05,-23.7,-23.26,-22.76,-22.17,-21.5,-20.76,-19.91,-19,-17.82,-16.61,-15.39,-14.22,-13.01,-11.86,-10.72,-9.61,-8.53,-7.5,-6.51,-5.57,-4.69,-3.86,-3.11,-2.43,-1.81,-1.28,-0.83,-0.48,-0.21,-0.06,0 +PARAM_ANGLE_Z=0,0.51,1.75,3.4,5.05,6.29,6.8,6.48,5.6,4.24,2.48,0.44,-1.86,-4.3,-6.79,-9.26,-11.9,-13.61,-14.79,-15.59,-16.09,-16.38,-16.52,-16.56,-16.48,-16.24,-15.87,-15.37,-14.79,-14.1,-13.34,-12.52,-11.66,-10.74,-9.82,-8.87,-7.92,-6.99,-6.07,-5.17,-4.33,-3.52,-2.77,-2.1,-1.5,-0.99,-0.57,-0.26,-0.07,0 +PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,0.997,0.991,0.98,0.968,0.953,0.937,0.92,0.902,0.885,0.868,0.853,0.838,0.825,0.815,0.807,0.802,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.804,0.814,0.828,0.846,0.866,0.887,0.91,0.93,0.947,0.965,0.979,0.99,0.997,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0,0,0,0,0,0.73,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.994,0.975,0.95,0.91,0.86,0.81,0.76,0.7,0.64,0.57,0.51,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,0.997,0.991,0.98,0.968,0.953,0.937,0.92,0.902,0.885,0.868,0.853,0.838,0.825,0.815,0.807,0.802,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.804,0.814,0.828,0.846,0.866,0.887,0.91,0.93,0.947,0.965,0.979,0.99,0.997,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0,0,0,0,0,0.013,0.05,0.1,0.16,0.24,0.32,0.4,0.49,0.58,0.66,0.74,0.81,0.87,0.93,0.97,0.99,1,0.994,0.975,0.95,0.91,0.86,0.81,0.76,0.7,0.64,0.57,0.51,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_EYE_BALL_X=0,-0.03,-0.08,-0.11,-0.12,-0.06,0.04,0.14,0.2,0.23,0.227,0.22,0.209,0.196,0.18,0.163,0.144,0.126,0.107,0.089,0.072,0.056,0.041,0.029,0.02,0.013,0.01,0.008,0.007,0.006,0.005,0.004,0.003,0.003,0.002,0.002,0.001,0.001,0.001,0,0,0,0,0,0,0,0,0,0,0 +PARAM_EYE_BALL_Y=-0.5,-0.35,-0.1,0.08,0.17,0.24,0.27,0.3,0.32,0.33,0.338,0.344,0.35,0.355,0.36,0.364,0.367,0.37,0.372,0.374,0.376,0.377,0.378,0.379,0.38,0.38,0.38,0.374,0.358,0.33,0.3,0.26,0.22,0.17,0.11,0.06,0,-0.05,-0.11,-0.16,-0.22,-0.27,-0.32,-0.36,-0.4,-0.43,-0.46,-0.483,-0.495,-0.5 +PARAM_BROW_L_Y=0,0.005,0.019,0.04,0.06,0.09,0.11,0.13,0.145,0.15,0.148,0.143,0.135,0.126,0.115,0.103,0.09,0.077,0.064,0.051,0.039,0.029,0.019,0.011,0.005,0.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0.005,0.018,0.036,0.06,0.08,0.1,0.122,0.135,0.14,0.135,0.123,0.104,0.08,0.05,0.02,-0.01,-0.04,-0.07,-0.1,-0.13,-0.16,-0.18,-0.202,-0.217,-0.227,-0.23,-0.229,-0.224,-0.218,-0.209,-0.199,-0.187,-0.174,-0.161,-0.146,-0.132,-0.117,-0.102,-0.088,-0.073,-0.06,-0.048,-0.036,-0.026,-0.017,-0.01,-0.004,-0.001,0 +PARAM_BROW_L_X=0,0.01,0.04,0.07,0.12,0.16,0.21,0.24,0.27,0.28,0.276,0.267,0.253,0.235,0.21,0.19,0.17,0.14,0.12,0.1,0.07,0.053,0.035,0.021,0.01,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_X=0,0.01,0.04,0.07,0.12,0.16,0.21,0.24,0.27,0.28,0.276,0.267,0.253,0.235,0.21,0.19,0.17,0.14,0.12,0.1,0.07,0.053,0.035,0.021,0.01,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_ANGLE=0,-0.007,-0.027,-0.06,-0.09,-0.13,-0.17,-0.21,-0.24,-0.26,-0.279,-0.295,-0.309,-0.32,-0.33,-0.339,-0.346,-0.352,-0.357,-0.361,-0.364,-0.366,-0.368,-0.369,-0.37,-0.37,-0.37,-0.368,-0.361,-0.35,-0.337,-0.32,-0.301,-0.28,-0.26,-0.24,-0.21,-0.19,-0.16,-0.14,-0.12,-0.1,-0.077,-0.058,-0.042,-0.028,-0.016,-0.007,-0.002,0 +PARAM_BROW_R_ANGLE=0,-0.007,-0.026,-0.05,-0.09,-0.13,-0.17,-0.2,-0.24,-0.26,-0.28,-0.298,-0.313,-0.325,-0.336,-0.346,-0.353,-0.36,-0.365,-0.369,-0.373,-0.375,-0.377,-0.379,-0.379,-0.38,-0.38,-0.378,-0.371,-0.36,-0.346,-0.328,-0.309,-0.29,-0.27,-0.24,-0.22,-0.19,-0.17,-0.14,-0.12,-0.1,-0.08,-0.06,-0.043,-0.028,-0.016,-0.007,-0.002,0 +PARAM_BROW_L_FORM=0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.994,0.975,0.95,0.91,0.86,0.81,0.76,0.7,0.64,0.57,0.51,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_BROW_R_FORM=0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.994,0.975,0.95,0.91,0.86,0.81,0.76,0.7,0.64,0.57,0.51,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_MOUTH_FORM=0,0.005,0.024,0.06,0.1,0.5,0.72,0.89,0.98,1,0.3,-0.49,-1,-1,-1,-1,-0.94,-0.77,-0.56,-0.3,-0.04,0.23,0.47,0.68,0.85,0.96,1,0.994,0.975,0.95,0.91,0.86,0.81,0.76,0.7,0.64,0.57,0.51,0.44,0.38,0.32,0.26,0.21,0.16,0.11,0.07,0.04,0.02,0.005,0 +PARAM_MOUTH_OPEN_Y=0,0.07,0.19,0.26,0.29,0.19,0.15,0.155,0.19,0.29,0.83,1,1,1,1,1,0.97,0.89,0.78,0.65,0.52,0.39,0.26,0.16,0.07,0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0,0.06,0.23,0.5,0.86,1.28,1.77,2.32,2.89,3.5,4.12,4.75,5.36,5.96,6.52,7.06,7.54,7.97,8.33,8.63,8.85,8.98,9.03,8.99,8.89,8.72,8.49,8.21,7.89,7.52,7.12,6.69,6.23,5.76,5.26,4.76,4.26,3.76,3.27,2.79,2.34,1.91,1.51,1.14,0.82,0.54,0.31,0.14,0.04,0 +PARAM_BODY_ANGLE_Z=0,-0.04,-0.16,-0.34,-0.58,-0.87,-1.19,-1.54,-1.91,-2.28,-2.65,-3.01,-3.35,-3.67,-3.95,-4.19,-4.39,-4.53,-4.62,-4.66,-4.641,-4.6,-4.53,-4.43,-4.31,-4.17,-4.01,-3.84,-3.65,-3.45,-3.24,-3.02,-2.79,-2.56,-2.33,-2.1,-1.87,-1.64,-1.42,-1.21,-1,-0.82,-0.64,-0.49,-0.35,-0.23,-0.13,-0.06,-0.02,0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0,0,0,0,0,0,0,0,0,0,-0.43,-0.61,-0.67,-0.72,-0.76,-0.8,-0.84,-0.87,-0.9,-0.93,-0.95,-0.963,-0.977,-0.987,-0.995,-0.999,-1,-0.994,-0.975,-0.95,-0.91,-0.86,-0.81,-0.76,-0.7,-0.64,-0.57,-0.51,-0.44,-0.38,-0.32,-0.26,-0.21,-0.16,-0.11,-0.07,-0.04,-0.02,-0.005,0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.01,-0.04,-0.08,-0.13,-0.18,-0.24,-0.3,-0.35,-0.41,-0.45,-0.49,-0.52,-0.543,-0.55,-0.549,-0.544,-0.537,-0.528,-0.517,-0.503,-0.488,-0.471,-0.454,-0.434,-0.41,-0.39,-0.37,-0.35,-0.32,-0.3,-0.28,-0.25,-0.23,-0.21,-0.19,-0.16,-0.14,-0.123,-0.104,-0.086,-0.07,-0.054,-0.041,-0.029,-0.019,-0.011,-0.005,-0.001,0 +PARAM_RARM02=0,0.01,0.04,0.08,0.12,0.17,0.21,0.25,0.28,0.294,0.3,0.296,0.286,0.27,0.25,0.22,0.2,0.17,0.13,0.1,0.07,0.03,0,-0.02,-0.05,-0.07,-0.086,-0.096,-0.1,-0.099,-0.097,-0.094,-0.091,-0.086,-0.08,-0.074,-0.068,-0.061,-0.054,-0.046,-0.039,-0.032,-0.026,-0.02,-0.014,-0.009,-0.006,-0.003,-0.001,0 +PARAM_RARM03=0,-0.002,-0.008,-0.017,-0.029,-0.044,-0.062,-0.082,-0.1,-0.13,-0.15,-0.18,-0.21,-0.24,-0.27,-0.3,-0.33,-0.35,-0.38,-0.41,-0.44,-0.46,-0.49,-0.51,-0.53,-0.546,-0.562,-0.575,-0.586,-0.594,-0.598,-0.6,-0.595,-0.579,-0.56,-0.52,-0.49,-0.44,-0.4,-0.35,-0.3,-0.25,-0.2,-0.16,-0.11,-0.08,-0.04,-0.02,-0.005,0 +PARAM_LARM01=0,0.01,0.04,0.08,0.13,0.17,0.22,0.26,0.29,0.3,0.299,0.297,0.294,0.289,0.284,0.277,0.27,0.261,0.252,0.241,0.231,0.219,0.207,0.195,0.182,0.169,0.155,0.141,0.128,0.114,0.1,0.086,0.074,0.062,0.052,0.043,0.036,0.029,0.023,0.018,0.014,0.01,0.007,0.005,0.003,0.002,0.001,0,0,0 +PARAM_LARM02=0,-0.07,-0.27,-0.58,-0.97,-1.41,-1.89,-2.37,-2.83,-3.26,-3.62,-3.89,-4.05,-4.14,-4.22,-4.28,-4.34,-4.38,-4.42,-4.45,-4.466,-4.48,-4.49,-4.496,-4.5,-4.501,-4.501,-4.5,-4.5,-4.47,-4.38,-4.25,-4.07,-3.86,-3.61,-3.34,-3.04,-2.73,-2.41,-2.09,-1.77,-1.46,-1.16,-0.89,-0.64,-0.43,-0.25,-0.12,-0.03,0 +PARAM_LARM03=0,0.09,0.29,0.54,0.79,1.03,1.22,1.35,1.4,1.11,0.49,-0.29,-1.1,-1.83,-2.44,-2.85,-3,-2.992,-2.97,-2.93,-2.88,-2.81,-2.74,-2.65,-2.56,-2.45,-2.34,-2.22,-2.1,-1.97,-1.84,-1.7,-1.57,-1.43,-1.3,-1.16,-1.03,-0.9,-0.78,-0.66,-0.55,-0.44,-0.35,-0.26,-0.19,-0.12,-0.07,-0.03,-0.01,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_12.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_12.mtn new file mode 100644 index 0000000..f3aa637 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_12.mtn @@ -0,0 +1,83 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,0.57,2.06,4.23,6.92,9.91,13.03,16.19,19.25,22.12,24.71,26.85,28.53,29.62,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29.9,29.62,29.17,28.57,27.84,26.99,26.02,24.94,23.82,22.58,21.32,20.01,18.66,17.28,15.88,14.47,13.09,11.73,10.39,9.08,7.82,6.62,5.5,4.44,3.49,2.62,1.85,1.21,0.7,0.32,0.08,0 +PARAM_ANGLE_Y=0,-0.57,-2.06,-4.23,-6.92,-9.91,-13.03,-16.19,-19.25,-22.12,-24.71,-26.85,-28.53,-29.62,-30,-29.45,-27.97,-25.84,-23.31,-20.69,-18.16,-16.03,-14.55,-14,-14.2,-14.77,-15.65,-16.79,-18.1,-19.55,-21.04,-22.56,-24.04,-25.46,-26.72,-27.84,-28.76,-29.43,-29.86,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-29.55,-28.66,-27.58,-26.38,-25.07,-23.39,-21.77,-20.23,-18.76,-17.36,-16.02,-14.73,-13.5,-12.36,-11.24,-10.21,-9.23,-8.3,-7.42,-6.59,-5.81,-5.09,-4.42,-3.8,-3.23,-2.7,-2.22,-1.8,-1.41,-1.08,-0.79,-0.55,-0.35,-0.2,-0.09,-0.02,0 +PARAM_ANGLE_Z=0 +PARAM_EYE_L_OPEN=1,0.97,0.89,0.79,0.69,0.62,0.57,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.51,0.41,0.29,0.17,0.08,0.02,0,0.04,0.14,0.26,0.38,0.47,0.53,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.551,0.556,0.562,0.571,0.582,0.595,0.61,0.626,0.643,0.661,0.68,0.7,0.72,0.741,0.76,0.78,0.8,0.82,0.844,0.864,0.883,0.901,0.917,0.933,0.948,0.961,0.972,0.982,0.99,0.995,0.999,1 +PARAM_EYE_L_SMILE=0 +PARAM_EYE_R_OPEN=1,0.97,0.89,0.79,0.69,0.62,0.57,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.51,0.41,0.29,0.17,0.08,0.02,0,0.04,0.14,0.26,0.38,0.47,0.53,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.551,0.556,0.562,0.571,0.582,0.595,0.61,0.626,0.643,0.661,0.68,0.7,0.72,0.741,0.76,0.78,0.8,0.82,0.844,0.864,0.883,0.901,0.917,0.933,0.948,0.961,0.972,0.982,0.99,0.995,0.999,1 +PARAM_EYE_R_SMILE=0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5,-0.5,-0.502,-0.504,-0.507,-0.511,-0.515,-0.52,-0.526,-0.533,-0.54,-0.548,-0.556,-0.565,-0.574,-0.584,-0.594,-0.604,-0.615,-0.626,-0.637,-0.649,-0.661,-0.673,-0.685,-0.698,-0.71,-0.723,-0.735,-0.748,-0.761,-0.773,-0.786,-0.798,-0.81,-0.823,-0.835,-0.846,-0.858,-0.869,-0.88,-0.891,-0.901,-0.911,-0.921,-0.93,-0.939,-0.947,-0.955,-0.962,-0.969,-0.975,-0.98,-0.985,-0.989,-0.993,-0.996,-0.998,-0.999,-0.999,-0.998,-0.993,-0.985,-0.975,-0.963,-0.949,-0.933,-0.915,-0.896,-0.88,-0.85,-0.83,-0.81,-0.79,-0.76,-0.74,-0.72,-0.7,-0.67,-0.65,-0.63,-0.61,-0.592,-0.574,-0.558,-0.544,-0.531,-0.52,-0.512,-0.505,-0.501,-0.5 +PARAM_BROW_L_Y=0,-0.04,-0.13,-0.24,-0.35,-0.44,-0.49,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.55,-0.63,-0.74,-0.84,-0.93,-0.98,-1,-0.96,-0.88,-0.77,-0.67,-0.58,-0.53,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.508,-0.504,-0.496,-0.486,-0.473,-0.459,-0.442,-0.424,-0.405,-0.38,-0.36,-0.34,-0.32,-0.29,-0.27,-0.25,-0.22,-0.2,-0.18,-0.15,-0.13,-0.113,-0.094,-0.076,-0.059,-0.045,-0.032,-0.021,-0.012,-0.005,-0.001,0 +PARAM_BROW_R_Y=0,-0.04,-0.13,-0.24,-0.35,-0.44,-0.49,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.55,-0.63,-0.74,-0.84,-0.93,-0.98,-1,-0.96,-0.88,-0.77,-0.67,-0.58,-0.53,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.51,-0.508,-0.504,-0.496,-0.486,-0.473,-0.459,-0.442,-0.424,-0.405,-0.38,-0.36,-0.34,-0.32,-0.29,-0.27,-0.25,-0.22,-0.2,-0.18,-0.15,-0.13,-0.113,-0.094,-0.076,-0.059,-0.045,-0.032,-0.021,-0.012,-0.005,-0.001,0 +PARAM_BROW_L_X=0,-0.001,-0.004,-0.008,-0.014,-0.022,-0.031,-0.041,-0.053,-0.066,-0.08,-0.096,-0.112,-0.13,-0.148,-0.167,-0.188,-0.21,-0.23,-0.25,-0.28,-0.3,-0.32,-0.35,-0.37,-0.4,-0.42,-0.45,-0.47,-0.5,-0.52,-0.55,-0.57,-0.6,-0.62,-0.65,-0.67,-0.69,-0.72,-0.74,-0.76,-0.78,-0.8,-0.824,-0.843,-0.862,-0.879,-0.896,-0.911,-0.926,-0.939,-0.951,-0.962,-0.972,-0.98,-0.987,-0.993,-0.997,-0.999,-1,-0.997,-0.987,-0.972,-0.952,-0.93,-0.9,-0.87,-0.83,-0.79,-0.75,-0.71,-0.67,-0.62,-0.58,-0.53,-0.48,-0.44,-0.39,-0.35,-0.3,-0.26,-0.22,-0.18,-0.15,-0.12,-0.09,-0.06,-0.04,-0.023,-0.011,-0.003,0 +PARAM_BROW_R_X=0,-0.001,-0.004,-0.008,-0.014,-0.022,-0.031,-0.041,-0.053,-0.066,-0.08,-0.096,-0.112,-0.13,-0.148,-0.167,-0.188,-0.21,-0.23,-0.25,-0.28,-0.3,-0.32,-0.35,-0.37,-0.4,-0.42,-0.45,-0.47,-0.5,-0.52,-0.55,-0.57,-0.6,-0.62,-0.65,-0.67,-0.69,-0.72,-0.74,-0.76,-0.78,-0.8,-0.824,-0.843,-0.862,-0.879,-0.896,-0.911,-0.926,-0.939,-0.951,-0.962,-0.972,-0.98,-0.987,-0.993,-0.997,-0.999,-1,-0.997,-0.987,-0.972,-0.952,-0.93,-0.9,-0.87,-0.83,-0.79,-0.75,-0.71,-0.67,-0.62,-0.58,-0.53,-0.48,-0.44,-0.39,-0.35,-0.3,-0.26,-0.22,-0.18,-0.15,-0.12,-0.09,-0.06,-0.04,-0.023,-0.011,-0.003,0 +PARAM_BROW_L_ANGLE=0,0.001,0.004,0.008,0.014,0.022,0.031,0.041,0.053,0.066,0.08,0.096,0.112,0.13,0.148,0.167,0.188,0.21,0.23,0.25,0.28,0.3,0.32,0.35,0.37,0.4,0.42,0.45,0.47,0.5,0.52,0.55,0.57,0.6,0.62,0.65,0.67,0.69,0.72,0.74,0.76,0.78,0.8,0.824,0.843,0.862,0.879,0.896,0.911,0.926,0.939,0.951,0.962,0.972,0.98,0.987,0.993,0.997,0.999,1,0.997,0.987,0.972,0.952,0.93,0.9,0.87,0.83,0.79,0.75,0.71,0.67,0.62,0.58,0.53,0.48,0.44,0.39,0.35,0.3,0.26,0.22,0.18,0.15,0.12,0.09,0.06,0.04,0.023,0.011,0.003,0 +PARAM_BROW_R_ANGLE=0,0.001,0.004,0.008,0.014,0.022,0.031,0.041,0.053,0.066,0.08,0.096,0.112,0.13,0.148,0.167,0.188,0.21,0.23,0.25,0.28,0.3,0.32,0.35,0.37,0.4,0.42,0.45,0.47,0.5,0.52,0.55,0.57,0.6,0.62,0.65,0.67,0.69,0.72,0.74,0.76,0.78,0.8,0.824,0.843,0.862,0.879,0.896,0.911,0.926,0.939,0.951,0.962,0.972,0.98,0.987,0.993,0.997,0.999,1,0.997,0.987,0.972,0.952,0.93,0.9,0.87,0.83,0.79,0.75,0.71,0.67,0.62,0.58,0.53,0.48,0.44,0.39,0.35,0.3,0.26,0.22,0.18,0.15,0.12,0.09,0.06,0.04,0.023,0.011,0.003,0 +PARAM_BROW_L_FORM=0,-0.001,-0.004,-0.008,-0.014,-0.022,-0.031,-0.041,-0.053,-0.066,-0.08,-0.096,-0.112,-0.13,-0.148,-0.167,-0.188,-0.21,-0.23,-0.25,-0.28,-0.3,-0.32,-0.35,-0.37,-0.4,-0.42,-0.45,-0.47,-0.5,-0.52,-0.55,-0.57,-0.6,-0.62,-0.65,-0.67,-0.69,-0.72,-0.74,-0.76,-0.78,-0.8,-0.824,-0.843,-0.862,-0.879,-0.896,-0.911,-0.926,-0.939,-0.951,-0.962,-0.972,-0.98,-0.987,-0.993,-0.997,-0.999,-1,-0.997,-0.987,-0.972,-0.952,-0.93,-0.9,-0.87,-0.83,-0.79,-0.75,-0.71,-0.67,-0.62,-0.58,-0.53,-0.48,-0.44,-0.39,-0.35,-0.3,-0.26,-0.22,-0.18,-0.15,-0.12,-0.09,-0.06,-0.04,-0.023,-0.011,-0.003,0 +PARAM_BROW_R_FORM=0,-0.001,-0.004,-0.008,-0.014,-0.022,-0.031,-0.041,-0.053,-0.066,-0.08,-0.096,-0.112,-0.13,-0.148,-0.167,-0.188,-0.21,-0.23,-0.25,-0.28,-0.3,-0.32,-0.35,-0.37,-0.4,-0.42,-0.45,-0.47,-0.5,-0.52,-0.55,-0.57,-0.6,-0.62,-0.65,-0.67,-0.69,-0.72,-0.74,-0.76,-0.78,-0.8,-0.824,-0.843,-0.862,-0.879,-0.896,-0.911,-0.926,-0.939,-0.951,-0.962,-0.972,-0.98,-0.987,-0.993,-0.997,-0.999,-1,-0.997,-0.987,-0.972,-0.952,-0.93,-0.9,-0.87,-0.83,-0.79,-0.75,-0.71,-0.67,-0.62,-0.58,-0.53,-0.48,-0.44,-0.39,-0.35,-0.3,-0.26,-0.22,-0.18,-0.15,-0.12,-0.09,-0.06,-0.04,-0.023,-0.011,-0.003,0 +PARAM_MOUTH_FORM=0,0.012,0.04,0.09,0.14,0.19,0.24,0.28,0.33,0.37,0.39,0.4,0.407,0.409,0.41,0.37,0.3,0.24,0.19,0.16,0.12,0.09,0.06,0.04,0,-0.03,-0.06,-0.1,-0.15,-0.21,-0.27,-0.34,-0.4,-0.46,-0.52,-0.58,-0.63,-0.67,-0.7,-0.72,-0.735,-0.74,-0.74,-0.74,-0.739,-0.738,-0.737,-0.735,-0.733,-0.731,-0.728,-0.724,-0.72,-0.716,-0.711,-0.705,-0.699,-0.692,-0.685,-0.677,-0.668,-0.658,-0.648,-0.636,-0.624,-0.611,-0.597,-0.582,-0.567,-0.55,-0.532,-0.513,-0.493,-0.47,-0.45,-0.42,-0.39,-0.36,-0.32,-0.29,-0.25,-0.22,-0.18,-0.15,-0.12,-0.09,-0.06,-0.04,-0.024,-0.011,-0.003,0 +PARAM_MOUTH_OPEN_Y=0,0.04,0.14,0.25,0.37,0.46,0.52,0.54,0.52,0.46,0.38,0.31,0.26,0.22,0.21,0.42,0.79,1,0.98,0.92,0.85,0.77,0.68,0.59,0.51,0.44,0.38,0.34,0.33,0.343,0.38,0.43,0.5,0.58,0.66,0.73,0.81,0.87,0.93,0.97,0.99,1,0.997,0.989,0.977,0.96,0.94,0.91,0.88,0.85,0.82,0.78,0.74,0.7,0.66,0.61,0.57,0.52,0.48,0.43,0.39,0.34,0.3,0.26,0.22,0.18,0.15,0.12,0.09,0.06,0.04,0.023,0.011,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0,-0.005,-0.011,-0.01,0.007,0.04,0.11,0.21,0.34,0.51,0.73,1,1.4,1.82,2.28,2.76,3.23,3.71,4.18,4.63,5.07,5.47,5.84,6.17,6.45,6.68,6.85,6.96,7,6.97,6.89,6.76,6.58,6.37,6.12,5.83,5.52,5.19,4.83,4.46,4.08,3.69,3.31,2.92,2.54,2.17,1.81,1.48,1.17,0.88,0.63,0.42,0.24,0.11,0.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_Z=0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0,0.001,0.004,0.008,0.014,0.022,0.031,0.041,0.053,0.066,0.08,0.096,0.112,0.13,0.148,0.167,0.188,0.21,0.23,0.25,0.28,0.3,0.32,0.35,0.37,0.4,0.42,0.45,0.47,0.5,0.52,0.55,0.57,0.6,0.62,0.65,0.67,0.69,0.72,0.74,0.76,0.78,0.8,0.824,0.843,0.862,0.879,0.896,0.911,0.926,0.939,0.951,0.962,0.972,0.98,0.987,0.993,0.997,0.999,1,0.997,0.987,0.972,0.952,0.93,0.9,0.87,0.83,0.79,0.75,0.71,0.67,0.62,0.58,0.53,0.48,0.44,0.39,0.35,0.3,0.26,0.22,0.18,0.15,0.12,0.09,0.06,0.04,0.023,0.011,0.003,0 +PARAM_EYE_BALL_FORM=1,0.999,0.996,0.992,0.986,0.978,0.969,0.959,0.947,0.934,0.92,0.904,0.888,0.87,0.852,0.833,0.812,0.79,0.77,0.75,0.72,0.7,0.68,0.65,0.63,0.6,0.58,0.55,0.53,0.5,0.48,0.45,0.43,0.4,0.38,0.35,0.33,0.31,0.28,0.26,0.24,0.22,0.2,0.176,0.157,0.138,0.121,0.104,0.089,0.074,0.061,0.049,0.038,0.028,0.02,0.013,0.007,0.003,0.001,0,0.003,0.013,0.028,0.048,0.07,0.1,0.13,0.17,0.21,0.25,0.29,0.33,0.38,0.42,0.47,0.52,0.56,0.61,0.65,0.7,0.74,0.78,0.82,0.85,0.88,0.91,0.94,0.96,0.977,0.989,0.997,1 +PARAM_CHEEK_01=0,0.001,0.004,0.008,0.014,0.022,0.031,0.041,0.053,0.066,0.08,0.096,0.112,0.13,0.148,0.167,0.188,0.21,0.23,0.25,0.28,0.3,0.32,0.35,0.37,0.4,0.42,0.45,0.47,0.5,0.52,0.55,0.57,0.6,0.62,0.65,0.67,0.69,0.72,0.74,0.76,0.78,0.8,0.824,0.843,0.862,0.879,0.896,0.911,0.926,0.939,0.951,0.962,0.972,0.98,0.987,0.993,0.997,0.999,1,0.997,0.987,0.972,0.952,0.93,0.9,0.87,0.83,0.79,0.75,0.71,0.67,0.62,0.58,0.53,0.48,0.44,0.39,0.35,0.3,0.26,0.22,0.18,0.15,0.12,0.09,0.06,0.04,0.023,0.011,0.003,0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.005,-0.018,-0.04,-0.07,-0.1,-0.13,-0.17,-0.21,-0.25,-0.28,-0.32,-0.35,-0.37,-0.39,-0.4,-0.406,-0.412,-0.417,-0.423,-0.428,-0.433,-0.437,-0.442,-0.446,-0.45,-0.453,-0.457,-0.46,-0.464,-0.467,-0.469,-0.472,-0.475,-0.477,-0.479,-0.481,-0.483,-0.485,-0.487,-0.488,-0.49,-0.491,-0.492,-0.493,-0.494,-0.495,-0.496,-0.497,-0.497,-0.498,-0.498,-0.499,-0.499,-0.499,-0.5,-0.5,-0.5,-0.5,-0.5,-0.499,-0.496,-0.491,-0.484,-0.475,-0.464,-0.451,-0.436,-0.42,-0.402,-0.382,-0.36,-0.34,-0.31,-0.29,-0.26,-0.23,-0.2,-0.17,-0.14,-0.11,-0.09,-0.071,-0.054,-0.041,-0.029,-0.02,-0.012,-0.007,-0.003,-0.001,0 +PARAM_RARM02=0,0.014,0.05,0.12,0.22,0.34,0.5,0.69,0.93,1.26,1.57,1.83,2.04,2.19,2.27,2.3,2.3,2.3,2.299,2.299,2.298,2.297,2.296,2.294,2.293,2.291,2.289,2.286,2.283,2.28,2.277,2.273,2.269,2.265,2.26,2.255,2.25,2.244,2.238,2.231,2.224,2.217,2.209,2.201,2.192,2.183,2.174,2.163,2.153,2.142,2.13,2.118,2.105,2.092,2.078,2.064,2.049,2.033,2.017,2,1.98,1.95,1.92,1.88,1.84,1.79,1.73,1.68,1.61,1.55,1.48,1.41,1.34,1.27,1.19,1.11,1.04,0.96,0.87,0.77,0.67,0.58,0.48,0.4,0.31,0.24,0.17,0.11,0.07,0.03,0.01,0 +PARAM_RARM03=0,-0.02,-0.07,-0.14,-0.22,-0.31,-0.4,-0.5,-0.6,-0.71,-0.79,-0.84,-0.87,-0.89,-0.898,-0.9,-0.895,-0.88,-0.86,-0.82,-0.78,-0.74,-0.68,-0.62,-0.55,-0.48,-0.41,-0.32,-0.24,-0.15,-0.06,0.04,0.13,0.23,0.33,0.44,0.54,0.64,0.74,0.84,0.94,1.04,1.13,1.23,1.32,1.41,1.49,1.57,1.65,1.72,1.79,1.85,1.9,1.95,2,2.03,2.06,2.08,2.096,2.1,2.07,2,1.89,1.75,1.57,1.38,1.16,0.93,0.7,0.47,0.24,0.02,-0.17,-0.35,-0.49,-0.6,-0.67,-0.7,-0.687,-0.65,-0.6,-0.54,-0.47,-0.4,-0.32,-0.25,-0.18,-0.12,-0.07,-0.03,-0.01,0 +PARAM_LARM01=0,0.003,0.01,0.023,0.04,0.06,0.08,0.11,0.14,0.17,0.2,0.23,0.27,0.3,0.33,0.36,0.4,0.42,0.45,0.47,0.494,0.51,0.523,0.53,0.533,0.53,0.519,0.502,0.48,0.45,0.42,0.39,0.35,0.31,0.26,0.22,0.17,0.13,0.08,0.03,-0.01,-0.06,-0.1,-0.14,-0.19,-0.22,-0.26,-0.29,-0.32,-0.34,-0.358,-0.372,-0.381,-0.384,-0.383,-0.381,-0.377,-0.371,-0.364,-0.356,-0.347,-0.337,-0.326,-0.314,-0.302,-0.288,-0.275,-0.261,-0.246,-0.231,-0.216,-0.202,-0.186,-0.171,-0.156,-0.142,-0.128,-0.114,-0.1,-0.087,-0.075,-0.063,-0.052,-0.042,-0.033,-0.024,-0.017,-0.011,-0.007,-0.003,-0.001,0 +PARAM_LARM02=0,-0.003,-0.01,-0.021,-0.036,-0.052,-0.07,-0.088,-0.107,-0.127,-0.145,-0.162,-0.178,-0.192,-0.203,-0.212,-0.218,-0.22,-0.215,-0.203,-0.183,-0.16,-0.12,-0.09,-0.04,0,0.05,0.1,0.15,0.21,0.26,0.31,0.36,0.41,0.46,0.5,0.54,0.57,0.6,0.616,0.628,0.632,0.632,0.629,0.625,0.62,0.614,0.606,0.597,0.586,0.575,0.563,0.55,0.536,0.522,0.506,0.49,0.473,0.456,0.439,0.421,0.403,0.384,0.366,0.347,0.328,0.309,0.29,0.271,0.253,0.235,0.217,0.199,0.182,0.165,0.148,0.132,0.117,0.103,0.089,0.076,0.064,0.052,0.042,0.032,0.024,0.017,0.011,0.006,0.003,0.001,0 +PARAM_LARM03=0,-0.005,-0.018,-0.04,-0.07,-0.1,-0.15,-0.19,-0.25,-0.3,-0.37,-0.43,-0.5,-0.57,-0.65,-0.72,-0.8,-0.87,-0.95,-1.02,-1.1,-1.17,-1.24,-1.31,-1.37,-1.43,-1.48,-1.53,-1.57,-1.61,-1.63,-1.66,-1.668,-1.673,-1.665,-1.64,-1.6,-1.55,-1.48,-1.41,-1.32,-1.23,-1.13,-1.02,-0.9,-0.78,-0.66,-0.53,-0.41,-0.28,-0.16,-0.03,0.09,0.2,0.31,0.42,0.51,0.6,0.67,0.74,0.79,0.83,0.85,0.861,0.857,0.847,0.831,0.81,0.78,0.75,0.72,0.68,0.64,0.6,0.55,0.51,0.46,0.41,0.37,0.32,0.28,0.24,0.2,0.16,0.12,0.09,0.07,0.04,0.025,0.011,0.003,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0,0,0,0,0,0,0,0,0,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0.99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_01=0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand_078=1 +PARAM_hand077=0 +PARAM_hand08=0 +PARAM_hand089=1 +PARAM_hand088=0 +PARAM_dance=0 +PARAM_leg=0 +PARAM_breast02=0 +VISIBLE:ROUGH=1 +VISIBLE:PARTS_01_FACE_001=1 +VISIBLE:PARTS_01_EYE_001=1 +VISIBLE:PARTS_01_EYE_BALL_001=1 +VISIBLE:PARTS_01_BROW_001=1 +VISIBLE:PARTS_01_MOUTH_001=1 +VISIBLE:PARTS_01_NOSE_001=1 +VISIBLE:PARTS_01_EAR_001=1 +VISIBLE:PARTS_01_HAIR_FRONT_001=1 +VISIBLE:PARTS_01_HAIR_SIDE_001=1 +VISIBLE:PARTS_01_HAIR_BACK_001=1 +VISIBLE:PARTS_01_NECK=1 +VISIBLE:PARTS_01_BODY=1 +VISIBLE:PARTS_01_BACKGROUND=0 +VISIBLE:PARTS_01_SKETCH=0 +VISIBLE:PARTS_01_CORE=1 +VISIBLE:PARTS_01_AHO=1 +VISIBLE:PARTS_01_CHEEK=1 +VISIBLE:PARTS_01_ARM_L=1 +VISIBLE:PARTS_01_ARM_R=1 +VISIBLE:PARTS_01_LEG=1 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_13.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_13.mtn new file mode 100644 index 0000000..7386d4d --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_13.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0 +PARAM_ANGLE_Y=0,0,0,0,0,0,0,0,0,-1.03,-3.8,-7.8,-12.55,-17.45,-22.2,-26.2,-28.97,-30,-29.4,-27.79,-25.31,-22.2,-18.74,-15,-11.26,-7.8,-4.69,-2.21,-0.6,0,-0.27,-1.01,-2.11,-3.55,-5.24,-7.19,-9.4,-11.74,-14.33,-17.06,-20,-23.39,-25.93,-27.69,-28.85,-29.55,-29.9,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-29.8,-29.23,-28.34,-27.15,-25.7,-24.04,-22.24,-20.26,-18.19,-16.05,-13.95,-11.81,-9.74,-7.76,-5.96,-4.3,-2.85,-1.66,-0.77,-0.2,0 +PARAM_ANGLE_Z=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.33,1.04,1.92,2.84,3.67,4.37,4.83,5,4.97,4.9,4.78,4.62,4.42,4.19,3.92,3.61,3.28,2.92,2.55,2.15,1.73,1.31,0.86,0.41,-0.04,-0.5,-0.96,-1.41,-1.86,-2.31,-2.73,-3.15,-3.55,-3.92,-4.28,-4.61,-4.92,-5.19,-5.42,-5.62,-5.78,-5.9,-5.97,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-5.96,-5.85,-5.67,-5.43,-5.14,-4.81,-4.45,-4.05,-3.64,-3.21,-2.79,-2.36,-1.95,-1.55,-1.19,-0.86,-0.57,-0.33,-0.15,-0.04,0 +PARAM_EYE_L_OPEN=1,0.993,0.976,0.95,0.93,0.9,0.86,0.83,0.8,0.77,0.74,0.72,0.701,0.689,0.68,0.674,0.671,0.67,0.69,0.73,0.77,0.79,0.8,0.59,0.21,0,0,0.04,0.15,0.3,0.48,0.65,0.8,0.93,0.98,0.996,1,1,0.74,0.26,0,0,0.08,0.26,0.5,0.74,0.92,1,0.999,0.998,0.995,0.991,0.987,0.981,0.975,0.969,0.962,0.955,0.948,0.941,0.934,0.927,0.92,0.913,0.907,0.901,0.896,0.891,0.887,0.884,0.882,0.88,0.88,0.881,0.884,0.889,0.895,0.902,0.911,0.92,0.929,0.939,0.948,0.958,0.966,0.975,0.982,0.988,0.993,0.997,0.999,1 +PARAM_EYE_L_SMILE=0 +PARAM_EYE_R_OPEN=1,0.993,0.976,0.95,0.93,0.9,0.86,0.83,0.8,0.77,0.74,0.72,0.701,0.689,0.68,0.674,0.671,0.67,0.69,0.73,0.77,0.79,0.8,0.59,0.21,0,0,0.04,0.15,0.3,0.48,0.65,0.8,0.93,0.98,0.996,1,1,0.74,0.26,0,0,0.08,0.26,0.5,0.74,0.92,1,0.999,0.998,0.995,0.991,0.987,0.981,0.975,0.969,0.962,0.955,0.948,0.941,0.934,0.927,0.92,0.913,0.907,0.901,0.896,0.891,0.887,0.884,0.882,0.88,0.88,0.881,0.884,0.889,0.895,0.902,0.911,0.92,0.929,0.939,0.948,0.958,0.966,0.975,0.982,0.988,0.993,0.997,0.999,1 +PARAM_EYE_R_SMILE=0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5,-0.53,-0.6,-0.69,-0.78,-0.87,-0.94,-0.98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.984,-0.94,-0.89,-0.83,-0.76,-0.69,-0.63,-0.58,-0.54,-0.51,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.39,-0.11,0.25,0.61,0.89,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.97,0.9,0.79,0.65,0.5,0.35,0.19,0.04,-0.11,-0.24,-0.34,-0.43,-0.48,-0.5 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.19,-0.5,-0.71,-0.78,-0.74,-0.64,-0.49,-0.32,-0.14,0.02,0.16,0.27,0.34,0.36,0.1,-0.32,-0.61,-0.71,-0.67,-0.59,-0.47,-0.34,-0.21,-0.1,0,0.07,0.11,0.14,0.156,0.165,0.169,0.17,0.168,0.164,0.157,0.148,0.138,0.126,0.113,0.099,0.085,0.071,0.057,0.044,0.032,0.022,0.013,0.006,0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.18,-0.47,-0.67,-0.74,-0.71,-0.62,-0.49,-0.34,-0.19,-0.05,0.07,0.16,0.22,0.24,-0.03,-0.48,-0.78,-0.88,-0.86,-0.79,-0.69,-0.57,-0.43,-0.3,-0.15,-0.05,0.02,0.06,0.1,0.117,0.127,0.13,0.129,0.126,0.12,0.114,0.106,0.096,0.086,0.076,0.065,0.054,0.044,0.034,0.024,0.016,0.01,0.004,0.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0,0,0,0,0,0,0,0,0,0.005,0.018,0.04,0.07,0.1,0.14,0.18,0.22,0.27,0.31,0.35,0.39,0.43,0.46,0.49,0.51,0.525,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.529,0.525,0.52,0.512,0.502,0.491,0.478,0.463,0.447,0.43,0.412,0.393,0.373,0.353,0.33,0.31,0.29,0.27,0.25,0.22,0.2,0.18,0.163,0.143,0.124,0.106,0.09,0.074,0.059,0.046,0.035,0.024,0.016,0.009,0.004,0.001,0 +PARAM_BROW_R_ANGLE=0,0,0,0,0,0,0,0,0,0.005,0.018,0.04,0.07,0.1,0.14,0.18,0.22,0.27,0.31,0.35,0.39,0.43,0.46,0.49,0.51,0.525,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.53,0.529,0.525,0.52,0.512,0.502,0.491,0.478,0.463,0.447,0.43,0.412,0.393,0.373,0.353,0.33,0.31,0.29,0.27,0.25,0.22,0.2,0.18,0.163,0.143,0.124,0.106,0.09,0.074,0.059,0.046,0.035,0.024,0.016,0.009,0.004,0.001,0 +PARAM_BROW_L_FORM=0,-0.003,-0.012,-0.025,-0.043,-0.06,-0.09,-0.12,-0.15,-0.18,-0.21,-0.24,-0.28,-0.31,-0.35,-0.38,-0.41,-0.44,-0.47,-0.5,-0.52,-0.55,-0.564,-0.579,-0.591,-0.598,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.595,-0.579,-0.56,-0.52,-0.49,-0.45,-0.4,-0.35,-0.31,-0.26,-0.21,-0.17,-0.13,-0.09,-0.06,-0.03,-0.016,-0.004,0 +PARAM_BROW_R_FORM=0,-0.003,-0.012,-0.025,-0.043,-0.06,-0.09,-0.12,-0.15,-0.18,-0.21,-0.24,-0.28,-0.31,-0.35,-0.38,-0.41,-0.44,-0.47,-0.5,-0.52,-0.55,-0.564,-0.579,-0.591,-0.598,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.595,-0.579,-0.56,-0.52,-0.49,-0.45,-0.4,-0.35,-0.31,-0.26,-0.21,-0.17,-0.13,-0.09,-0.06,-0.03,-0.016,-0.004,0 +PARAM_MOUTH_FORM=0,-0.09,-0.25,-0.41,-0.54,-0.62,-0.66,-0.669,-0.7,-0.76,-0.82,-0.89,-0.95,-0.98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.95,-0.83,-0.65,-0.44,-0.22,0,0.19,0.32,0.38,0.392,0.393,0.391,0.39,0.39,0.382,0.365,0.34,0.14,-0.19,-0.36,-0.347,-0.32,-0.27,-0.23,-0.2,-0.19,-0.4,-0.79,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.981,-0.93,-0.86,-0.77,-0.67,-0.57,-0.46,-0.36,-0.26,-0.18,-0.11,-0.05,-0.01,0 +PARAM_MOUTH_OPEN_Y=0,0,0,0,0,0,0.26,0.74,1,0.998,0.99,0.97,0.92,0.85,0.75,0.59,0.45,0.32,0.21,0.13,0.06,0.02,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,0.82,0.53,0.33,0.27,0.45,0.74,0.94,1,0.78,0.37,0.15,0.21,0.37,0.58,0.78,0.94,1,1,1,1,0.987,0.95,0.9,0.82,0.74,0.65,0.55,0.45,0.35,0.26,0.18,0.1,0.05,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_X=0 +PARAM_BODY_ANGLE_Z=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.007,-0.026,-0.06,-0.09,-0.14,-0.2,-0.26,-0.32,-0.39,-0.46,-0.54,-0.61,-0.68,-0.74,-0.8,-0.86,-0.91,-0.94,-0.97,-0.993,-1,-0.995,-0.98,-0.96,-0.93,-0.89,-0.84,-0.8,-0.74,-0.69,-0.63,-0.57,-0.51,-0.45,-0.39,-0.33,-0.27,-0.22,-0.18,-0.13,-0.09,-0.06,-0.04,-0.016,-0.004,0,0,0,0,0,0,0,0,0,0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0,-0.006,-0.023,-0.05,-0.09,-0.13,-0.17,-0.23,-0.28,-0.33,-0.39,-0.44,-0.49,-0.54,-0.58,-0.61,-0.64,-0.66,-0.675,-0.68,-0.68,-0.678,-0.677,-0.674,-0.671,-0.667,-0.662,-0.657,-0.651,-0.644,-0.637,-0.63,-0.621,-0.613,-0.604,-0.594,-0.584,-0.574,-0.563,-0.552,-0.54,-0.528,-0.516,-0.504,-0.491,-0.478,-0.465,-0.451,-0.438,-0.424,-0.41,-0.397,-0.382,-0.368,-0.354,-0.34,-0.326,-0.312,-0.298,-0.283,-0.27,-0.256,-0.242,-0.229,-0.215,-0.202,-0.189,-0.176,-0.164,-0.152,-0.14,-0.128,-0.117,-0.106,-0.096,-0.086,-0.076,-0.067,-0.059,-0.05,-0.043,-0.036,-0.029,-0.023,-0.018,-0.013,-0.009,-0.006,-0.003,-0.002,0,0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.013,0.05,0.1,0.16,0.24,0.32,0.4,0.49,0.58,0.66,0.74,0.81,0.87,0.93,0.97,0.99,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.991,0.97,0.93,0.87,0.81,0.74,0.67,0.59,0.51,0.43,0.35,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0 +PARAM_UPBACK=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.006,0.022,0.05,0.08,0.11,0.15,0.18,0.21,0.24,0.27,0.285,0.296,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.298,0.296,0.293,0.29,0.285,0.281,0.275,0.269,0.262,0.255,0.248,0.239,0.231,0.223,0.214,0.204,0.195,0.186,0.176,0.166,0.156,0.146,0.137,0.127,0.117,0.108,0.098,0.089,0.08,0.072,0.064,0.056,0.048,0.041,0.034,0.028,0.023,0.018,0.013,0.009,0.006,0.003,0.002,0,0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,0.006,0.023,0.05,0.08,0.12,0.16,0.2,0.24,0.29,0.33,0.37,0.4,0.44,0.46,0.483,0.496,0.5,0.47,0.39,0.27,0.12,-0.02,-0.17,-0.29,-0.37,-0.4,-0.37,-0.3,-0.21,-0.13,-0.06,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_RARM02=0,-0.001,-0.004,-0.008,-0.014,-0.021,-0.03,-0.04,-0.051,-0.063,-0.077,-0.091,-0.107,-0.124,-0.141,-0.16,-0.179,-0.2,-0.221,-0.239,-0.254,-0.266,-0.275,-0.283,-0.288,-0.291,-0.291,-0.25,-0.16,-0.05,0.06,0.14,0.2,0.218,0.218,0.218,0.217,0.215,0.214,0.212,0.209,0.207,0.204,0.201,0.197,0.193,0.19,0.185,0.181,0.177,0.172,0.167,0.162,0.157,0.152,0.146,0.141,0.135,0.13,0.124,0.118,0.113,0.107,0.101,0.096,0.09,0.085,0.079,0.074,0.068,0.063,0.058,0.053,0.048,0.044,0.039,0.035,0.031,0.027,0.023,0.02,0.016,0.013,0.011,0.008,0.006,0.004,0.003,0.002,0.001,0,0 +PARAM_RARM03=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.14,0.37,0.59,0.74,0.8,0.71,0.49,0.22,-0.04,-0.25,-0.38,-0.42,-0.35,-0.19,0.01,0.21,0.4,0.56,0.66,0.7,0.697,0.694,0.691,0.686,0.68,0.673,0.665,0.656,0.646,0.634,0.622,0.609,0.595,0.581,0.566,0.55,0.533,0.516,0.499,0.481,0.463,0.445,0.426,0.407,0.387,0.368,0.349,0.329,0.31,0.291,0.272,0.253,0.234,0.216,0.198,0.181,0.164,0.147,0.132,0.116,0.102,0.088,0.075,0.063,0.052,0.041,0.032,0.024,0.017,0.011,0.006,0.003,0.001,0 +PARAM_LARM01=0,-0.009,-0.03,-0.07,-0.11,-0.17,-0.22,-0.28,-0.34,-0.4,-0.46,-0.52,-0.57,-0.61,-0.65,-0.68,-0.694,-0.7,-0.67,-0.59,-0.47,-0.32,-0.18,-0.03,0.09,0.17,0.2,0.11,-0.1,-0.36,-0.62,-0.83,-0.96,-1,-0.999,-0.996,-0.992,-0.986,-0.978,-0.969,-0.958,-0.947,-0.933,-0.919,-0.903,-0.886,-0.868,-0.849,-0.829,-0.81,-0.79,-0.76,-0.74,-0.72,-0.69,-0.67,-0.64,-0.62,-0.59,-0.57,-0.54,-0.52,-0.49,-0.46,-0.44,-0.41,-0.39,-0.36,-0.34,-0.31,-0.29,-0.27,-0.24,-0.22,-0.2,-0.179,-0.16,-0.141,-0.123,-0.106,-0.09,-0.075,-0.062,-0.049,-0.038,-0.028,-0.02,-0.013,-0.007,-0.003,-0.001,0 +PARAM_LARM02=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,0.06,0.13,0.21,0.29,0.37,0.44,0.48,0.5,0.48,0.42,0.36,0.29,0.24,0.2,0.183,0.176,0.169,0.162,0.156,0.149,0.143,0.137,0.131,0.125,0.12,0.114,0.109,0.104,0.099,0.094,0.089,0.084,0.08,0.075,0.071,0.067,0.063,0.06,0.056,0.052,0.049,0.046,0.043,0.04,0.037,0.034,0.031,0.029,0.026,0.024,0.022,0.02,0.018,0.016,0.014,0.013,0.011,0.01,0.008,0.007,0.006,0.005,0.004,0.003,0.003,0.002,0.001,0.001,0.001,0,0,0,0 +PARAM_LARM03=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.2,-0.51,-0.81,-1.02,-1.1,-1.03,-0.86,-0.66,-0.46,-0.3,-0.2,-0.17,-0.22,-0.35,-0.5,-0.65,-0.8,-0.91,-0.99,-1.02,-1.022,-1.019,-1.014,-1.007,-0.998,-0.988,-0.976,-0.962,-0.947,-0.931,-0.913,-0.894,-0.874,-0.85,-0.83,-0.81,-0.78,-0.76,-0.73,-0.71,-0.68,-0.65,-0.62,-0.6,-0.57,-0.54,-0.51,-0.48,-0.45,-0.43,-0.4,-0.37,-0.34,-0.32,-0.29,-0.27,-0.24,-0.22,-0.19,-0.17,-0.15,-0.129,-0.11,-0.092,-0.076,-0.061,-0.047,-0.035,-0.025,-0.016,-0.009,-0.004,-0.001,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0 +PARAM_leg=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.013,0.05,0.1,0.17,0.26,0.35,0.44,0.54,0.63,0.72,0.8,0.87,0.92,0.96,0.99,1,0.999,0.995,0.989,0.98,0.97,0.958,0.943,0.927,0.909,0.89,0.87,0.85,0.82,0.8,0.77,0.75,0.72,0.69,0.67,0.64,0.61,0.58,0.55,0.52,0.49,0.46,0.43,0.4,0.37,0.34,0.31,0.29,0.26,0.23,0.21,0.19,0.16,0.14,0.12,0.1,0.083,0.066,0.051,0.038,0.027,0.018,0.01,0.004,0.001,0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_14.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_14.mtn new file mode 100644 index 0000000..f20dc68 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_14.mtn @@ -0,0 +1,57 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,0.38,1.37,2.82,4.61,6.6,8.69,10.79,12.84,14.75,16.47,17.9,19.02,19.75,20,19.96,19.84,19.66,19.41,19.1,18.74,18.34,17.9,17.42,16.93,16.4,15.87,15.34,14.79,14.26,13.74,13.22,12.73,12.27,11.83,11.43,11.08,10.76,10.5,10.29,10.13,10.03,10,10.1,10.37,10.78,11.3,11.88,12.5,13.12,13.7,14.22,14.63,14.9,15,14.94,14.77,14.5,14.13,13.7,13.18,12.61,11.98,11.31,10.61,9.88,9.14,8.37,7.6,6.83,6.07,5.33,4.6,3.91,3.25,2.65,2.08,1.56,1.12,0.73,0.42,0.19,0.05,0 +PARAM_ANGLE_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.013,-0.05,-0.12,-0.22,-0.36,-0.52,-0.73,-0.96,-1.24,-1.55,-1.92,-2.31,-2.75,-3.24,-3.77,-4.34,-4.97,-5.63,-6.34,-7.11,-7.93,-8.78,-9.69,-10.66,-11.66,-12.72,-13.85,-15,-16.37,-17.86,-19.49,-21.16,-22.79,-24.41,-25.91,-27.23,-28.37,-29.25,-29.8,-30,-29.88,-29.54,-28.99,-28.27,-27.39,-26.37,-25.21,-23.97,-22.62,-21.22,-19.76,-18.27,-16.73,-15.2,-13.66,-12.14,-10.66,-9.2,-7.82,-6.51,-5.29,-4.16,-3.13,-2.23,-1.46,-0.84,-0.38,-0.1,0 +PARAM_ANGLE_Z=0,0.05,0.2,0.44,0.76,1.18,1.67,2.22,2.85,3.54,4.3,5.09,5.94,6.85,7.78,8.74,9.74,10.77,11.81,12.85,13.92,15,16.08,17.15,18.19,19.23,20.26,21.26,22.22,23.15,24.06,24.91,25.7,26.46,27.15,27.78,28.33,28.82,29.24,29.56,29.8,29.95,30,29.94,29.77,29.5,29.13,28.67,28.12,27.51,26.82,26.06,25.25,24.37,23.47,22.51,21.52,20.51,19.47,18.4,17.32,16.23,15.13,14.06,12.96,11.9,10.83,9.8,8.8,7.8,6.86,5.96,5.11,4.3,3.54,2.85,2.23,1.67,1.18,0.76,0.44,0.2,0.05,0 +PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0,0.05,0.16,0.29,0.43,0.55,0.66,0.72,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.55,0.2,0,0,0,0,0.05,0.18,0.33,0.49,0.62,0.71,0.75,0.77,0.79,0.813,0.831,0.848,0.864,0.879,0.893,0.906,0.918,0.929,0.939,0.948,0.956,0.963,0.97,0.976,0.981,0.985,0.989,0.992,0.995,0.997,0.998,0.999,1,1 +PARAM_EYE_L_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07,0.21,0.38,0.57,0.73,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0,0.07,0.25,0.47,0.68,0.85,0.96,1,0.996,0.984,0.966,0.94,0.91,0.87,0.83,0.79,0.74,0.69,0.64,0.58,0.53,0.47,0.42,0.36,0.31,0.26,0.21,0.17,0.13,0.09,0.06,0.03,0.016,0.004,0 +PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,0.82,0.54,0.27,0.08,0,0,0.05,0.16,0.29,0.43,0.55,0.66,0.72,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.62,0.4,0.2,0.06,0,0,0.05,0.18,0.33,0.49,0.62,0.71,0.75,0.77,0.79,0.813,0.831,0.848,0.864,0.879,0.893,0.906,0.918,0.929,0.939,0.948,0.956,0.963,0.97,0.976,0.981,0.985,0.989,0.992,0.995,0.997,0.998,0.999,1,1 +PARAM_EYE_R_SMILE=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.02,0.07,0.14,0.22,0.3,0.37,0.45,0.51,0.57,0.63,0.68,0.73,0.77,0.81,0.85,0.88,0.9,0.93,0.945,0.961,0.974,0.984,0.991,0.996,0.999,1,0.82,0.54,0.27,0.08,0,0,0.07,0.25,0.47,0.68,0.85,0.96,1,0.996,0.984,0.966,0.94,0.91,0.87,0.83,0.79,0.74,0.69,0.64,0.58,0.53,0.47,0.42,0.36,0.31,0.26,0.21,0.17,0.13,0.09,0.06,0.03,0.016,0.004,0 +PARAM_EYE_BALL_X=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.07,-0.25,-0.47,-0.68,-0.85,-0.96,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.92,-0.74,-0.5,-0.26,-0.08,0,-0.015,-0.05,-0.09,-0.14,-0.17,-0.19,-0.2,-0.199,-0.195,-0.189,-0.181,-0.171,-0.16,-0.148,-0.135,-0.121,-0.107,-0.093,-0.079,-0.065,-0.052,-0.04,-0.029,-0.019,-0.011,-0.005,-0.001,0 +PARAM_EYE_BALL_Y=-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.5,-0.46,-0.37,-0.26,-0.16,-0.07,-0.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,0.99,0.96,0.92,0.86,0.79,0.7,0.61,0.51,0.41,0.3,0.2,0.09,-0.01,-0.11,-0.2,-0.29,-0.36,-0.42,-0.46,-0.49,-0.5 +PARAM_BROW_L_Y=0,0.011,0.04,0.08,0.12,0.17,0.21,0.26,0.29,0.32,0.343,0.35,0.2,-0.03,-0.25,-0.41,-0.47,-0.455,-0.42,-0.36,-0.29,-0.22,-0.15,-0.09,-0.05,-0.04,-0.04,-0.041,-0.042,-0.045,-0.049,-0.054,-0.06,-0.068,-0.077,-0.089,-0.102,-0.118,-0.136,-0.155,-0.18,-0.2,-0.28,-0.43,-0.6,-0.76,-0.89,-0.97,-1,-0.987,-0.95,-0.89,-0.81,-0.72,-0.62,-0.51,-0.36,-0.23,-0.14,-0.07,-0.03,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_R_Y=0,0.011,0.04,0.08,0.12,0.17,0.21,0.26,0.29,0.32,0.343,0.35,0.2,-0.04,-0.26,-0.42,-0.48,-0.465,-0.42,-0.37,-0.3,-0.22,-0.15,-0.1,-0.06,-0.04,-0.04,-0.041,-0.042,-0.045,-0.049,-0.054,-0.06,-0.068,-0.077,-0.089,-0.102,-0.118,-0.136,-0.155,-0.18,-0.2,-0.28,-0.43,-0.6,-0.76,-0.89,-0.97,-1,-0.987,-0.95,-0.89,-0.81,-0.72,-0.62,-0.51,-0.36,-0.23,-0.14,-0.07,-0.03,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0,0.03,0.1,0.2,0.33,0.45,0.58,0.68,0.75,0.78,0.78,0.78,0.78,0.779,0.779,0.779,0.778,0.777,0.777,0.776,0.775,0.773,0.772,0.771,0.769,0.767,0.766,0.764,0.761,0.759,0.756,0.754,0.751,0.748,0.744,0.741,0.737,0.733,0.729,0.725,0.72,0.715,0.71,0.705,0.699,0.693,0.687,0.681,0.674,0.667,0.66,0.653,0.645,0.637,0.628,0.62,0.611,0.602,0.592,0.582,0.572,0.561,0.55,0.536,0.517,0.49,0.47,0.44,0.41,0.37,0.34,0.3,0.26,0.23,0.19,0.16,0.12,0.1,0.07,0.05,0.026,0.012,0.003,0 +PARAM_BROW_R_ANGLE=0,0.03,0.1,0.2,0.33,0.45,0.58,0.68,0.75,0.78,0.78,0.78,0.78,0.78,0.779,0.779,0.779,0.778,0.778,0.777,0.777,0.776,0.775,0.774,0.773,0.772,0.771,0.769,0.768,0.766,0.765,0.763,0.761,0.759,0.756,0.754,0.751,0.749,0.746,0.743,0.74,0.736,0.733,0.729,0.725,0.721,0.717,0.713,0.708,0.703,0.698,0.693,0.687,0.682,0.676,0.67,0.663,0.657,0.65,0.643,0.635,0.628,0.62,0.608,0.591,0.57,0.54,0.51,0.47,0.43,0.39,0.35,0.31,0.27,0.23,0.19,0.15,0.11,0.08,0.05,0.03,0.015,0.004,0 +PARAM_BROW_L_FORM=0,-0.03,-0.13,-0.26,-0.42,-0.58,-0.74,-0.87,-0.97,-1,-0.999,-0.995,-0.989,-0.981,-0.971,-0.96,-0.947,-0.933,-0.918,-0.901,-0.884,-0.867,-0.849,-0.83,-0.812,-0.793,-0.775,-0.756,-0.738,-0.721,-0.704,-0.688,-0.673,-0.659,-0.646,-0.635,-0.625,-0.616,-0.609,-0.604,-0.601,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.596,-0.585,-0.567,-0.54,-0.51,-0.48,-0.44,-0.41,-0.36,-0.32,-0.28,-0.24,-0.19,-0.16,-0.12,-0.09,-0.06,-0.03,-0.015,-0.004,0 +PARAM_BROW_R_FORM=0,-0.03,-0.13,-0.26,-0.42,-0.58,-0.74,-0.87,-0.97,-1,-0.999,-0.995,-0.989,-0.981,-0.971,-0.96,-0.947,-0.933,-0.918,-0.901,-0.884,-0.867,-0.849,-0.83,-0.812,-0.793,-0.775,-0.756,-0.738,-0.721,-0.704,-0.688,-0.673,-0.659,-0.646,-0.635,-0.625,-0.616,-0.609,-0.604,-0.601,-0.6,-0.603,-0.61,-0.622,-0.638,-0.657,-0.68,-0.7,-0.73,-0.76,-0.79,-0.81,-0.84,-0.87,-0.9,-0.92,-0.94,-0.962,-0.978,-0.99,-0.997,-1,-0.993,-0.974,-0.94,-0.91,-0.86,-0.8,-0.74,-0.68,-0.61,-0.54,-0.46,-0.39,-0.32,-0.26,-0.2,-0.14,-0.09,-0.06,-0.03,-0.007,0 +PARAM_MOUTH_FORM=0,0,0,0,0,0,0.24,0.64,0.91,1,0.12,-0.21,-0.1,0.09,0.26,0.38,0.43,0.08,-0.48,-0.87,-1,-0.83,-0.51,-0.28,-0.18,-0.1,-0.03,0.03,0.09,0.15,0.22,0.37,0.51,0.59,0.61,0.593,0.56,0.53,0.49,0.45,0.39,0.34,0.28,0.23,0.18,0.13,0.09,0.06,0.03,0.016,0.01,0.009,0.008,0.008,0.007,0.006,0.006,0.005,0.005,0.004,0.004,0.003,0.003,0.003,0.002,0.002,0.002,0.002,0.001,0.001,0.001,0.001,0.001,0,0,0,0,0,0,0,0,0,0,0 +PARAM_MOUTH_OPEN_Y=0,0,0,0,0,0,0.24,0.64,0.91,1,0.44,0.23,0.37,0.59,0.79,0.94,1,1,1,1,1,1,1,1,0.999,0.995,0.986,0.972,0.953,0.93,0.9,0.81,0.68,0.56,0.48,0.36,0.3,0.26,0.24,0.23,0.231,0.235,0.239,0.244,0.249,0.255,0.259,0.264,0.267,0.269,0.27,0.269,0.267,0.264,0.259,0.253,0.247,0.239,0.23,0.221,0.211,0.2,0.189,0.177,0.165,0.153,0.141,0.129,0.117,0.105,0.093,0.081,0.07,0.059,0.049,0.04,0.031,0.023,0.017,0.011,0.006,0.003,0.001,0 +PARAM_BODY_ANGLE_X=0,-0.13,-0.41,-0.77,-1.13,-1.47,-1.75,-1.93,-2,-1.982,-1.93,-1.85,-1.75,-1.63,-1.49,-1.34,-1.18,-1.02,-0.86,-0.71,-0.56,-0.42,-0.3,-0.2,-0.11,-0.05,-0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_BODY_ANGLE_Z=0,0,0,0,0,0,0,0,0,-0.04,-0.14,-0.29,-0.5,-0.75,-1.02,-1.33,-1.64,-1.96,-2.28,-2.59,-2.88,-3.15,-3.39,-3.6,-3.77,-3.9,-3.97,-4,-3.984,-3.94,-3.86,-3.76,-3.63,-3.48,-3.31,-3.13,-2.93,-2.71,-2.49,-2.25,-2.02,-1.77,-1.53,-1.29,-1.05,-0.81,-0.58,-0.36,-0.15,0.05,0.23,0.4,0.55,0.68,0.79,0.88,0.95,0.99,1,0.995,0.98,0.96,0.93,0.89,0.84,0.8,0.74,0.69,0.63,0.57,0.51,0.45,0.39,0.33,0.27,0.22,0.18,0.13,0.09,0.06,0.04,0.016,0.004,0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,0.999,0.999,0.999,0.999,0.999,0.998,0.998,0.997,0.997,0.996,0.996,0.995,0.994,0.994,0.993,0.992,0.991,0.99,0.989,0.988,0.986,0.985,0.984,0.982,0.981,0.979,0.977,0.975,0.973,0.971,0.969,0.967,0.965,0.962,0.96,0.957,0.954,0.951,0.948,0.945,0.942,0.939,0.935,0.932,0.928,0.924,0.92,0.91,0.89,0.86,0.82,0.78,0.72,0.67,0.61,0.55,0.48,0.42,0.35,0.29,0.23,0.18,0.13,0.08,0.05,0.02,0.006,0 +PARAM_UPBACK=0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.02,-0.06,-0.12,-0.17,-0.23,-0.27,-0.3,-0.307,-0.304,-0.297,-0.285,-0.268,-0.249,-0.23,-0.2,-0.18,-0.15,-0.12,-0.09,-0.07,-0.04,-0.01,0.01,0.03,0.052,0.069,0.082,0.092,0.098,0.1,0.1,0.1,0.099,0.098,0.097,0.096,0.095,0.093,0.092,0.09,0.088,0.086,0.084,0.082,0.08,0.077,0.075,0.072,0.07,0.067,0.064,0.062,0.059,0.056,0.053,0.05,0.048,0.045,0.042,0.039,0.036,0.034,0.031,0.029,0.026,0.024,0.021,0.019,0.017,0.015,0.013,0.011,0.009,0.007,0.006,0.005,0.003,0.002,0.002,0.001,0,0,0 +PARAM_RARM02=0,-0.002,-0.006,-0.014,-0.023,-0.035,-0.047,-0.06,-0.073,-0.086,-0.098,-0.11,-0.119,-0.126,-0.131,-0.133,-0.132,-0.128,-0.123,-0.116,-0.107,-0.096,-0.085,-0.073,-0.059,-0.045,-0.031,-0.016,-0.002,0.012,0.026,0.04,0.052,0.064,0.074,0.083,0.09,0.095,0.099,0.1,0.1,0.099,0.099,0.097,0.096,0.095,0.093,0.091,0.088,0.086,0.084,0.081,0.078,0.075,0.072,0.069,0.066,0.062,0.059,0.055,0.052,0.049,0.045,0.042,0.039,0.035,0.032,0.029,0.026,0.023,0.02,0.018,0.015,0.013,0.01,0.008,0.007,0.005,0.003,0.002,0.001,0.001,0,0 +PARAM_RARM03=0,0.05,0.15,0.27,0.4,0.51,0.61,0.68,0.7,0.689,0.66,0.61,0.55,0.47,0.39,0.29,0.19,0.08,-0.03,-0.14,-0.25,-0.36,-0.46,-0.55,-0.64,-0.71,-0.78,-0.83,-0.87,-0.89,-0.9,-0.899,-0.897,-0.893,-0.887,-0.88,-0.871,-0.861,-0.85,-0.836,-0.821,-0.805,-0.787,-0.768,-0.75,-0.72,-0.7,-0.67,-0.65,-0.62,-0.59,-0.55,-0.52,-0.49,-0.46,-0.43,-0.4,-0.37,-0.34,-0.32,-0.29,-0.27,-0.24,-0.22,-0.2,-0.181,-0.162,-0.144,-0.127,-0.111,-0.096,-0.082,-0.069,-0.057,-0.046,-0.037,-0.028,-0.021,-0.014,-0.009,-0.005,-0.002,-0.001,0 +PARAM_LARM01=0,-0.016,-0.05,-0.09,-0.14,-0.18,-0.21,-0.24,-0.244,-0.241,-0.235,-0.227,-0.219,-0.212,-0.206,-0.202,-0.2,-0.27,-0.39,-0.47,-0.5,-0.5,-0.499,-0.497,-0.494,-0.491,-0.487,-0.483,-0.478,-0.472,-0.466,-0.46,-0.453,-0.445,-0.437,-0.428,-0.42,-0.41,-0.401,-0.391,-0.381,-0.37,-0.36,-0.349,-0.338,-0.326,-0.315,-0.303,-0.292,-0.28,-0.268,-0.256,-0.244,-0.232,-0.22,-0.208,-0.197,-0.185,-0.174,-0.162,-0.151,-0.14,-0.13,-0.119,-0.109,-0.099,-0.09,-0.08,-0.072,-0.063,-0.055,-0.047,-0.04,-0.034,-0.028,-0.022,-0.017,-0.013,-0.009,-0.006,-0.003,-0.001,0,0 +PARAM_LARM02=0,0.006,0.024,0.05,0.09,0.13,0.17,0.22,0.27,0.31,0.36,0.4,0.43,0.46,0.48,0.496,0.5,0.487,0.45,0.39,0.32,0.22,0.11,-0.01,-0.14,-0.29,-0.44,-0.59,-0.74,-0.9,-1.05,-1.2,-1.34,-1.47,-1.59,-1.71,-1.8,-1.88,-1.93,-1.97,-1.983,-1.983,-1.983,-1.984,-1.984,-1.984,-1.983,-1.981,-1.978,-1.974,-1.968,-1.961,-1.951,-1.94,-1.926,-1.91,-1.891,-1.87,-1.85,-1.82,-1.79,-1.76,-1.72,-1.67,-1.61,-1.53,-1.45,-1.35,-1.25,-1.15,-1.04,-0.92,-0.81,-0.7,-0.59,-0.48,-0.38,-0.29,-0.21,-0.14,-0.08,-0.04,-0.01,0 +PARAM_LARM03=0,-0.013,-0.05,-0.1,-0.17,-0.26,-0.35,-0.44,-0.54,-0.63,-0.72,-0.8,-0.87,-0.92,-0.96,-0.99,-1,-0.95,-0.83,-0.64,-0.44,-0.22,-0.02,0.15,0.28,0.37,0.39,0.388,0.369,0.34,0.29,0.22,0.14,0.03,-0.08,-0.22,-0.37,-0.54,-0.72,-0.92,-1.19,-1.44,-1.68,-1.89,-2.08,-2.23,-2.35,-2.43,-2.48,-2.496,-2.489,-2.47,-2.44,-2.4,-2.34,-2.28,-2.21,-2.13,-2.04,-1.95,-1.85,-1.75,-1.65,-1.54,-1.43,-1.32,-1.21,-1.1,-0.99,-0.88,-0.78,-0.68,-0.58,-0.49,-0.4,-0.33,-0.25,-0.19,-0.13,-0.09,-0.05,-0.02,-0.006,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0 +PARAM_hand_01=0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand08=0 +PARAM_dance=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.002,-0.009,-0.021,-0.036,-0.054,-0.08,-0.1,-0.13,-0.15,-0.18,-0.22,-0.25,-0.28,-0.31,-0.34,-0.38,-0.41,-0.44,-0.46,-0.49,-0.51,-0.54,-0.554,-0.57,-0.583,-0.592,-0.598,-0.6,-0.597,-0.588,-0.574,-0.556,-0.53,-0.51,-0.48,-0.45,-0.41,-0.38,-0.34,-0.3,-0.27,-0.23,-0.2,-0.16,-0.13,-0.11,-0.08,-0.06,-0.037,-0.021,-0.01,-0.002,0 +PARAM_leg=0,0,0,0,0,0,0,0,0,0.006,0.024,0.05,0.09,0.14,0.19,0.24,0.3,0.37,0.43,0.5,0.56,0.63,0.69,0.74,0.79,0.84,0.88,0.91,0.93,0.945,0.95,0.95,0.95,0.95,0.95,0.95,0.949,0.948,0.947,0.946,0.944,0.941,0.938,0.934,0.929,0.924,0.918,0.91,0.902,0.894,0.884,0.873,0.861,0.848,0.833,0.818,0.802,0.784,0.765,0.74,0.71,0.68,0.65,0.61,0.57,0.53,0.49,0.45,0.41,0.36,0.32,0.28,0.24,0.2,0.17,0.14,0.11,0.08,0.06,0.037,0.021,0.009,0.002,0 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/motions/Ylia_15.mtn b/public/pio/models/live2d/illyasviel/motions/Ylia_15.mtn new file mode 100644 index 0000000..9e3b206 --- /dev/null +++ b/public/pio/models/live2d/illyasviel/motions/Ylia_15.mtn @@ -0,0 +1,88 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=1000 + +$fadeout=1000 + +PARAM_ANGLE_X=0,-0.06,-0.22,-0.46,-0.76,-1.1,-1.46,-1.81,-2.13,-2.42,-2.66,-2.85,-2.96,-3,-2.42,-1,0.72,2.41,3.76,4.62,4.91,4.68,4.17,3.55,2.89,2.3,1.8,1.47,1.35,2.54,4.44,6.22,7.5,8,7.65,6.87,5.82,4.63,3.4,2.17,1.03,0,-1.16,-2.13,-2.94,-3.64,-4.22,-4.69,-5.08,-5.39,-5.64,-5.83,-5.96,-6.05,-6.1,-6.115,-6.07,-5.9,-5.61,-5.16,-4.56,-3.75,-2.74,-1.49,0,1.67,3.28,4.78,6.01,6.82,7.13,5.86,3.82,1.91,0.54,0,0.34,1.23,2.52,4,5.53,6.95,8.17,9.1,9.69,9.89,9.73,9.32,8.73,8.08,7.48,7,6.66,6.39,6.18,6.02,5.91,5.84,5.8,5.779,5.774,5.87,6.11,6.43,6.8,7.19,7.58,7.94,8.25,8.5,8.66,8.72,8.66,8.5,8.25,7.93,7.53,7.09,6.61,6.09,5.55,4.99,4.43,3.87,3.32,2.78,2.28,1.81,1.37,0.98,0.65,0.37,0.17,0.04,0 +PARAM_ANGLE_Y=0,-0.67,-2.42,-4.96,-7.85,-10.86,-13.67,-16.06,-17.89,-19.04,-19.45,-18.17,-15.42,-11.98,-8.42,-5.16,-2.46,-0.67,0,-1.11,-3.79,-7.08,-10.28,-12.85,-14.48,-15.03,-13.22,-8.17,0,10.94,16.89,20.45,22.39,23,21.49,18.23,14.17,9.95,6.1,2.91,0.79,0,0.67,2.47,5.07,8.16,11.35,14.43,17.04,18.84,19.51,19.13,18.17,16.75,15.01,13.07,11.04,8.98,6.99,5.13,3.44,2.05,0.95,0.25,0,1.31,4.5,8.73,12.97,16.15,17.46,14.34,9.34,4.68,1.31,0,0.87,2.75,5.09,7.52,9.74,11.57,12.8,13.25,12.45,10.71,8.55,6.3,4.25,2.55,1.42,1,1.22,1.86,2.88,4.26,5.92,7.89,10.12,12.57,15.2,18.22,20.31,21.85,22.97,23.73,24.23,24.5,24.59,24.46,24.11,23.56,22.83,21.95,20.93,19.8,18.59,17.31,15.95,14.59,13.17,11.75,10.37,9.02,7.68,6.43,5.23,4.12,3.11,2.23,1.46,0.85,0.39,0.1,0 +PARAM_ANGLE_Z=0,0.24,0.86,1.75,2.78,3.84,4.84,5.68,6.33,6.74,6.88,6.43,5.46,4.24,2.98,1.83,0.87,0.24,0,0.79,2.05,3.23,4.08,4.41,4.29,3.85,3.04,1.79,0,-2.99,-5.92,-8.47,-10.54,-12.02,-12.88,-13.16,-12.17,-9.77,-6.58,-3.39,-0.99,0,-1.18,-4.04,-7.53,-10.94,-13.67,-15.41,-16,-15.75,-15.08,-14.11,-12.86,-11.43,-9.83,-8.06,-6.24,-4.29,-2.3,-0.23,1.72,3.06,3.96,4.48,4.71,4.77,4.53,3.91,2.94,1.58,-0.23,-2.85,-5.25,-7.48,-9.52,-11.34,-12.95,-14.33,-15.48,-16.4,-17.12,-17.61,-17.9,-18,-17.42,-15.97,-14.01,-11.72,-9.33,-6.98,-4.75,-2.88,-1.37,-0.39,-0.03,-0.26,-0.89,-1.89,-3.19,-4.73,-6.49,-8.42,-10.44,-12.52,-14.59,-16.62,-18.54,-20.3,-21.84,-23.14,-24.14,-24.77,-25,-23.82,-21.54,-19.37,-17.68,-15.61,-13.7,-11.92,-10.28,-8.8,-7.42,-6.17,-5.05,-4.04,-3.16,-2.39,-1.74,-1.19,-0.76,-0.42,-0.19,-0.05,0 +PARAM_EYE_L_OPEN=1,0.92,0.74,0.5,0.26,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24,0.64,0.91,1 +PARAM_EYE_L_SMILE=0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0 +PARAM_EYE_R_OPEN=1,0.92,0.74,0.5,0.26,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24,0.64,0.91,1 +PARAM_EYE_R_SMILE=0,0.08,0.26,0.5,0.74,0.92,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0 +PARAM_EYE_BALL_X=0 +PARAM_EYE_BALL_Y=-0.5 +PARAM_BROW_L_Y=0,-0.05,-0.18,-0.36,-0.53,-0.66,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.54,-0.26,-0.06,0 +PARAM_BROW_R_Y=0,-0.05,-0.19,-0.36,-0.53,-0.67,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.72,-0.55,-0.26,-0.06,0 +PARAM_BROW_L_X=0 +PARAM_BROW_R_X=0 +PARAM_BROW_L_ANGLE=0,-0.015,-0.05,-0.1,-0.15,-0.18,-0.2,-0.2,-0.199,-0.199,-0.198,-0.197,-0.195,-0.193,-0.191,-0.189,-0.187,-0.184,-0.181,-0.178,-0.175,-0.171,-0.168,-0.164,-0.16,-0.156,-0.151,-0.147,-0.142,-0.137,-0.132,-0.127,-0.122,-0.117,-0.111,-0.105,-0.1,-0.094,-0.088,-0.082,-0.076,-0.07,-0.064,-0.057,-0.051,-0.045,-0.038,-0.032,-0.025,-0.019,-0.012,-0.006,0.001,0.007,0.014,0.021,0.027,0.034,0.04,0.046,0.053,0.059,0.066,0.072,0.078,0.084,0.09,0.096,0.102,0.108,0.113,0.119,0.124,0.13,0.135,0.14,0.145,0.15,0.155,0.159,0.164,0.168,0.172,0.176,0.179,0.183,0.186,0.189,0.192,0.195,0.198,0.2,0.202,0.204,0.205,0.207,0.208,0.209,0.209,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.202,0.18,0.15,0.11,0.06,0.01,-0.04,-0.08,-0.12,-0.15,-0.18,-0.195,-0.2,-0.15,-0.07,-0.02,0 +PARAM_BROW_R_ANGLE=0,-0.015,-0.05,-0.1,-0.15,-0.18,-0.2,-0.2,-0.199,-0.199,-0.198,-0.197,-0.195,-0.193,-0.191,-0.189,-0.187,-0.184,-0.181,-0.178,-0.175,-0.171,-0.168,-0.164,-0.16,-0.156,-0.151,-0.147,-0.142,-0.137,-0.132,-0.127,-0.122,-0.117,-0.111,-0.105,-0.1,-0.094,-0.088,-0.082,-0.076,-0.07,-0.064,-0.057,-0.051,-0.045,-0.038,-0.032,-0.025,-0.019,-0.012,-0.006,0.001,0.007,0.014,0.021,0.027,0.034,0.04,0.046,0.053,0.059,0.066,0.072,0.078,0.084,0.09,0.096,0.102,0.108,0.113,0.119,0.124,0.13,0.135,0.14,0.145,0.15,0.155,0.159,0.164,0.168,0.172,0.176,0.179,0.183,0.186,0.189,0.192,0.195,0.198,0.2,0.202,0.204,0.205,0.207,0.208,0.209,0.209,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.21,0.202,0.18,0.15,0.11,0.06,0.01,-0.04,-0.08,-0.12,-0.15,-0.18,-0.195,-0.2,-0.15,-0.07,-0.02,0 +PARAM_BROW_L_FORM=0,0.013,0.04,0.08,0.13,0.16,0.17,0.17,0.169,0.169,0.167,0.166,0.164,0.162,0.16,0.157,0.154,0.151,0.148,0.144,0.14,0.136,0.131,0.127,0.122,0.117,0.112,0.106,0.101,0.095,0.089,0.083,0.077,0.07,0.064,0.057,0.05,0.043,0.036,0.029,0.022,0.014,0.007,-0.001,-0.008,-0.016,-0.023,-0.031,-0.039,-0.047,-0.054,-0.062,-0.07,-0.078,-0.086,-0.094,-0.101,-0.109,-0.117,-0.125,-0.132,-0.14,-0.147,-0.155,-0.162,-0.17,-0.177,-0.184,-0.191,-0.198,-0.205,-0.211,-0.218,-0.224,-0.23,-0.236,-0.242,-0.248,-0.254,-0.259,-0.264,-0.27,-0.274,-0.279,-0.283,-0.288,-0.292,-0.295,-0.299,-0.302,-0.305,-0.308,-0.31,-0.313,-0.314,-0.316,-0.318,-0.319,-0.319,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.32,-0.31,-0.28,-0.24,-0.2,-0.14,-0.08,-0.03,0.03,0.08,0.12,0.15,0.164,0.17,0.13,0.06,0.02,0 +PARAM_BROW_R_FORM=0,0.015,0.05,0.1,0.15,0.18,0.2,0.2,0.199,0.198,0.197,0.196,0.194,0.192,0.189,0.187,0.184,0.18,0.177,0.173,0.169,0.164,0.16,0.155,0.15,0.145,0.139,0.134,0.128,0.122,0.116,0.109,0.103,0.096,0.089,0.082,0.075,0.068,0.061,0.053,0.046,0.038,0.03,0.023,0.015,0.007,-0.001,-0.009,-0.017,-0.025,-0.034,-0.042,-0.05,-0.058,-0.066,-0.074,-0.082,-0.091,-0.099,-0.107,-0.115,-0.122,-0.13,-0.138,-0.146,-0.153,-0.161,-0.168,-0.176,-0.183,-0.19,-0.197,-0.204,-0.21,-0.217,-0.223,-0.229,-0.235,-0.241,-0.247,-0.252,-0.257,-0.262,-0.267,-0.272,-0.276,-0.28,-0.284,-0.288,-0.291,-0.294,-0.297,-0.3,-0.302,-0.304,-0.306,-0.307,-0.309,-0.309,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.31,-0.3,-0.27,-0.23,-0.18,-0.12,-0.06,0,0.05,0.1,0.14,0.17,0.193,0.2,0.15,0.07,0.02,0 +PARAM_MOUTH_FORM=0,0.04,0.13,0.27,0.41,0.53,0.62,0.68,0.71,0.74,0.746,0.749,0.75,0.75,0.736,0.71,0.69,0.676,0.67,0.685,0.71,0.725,0.73,0.73,0.73,0.73,0.729,0.729,0.729,0.728,0.727,0.727,0.726,0.724,0.723,0.722,0.72,0.718,0.716,0.714,0.711,0.708,0.705,0.702,0.698,0.694,0.69,0.67,0.62,0.56,0.49,0.42,0.35,0.29,0.24,0.2,0.18,0.17,0.19,0.24,0.32,0.41,0.51,0.59,0.67,0.72,0.76,0.77,0.73,0.65,0.54,0.43,0.33,0.25,0.19,0.17,0.2,0.28,0.37,0.47,0.55,0.63,0.68,0.7,0.705,0.707,0.709,0.71,0.712,0.714,0.716,0.72,0.732,0.75,0.78,0.82,0.85,0.89,0.91,0.933,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.928,0.9,0.85,0.79,0.72,0.64,0.56,0.48,0.4,0.32,0.25,0.18,0.12,0.07,0.03,0.01,0 +PARAM_MOUTH_OPEN_Y=0,0.018,0.06,0.13,0.21,0.28,0.35,0.41,0.45,0.48,0.49,0.497,0.499,0.5,0.45,0.38,0.31,0.26,0.24,0.31,0.42,0.5,0.52,0.5,0.45,0.39,0.33,0.28,0.259,0.31,0.39,0.46,0.51,0.53,0.522,0.49,0.46,0.43,0.39,0.37,0.349,0.342,0.37,0.42,0.46,0.49,0.5,0.47,0.4,0.31,0.22,0.13,0.06,0.02,0,0.05,0.14,0.23,0.3,0.35,0.39,0.43,0.45,0.473,0.486,0.494,0.499,0.5,0.482,0.44,0.4,0.35,0.3,0.26,0.24,0.23,0.26,0.31,0.38,0.46,0.52,0.58,0.62,0.63,0.627,0.62,0.611,0.602,0.593,0.586,0.582,0.58,0.588,0.61,0.64,0.68,0.71,0.75,0.78,0.8,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.81,0.8,0.77,0.73,0.68,0.62,0.55,0.48,0.41,0.34,0.28,0.21,0.15,0.1,0.06,0.03,0.007,0 +PARAM_BODY_ANGLE_X=0,0.001,0.005,0.012,0.023,0.037,0.055,0.08,0.1,0.13,0.17,0.21,0.26,0.31,0.37,0.44,0.51,0.59,0.68,0.78,0.88,0.99,1.2,1.51,1.9,2.34,2.79,3.24,3.68,4.84,6.04,7.05,7.74,8,7.9,7.62,7.19,6.61,5.9,5.09,4.2,3.24,2.23,1.18,0.15,-0.89,-1.9,-2.87,-3.75,-4.56,-5.27,-5.85,-6.29,-6.57,-6.66,-6.48,-5.98,-5.24,-4.31,-3.27,-2.18,-1.1,-0.09,0.8,1.55,2.11,2.46,2.58,2.46,2.2,1.88,1.54,1.23,0.98,0.81,0.75,1.35,2.66,4.3,5.99,7.54,8.83,9.68,10,9.43,8.2,6.67,5.08,3.63,2.43,1.63,1.33,1.44,1.73,2.18,2.74,3.38,4.08,4.82,5.57,6.32,7.04,7.72,8.35,8.9,9.36,9.7,9.92,10,9.95,9.81,9.58,9.28,8.93,8.51,8.05,7.56,7.04,6.49,5.93,5.36,4.78,4.22,3.67,3.12,2.61,2.13,1.67,1.27,0.91,0.6,0.34,0.16,0.04,0 +PARAM_BODY_ANGLE_Z=0,-0.04,-0.15,-0.31,-0.51,-0.73,-0.97,-1.2,-1.42,-1.61,-1.78,-1.9,-1.97,-2,-1.82,-1.43,-0.95,-0.44,0.02,0.4,0.65,0.74,0.68,0.53,0.35,0.17,0.03,-0.06,-0.09,0.28,0.88,1.44,1.84,2,1.97,1.9,1.78,1.62,1.43,1.21,0.98,0.71,0.44,0.16,-0.12,-0.4,-0.67,-0.93,-1.17,-1.39,-1.58,-1.74,-1.86,-1.93,-1.96,-1.85,-1.56,-1.12,-0.57,0.04,0.69,1.33,1.92,2.45,2.89,3.22,3.43,3.5,3.4,3.19,2.92,2.65,2.4,2.19,2.05,2,2.07,2.21,2.38,2.57,2.73,2.87,2.97,3,2.87,2.59,2.23,1.87,1.53,1.25,1.07,1,1.04,1.14,1.3,1.52,1.76,2.05,2.35,2.67,3,3.35,3.59,3.75,3.86,3.93,3.97,3.99,4,3.98,3.92,3.83,3.71,3.57,3.41,3.22,3.02,2.82,2.6,2.37,2.14,1.91,1.69,1.47,1.25,1.05,0.85,0.67,0.51,0.36,0.24,0.14,0.06,0.02,0 +PARAM_BREATH=0 +PARAM_HAIR_FRONT=0 +PARAM_HAIR_SIDE=0 +PARAM_HAIR_BACK=0 +PARAM_EYE_FORM=0 +PARAM_EYE_BALL_FORM=1 +PARAM_CHEEK_01=0,0.006,0.021,0.05,0.07,0.11,0.14,0.18,0.21,0.24,0.26,0.282,0.295,0.3,0.302,0.304,0.306,0.308,0.31,0.311,0.313,0.315,0.317,0.319,0.32,0.322,0.324,0.325,0.327,0.328,0.33,0.332,0.333,0.335,0.336,0.337,0.339,0.34,0.342,0.343,0.344,0.346,0.347,0.348,0.349,0.351,0.352,0.353,0.354,0.355,0.357,0.358,0.359,0.36,0.361,0.362,0.363,0.364,0.365,0.366,0.366,0.367,0.368,0.369,0.369,0.37,0.371,0.371,0.372,0.373,0.373,0.374,0.374,0.375,0.375,0.375,0.376,0.376,0.377,0.377,0.377,0.378,0.378,0.378,0.378,0.379,0.379,0.379,0.379,0.379,0.379,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.38,0.375,0.362,0.343,0.32,0.29,0.26,0.23,0.19,0.16,0.13,0.1,0.07,0.05,0.028,0.013,0.003,0 +PARAM_UPBACK=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.004,0.016,0.033,0.06,0.08,0.11,0.14,0.17,0.2,0.22,0.25,0.28,0.3,0.315,0.328,0.337,0.34,0.338,0.333,0.325,0.315,0.302,0.287,0.27,0.252,0.232,0.21,0.191,0.17,0.15,0.128,0.11,0.088,0.07,0.053,0.038,0.025,0.015,0.007,0.002,0 +PARAM_HAIR_TAIR=0 +PARAM_ARM01=0,-0.018,-0.07,-0.14,-0.23,-0.33,-0.44,-0.54,-0.64,-0.73,-0.8,-0.86,-0.89,-0.903,-0.892,-0.86,-0.82,-0.77,-0.71,-0.66,-0.62,-0.59,-0.579,-0.593,-0.63,-0.67,-0.72,-0.75,-0.767,-0.75,-0.69,-0.61,-0.51,-0.41,-0.32,-0.23,-0.18,-0.16,-0.167,-0.19,-0.23,-0.26,-0.28,-0.294,-0.288,-0.272,-0.253,-0.234,-0.219,-0.209,-0.206,-0.211,-0.226,-0.25,-0.28,-0.31,-0.35,-0.39,-0.43,-0.48,-0.52,-0.56,-0.61,-0.65,-0.68,-0.72,-0.75,-0.77,-0.788,-0.799,-0.803,-0.803,-0.802,-0.801,-0.798,-0.793,-0.787,-0.779,-0.76,-0.72,-0.67,-0.63,-0.59,-0.57,-0.554,-0.543,-0.533,-0.524,-0.515,-0.507,-0.499,-0.491,-0.483,-0.475,-0.467,-0.459,-0.449,-0.44,-0.429,-0.418,-0.406,-0.39,-0.374,-0.357,-0.341,-0.325,-0.309,-0.293,-0.279,-0.265,-0.253,-0.241,-0.231,-0.222,-0.215,-0.21,-0.207,-0.206,-0.221,-0.26,-0.32,-0.39,-0.47,-0.54,-0.6,-0.64,-0.657,-0.61,-0.52,-0.41,-0.28,-0.17,-0.08,-0.02,0 +PARAM_RARM02=0,0.77,1.53,2.3,3.07,3.83,4.6,4.56,4.51,4.47,4.43,4.39,4.34,4.3,4.311,4.322,4.333,4.344,4.356,4.367,4.378,4.389,4.4,4.35,4.3,4.25,4.2,4.15,4.1,4.19,4.27,4.36,4.45,4.53,4.62,4.71,4.79,4.88,4.884,4.887,4.89,4.894,4.897,4.9,4.914,4.929,4.943,4.957,4.971,4.986,5,4.97,4.93,4.9,4.86,4.83,4.79,4.76,4.72,4.69,4.65,4.62,4.58,4.55,4.51,4.48,4.44,4.41,4.37,4.34,4.3,4.33,4.37,4.4,4.44,4.47,4.5,4.54,4.45,4.36,4.27,4.18,4.09,4,4.06,4.12,4.18,4.24,4.29,4.35,4.41,4.47,4.53,4.59,4.65,4.71,4.76,4.82,4.88,4.94,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4.71,4.41,4.12,3.82,3.53,3.24,2.94,2.65,2.35,2.06,1.76,1.47,1.18,0.88,0.59,0.29,0 +PARAM_RARM03=0,-0.006,-0.021,-0.04,-0.07,-0.1,-0.14,-0.17,-0.2,-0.23,-0.25,-0.266,-0.277,-0.28,-0.23,-0.08,0.13,0.37,0.63,0.88,1.09,1.23,1.28,1.21,1.03,0.79,0.55,0.37,0.3,0.36,0.52,0.75,1.03,1.31,1.58,1.81,1.97,2.03,1.99,1.87,1.72,1.56,1.45,1.4,1.45,1.56,1.7,1.83,1.94,2.01,2.03,2.016,1.96,1.89,1.78,1.66,1.53,1.38,1.23,1.08,0.92,0.76,0.61,0.47,0.34,0.22,0.12,0.04,-0.03,-0.07,-0.08,0.01,0.22,0.47,0.72,0.92,1.05,1.09,1.03,0.89,0.7,0.5,0.36,0.3,0.308,0.328,0.36,0.4,0.44,0.49,0.54,0.59,0.65,0.7,0.74,0.79,0.82,0.86,0.88,0.895,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.889,0.86,0.81,0.75,0.69,0.62,0.54,0.46,0.38,0.31,0.24,0.17,0.11,0.07,0.03,0.01,0 +PARAM_LARM01=0,0.03,0.11,0.21,0.31,0.39,0.42,0.38,0.28,0.15,0.02,-0.07,-0.14,-0.16,-0.15,-0.12,-0.09,-0.04,0,0.04,0.08,0.11,0.116,0.08,-0.02,-0.14,-0.26,-0.36,-0.4,-0.37,-0.31,-0.22,-0.11,0,0.1,0.19,0.26,0.28,0.278,0.272,0.265,0.257,0.252,0.25,0.259,0.28,0.31,0.34,0.36,0.372,0.377,0.369,0.35,0.31,0.27,0.21,0.15,0.09,0.02,-0.05,-0.12,-0.19,-0.25,-0.31,-0.37,-0.43,-0.47,-0.51,-0.54,-0.553,-0.559,-0.52,-0.41,-0.29,-0.17,-0.07,0,0.016,-0.01,-0.09,-0.19,-0.29,-0.37,-0.4,-0.389,-0.37,-0.34,-0.3,-0.26,-0.21,-0.17,-0.12,-0.07,-0.02,0.03,0.07,0.1,0.13,0.16,0.172,0.177,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.18,0.187,0.21,0.25,0.3,0.35,0.4,0.44,0.46,0.475,0.44,0.38,0.29,0.21,0.13,0.06,0.02,0 +PARAM_LARM02=0,-0.29,-1.01,-1.99,-3,-3.84,-4.32,-4.54,-4.68,-4.75,-4.79,-4.801,-4.801,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.8,-4.815,-4.85,-4.9,-4.95,-4.98,-5,-4.97,-4.9,-4.79,-4.67,-4.53,-4.41,-4.3,-4.23,-4.2,-4.208,-4.226,-4.25,-4.27,-4.292,-4.3,-4.26,-4.15,-4.02,-3.89,-3.79,-3.72,-3.7,-3.71,-3.74,-3.78,-3.83,-3.89,-3.96,-4.04,-4.12,-4.2,-4.28,-4.36,-4.44,-4.51,-4.58,-4.64,-4.7,-4.74,-4.77,-4.79,-4.8,-4.785,-4.75,-4.71,-4.66,-4.63,-4.61,-4.6,-4.63,-4.7,-4.8,-4.9,-4.97,-5,-4.995,-4.983,-4.963,-4.94,-4.91,-4.87,-4.83,-4.79,-4.75,-4.71,-4.66,-4.62,-4.57,-4.53,-4.48,-4.44,-4.4,-4.36,-4.32,-4.29,-4.26,-4.24,-4.22,-4.201,-4.182,-4.161,-4.14,-4.12,-4.09,-4.06,-4.03,-3.99,-3.95,-3.9,-3.8,-3.63,-3.4,-3.14,-2.84,-2.53,-2.2,-1.88,-1.55,-1.24,-0.95,-0.69,-0.46,-0.27,-0.12,-0.03,0 +PARAM_LARM03=0,-0.06,-0.21,-0.43,-0.71,-1.02,-1.35,-1.68,-1.98,-2.25,-2.48,-2.65,-2.75,-2.79,-2.73,-2.57,-2.33,-2.05,-1.76,-1.48,-1.24,-1.08,-1.02,-1.15,-1.47,-1.9,-2.33,-2.66,-2.79,-2.67,-2.36,-1.91,-1.37,-0.82,-0.28,0.17,0.48,0.6,0.593,0.577,0.55,0.53,0.516,0.51,0.516,0.532,0.552,0.571,0.587,0.597,0.6,0.57,0.49,0.36,0.2,0.01,-0.21,-0.44,-0.69,-0.94,-1.19,-1.44,-1.68,-1.9,-2.11,-2.3,-2.47,-2.6,-2.7,-2.77,-2.79,-2.67,-2.38,-2.03,-1.69,-1.42,-1.24,-1.18,-1.3,-1.6,-1.99,-2.38,-2.67,-2.79,-2.75,-2.63,-2.46,-2.24,-1.99,-1.72,-1.43,-1.13,-0.84,-0.56,-0.29,-0.05,0.17,0.35,0.48,0.57,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.592,0.572,0.54,0.5,0.46,0.41,0.36,0.31,0.25,0.2,0.16,0.11,0.08,0.04,0.02,0.005,0 +PARAM_LHandFB=0 +PARAM_RHandFB=0 +PARAM_hand_00=0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 +PARAM_hand_01=0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 +PARAM_hand_02=0 +PARAM_hand_03=0 +PARAM_hand_04=0 +PARAM_hand_05=0 +PARAM_hand_06=0 +PARAM_hand_066=0 +PARAM_hand_07=0 +PARAM_hand_078=1 +PARAM_hand077=0 +PARAM_hand08=0 +PARAM_hand089=1 +PARAM_hand088=0 +PARAM_dance=0,0.03,0.11,0.24,0.38,0.53,0.67,0.79,0.87,0.91,0.86,0.75,0.61,0.44,0.28,0.13,0,-0.12,-0.21,-0.26,-0.29,-0.298,-0.3,-0.28,-0.22,-0.15,-0.08,-0.02,0,-0.015,-0.05,-0.09,-0.14,-0.17,-0.19,-0.201,-0.204,-0.206,-0.196,-0.17,-0.1,0,0.17,0.34,0.52,0.69,0.85,1,1.13,1.24,1.32,1.38,1.396,1.37,1.32,1.23,1.11,0.98,0.83,0.67,0.52,0.36,0.22,0.1,0,-0.09,-0.14,-0.17,-0.178,-0.182,-0.182,-0.179,-0.178,-0.13,-0.05,0,-0.02,-0.06,-0.12,-0.17,-0.22,-0.26,-0.29,-0.3,-0.289,-0.26,-0.22,-0.17,-0.12,-0.08,-0.04,-0.01,0.009,0.016,0.011,-0.001,-0.021,-0.05,-0.07,-0.11,-0.14,-0.17,-0.21,-0.24,-0.26,-0.29,-0.31,-0.326,-0.342,-0.356,-0.367,-0.377,-0.385,-0.391,-0.395,-0.398,-0.399,-0.4,-0.395,-0.382,-0.36,-0.34,-0.31,-0.27,-0.24,-0.2,-0.17,-0.14,-0.11,-0.08,-0.05,-0.03,-0.014,-0.004,0 +PARAM_leg=0,0.006,0.023,0.05,0.08,0.12,0.16,0.21,0.25,0.3,0.34,0.38,0.41,0.44,0.456,0.469,0.473,0.467,0.45,0.42,0.39,0.35,0.31,0.26,0.21,0.17,0.12,0.08,0.05,0.02,0.006,0,0.02,0.08,0.16,0.24,0.3,0.32,0.3,0.24,0.17,0.1,0.05,0.01,0,0.008,0.03,0.06,0.1,0.13,0.17,0.2,0.22,0.235,0.24,0.232,0.21,0.18,0.14,0.1,0.06,0.03,0.01,0,0.02,0.07,0.13,0.19,0.24,0.29,0.32,0.33,0.319,0.29,0.24,0.19,0.14,0.09,0.04,0.01,0,0.03,0.09,0.16,0.23,0.29,0.33,0.34,0.32,0.27,0.21,0.15,0.09,0.04,0.01,0,0.04,0.11,0.21,0.31,0.4,0.48,0.53,0.55,0.539,0.51,0.46,0.41,0.34,0.28,0.21,0.14,0.09,0.04,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARAM_breast02=0 +VISIBLE:PSD=1 +VISIBLE:ROUGH=1 +VISIBLE:PARTS_01_FACE_001=1 +VISIBLE:PARTS_01_EYE_001=1 +VISIBLE:PARTS_01_EYE_BALL_001=1 +VISIBLE:PARTS_01_BROW_001=1 +VISIBLE:PARTS_01_MOUTH_001=1 +VISIBLE:PARTS_01_NOSE_001=1 +VISIBLE:PARTS_01_EAR_001=1 +VISIBLE:PARTS_01_HAIR_FRONT_001=1 +VISIBLE:PARTS_01_HAIR_SIDE_001=1 +VISIBLE:PARTS_01_HAIR_BACK_001=1 +VISIBLE:PARTS_01_NECK=1 +VISIBLE:PARTS_01_BODY=1 +VISIBLE:PARTS_01_BACKGROUND=1 +VISIBLE:PARTS_01_SKETCH=1 +VISIBLE:PSD1=1 +VISIBLE:PARTS_ARM01=1 +VISIBLE:PARTS_ARM02=1 +VISIBLE:PARTS_ARM03=1 +VISIBLE:PARTS_01_CORE=1 +VISIBLE:PARTS_01_AHO=1 +VISIBLE:PARTS_01_CHEEK=1 +VISIBLE:PARTS_01_ARM_L=1 +VISIBLE:PARTS_01_ARM_R=1 +VISIBLE:PARTS_01_LEG=1 \ No newline at end of file diff --git a/public/pio/models/live2d/illyasviel/textures/texture_00.png b/public/pio/models/live2d/illyasviel/textures/texture_00.png new file mode 100644 index 0000000..f11ecf6 Binary files /dev/null and b/public/pio/models/live2d/illyasviel/textures/texture_00.png differ diff --git a/public/pio/models/live2d/snow_miku/model.json b/public/pio/models/live2d/snow_miku/model.json new file mode 100644 index 0000000..732193a --- /dev/null +++ b/public/pio/models/live2d/snow_miku/model.json @@ -0,0 +1,23 @@ +{ + "posted": "Dreamer-Paul", + "model": "model.moc", + "textures": [ + "textures/texture_00.png" + ], + "layout": { + "center_x": 0.0, + "center_y": 0.0, + "width": 2.0 + }, + "hit_areas_custom": { + "head_x": [-0.35, 0.6], + "head_y": [0.19, -0.2], + "body_x": [-0.3, -0.25], + "body_y": [0.3, -0.9] + }, + "motions": { + "idle": [ + {"file": "motions/idle/idle.mtn"} + ] + } +} diff --git a/public/pio/models/live2d/snow_miku/model.moc b/public/pio/models/live2d/snow_miku/model.moc new file mode 100644 index 0000000..6725882 Binary files /dev/null and b/public/pio/models/live2d/snow_miku/model.moc differ diff --git a/public/pio/models/live2d/snow_miku/motions/idle/idle.mtn b/public/pio/models/live2d/snow_miku/motions/idle/idle.mtn new file mode 100644 index 0000000..37d01f6 --- /dev/null +++ b/public/pio/models/live2d/snow_miku/motions/idle/idle.mtn @@ -0,0 +1,54 @@ +# Live2D Animator Motion Data +$fps=30 + +$fadein=0 + +$fadeout=0 + +PARAM_ANGLE_X=0,0.01,0.04,0.09,0.15,0.23,0.34,0.45,0.59,0.74,0.9,1.09,1.28,1.49,1.72,1.95,2.2,2.47,2.74,3.03,3.33,3.63,3.96,4.29,4.63,4.98,5.34,5.7,6.08,6.46,6.85,7.25,7.66,8.07,8.49,8.91,9.33,9.76,10.2,10.64,11.09,11.53,11.98,12.43,12.89,13.34,13.8,14.25,14.71,15.18,15.63,16.09,16.55,16.99,17.45,17.9,18.35,18.8,19.23,19.68,20.11,20.54,20.96,21.38,21.8,22.21,22.61,23,23.4,23.77,24.15,24.51,24.87,25.22,25.56,25.89,26.21,26.52,26.82,27.11,27.38,27.65,27.9,28.14,28.37,28.58,28.78,28.97,29.14,29.3,29.44,29.57,29.68,29.78,29.86,29.92,29.96,29.99,30,29.95,29.78,29.52,29.15,28.7,28.15,27.51,26.8,25.99,25.12,24.17,23.15,22.06,20.94,19.75,18.5,17.2,15.88,14.51,13.09,11.63,10.17,8.68,7.15,5.64,4.08,2.55,0.97,-0.57,-2.15,-3.68,-5.23,-6.76,-8.25,-9.75,-11.2,-12.65,-14.04,-15.4,-16.72,-18,-19.24,-20.43,-21.56,-22.64,-23.65,-24.6,-25.49,-26.3,-27.05,-27.72,-28.3,-28.81,-29.23,-29.56,-29.8,-29.95,-30,-29.97,-29.88,-29.73,-29.53,-29.28,-28.97,-28.62,-28.22,-27.78,-27.3,-26.78,-26.22,-25.63,-25.01,-24.36,-23.67,-22.98,-22.25,-21.5,-20.74,-19.97,-19.17,-18.37,-17.56,-16.74,-15.92,-15.11,-14.28,-13.46,-12.65,-11.84,-11.04,-10.26,-9.49,-8.74,-8,-7.28,-6.58,-5.91,-5.26,-4.64,-4.05,-3.5,-2.97,-2.49,-2.04,-1.63,-1.26,-0.94,-0.66,-0.42,-0.24,-0.11,-0.03 +PARAM_ANGLE_Y=0,0.01,0.04,0.09,0.15,0.23,0.34,0.45,0.59,0.74,0.9,1.09,1.28,1.49,1.72,1.95,2.2,2.47,2.74,3.03,3.33,3.63,3.96,4.29,4.63,4.98,5.34,5.7,6.08,6.46,6.85,7.25,7.66,8.07,8.49,8.91,9.33,9.76,10.2,10.64,11.09,11.53,11.98,12.43,12.89,13.34,13.8,14.25,14.71,15.18,15.63,16.09,16.55,16.99,17.45,17.9,18.35,18.8,19.23,19.68,20.11,20.54,20.96,21.38,21.8,22.21,22.61,23,23.4,23.77,24.15,24.51,24.87,25.22,25.56,25.89,26.21,26.52,26.82,27.11,27.38,27.65,27.9,28.14,28.37,28.58,28.78,28.97,29.14,29.3,29.44,29.57,29.68,29.78,29.86,29.92,29.96,29.99,30,29.97,29.9,29.77,29.58,29.34,29.04,28.68,28.26,27.77,27.22,26.6,25.9,25.14,24.3,23.38,22.39,21.32,20.16,18.94,17.62,16.21,14.73,13.15,11.47,9.69,7.82,5.85,-0.58,-8.41,-15.31,-20.14,-22,-17.53,-10.38,-3.7,1.12,3,-0.6,-8.26,-16,-22.59,-25.61,-27.14,-27.82,-28,-23.01,-13.99,-9,-9.59,-11.12,-13.33,-15.87,-18.49,-20.95,-23.04,-24.64,-25.64,-26,-25.97,-25.9,-25.77,-25.59,-25.37,-25.11,-24.8,-24.46,-24.08,-23.66,-23.21,-22.72,-22.21,-21.68,-21.11,-20.52,-19.91,-19.29,-18.64,-17.98,-17.31,-16.61,-15.92,-15.22,-14.51,-13.8,-13.1,-12.37,-11.67,-10.96,-10.26,-9.57,-8.89,-8.23,-7.57,-6.93,-6.31,-5.71,-5.12,-4.56,-4.02,-3.51,-3.03,-2.58,-2.16,-1.77,-1.41,-1.09,-0.81,-0.57,-0.37,-0.21,-0.09,-0.02 +PARAM_ANGLE_Z=0,-0.15,-0.59,-1.25,-2.14,-3.18,-4.36,-5.64,-6.96,-8.33,-9.69,-11.01,-12.24,-13.39,-14.42,-15.31,-16.02,-16.55,-16.89,-17,-16.97,-16.87,-16.72,-16.5,-16.24,-15.91,-15.54,-15.11,-14.65,-14.13,-13.56,-12.96,-12.32,-11.64,-10.93,-10.18,-9.4,-8.58,-7.74,-6.89,-6,-5.08,-4.16,-3.22,-2.24,-1.27,-0.26,0.74,1.74,2.76,3.79,4.81,5.85,6.88,7.91,8.94,9.97,10.98,12,13,13.99,14.95,15.91,16.86,17.77,18.68,19.57,20.42,21.26,22.05,22.84,23.59,24.3,24.97,25.62,26.22,26.8,27.32,27.81,28.25,28.64,29,29.29,29.54,29.74,29.88,29.97,30,29.97,29.89,29.76,29.58,29.35,29.08,28.76,28.4,28,27.55,27.07,26.55,25.99,25.41,24.79,24.13,23.46,22.75,22.01,21.26,20.47,19.67,18.86,18.01,17.16,16.28,15.4,14.51,13.59,12.68,11.76,10.83,9.9,8.97,8.03,7.1,6.17,5.24,4.32,3.41,2.49,1.6,0.72,-0.16,-1.01,-1.86,-2.67,-3.47,-4.26,-5.01,-5.75,-6.46,-7.13,-7.79,-8.41,-8.99,-9.55,-10.07,-10.55,-11,-11.4,-11.76,-12.08,-12.35,-12.58,-12.76,-12.89,-12.97,-13,-12.987,-12.95,-12.88,-12.8,-12.69,-12.55,-12.4,-12.23,-12.04,-11.83,-11.6,-11.36,-11.11,-10.84,-10.55,-10.26,-9.96,-9.64,-9.32,-8.99,-8.65,-8.31,-7.96,-7.61,-7.26,-6.9,-6.55,-6.19,-5.83,-5.48,-5.13,-4.79,-4.45,-4.11,-3.79,-3.47,-3.16,-2.85,-2.56,-2.28,-2.01,-1.76,-1.52,-1.29,-1.08,-0.88,-0.71,-0.55,-0.41,-0.29,-0.18,-0.1,-0.05,-0.01 +PARAM_EYE_L_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.77,0.782,0.794,0.805,0.816,0.826,0.837,0.847,0.856,0.866,0.874,0.883,0.891,0.9,0.907,0.915,0.922,0.928,0.935,0.941,0.947,0.952,0.958,0.962,0.967,0.971,0.975,0.979,0.982,0.985,0.988,0.991,0.993,0.995,0.996,0.998,0.999,0.999,1,1,0.82,0.54,0.27,0.08,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.26,0.74 +PARAM_EYE_R_OPEN=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.77,0.782,0.794,0.805,0.816,0.826,0.837,0.847,0.856,0.866,0.874,0.883,0.891,0.9,0.907,0.915,0.922,0.928,0.935,0.941,0.947,0.952,0.958,0.962,0.967,0.971,0.975,0.979,0.982,0.985,0.988,0.991,0.993,0.995,0.996,0.998,0.999,0.999,1,1,0.96,0.89,0.83,0.79,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.77,0.83,0.94 +PARAM_EYE_BALL_X=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.013,0.05,0.1,0.16,0.23,0.29,0.34,0.38,0.39,0.387,0.38,0.368,0.353,0.334,0.31,0.29,0.26,0.24,0.21,0.18,0.15,0.13,0.1,0.08,0.06,0.037,0.022,0.01,0.003 +PARAM_EYE_BALL_Y=0 +PARAM_BROW_L_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.24,-0.64,-0.91,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.82,-0.54,-0.27,-0.08 +PARAM_BROW_R_Y=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.09,-0.24,-0.34,-0.37,-0.37,-0.37,-0.37,-0.37,-0.37,-0.37,-0.37,-0.37,-0.37,-0.37,-0.37,-0.3,-0.2,-0.1,-0.03 +PARAM_MOUTH_OPEN_Y=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.13,0.26,0.42,0.58,0.74,0.87,0.97,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.76,0.36,0.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.73 +PARAM_BODY_ANGLE_X=0,0.03,0.13,0.28,0.49,0.74,1.04,1.37,1.75,2.15,2.58,3.03,3.49,3.97,4.45,4.94,5.42,5.9,6.38,6.84,7.28,7.7,8.1,8.46,8.8,9.1,9.37,9.59,9.76,9.89,9.97,10,9.97,9.86,9.7,9.47,9.19,8.85,8.47,8.04,7.56,7.06,6.51,5.94,5.33,4.71,4.06,3.4,2.72,2.04,1.34,0.66,-0.04,-0.72,-1.4,-2.06,-2.71,-3.33,-3.94,-4.51,-5.06,-5.56,-6.04,-6.47,-6.85,-7.19,-7.47,-7.7,-7.86,-7.97,-8,-7.96,-7.84,-7.64,-7.38,-7.06,-6.67,-6.22,-5.73,-5.19,-4.6,-3.98,-3.33,-2.65,-1.96,-1.23,-0.5,0.25,1,1.75,2.5,3.23,3.96,4.65,5.33,5.98,6.6,7.19,7.73,8.22,8.67,9.06,9.38,9.64,9.84,9.96,10,9.97,9.9,9.77,9.59,9.35,9.07,8.73,8.34,7.89,7.39,6.85,6.26,5.61,4.92,4.18,3.4,2.59,1.72,0.82,-0.47,-1.38,-1.86,-2,-1.77,-1.23,-0.5,0.23,0.77,1,0.9,0.63,0.22,-0.3,-0.88,-1.5,-2.12,-2.7,-3.22,-3.63,-3.9,-4,-3.997,-3.988,-3.974,-3.954,-3.93,-3.9,-3.86,-3.82,-3.78,-3.73,-3.68,-3.62,-3.56,-3.5,-3.43,-3.36,-3.28,-3.21,-3.13,-3.05,-2.97,-2.88,-2.79,-2.71,-2.62,-2.52,-2.43,-2.34,-2.25,-2.15,-2.06,-1.96,-1.87,-1.78,-1.68,-1.59,-1.5,-1.41,-1.32,-1.23,-1.15,-1.06,-0.98,-0.9,-0.82,-0.75,-0.67,-0.6,-0.54,-0.47,-0.41,-0.35,-0.3,-0.25,-0.21,-0.16,-0.13,-0.09,-0.07,-0.04,-0.024,-0.011,-0.003 +PARAM_BODY_ANGLE_Y=0,0.03,0.13,0.28,0.49,0.74,1.04,1.37,1.75,2.15,2.58,3.03,3.49,3.97,4.45,4.94,5.42,5.9,6.38,6.84,7.28,7.7,8.1,8.46,8.8,9.1,9.37,9.59,9.76,9.89,9.97,10,9.96,9.85,9.66,9.41,9.1,8.73,8.29,7.82,7.29,6.73,6.12,5.49,4.81,4.12,3.4,2.67,1.91,1.15,0.38,-0.38,-1.15,-1.91,-2.67,-3.4,-4.12,-4.81,-5.49,-6.12,-6.73,-7.29,-7.82,-8.29,-8.73,-9.1,-9.41,-9.66,-9.85,-9.96,-10,-9.87,-9.5,-8.9,-8.1,-7.16,-6.07,-4.85,-3.59,-2.24,-0.86,0.53,1.87,3.2,4.46,5.64,6.7,7.65,8.46,9.11,9.6,9.9,10,9.92,9.69,9.31,8.82,8.2,7.49,6.67,5.8,4.85,3.86,2.81,1.75,0.67,-0.41,-1.47,-2.52,-3.56,-4.53,-5.46,-6.33,-7.13,-7.84,-8.47,-9.01,-9.43,-9.74,-9.94,-10,-9.98,-9.92,-9.82,-9.69,-9.52,-9.32,-9.09,-8.83,-8.54,-8.23,-7.89,-7.53,-7.15,-6.74,-6.32,-5.88,-5.42,-4.95,-4.48,-3.99,-3.48,-2.97,-2.45,-1.92,-1.4,-0.86,-0.34,0.21,0.73,1.26,1.79,2.31,2.82,3.33,3.84,4.32,4.8,5.26,5.71,6.14,6.57,6.97,7.35,7.71,8.05,8.37,8.66,8.93,9.17,9.38,9.56,9.72,9.84,9.93,9.98,10,9.97,9.89,9.77,9.6,9.4,9.15,8.88,8.57,8.25,7.89,7.52,7.13,6.73,6.32,5.9,5.48,5.05,4.63,4.2,3.79,3.39,2.99,2.61,2.24,1.89,1.57,1.27,0.99,0.74,0.53,0.34,0.2,0.09,0.02 +PARAM_BODY_ANGLE_Z=0,0.03,0.13,0.28,0.49,0.74,1.04,1.37,1.75,2.15,2.58,3.03,3.49,3.97,4.45,4.94,5.42,5.9,6.38,6.84,7.28,7.7,8.1,8.46,8.8,9.1,9.37,9.59,9.76,9.89,9.97,10,9.993,9.973,9.94,9.89,9.83,9.76,9.68,9.58,9.47,9.35,9.21,9.06,8.9,8.73,8.55,8.35,8.14,7.93,7.69,7.44,7.19,6.92,6.64,6.35,6.05,5.73,5.4,5.06,4.71,4.35,3.97,3.58,3.19,2.77,2.35,1.91,1.46,1,0,-0.94,-1.81,-2.66,-3.46,-4.19,-4.89,-5.55,-6.14,-6.7,-7.21,-7.68,-8.09,-8.47,-8.8,-9.09,-9.34,-9.55,-9.71,-9.84,-9.93,-9.98,-10,-9.96,-9.86,-9.68,-9.45,-9.16,-8.81,-8.42,-7.98,-7.51,-7,-6.45,-5.89,-5.3,-4.7,-4.09,-3.47,-2.85,-2.24,-1.62,-1.02,-0.44,0.12,0.67,1.18,1.65,2.09,2.48,2.83,3.12,3.35,3.53,3.64,3.67,3.67,3.666,3.658,3.648,3.635,3.619,3.6,3.58,3.56,3.53,3.5,3.47,3.44,3.4,3.37,3.33,3.29,3.24,3.2,3.15,3.11,3.06,3.01,2.96,2.9,2.85,2.79,2.74,2.68,2.62,2.56,2.5,2.44,2.38,2.32,2.26,2.19,2.13,2.07,2,1.94,1.88,1.81,1.75,1.68,1.62,1.56,1.49,1.43,1.37,1.31,1.25,1.19,1.13,1.07,1.01,0.95,0.9,0.84,0.79,0.74,0.69,0.64,0.59,0.54,0.49,0.45,0.41,0.37,0.33,0.29,0.25,0.22,0.19,0.16,0.13,0.11,0.09,0.068,0.05,0.035,0.022,0.013,0.006,0.001 +PARAM_HAIR_FRONT=0,0.008,0.03,0.06,0.11,0.16,0.21,0.27,0.32,0.38,0.43,0.49,0.53,0.58,0.61,0.64,0.654,0.66,0.649,0.62,0.57,0.51,0.44,0.35,0.26,0.16,0.06,-0.04,-0.15,-0.26,-0.36,-0.46,-0.56,-0.65,-0.73,-0.8,-0.87,-0.92,-0.96,-0.98,-0.99,-0.981,-0.96,-0.92,-0.86,-0.8,-0.73,-0.65,-0.56,-0.47,-0.37,-0.27,-0.17,-0.07,0.03,0.12,0.22,0.31,0.4,0.48,0.55,0.61,0.67,0.71,0.74,0.763,0.77,0.766,0.752,0.73,0.7,0.67,0.63,0.58,0.53,0.47,0.41,0.35,0.28,0.22,0.15,0.08,0.02,-0.05,-0.12,-0.18,-0.24,-0.3,-0.36,-0.41,-0.45,-0.5,-0.53,-0.56,-0.59,-0.605,-0.616,-0.62,-0.609,-0.58,-0.53,-0.46,-0.38,-0.3,-0.2,-0.1,0.01,0.11,0.21,0.31,0.39,0.47,0.54,0.59,0.62,0.63,0.621,0.6,0.56,0.51,0.45,0.38,0.3,0.22,0.13,0.04,-0.05,-0.14,-0.22,-0.3,-0.38,-0.45,-0.51,-0.56,-0.6,-0.63,-0.653,-0.66,-0.654,-0.638,-0.61,-0.58,-0.53,-0.48,-0.43,-0.37,-0.3,-0.23,-0.16,-0.08,-0.01,0.07,0.14,0.22,0.29,0.36,0.42,0.48,0.54,0.59,0.63,0.67,0.7,0.72,0.735,0.74,0.735,0.722,0.7,0.67,0.64,0.6,0.55,0.5,0.45,0.4,0.34,0.28,0.22,0.16,0.1,0.04,-0.02,-0.07,-0.13,-0.17,-0.22,-0.26,-0.29,-0.32,-0.35,-0.365,-0.376,-0.38,-0.377,-0.367,-0.352,-0.332,-0.31,-0.28,-0.25,-0.22,-0.19,-0.16,-0.13,-0.1,-0.07,-0.05,-0.028,-0.013,-0.003 +PARAM_HAIR_SIDE=0,0.004,0.013,0.027,0.045,0.07,0.09,0.11,0.14,0.16,0.18,0.21,0.227,0.245,0.259,0.27,0.277,0.28,0.272,0.25,0.21,0.17,0.11,0.05,-0.03,-0.1,-0.18,-0.26,-0.34,-0.42,-0.5,-0.58,-0.65,-0.72,-0.78,-0.84,-0.89,-0.93,-0.96,-0.974,-0.98,-0.98,-0.98,-0.979,-0.978,-0.978,-0.976,-0.975,-0.974,-0.972,-0.97,-0.968,-0.966,-0.964,-0.961,-0.959,-0.956,-0.953,-0.95,-0.946,-0.943,-0.939,-0.936,-0.932,-0.927,-0.923,-0.919,-0.914,-0.91,-0.905,-0.9,-0.895,-0.89,-0.885,-0.879,-0.874,-0.868,-0.862,-0.856,-0.85,-0.844,-0.838,-0.832,-0.825,-0.819,-0.812,-0.805,-0.799,-0.792,-0.785,-0.778,-0.771,-0.763,-0.756,-0.749,-0.741,-0.733,-0.726,-0.718,-0.711,-0.703,-0.695,-0.687,-0.679,-0.671,-0.663,-0.655,-0.647,-0.638,-0.63,-0.622,-0.614,-0.605,-0.597,-0.588,-0.58,-0.571,-0.563,-0.554,-0.546,-0.537,-0.529,-0.52,-0.512,-0.503,-0.494,-0.486,-0.477,-0.468,-0.46,-0.451,-0.443,-0.434,-0.426,-0.417,-0.409,-0.4,-0.392,-0.383,-0.375,-0.366,-0.358,-0.35,-0.342,-0.333,-0.325,-0.317,-0.309,-0.301,-0.293,-0.285,-0.277,-0.269,-0.262,-0.254,-0.247,-0.239,-0.231,-0.224,-0.217,-0.209,-0.202,-0.195,-0.188,-0.181,-0.175,-0.168,-0.161,-0.155,-0.148,-0.142,-0.136,-0.13,-0.124,-0.118,-0.112,-0.106,-0.101,-0.095,-0.09,-0.085,-0.08,-0.075,-0.07,-0.066,-0.061,-0.057,-0.053,-0.048,-0.044,-0.041,-0.037,-0.034,-0.03,-0.027,-0.024,-0.021,-0.019,-0.016,-0.014,-0.012,-0.01,-0.008,-0.006,-0.005,-0.004,-0.002,-0.002,-0.001,0,0 +PARAM_HAIR_BACK=0,0.003,0.01,0.019,0.027,0.034,0.039,0.04,0.036,0.026,0.011,-0.01,-0.03,-0.06,-0.09,-0.13,-0.17,-0.2,-0.24,-0.29,-0.33,-0.37,-0.41,-0.46,-0.5,-0.55,-0.59,-0.63,-0.66,-0.7,-0.73,-0.75,-0.78,-0.8,-0.819,-0.836,-0.851,-0.864,-0.875,-0.884,-0.892,-0.898,-0.902,-0.906,-0.908,-0.91,-0.91,-0.91,-0.909,-0.906,-0.903,-0.898,-0.892,-0.883,-0.873,-0.861,-0.846,-0.829,-0.81,-0.79,-0.76,-0.73,-0.7,-0.67,-0.63,-0.59,-0.54,-0.49,-0.44,-0.39,-0.34,-0.29,-0.24,-0.2,-0.15,-0.1,-0.06,-0.01,0.03,0.07,0.12,0.16,0.2,0.24,0.28,0.32,0.35,0.39,0.43,0.46,0.5,0.53,0.56,0.59,0.62,0.65,0.68,0.7,0.73,0.75,0.78,0.8,0.82,0.841,0.86,0.877,0.893,0.908,0.921,0.933,0.944,0.953,0.961,0.968,0.973,0.977,0.979,0.98,0.979,0.974,0.967,0.958,0.945,0.931,0.913,0.894,0.87,0.85,0.82,0.79,0.76,0.73,0.69,0.66,0.62,0.58,0.53,0.49,0.44,0.39,0.34,0.29,0.24,0.18,0.12,0.06,0,-0.06,-0.12,-0.18,-0.24,-0.29,-0.35,-0.39,-0.44,-0.49,-0.53,-0.57,-0.61,-0.64,-0.68,-0.71,-0.74,-0.76,-0.79,-0.81,-0.83,-0.851,-0.868,-0.883,-0.895,-0.906,-0.915,-0.921,-0.926,-0.929,-0.93,-0.927,-0.92,-0.909,-0.893,-0.874,-0.85,-0.83,-0.8,-0.77,-0.73,-0.7,-0.66,-0.63,-0.59,-0.55,-0.51,-0.47,-0.43,-0.39,-0.35,-0.31,-0.28,-0.24,-0.21,-0.18,-0.15,-0.12,-0.09,-0.07,-0.049,-0.032,-0.018,-0.008,-0.002 +PARAM_HAIR_BACK_Y=0,-0.03,-0.09,-0.18,-0.27,-0.36,-0.44,-0.5,-0.58,-0.64,-0.7,-0.75,-0.8,-0.83,-0.87,-0.9,-0.92,-0.942,-0.959,-0.973,-0.983,-0.991,-0.996,-0.999,-1,-0.992,-0.97,-0.94,-0.89,-0.83,-0.77,-0.7,-0.62,-0.55,-0.47,-0.38,-0.31,-0.23,-0.15,-0.09,-0.02,0.03,0.08,0.12,0.15,0.164,0.17,0.169,0.164,0.158,0.15,0.14,0.129,0.118,0.105,0.093,0.08,0.068,0.056,0.044,0.034,0.024,0.016,0.009,0.004,0.001,0,0.001,0.004,0.01,0.018,0.027,0.038,0.051,0.066,0.082,0.1,0.12,0.14,0.16,0.18,0.21,0.23,0.26,0.29,0.31,0.34,0.37,0.4,0.43,0.46,0.49,0.51,0.54,0.57,0.6,0.63,0.66,0.69,0.71,0.74,0.77,0.79,0.82,0.84,0.86,0.88,0.9,0.918,0.934,0.949,0.962,0.973,0.982,0.99,0.996,0.999,1,0.992,0.97,0.93,0.88,0.83,0.76,0.68,0.6,0.51,0.41,0.32,0.22,0.12,0.01,-0.09,-0.19,-0.29,-0.39,-0.48,-0.57,-0.65,-0.72,-0.79,-0.85,-0.9,-0.94,-0.97,-0.994,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.997,-0.989,-0.977,-0.96,-0.94,-0.92,-0.89,-0.86,-0.82,-0.79,-0.75,-0.71,-0.67,-0.63,-0.59,-0.55,-0.51,-0.46,-0.42,-0.38,-0.34,-0.3,-0.26,-0.22,-0.19,-0.16,-0.13,-0.1,-0.07,-0.05,-0.034,-0.02,-0.009,-0.002 +PARAM_ARM_L=0,-0.011,-0.04,-0.09,-0.16,-0.25,-0.35,-0.46,-0.59,-0.73,-0.88,-1.03,-1.19,-1.36,-1.54,-1.71,-1.89,-2.07,-2.24,-2.42,-2.59,-2.76,-2.92,-3.07,-3.22,-3.35,-3.48,-3.59,-3.7,-3.78,-3.86,-3.92,-3.96,-3.99,-4,-3.98,-3.92,-3.82,-3.69,-3.52,-3.32,-3.09,-2.83,-2.54,-2.23,-1.9,-1.55,-1.17,-0.78,-0.37,0.05,0.49,0.93,1.38,1.84,2.3,2.76,3.24,3.7,4.16,4.62,5.07,5.51,5.95,6.37,6.78,7.17,7.55,7.9,8.23,8.54,8.83,9.09,9.32,9.52,9.69,9.82,9.92,9.98,10,9.998,9.993,9.985,9.973,9.958,9.94,9.92,9.89,9.87,9.84,9.8,9.77,9.73,9.69,9.64,9.59,9.55,9.49,9.44,9.38,9.32,9.26,9.19,9.13,9.06,8.99,8.92,8.84,8.76,8.68,8.6,8.52,8.44,8.35,8.26,8.17,8.08,7.99,7.9,7.8,7.71,7.61,7.51,7.41,7.31,7.2,7.1,6.99,6.89,6.78,6.68,6.57,6.46,6.35,6.24,6.13,6.02,5.9,5.79,5.68,5.57,5.45,5.34,5.23,5.11,5,4.89,4.77,4.66,4.55,4.43,4.32,4.21,4.1,3.98,3.87,3.76,3.65,3.54,3.43,3.32,3.22,3.11,3.01,2.9,2.8,2.69,2.59,2.49,2.39,2.29,2.2,2.1,2.01,1.92,1.83,1.74,1.65,1.56,1.48,1.4,1.32,1.24,1.16,1.08,1.01,0.94,0.87,0.81,0.74,0.68,0.62,0.56,0.51,0.45,0.41,0.36,0.31,0.27,0.23,0.2,0.16,0.13,0.11,0.08,0.06,0.042,0.027,0.015,0.007,0.002 +PARAM_ARM_R=0,-0.03,-0.11,-0.25,-0.44,-0.67,-0.93,-1.24,-1.57,-1.93,-2.32,-2.72,-3.14,-3.57,-4.01,-4.45,-4.88,-5.31,-5.74,-6.15,-6.55,-6.93,-7.29,-7.62,-7.92,-8.19,-8.43,-8.63,-8.79,-8.9,-8.98,-9,-8.987,-8.95,-8.88,-8.79,-8.68,-8.54,-8.38,-8.2,-8,-7.78,-7.55,-7.29,-7.02,-6.73,-6.43,-6.11,-5.78,-5.44,-5.08,-4.72,-4.35,-3.96,-3.57,-3.17,-2.77,-2.36,-1.95,-1.53,-1.11,-0.68,-0.26,0.16,0.58,1,1.42,1.83,2.25,2.65,3.06,3.45,3.84,4.22,4.6,4.95,5.3,5.65,5.98,6.29,6.59,6.88,7.15,7.41,7.65,7.87,8.08,8.26,8.43,8.58,8.7,8.81,8.89,8.95,8.99,9,8.998,8.992,8.982,8.968,8.95,8.93,8.9,8.87,8.84,8.81,8.77,8.72,8.68,8.63,8.58,8.52,8.46,8.4,8.34,8.27,8.2,8.13,8.06,7.98,7.9,7.82,7.74,7.65,7.56,7.48,7.38,7.29,7.2,7.1,7,6.9,6.8,6.7,6.59,6.49,6.38,6.27,6.16,6.06,5.95,5.83,5.72,5.61,5.49,5.38,5.27,5.15,5.04,4.92,4.8,4.69,4.57,4.46,4.34,4.22,4.11,3.99,3.88,3.76,3.65,3.53,3.42,3.31,3.2,3.09,2.98,2.87,2.76,2.65,2.55,2.44,2.34,2.23,2.13,2.03,1.94,1.84,1.75,1.65,1.56,1.47,1.39,1.3,1.22,1.14,1.06,0.98,0.91,0.84,0.77,0.7,0.63,0.57,0.51,0.46,0.41,0.36,0.31,0.26,0.22,0.19,0.15,0.12,0.09,0.07,0.05,0.031,0.017,0.008,0.002 +PARAM_FOOT_L=0,-0.001,-0.005,-0.012,-0.02,-0.03,-0.043,-0.056,-0.072,-0.088,-0.106,-0.124,-0.143,-0.163,-0.183,-0.203,-0.222,-0.242,-0.261,-0.28,-0.299,-0.316,-0.332,-0.347,-0.361,-0.373,-0.384,-0.393,-0.4,-0.406,-0.409,-0.41,-0.409,-0.406,-0.402,-0.396,-0.388,-0.378,-0.367,-0.355,-0.341,-0.326,-0.309,-0.292,-0.273,-0.253,-0.23,-0.21,-0.19,-0.16,-0.14,-0.11,-0.09,-0.06,-0.03,0,0.03,0.06,0.08,0.11,0.14,0.17,0.21,0.24,0.27,0.3,0.33,0.36,0.39,0.42,0.45,0.48,0.51,0.53,0.56,0.59,0.62,0.64,0.67,0.69,0.72,0.74,0.76,0.78,0.803,0.821,0.839,0.856,0.872,0.886,0.899,0.911,0.921,0.929,0.937,0.943,0.947,0.949,0.95,0.947,0.938,0.924,0.905,0.88,0.85,0.82,0.78,0.74,0.7,0.65,0.6,0.55,0.5,0.44,0.39,0.33,0.27,0.21,0.16,0.1,0.04,-0.02,-0.07,-0.13,-0.18,-0.23,-0.28,-0.33,-0.37,-0.41,-0.45,-0.48,-0.51,-0.54,-0.554,-0.568,-0.577,-0.58,-0.58,-0.579,-0.577,-0.575,-0.572,-0.569,-0.565,-0.56,-0.555,-0.55,-0.544,-0.538,-0.531,-0.524,-0.516,-0.508,-0.5,-0.491,-0.482,-0.473,-0.463,-0.453,-0.443,-0.433,-0.422,-0.411,-0.4,-0.389,-0.378,-0.367,-0.356,-0.344,-0.332,-0.321,-0.309,-0.297,-0.286,-0.274,-0.262,-0.251,-0.239,-0.228,-0.216,-0.205,-0.194,-0.183,-0.172,-0.161,-0.151,-0.14,-0.131,-0.121,-0.111,-0.102,-0.093,-0.084,-0.076,-0.068,-0.06,-0.053,-0.046,-0.04,-0.034,-0.028,-0.023,-0.018,-0.014,-0.011,-0.007,-0.005,-0.003,-0.001,0 +PARAM_FOOT_R=0,-0.001,-0.003,-0.008,-0.013,-0.02,-0.028,-0.037,-0.047,-0.058,-0.07,-0.082,-0.094,-0.107,-0.12,-0.133,-0.146,-0.159,-0.172,-0.185,-0.197,-0.208,-0.219,-0.229,-0.238,-0.246,-0.253,-0.259,-0.264,-0.267,-0.269,-0.27,-0.27,-0.269,-0.268,-0.267,-0.265,-0.263,-0.26,-0.257,-0.254,-0.251,-0.247,-0.243,-0.239,-0.234,-0.229,-0.224,-0.219,-0.214,-0.208,-0.202,-0.196,-0.19,-0.184,-0.177,-0.171,-0.164,-0.157,-0.15,-0.144,-0.137,-0.13,-0.123,-0.116,-0.109,-0.102,-0.095,-0.088,-0.081,-0.075,-0.068,-0.061,-0.055,-0.048,-0.042,-0.036,-0.03,-0.024,-0.019,-0.013,-0.008,-0.003,0.002,0.006,0.011,0.015,0.019,0.022,0.025,0.028,0.031,0.033,0.035,0.037,0.038,0.039,0.04,0.04,0.039,0.036,0.031,0.024,0.015,0.005,-0.007,-0.02,-0.034,-0.05,-0.067,-0.084,-0.103,-0.122,-0.142,-0.162,-0.18,-0.2,-0.22,-0.25,-0.27,-0.29,-0.31,-0.328,-0.348,-0.367,-0.386,-0.403,-0.42,-0.436,-0.45,-0.463,-0.475,-0.485,-0.494,-0.501,-0.506,-0.509,-0.51,-0.51,-0.509,-0.507,-0.505,-0.503,-0.5,-0.497,-0.493,-0.488,-0.483,-0.478,-0.473,-0.467,-0.46,-0.454,-0.447,-0.439,-0.432,-0.424,-0.416,-0.407,-0.398,-0.39,-0.38,-0.371,-0.362,-0.352,-0.342,-0.333,-0.323,-0.313,-0.303,-0.292,-0.282,-0.272,-0.261,-0.251,-0.241,-0.231,-0.22,-0.21,-0.2,-0.19,-0.18,-0.17,-0.161,-0.151,-0.142,-0.132,-0.123,-0.115,-0.106,-0.098,-0.09,-0.082,-0.074,-0.067,-0.06,-0.053,-0.047,-0.041,-0.035,-0.03,-0.025,-0.02,-0.016,-0.012,-0.009,-0.006,-0.004,-0.002,-0.001,0 +PARAM_SLEEVE=0,0.002,0.008,0.019,0.032,0.049,0.068,0.09,0.12,0.14,0.17,0.2,0.23,0.26,0.29,0.33,0.36,0.39,0.42,0.45,0.48,0.51,0.53,0.56,0.58,0.601,0.618,0.633,0.644,0.653,0.658,0.66,0.66,0.66,0.659,0.659,0.658,0.658,0.657,0.656,0.655,0.654,0.653,0.652,0.65,0.649,0.647,0.645,0.643,0.642,0.639,0.637,0.635,0.633,0.63,0.628,0.625,0.623,0.62,0.617,0.614,0.611,0.608,0.605,0.602,0.598,0.595,0.591,0.588,0.584,0.58,0.577,0.573,0.569,0.565,0.561,0.557,0.553,0.549,0.544,0.54,0.535,0.531,0.527,0.522,0.517,0.513,0.508,0.503,0.499,0.494,0.489,0.484,0.479,0.474,0.469,0.464,0.459,0.454,0.449,0.443,0.438,0.433,0.428,0.422,0.417,0.412,0.406,0.401,0.396,0.39,0.385,0.379,0.374,0.368,0.363,0.358,0.352,0.346,0.341,0.335,0.33,0.325,0.319,0.314,0.308,0.302,0.297,0.292,0.286,0.281,0.275,0.27,0.264,0.259,0.254,0.248,0.243,0.238,0.232,0.227,0.222,0.217,0.211,0.206,0.201,0.196,0.191,0.186,0.181,0.176,0.171,0.166,0.161,0.157,0.152,0.147,0.143,0.138,0.133,0.129,0.125,0.12,0.116,0.111,0.107,0.103,0.099,0.095,0.091,0.087,0.083,0.08,0.076,0.072,0.069,0.065,0.062,0.058,0.055,0.052,0.049,0.046,0.043,0.04,0.037,0.035,0.032,0.03,0.027,0.025,0.023,0.021,0.018,0.017,0.015,0.013,0.011,0.01,0.008,0.007,0.006,0.005,0.004,0.003,0.002,0.002,0.001,0.001,0,0 +PARAM_SKIRT=0,-0.002,-0.007,-0.015,-0.025,-0.039,-0.055,-0.074,-0.09,-0.12,-0.14,-0.17,-0.2,-0.23,-0.26,-0.29,-0.32,-0.36,-0.39,-0.43,-0.46,-0.5,-0.53,-0.57,-0.6,-0.63,-0.67,-0.7,-0.73,-0.76,-0.79,-0.82,-0.85,-0.87,-0.89,-0.91,-0.934,-0.951,-0.965,-0.977,-0.987,-0.994,-0.999,-1,-0.999,-0.995,-0.989,-0.981,-0.97,-0.957,-0.942,-0.926,-0.907,-0.886,-0.86,-0.84,-0.81,-0.79,-0.76,-0.73,-0.7,-0.66,-0.63,-0.59,-0.56,-0.52,-0.48,-0.44,-0.4,-0.36,-0.32,-0.28,-0.24,-0.19,-0.15,-0.11,-0.07,-0.02,0.02,0.07,0.11,0.15,0.19,0.24,0.28,0.32,0.36,0.4,0.44,0.48,0.52,0.56,0.59,0.63,0.66,0.7,0.73,0.76,0.79,0.81,0.84,0.86,0.89,0.907,0.926,0.942,0.957,0.97,0.981,0.989,0.995,0.999,1,1,1,0.999,0.997,0.993,0.987,0.978,0.967,0.951,0.932,0.91,0.88,0.85,0.81,0.77,0.72,0.66,0.6,0.53,0.47,0.41,0.34,0.28,0.22,0.16,0.1,0.04,-0.02,-0.08,-0.14,-0.19,-0.25,-0.3,-0.35,-0.41,-0.46,-0.5,-0.55,-0.59,-0.64,-0.68,-0.72,-0.75,-0.79,-0.82,-0.85,-0.88,-0.9,-0.92,-0.944,-0.96,-0.975,-0.985,-0.994,-0.998,-1,-0.998,-0.993,-0.985,-0.975,-0.961,-0.945,-0.926,-0.91,-0.88,-0.86,-0.83,-0.8,-0.77,-0.74,-0.71,-0.68,-0.64,-0.61,-0.57,-0.54,-0.5,-0.47,-0.43,-0.4,-0.37,-0.33,-0.3,-0.27,-0.24,-0.21,-0.18,-0.15,-0.13,-0.11,-0.09,-0.066,-0.049,-0.035,-0.023,-0.013,-0.006,-0.001 +PARAM_FOOT_RIBBON=0,-0.002,-0.007,-0.014,-0.025,-0.038,-0.054,-0.072,-0.09,-0.12,-0.14,-0.17,-0.19,-0.22,-0.25,-0.28,-0.32,-0.35,-0.38,-0.42,-0.45,-0.49,-0.52,-0.55,-0.59,-0.62,-0.65,-0.69,-0.72,-0.75,-0.78,-0.8,-0.83,-0.85,-0.88,-0.9,-0.915,-0.932,-0.946,-0.958,-0.967,-0.974,-0.979,-0.98,-0.979,-0.976,-0.971,-0.963,-0.954,-0.943,-0.931,-0.916,-0.9,-0.883,-0.863,-0.84,-0.82,-0.8,-0.77,-0.75,-0.72,-0.69,-0.66,-0.63,-0.6,-0.57,-0.54,-0.5,-0.47,-0.43,-0.4,-0.36,-0.33,-0.29,-0.25,-0.22,-0.18,-0.14,-0.11,-0.07,-0.03,0,0.04,0.08,0.11,0.15,0.18,0.22,0.25,0.29,0.32,0.35,0.38,0.41,0.44,0.47,0.5,0.52,0.55,0.57,0.59,0.61,0.633,0.65,0.666,0.681,0.693,0.704,0.713,0.721,0.726,0.729,0.73,0.725,0.712,0.69,0.66,0.63,0.58,0.53,0.48,0.42,0.36,0.29,0.22,0.15,0.08,0,-0.08,-0.15,-0.23,-0.31,-0.38,-0.45,-0.52,-0.59,-0.65,-0.71,-0.76,-0.81,-0.86,-0.89,-0.92,-0.94,-0.955,-0.96,-0.959,-0.957,-0.954,-0.95,-0.944,-0.938,-0.93,-0.921,-0.911,-0.901,-0.889,-0.876,-0.863,-0.849,-0.834,-0.818,-0.802,-0.785,-0.767,-0.749,-0.73,-0.711,-0.691,-0.671,-0.65,-0.63,-0.61,-0.59,-0.57,-0.55,-0.52,-0.5,-0.48,-0.46,-0.44,-0.41,-0.39,-0.37,-0.35,-0.33,-0.309,-0.29,-0.269,-0.249,-0.23,-0.211,-0.193,-0.175,-0.158,-0.142,-0.126,-0.111,-0.097,-0.084,-0.071,-0.059,-0.049,-0.039,-0.03,-0.022,-0.016,-0.01,-0.006,-0.003,-0.001 +PARAM_RIBBON=0,-0.003,-0.013,-0.028,-0.048,-0.07,-0.1,-0.13,-0.17,-0.21,-0.25,-0.29,-0.33,-0.38,-0.42,-0.47,-0.52,-0.56,-0.61,-0.65,-0.7,-0.74,-0.78,-0.82,-0.85,-0.88,-0.91,-0.94,-0.96,-0.977,-0.989,-0.997,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-0.998,-0.992,-0.983,-0.971,-0.955,-0.936,-0.91,-0.89,-0.86,-0.84,-0.81,-0.77,-0.74,-0.71,-0.67,-0.63,-0.6,-0.56,-0.52,-0.48,-0.44,-0.4,-0.37,-0.33,-0.29,-0.26,-0.23,-0.19,-0.16,-0.14,-0.11,-0.09,-0.06,-0.045,-0.029,-0.017,-0.008,-0.002 +PARAM_YUKINE_Y=0,0.002,0.007,0.015,0.025,0.039,0.055,0.074,0.09,0.12,0.14,0.17,0.2,0.23,0.26,0.29,0.32,0.36,0.39,0.43,0.46,0.5,0.53,0.57,0.6,0.63,0.67,0.7,0.73,0.76,0.79,0.82,0.85,0.87,0.89,0.91,0.934,0.951,0.965,0.977,0.987,0.994,0.999,1,0.998,0.991,0.981,0.966,0.947,0.93,0.9,0.87,0.84,0.8,0.77,0.73,0.69,0.64,0.59,0.55,0.5,0.45,0.39,0.34,0.28,0.23,0.17,0.12,0.06,0,-0.05,-0.11,-0.16,-0.22,-0.27,-0.33,-0.38,-0.43,-0.48,-0.53,-0.57,-0.62,-0.66,-0.7,-0.74,-0.77,-0.8,-0.83,-0.86,-0.88,-0.903,-0.919,-0.933,-0.942,-0.948,-0.95,-0.948,-0.943,-0.934,-0.922,-0.908,-0.89,-0.869,-0.85,-0.82,-0.79,-0.76,-0.73,-0.69,-0.66,-0.62,-0.58,-0.53,-0.49,-0.45,-0.4,-0.35,-0.31,-0.26,-0.21,-0.16,-0.11,-0.06,-0.01,0.04,0.09,0.14,0.19,0.24,0.29,0.34,0.39,0.44,0.48,0.53,0.57,0.61,0.65,0.69,0.73,0.76,0.79,0.82,0.85,0.88,0.9,0.93,0.945,0.961,0.975,0.986,0.994,0.998,1,0.999,0.996,0.992,0.986,0.978,0.969,0.958,0.947,0.933,0.919,0.903,0.886,0.868,0.849,0.829,0.81,0.79,0.76,0.74,0.72,0.69,0.67,0.64,0.62,0.59,0.57,0.54,0.52,0.49,0.46,0.44,0.41,0.39,0.36,0.34,0.31,0.29,0.27,0.24,0.22,0.2,0.179,0.16,0.141,0.123,0.106,0.09,0.075,0.062,0.049,0.038,0.028,0.02,0.013,0.007,0.003,0.001 +PARAM_STICK=0,0.012,0.04,0.09,0.16,0.22,0.3,0.37,0.43,0.49,0.54,0.58,0.6,0.61,0.608,0.603,0.594,0.582,0.567,0.55,0.531,0.51,0.48,0.46,0.43,0.4,0.37,0.34,0.3,0.27,0.23,0.2,0.16,0.12,0.08,0.04,0,-0.04,-0.08,-0.12,-0.16,-0.19,-0.22,-0.25,-0.28,-0.31,-0.34,-0.37,-0.4,-0.43,-0.46,-0.5,-0.53,-0.6,-0.67,-0.72,-0.76,-0.77,-0.756,-0.73,-0.71,-0.696,-0.69,-0.72,-0.78,-0.83,-0.87,-0.88,-0.882,-0.884,-0.887,-0.887,-0.886,-0.881,-0.873,-0.86,-0.841,-0.821,-0.8,-0.78,-0.75,-0.73,-0.71,-0.68,-0.65,-0.62,-0.6,-0.57,-0.54,-0.51,-0.47,-0.44,-0.41,-0.38,-0.35,-0.31,-0.28,-0.25,-0.21,-0.18,-0.15,-0.11,-0.08,-0.05,-0.01,0.02,0.05,0.08,0.12,0.15,0.18,0.21,0.24,0.27,0.3,0.33,0.36,0.38,0.41,0.44,0.46,0.48,0.51,0.53,0.55,0.57,0.589,0.605,0.619,0.629,0.637,0.643,0.648,0.65,0.652,0.653,0.653,0.652,0.651,0.651,0.65,0.65,0.649,0.647,0.643,0.637,0.631,0.624,0.616,0.608,0.6,0.592,0.584,0.576,0.569,0.563,0.557,0.553,0.551,0.55,0.551,0.554,0.559,0.565,0.573,0.581,0.59,0.6,0.61,0.62,0.63,0.639,0.647,0.655,0.661,0.666,0.669,0.67,0.668,0.663,0.654,0.643,0.629,0.612,0.592,0.57,0.55,0.52,0.5,0.47,0.44,0.41,0.38,0.35,0.32,0.29,0.26,0.24,0.21,0.18,0.16,0.13,0.11,0.09,0.068,0.051,0.036,0.023,0.013,0.006,0.002 +PARAM_YUKINE_MF=0,-0.001,-0.006,-0.013,-0.022,-0.034,-0.048,-0.064,-0.082,-0.102,-0.12,-0.15,-0.17,-0.2,-0.22,-0.25,-0.28,-0.31,-0.34,-0.37,-0.4,-0.43,-0.46,-0.5,-0.53,-0.56,-0.59,-0.62,-0.65,-0.68,-0.71,-0.74,-0.77,-0.79,-0.82,-0.84,-0.87,-0.89,-0.908,-0.926,-0.942,-0.957,-0.97,-0.98,-0.989,-0.995,-0.999,-1,-0.999,-0.997,-0.993,-0.989,-0.982,-0.975,-0.966,-0.956,-0.945,-0.933,-0.92,-0.906,-0.892,-0.876,-0.86,-0.842,-0.825,-0.806,-0.787,-0.767,-0.747,-0.73,-0.71,-0.68,-0.66,-0.64,-0.62,-0.59,-0.57,-0.55,-0.53,-0.5,-0.48,-0.46,-0.43,-0.41,-0.39,-0.37,-0.34,-0.32,-0.3,-0.28,-0.26,-0.24,-0.22,-0.201,-0.183,-0.165,-0.148,-0.132,-0.116,-0.101,-0.087,-0.074,-0.062,-0.051,-0.04,-0.031,-0.023,-0.016,-0.011,-0.006,-0.003,-0.001,0,-0.002,-0.008,-0.017,-0.029,-0.044,-0.063,-0.08,-0.11,-0.13,-0.16,-0.19,-0.22,-0.25,-0.28,-0.32,-0.35,-0.39,-0.42,-0.46,-0.5,-0.53,-0.57,-0.6,-0.64,-0.67,-0.71,-0.74,-0.77,-0.8,-0.83,-0.86,-0.88,-0.91,-0.926,-0.944,-0.961,-0.975,-0.985,-0.993,-0.998,-1,-0.999,-0.996,-0.992,-0.986,-0.978,-0.969,-0.958,-0.947,-0.933,-0.919,-0.903,-0.886,-0.868,-0.849,-0.829,-0.81,-0.79,-0.76,-0.74,-0.72,-0.69,-0.67,-0.64,-0.62,-0.59,-0.57,-0.54,-0.52,-0.49,-0.46,-0.44,-0.41,-0.39,-0.36,-0.34,-0.31,-0.29,-0.27,-0.24,-0.22,-0.2,-0.179,-0.16,-0.141,-0.123,-0.106,-0.09,-0.075,-0.062,-0.049,-0.038,-0.028,-0.02,-0.013,-0.007,-0.003,-0.001 +PARAM_YUKINE_FOOT=0,-0.014,-0.05,-0.1,-0.17,-0.24,-0.32,-0.39,-0.47,-0.54,-0.6,-0.65,-0.69,-0.72,-0.73,-0.728,-0.723,-0.715,-0.704,-0.69,-0.673,-0.654,-0.63,-0.61,-0.59,-0.56,-0.53,-0.5,-0.47,-0.44,-0.41,-0.38,-0.35,-0.31,-0.28,-0.25,-0.21,-0.18,-0.15,-0.12,-0.09,-0.06,-0.03,0,0.03,0.05,0.07,0.09,0.112,0.129,0.144,0.157,0.167,0.174,0.178,0.18,0.179,0.176,0.171,0.163,0.154,0.144,0.131,0.117,0.101,0.084,0.065,0.045,0.02,0,-0.02,-0.05,-0.07,-0.1,-0.13,-0.15,-0.18,-0.21,-0.24,-0.27,-0.3,-0.33,-0.36,-0.39,-0.43,-0.46,-0.49,-0.52,-0.55,-0.58,-0.61,-0.64,-0.67,-0.69,-0.72,-0.75,-0.77,-0.8,-0.82,-0.84,-0.87,-0.885,-0.904,-0.921,-0.937,-0.951,-0.964,-0.974,-0.983,-0.991,-0.996,-0.999,-1,-0.995,-0.979,-0.96,-0.92,-0.88,-0.84,-0.79,-0.73,-0.67,-0.61,-0.54,-0.48,-0.41,-0.34,-0.27,-0.2,-0.14,-0.07,-0.01,0.05,0.1,0.15,0.2,0.24,0.27,0.3,0.32,0.336,0.34,0.338,0.333,0.324,0.312,0.297,0.279,0.259,0.24,0.21,0.18,0.16,0.12,0.09,0.06,0.02,-0.01,-0.05,-0.09,-0.13,-0.17,-0.21,-0.24,-0.28,-0.32,-0.36,-0.4,-0.43,-0.47,-0.5,-0.53,-0.57,-0.59,-0.62,-0.65,-0.67,-0.689,-0.707,-0.722,-0.734,-0.743,-0.748,-0.75,-0.747,-0.738,-0.724,-0.706,-0.68,-0.66,-0.63,-0.59,-0.56,-0.52,-0.48,-0.44,-0.4,-0.36,-0.32,-0.28,-0.24,-0.2,-0.17,-0.14,-0.11,-0.08,-0.06,-0.037,-0.021,-0.01,-0.002 +PARAM_YUKINE_EAR=0,-0.002,-0.009,-0.02,-0.034,-0.052,-0.07,-0.1,-0.13,-0.16,-0.19,-0.22,-0.26,-0.3,-0.34,-0.38,-0.42,-0.46,-0.5,-0.54,-0.58,-0.62,-0.66,-0.7,-0.74,-0.78,-0.81,-0.84,-0.87,-0.9,-0.93,-0.95,-0.966,-0.98,-0.991,-0.998,-1,-0.999,-0.996,-0.991,-0.984,-0.975,-0.964,-0.951,-0.937,-0.921,-0.903,-0.883,-0.86,-0.84,-0.82,-0.79,-0.77,-0.74,-0.71,-0.68,-0.65,-0.62,-0.59,-0.55,-0.52,-0.48,-0.45,-0.41,-0.37,-0.34,-0.3,-0.26,-0.22,-0.18,-0.14,-0.1,-0.06,-0.02,0.01,0.05,0.09,0.13,0.17,0.21,0.25,0.29,0.33,0.36,0.4,0.44,0.47,0.51,0.54,0.57,0.61,0.64,0.67,0.7,0.73,0.75,0.78,0.8,0.83,0.85,0.87,0.891,0.909,0.926,0.941,0.954,0.966,0.976,0.985,0.991,0.996,0.999,1,0.997,0.989,0.975,0.956,0.93,0.9,0.87,0.84,0.8,0.75,0.71,0.66,0.61,0.55,0.5,0.44,0.38,0.32,0.26,0.2,0.13,0.07,0.01,-0.06,-0.12,-0.18,-0.24,-0.3,-0.36,-0.42,-0.48,-0.53,-0.59,-0.64,-0.69,-0.73,-0.78,-0.82,-0.85,-0.88,-0.91,-0.94,-0.96,-0.978,-0.99,-0.997,-1,-0.999,-0.996,-0.99,-0.982,-0.973,-0.962,-0.949,-0.934,-0.918,-0.9,-0.881,-0.86,-0.84,-0.82,-0.79,-0.77,-0.74,-0.72,-0.69,-0.66,-0.63,-0.6,-0.58,-0.55,-0.52,-0.49,-0.46,-0.43,-0.4,-0.37,-0.35,-0.32,-0.29,-0.27,-0.24,-0.22,-0.19,-0.17,-0.15,-0.13,-0.11,-0.092,-0.075,-0.06,-0.047,-0.035,-0.024,-0.016,-0.009,-0.004,-0.001 +PARAM_SNOW1=0,0,-0.001,-0.002,-0.003,-0.005,-0.007,-0.01,-0.013,-0.016,-0.02,-0.024,-0.028,-0.033,-0.038,-0.043,-0.049,-0.054,-0.061,-0.067,-0.074,-0.081,-0.089,-0.096,-0.104,-0.112,-0.12,-0.129,-0.138,-0.147,-0.156,-0.166,-0.175,-0.185,-0.195,-0.205,-0.216,-0.226,-0.237,-0.248,-0.259,-0.27,-0.281,-0.293,-0.304,-0.316,-0.327,-0.339,-0.351,-0.363,-0.375,-0.387,-0.4,-0.412,-0.424,-0.436,-0.449,-0.461,-0.474,-0.486,-0.499,-0.511,-0.523,-0.536,-0.548,-0.56,-0.573,-0.585,-0.597,-0.609,-0.621,-0.633,-0.645,-0.657,-0.669,-0.681,-0.692,-0.704,-0.715,-0.726,-0.738,-0.748,-0.759,-0.77,-0.78,-0.791,-0.801,-0.811,-0.821,-0.83,-0.84,-0.849,-0.858,-0.867,-0.875,-0.884,-0.892,-0.9,-0.907,-0.915,-0.922,-0.929,-0.935,-0.942,-0.948,-0.953,-0.959,-0.964,-0.969,-0.973,-0.977,-0.981,-0.985,-0.988,-0.991,-0.993,-0.995,-0.997,-0.998,-0.999,-1,-1,-1,-0.999,-0.997,-0.994,-0.991,-0.987,-0.983,-0.978,-0.972,-0.966,-0.959,-0.951,-0.943,-0.935,-0.926,-0.916,-0.906,-0.896,-0.885,-0.874,-0.862,-0.85,-0.837,-0.825,-0.811,-0.798,-0.784,-0.77,-0.755,-0.741,-0.726,-0.711,-0.695,-0.68,-0.664,-0.648,-0.632,-0.616,-0.599,-0.583,-0.566,-0.55,-0.533,-0.517,-0.5,-0.483,-0.467,-0.45,-0.434,-0.417,-0.401,-0.384,-0.368,-0.352,-0.336,-0.32,-0.305,-0.289,-0.274,-0.259,-0.245,-0.23,-0.216,-0.202,-0.189,-0.175,-0.163,-0.15,-0.138,-0.126,-0.115,-0.104,-0.094,-0.084,-0.074,-0.065,-0.057,-0.049,-0.041,-0.034,-0.028,-0.022,-0.017,-0.013,-0.009,-0.006,-0.003,-0.001,0 +PARAM_SNOW2=0,0.001,0.003,0.006,0.01,0.016,0.022,0.029,0.037,0.045,0.054,0.064,0.073,0.083,0.093,0.104,0.114,0.124,0.134,0.144,0.153,0.163,0.171,0.18,0.187,0.194,0.201,0.206,0.211,0.215,0.218,0.219,0.22,0.22,0.219,0.218,0.217,0.215,0.213,0.211,0.208,0.205,0.201,0.198,0.194,0.189,0.185,0.18,0.175,0.169,0.164,0.158,0.152,0.145,0.139,0.132,0.125,0.118,0.111,0.103,0.096,0.088,0.08,0.072,0.064,0.056,0.048,0.039,0.031,0.022,0.014,0.005,-0.004,-0.012,-0.021,-0.03,-0.038,-0.047,-0.056,-0.064,-0.073,-0.082,-0.09,-0.099,-0.107,-0.115,-0.124,-0.132,-0.14,-0.148,-0.156,-0.163,-0.171,-0.178,-0.185,-0.192,-0.199,-0.206,-0.212,-0.219,-0.225,-0.231,-0.236,-0.242,-0.247,-0.252,-0.257,-0.261,-0.265,-0.269,-0.272,-0.276,-0.279,-0.281,-0.283,-0.285,-0.287,-0.288,-0.289,-0.29,-0.29,-0.29,-0.29,-0.289,-0.288,-0.287,-0.286,-0.285,-0.284,-0.282,-0.28,-0.278,-0.276,-0.274,-0.271,-0.269,-0.266,-0.263,-0.26,-0.257,-0.253,-0.25,-0.247,-0.243,-0.239,-0.235,-0.231,-0.227,-0.223,-0.219,-0.215,-0.211,-0.206,-0.202,-0.197,-0.193,-0.188,-0.184,-0.179,-0.174,-0.169,-0.165,-0.16,-0.155,-0.15,-0.146,-0.141,-0.136,-0.131,-0.126,-0.122,-0.117,-0.112,-0.108,-0.103,-0.098,-0.094,-0.089,-0.085,-0.081,-0.076,-0.072,-0.068,-0.064,-0.06,-0.056,-0.052,-0.049,-0.045,-0.042,-0.038,-0.035,-0.032,-0.029,-0.026,-0.023,-0.02,-0.018,-0.016,-0.013,-0.011,-0.009,-0.008,-0.006,-0.005,-0.003,-0.002,-0.002,-0.001,0,0 +PARAM_SNOW3=0,0,-0.001,-0.003,-0.006,-0.009,-0.013,-0.017,-0.022,-0.028,-0.034,-0.041,-0.049,-0.057,-0.065,-0.074,-0.084,-0.093,-0.104,-0.115,-0.126,-0.138,-0.15,-0.162,-0.175,-0.188,-0.202,-0.216,-0.23,-0.244,-0.259,-0.274,-0.289,-0.304,-0.319,-0.335,-0.351,-0.367,-0.383,-0.399,-0.416,-0.432,-0.448,-0.465,-0.481,-0.498,-0.514,-0.531,-0.548,-0.564,-0.58,-0.597,-0.613,-0.629,-0.645,-0.66,-0.676,-0.691,-0.707,-0.722,-0.736,-0.751,-0.765,-0.779,-0.793,-0.806,-0.819,-0.832,-0.845,-0.857,-0.868,-0.88,-0.891,-0.901,-0.911,-0.921,-0.93,-0.938,-0.946,-0.954,-0.961,-0.968,-0.974,-0.979,-0.984,-0.988,-0.992,-0.995,-0.997,-0.999,-1,-1,-1,-0.999,-0.998,-0.997,-0.995,-0.993,-0.99,-0.987,-0.984,-0.98,-0.976,-0.972,-0.967,-0.962,-0.957,-0.951,-0.946,-0.939,-0.933,-0.926,-0.919,-0.911,-0.904,-0.896,-0.888,-0.88,-0.871,-0.862,-0.853,-0.844,-0.834,-0.825,-0.815,-0.805,-0.794,-0.784,-0.773,-0.763,-0.752,-0.741,-0.73,-0.718,-0.707,-0.695,-0.684,-0.672,-0.66,-0.648,-0.636,-0.624,-0.612,-0.599,-0.587,-0.575,-0.562,-0.55,-0.538,-0.525,-0.512,-0.5,-0.488,-0.475,-0.462,-0.45,-0.438,-0.425,-0.413,-0.401,-0.388,-0.376,-0.364,-0.352,-0.34,-0.328,-0.316,-0.305,-0.293,-0.282,-0.27,-0.259,-0.248,-0.237,-0.227,-0.216,-0.206,-0.195,-0.185,-0.175,-0.166,-0.156,-0.147,-0.138,-0.129,-0.12,-0.112,-0.104,-0.096,-0.089,-0.081,-0.074,-0.067,-0.061,-0.054,-0.049,-0.043,-0.038,-0.033,-0.028,-0.024,-0.02,-0.016,-0.013,-0.01,-0.007,-0.005,-0.003,-0.002,-0.001,0 +VISIBLE:PARTS_YUKINE=1 +VISIBLE:PARTS_01_FACE_001=1 +VISIBLE:PARTS_01_EYE_001=1 +VISIBLE:PARTS_01_EYE_BALL_001=1 +VISIBLE:PARTS_01_BROW_001=1 +VISIBLE:PARTS_01_MOUTH_001=1 +VISIBLE:PARTS_01_NOSE_001=1 +VISIBLE:PARTS_01_EAR_001=1 +VISIBLE:PARTS_01_HAIR_FRONT_001=1 +VISIBLE:PARTS_01_HAIR_SIDE_001=1 +VISIBLE:PARTS_01_HAIR_BACK_001=1 +VISIBLE:PARTS_01_NECK=1 +VISIBLE:PARTS_01_BODY=1 +VISIBLE:PARTS_EFFE_SNOW=1 \ No newline at end of file diff --git a/public/pio/models/live2d/snow_miku/textures/texture_00.png b/public/pio/models/live2d/snow_miku/textures/texture_00.png new file mode 100644 index 0000000..a37dc88 Binary files /dev/null and b/public/pio/models/live2d/snow_miku/textures/texture_00.png differ diff --git a/public/pio/models/spine/firefly/1310.atlas b/public/pio/models/spine/firefly/1310.atlas new file mode 100644 index 0000000..1df908a --- /dev/null +++ b/public/pio/models/spine/firefly/1310.atlas @@ -0,0 +1,212 @@ +1310.png +size:316,2012 +filter:Linear,Linear +scale:0.2 +E眉毛 +bounds:7,1948,125,15 +offsets:23,23,171,62 +E眼珠 +bounds:255,415,106,43 +offsets:23,23,152,89 +rotate:90 +E眼白 +bounds:177,1198,127,46 +offsets:24,23,175,93 +E眼皮 +bounds:32,2004,78,7 +offsets:24,23,126,54 +E眼角 +bounds:1,1963,132,22 +offsets:22,23,176,67 +E睫毛 +bounds:1,1984,149,27 +offsets:22,22,193,71 +E脸1 +bounds:1,1030,170,144 +offsets:23,23,216,193 +E脸2 +bounds:1,1322,170,147 +offsets:23,23,216,193 +L大臂 +bounds:237,2,27,34 +offsets:23,23,73,80 +L大臂衣袖 +bounds:252,1376,55,85 +offsets:23,12,101,120 +L大臂衣袖后 +bounds:190,1965,47,46 +offsets:23,22,93,90 +L正常左小臂 +bounds:253,332,59,77 +offsets:22,22,103,121 +L正常左手 +bounds:107,1,39,30 +offsets:23,23,85,76 +L正常左袖口 +bounds:5,1,42,31 +offsets:23,22,87,76 +M嘴巴 +bounds:7,1987,20,4 +offsets:25,33,71,63 +M笑口 +bounds:1,1919,23,15 +offsets:24,24,71,63 +M说话 +bounds:24,1920,23,15 +offsets:24,24,71,63 +R大臂 +bounds:281,210,30,41 +offsets:23,23,75,87 +R大臂衣袖 +bounds:270,1461,40,75 +offsets:23,15,86,113 +rotate:180 +R大臂衣袖后 +bounds:131,1929,38,37 +offsets:23,23,84,82 +R正常右小臂 +bounds:200,3,37,33 +offsets:23,23,83,78 +R正常右手 +bounds:158,1992,28,19 +offsets:23,23,74,65 +X眼 +bounds:179,23,116,41 +offsets:23,20,162,81 +rotate:180 +发1 +bounds:143,855,126,217 +offsets:21,21,167,259 +发10 +bounds:221,57,92,151 +offsets:17,22,131,194 +发11内阴影 +bounds:264,657,122,50 +offsets:22,20,166,92 +rotate:90 +发2 +bounds:1,33,72,124 +offsets:22,22,115,168 +rotate:270 +发3 +bounds:135,1779,124,212 +offsets:21,22,145,255 +rotate:180 +发4 +bounds:196,928,112,221 +offsets:20,21,153,262 +发5 +bounds:252,1599,37,114 +offsets:23,22,82,158 +发6 +bounds:281,1634,29,79 +offsets:22,21,73,122 +发7 +bounds:195,1609,64,156 +offsets:22,23,109,201 +发8 +bounds:208,1466,84,155 +offsets:21,21,126,184 +发9 +bounds:173,1352,103,156 +offsets:21,21,144,198 +发带 +bounds:228,1763,170,76 +offsets:21,20,218,117 +rotate:270 +发影子 +bounds:1,231,172,147 +offsets:20,21,216,190 +发饰1 +bounds:173,1760,51,74 +offsets:22,22,95,118 +发饰2 +bounds:48,1,59,45 +offsets:23,23,105,90 +rotate:180 +发饰3 +bounds:1,1932,18,101 +offsets:23,23,64,147 +rotate:270 +可爱花朵 +bounds:124,206,406,159 +offsets:20,17,443,194 +rotate:90 +右大腿 +bounds:277,1315,60,38 +offsets:23,23,106,84 +rotate:270 +右小腿 +bounds:266,555,46,101 +offsets:22,22,90,145 +后发1 +bounds:159,1148,174,141 +offsets:20,19,214,180 +rotate:90 +后发2 +bounds:1,612,287,186 +offsets:20,20,328,225 +rotate:90 +后发3 +bounds:153,287,280,162 +offsets:19,18,318,198 +rotate:90 +后发4 +bounds:1,1699,237,206 +offsets:19,18,277,242 +rotate:90 +后摆 +bounds:8,56,213,167 +offsets:20,20,253,206 +rotate:180 +后脑勺 +bounds:1,1469,232,206 +offsets:21,22,275,250 +rotate:90 +左大腿 +bounds:239,812,72,38 +offsets:23,22,117,83 +左小腿 +bounds:245,863,69,92 +offsets:22,22,113,136 +星星1 +bounds:1,123,108,113 +rotate:90 +星星2 +bounds:1,1176,144,156 +rotate:90 +星星3 +bounds:1,901,128,137 +rotate:90 +星星4 +bounds:39,679,126,133 +rotate:90 +生气符号1 +bounds:1,495,121,119 +生气符号2 +bounds:187,613,77,73 +胸饰 +bounds:241,1936,73,75 +脸红 +bounds:197,362,141,58 +offsets:23,24,187,103 +rotate:90 +裙边 +bounds:1,1668,42,40 +offsets:23,23,88,86 +身体 +bounds:163,690,133,148 +offsets:20,22,174,190 +问号 +bounds:1,380,113,124 +rotate:90 +领子 +bounds:91,33,88,43 +offsets:22,23,132,87 +领结 +bounds:260,1703,55,57 +offsets:21,22,99,92 +rotate:180 +鼻子 +bounds:1,2000,3,4 +offsets:23,23,50,51 diff --git a/public/pio/models/spine/firefly/1310.json b/public/pio/models/spine/firefly/1310.json new file mode 100644 index 0000000..4f109dc --- /dev/null +++ b/public/pio/models/spine/firefly/1310.json @@ -0,0 +1,10640 @@ +{ + "skeleton": { + "hash": "cGHLi4Mvkcs", + "spine": "4.2.33", + "x": -1172.58, + "y": -305.89, + "width": 2230.2, + "height": 1891.32, + "images": "./images/", + "audio": "./audio" + }, + "bones": [ + { "name": "root", "scaleX": 0.9, "scaleY": 0.9 }, + { "name": "身体", "parent": "root", "x": 0.67, "y": 246.84 }, + { + "name": "身体28", + "parent": "身体", + "length": 95.22, + "x": 0.14, + "y": 28.26, + "color": "007effff" + }, + { + "name": "身体2", + "parent": "身体28", + "length": 275.55, + "rotation": 90, + "x": -1.42, + "y": -0.2 + }, + { + "name": "身体31", + "parent": "身体2", + "length": 104.57, + "rotation": 51.93, + "x": 275.94, + "y": 1.56, + "color": "007effff" + }, + { + "name": "身体3", + "parent": "身体31", + "length": 103.33, + "rotation": -51.93, + "x": -1.47, + "y": -0.65 + }, + { + "name": "身体32", + "parent": "身体3", + "length": 111.38, + "rotation": 50.78, + "x": 102.56, + "y": 0.57, + "color": "007effff" + }, + { + "name": "身体4", + "parent": "身体32", + "length": 274.38, + "rotation": -49.18, + "x": 0.05, + "y": -0.96, + "color": "e9ff00ff" + }, + { + "name": "左大腿", + "parent": "身体", + "length": 268.87, + "rotation": -15.24, + "x": -121.95, + "y": -107.91 + }, + { + "name": "左大腿2", + "parent": "左大腿", + "length": 269.2, + "rotation": -105.17, + "x": 268.87 + }, + { + "name": "左大腿3", + "parent": "左大腿2", + "length": 128.21, + "rotation": -9.8, + "x": 268.69, + "y": 0.87, + "color": "abe323ff" + }, + { + "name": "右大腿", + "parent": "身体", + "length": 246.68, + "rotation": -12.05, + "x": 23.4, + "y": -110.94 + }, + { + "name": "右大腿2", + "parent": "右大腿", + "length": 280.83, + "rotation": -85.18, + "x": 246.68 + }, + { + "name": "右大腿3", + "parent": "右大腿2", + "length": 126.95, + "rotation": -2.38, + "x": 280.83, + "color": "abe323ff" + }, + { "name": "身体5", "parent": "右大腿", "x": 268.45, "y": 62.44 }, + { "name": "左大腿4", "parent": "左大腿", "x": 125.1, "y": 13.15 }, + { "name": "身体6", "parent": "身体", "x": -148.2, "y": -97.81 }, + { + "name": "后摆", + "parent": "root", + "length": 400.34, + "rotation": -0.99, + "x": -468.38, + "y": 0.67 + }, + { + "name": "后摆2", + "parent": "后摆", + "length": 111.27, + "rotation": -126.73, + "x": 170.36, + "y": -10.84, + "inherit": "onlyTranslation" + }, + { + "name": "后摆3", + "parent": "后摆", + "length": 240, + "rotation": 1.92, + "x": 663.89, + "y": 3.55 + }, + { + "name": "后摆4", + "parent": "后摆3", + "length": 95.02, + "rotation": -62.46, + "x": 136.56, + "y": -10.11, + "inherit": "onlyTranslation" + }, + { + "name": "后摆4b", + "parent": "后摆4", + "length": 95.02, + "rotation": -62.46, + "x": 95.02, + "inherit": "onlyTranslation" + }, + { + "name": "后摆4c", + "parent": "后摆4b", + "length": 95.02, + "rotation": -62.46, + "x": 95.02, + "inherit": "onlyTranslation" + }, + { + "name": "后摆2b", + "parent": "后摆2", + "length": 111.27, + "rotation": -126.73, + "x": 111.27, + "inherit": "onlyTranslation" + }, + { + "name": "后摆2c", + "parent": "后摆2b", + "length": 111.27, + "rotation": -126.73, + "x": 111.27, + "inherit": "onlyTranslation" + }, + { + "name": "身体30", + "parent": "身体2", + "length": 98.15, + "rotation": 165.96, + "x": 268.01, + "y": 12.47, + "inherit": "noRotationOrReflection", + "color": "007effff" + }, + { + "name": "身体7", + "parent": "身体30", + "length": 150.34, + "rotation": 21.88, + "x": 1.15, + "y": 1.49 + }, + { + "name": "身体34", + "parent": "身体7", + "length": 143.05, + "rotation": 160.56, + "x": 148.61, + "y": -0.61, + "inherit": "noRotationOrReflection", + "color": "007effff" + }, + { + "name": "身体8", + "parent": "身体34", + "length": 226.75, + "rotation": 99.57, + "x": 1.25, + "y": 1.33, + "color": "abe323ff" + }, + { + "name": "身体9", + "parent": "身体8", + "length": 219.44, + "rotation": -11.78, + "x": 226.75, + "inherit": "noScale", + "color": "abe323ff" + }, + { + "name": "身体10", + "parent": "身体9", + "length": 126.71, + "rotation": -136.38, + "x": 219.44, + "inherit": "onlyTranslation" + }, + { + "name": "身体29", + "parent": "身体2", + "length": 116.22, + "rotation": 15.34, + "x": 268.01, + "y": -15.3, + "inherit": "noRotationOrReflection", + "color": "008bffff" + }, + { + "name": "身体11", + "parent": "身体29", + "length": 128.83, + "rotation": -30.89, + "x": -0.02, + "y": -2.09 + }, + { + "name": "身体33", + "parent": "身体11", + "length": 111.49, + "rotation": 23.6, + "x": 130.09, + "y": -7, + "inherit": "noRotationOrReflection", + "color": "007effff" + }, + { + "name": "R大臂", + "parent": "身体33", + "length": 225.45, + "rotation": -101.16, + "x": -0.14, + "y": 0.73, + "color": "abe323ff" + }, + { + "name": "R大臂2", + "parent": "R大臂", + "length": 102.8, + "rotation": -8.23, + "x": 225.45, + "inherit": "noScale" + }, + { + "name": "R手", + "parent": "R大臂2", + "length": 69.08, + "rotation": -90.9, + "x": 75.06, + "y": 5.29, + "inherit": "onlyTranslation" + }, + { "name": "身体12", "parent": "身体2", "x": 125.79, "y": -67.64 }, + { + "name": "领结", + "parent": "身体12", + "length": 78.78, + "rotation": -131.11, + "x": -41.01, + "y": 21.58, + "inherit": "onlyTranslation" + }, + { + "name": "领结2", + "parent": "领结", + "length": 79.6, + "rotation": -130.6, + "x": 78.78, + "inherit": "onlyTranslation" + }, + { + "name": "身体13", + "parent": "身体12", + "length": 68.83, + "rotation": -48.81, + "x": -31.3, + "y": -24.82, + "inherit": "onlyTranslation" + }, + { + "name": "身体14", + "parent": "身体13", + "length": 70.8, + "rotation": -52.43, + "x": 68.83, + "inherit": "onlyTranslation" + }, + { + "name": "L大臂衣袖后", + "parent": "身体8", + "length": 161.84, + "rotation": -8.37, + "x": 233.17, + "y": -0.65, + "inherit": "noScale", + "color": "abe323ff" + }, + { + "name": "R大臂衣袖后", + "parent": "R大臂", + "length": 110.78, + "rotation": 1.71, + "x": 224.42, + "y": -2.1, + "inherit": "noScale", + "color": "abe323ff" + }, + { "name": "后摆5", "parent": "身体2", "x": 230.69, "y": 144.96 }, + { "name": "身体15", "parent": "身体4", "x": 201.42, "y": 127.28 }, + { "name": "身体16", "parent": "身体4", "x": 189.63, "y": -226.71 }, + { "name": "身体17", "parent": "身体4", "x": 570.26, "y": -79.75 }, + { + "name": "身体18", + "parent": "身体17", + "length": 171.13, + "rotation": -170.66, + "x": -50.92, + "y": -10.99, + "color": "abe323ff" + }, + { + "name": "身体19", + "parent": "身体18", + "length": 183.63, + "rotation": 3.82, + "x": 199.58, + "y": 1.31, + "color": "abe323ff" + }, + { "name": "发6", "parent": "身体4", "x": 486.35, "y": -143.3 }, + { + "name": "发7", + "parent": "发6", + "length": 170.89, + "rotation": 178.72, + "x": -22.08, + "y": -4.16, + "color": "abe323ff" + }, + { + "name": "发8", + "parent": "发7", + "length": 136.55, + "rotation": -31.01, + "x": 210.93, + "y": -9.77, + "color": "abe323ff" + }, + { "name": "发9", "parent": "身体4", "x": 566.7, "y": 66.47 }, + { + "name": "发10", + "parent": "发9", + "length": 168.14, + "rotation": -170.8, + "x": -64.1, + "y": -3.94, + "color": "abe323ff" + }, + { + "name": "发11", + "parent": "发10", + "length": 140.47, + "rotation": 15.42, + "x": 214.54, + "y": 3.78, + "color": "abe323ff" + }, + { "name": "发12", "parent": "身体4", "x": 580.05, "y": -207.99 }, + { + "name": "发13", + "parent": "发12", + "length": 154.46, + "rotation": -175.92, + "x": -69.98, + "y": -9.51, + "color": "abe323ff" + }, + { + "name": "发14", + "parent": "发13", + "length": 115.84, + "rotation": -14.21, + "x": 191.32, + "y": -5.58, + "color": "abe323ff" + }, + { "name": "发4", "parent": "身体4", "x": 552.74, "y": -467.96 }, + { + "name": "发5", + "parent": "发4", + "length": 234.27, + "rotation": 175.13, + "x": -87, + "y": -3.3, + "color": "abe323ff" + }, + { + "name": "发15", + "parent": "发5", + "length": 116.62, + "rotation": -21.41, + "x": 283.48, + "y": -7.71, + "color": "abe323ff" + }, + { + "name": "发16", + "parent": "发15", + "length": 100.24, + "rotation": -28.45, + "x": 152.07, + "y": -13.13, + "color": "abe323ff" + }, + { "name": "发1", "parent": "身体4", "x": 518.24, "y": 451.75 }, + { + "name": "发2", + "parent": "发1", + "length": 144.61, + "rotation": -177.05, + "x": -67.49, + "y": 11.43, + "color": "abe323ff" + }, + { + "name": "发3", + "parent": "发2", + "length": 142.71, + "rotation": 24.25, + "x": 189.22, + "y": 6.99, + "color": "abe323ff" + }, + { + "name": "发17", + "parent": "发3", + "length": 143.28, + "rotation": 26.25, + "x": 187, + "y": 7.25, + "color": "abe323ff" + }, + { "name": "发18", "parent": "身体4", "x": 475.65, "y": 568.5 }, + { + "name": "发19", + "parent": "发18", + "length": 190.99, + "rotation": 179.83, + "x": -63.01, + "y": 0.8, + "color": "abe323ff" + }, + { + "name": "发20", + "parent": "发19", + "length": 125.92, + "rotation": 15.77, + "x": 224.47, + "y": 2.03, + "color": "abe323ff" + }, + { + "name": "发21", + "parent": "发20", + "length": 79.24, + "rotation": 18.98, + "x": 143.12, + "y": 0.67, + "color": "abe323ff" + }, + { "name": "发22", "parent": "身体4", "x": 494.73, "y": -493.08 }, + { + "name": "发23", + "parent": "发22", + "length": 158.56, + "rotation": -164.8, + "x": -41.33, + "y": -9.35, + "color": "abe323ff" + }, + { + "name": "发24", + "parent": "发23", + "length": 121.34, + "rotation": -14.54, + "x": 206.19, + "y": -7.4, + "color": "abe323ff" + }, + { + "name": "发25", + "parent": "发24", + "length": 78.28, + "rotation": -14.93, + "x": 146.98, + "y": -3.88, + "color": "abe323ff" + }, + { "name": "发饰3", "parent": "身体4", "x": 410.15, "y": -478.3 }, + { + "name": "发饰4", + "parent": "发饰3", + "length": 204.33, + "rotation": -84.37, + "x": -15.4, + "y": -4.35, + "inherit": "noRotationOrReflection", + "color": "abe323ff" + }, + { + "name": "发饰5", + "parent": "发饰4", + "length": 138.55, + "rotation": -87.63, + "x": 230.08, + "y": -1.58, + "inherit": "noRotationOrReflection", + "color": "abe323ff" + }, + { + "name": "发饰6", + "parent": "发饰5", + "length": 94.53, + "rotation": -88.84, + "x": 153.81, + "y": -0.63, + "inherit": "noRotationOrReflection", + "color": "abe323ff" + }, + { + "name": "发饰2", + "parent": "发饰3", + "length": 124.27, + "rotation": -150.11, + "x": 21.71, + "y": -9.2, + "color": "abe323ff" + }, + { + "name": "发饰7", + "parent": "发饰2", + "length": 76.62, + "rotation": -0.77, + "x": 140.16, + "y": 0.34, + "color": "abe323ff" + }, + { + "name": "发饰8", + "parent": "发饰3", + "length": 95.47, + "rotation": 162.14, + "x": 27.6, + "y": 30.75, + "color": "abe323ff" + }, + { + "name": "发饰9", + "parent": "发饰8", + "length": 82.66, + "rotation": 2.22, + "x": 118.15, + "y": 0.65, + "color": "abe323ff" + }, + { "name": "发26", "parent": "身体4", "x": 509.3, "y": 610.54 }, + { + "name": "发27", + "parent": "发26", + "length": 147.72, + "rotation": 151.51, + "x": -34.7, + "y": 22.93, + "color": "abe323ff" + }, + { + "name": "发28", + "parent": "发27", + "length": 87.96, + "rotation": 23.79, + "x": 171.6, + "y": 5.69, + "color": "abe323ff" + }, + { + "name": "发29", + "parent": "发28", + "length": 80.49, + "rotation": 25.42, + "x": 108.93, + "y": 1.14, + "color": "abe323ff" + }, + { + "name": "后发2", + "parent": "身体4", + "x": 325.55, + "y": 555.11, + "color": "ff0000ff" + }, + { + "name": "后发3", + "parent": "后发2", + "length": 287.71, + "rotation": -100.69, + "x": -42.56, + "y": 3.49, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发4", + "parent": "身体4", + "x": 136.11, + "y": -326.11, + "color": "ff0000ff" + }, + { + "name": "后发5", + "parent": "后发4", + "length": 231.57, + "rotation": -78.62, + "x": -34.36, + "y": 7.88, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发6", + "parent": "身体4", + "x": 475.7, + "y": 647.76, + "color": "ff0000ff" + }, + { + "name": "后发7", + "parent": "后发6", + "length": 242.44, + "rotation": -98.01, + "x": -13.76, + "y": 2.69, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发8", + "parent": "身体4", + "x": 221.41, + "y": -409.19, + "color": "ff0000ff" + }, + { + "name": "后发9", + "parent": "后发8", + "length": 169.26, + "rotation": -93.12, + "x": -21.79, + "y": 4.07, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发1", + "parent": "身体4", + "x": 186.88, + "y": 377.99, + "color": "ff0000ff" + }, + { + "name": "后发10", + "parent": "后发1", + "length": 212.56, + "rotation": -87.93, + "x": -23.13, + "y": -2.81, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发11", + "parent": "身体4", + "x": 103.67, + "y": -249.12, + "color": "ff0000ff" + }, + { + "name": "后发12", + "parent": "后发11", + "length": 195.81, + "rotation": -93.15, + "x": -16.06, + "y": 2.75, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发13", + "parent": "身体4", + "x": 275.63, + "y": 376.02, + "color": "ff0000ff" + }, + { + "name": "后发14", + "parent": "后发13", + "length": 290.44, + "rotation": -90.99, + "x": -26.53, + "y": -0.41, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发15", + "parent": "身体4", + "x": 278.03, + "y": -239, + "color": "ff0000ff" + }, + { + "name": "后发16", + "parent": "后发15", + "length": 305.92, + "rotation": -88.13, + "x": -19.55, + "y": 1.7, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发16b", + "parent": "后发16", + "length": 305.92, + "rotation": -88.13, + "x": 305.92, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发16c", + "parent": "后发16b", + "length": 305.92, + "rotation": -88.13, + "x": 305.92, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发7b", + "parent": "后发7", + "length": 242.44, + "rotation": -98.01, + "x": 242.44, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发7c", + "parent": "后发7b", + "length": 242.44, + "rotation": -98.01, + "x": 242.44, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发3b", + "parent": "后发3", + "length": 287.71, + "rotation": -100.69, + "x": 287.71, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发3c", + "parent": "后发3b", + "length": 287.71, + "rotation": -100.69, + "x": 287.71, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发14b", + "parent": "后发14", + "length": 290.44, + "rotation": -90.99, + "x": 290.44, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发14c", + "parent": "后发14b", + "length": 290.44, + "rotation": -90.99, + "x": 290.44, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发10b", + "parent": "后发10", + "length": 212.56, + "rotation": -87.93, + "x": 212.56, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发10c", + "parent": "后发10b", + "length": 212.56, + "rotation": -87.93, + "x": 212.56, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发12b", + "parent": "后发12", + "length": 195.81, + "rotation": -93.15, + "x": 195.81, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发12c", + "parent": "后发12b", + "length": 195.81, + "rotation": -93.15, + "x": 195.81, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发5b", + "parent": "后发5", + "length": 231.57, + "rotation": -78.62, + "x": 231.57, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发5c", + "parent": "后发5b", + "length": 231.57, + "rotation": -78.62, + "x": 231.57, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发9b", + "parent": "后发9", + "length": 169.26, + "rotation": -93.12, + "x": 169.26, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { + "name": "后发9c", + "parent": "后发9b", + "length": 169.26, + "rotation": -93.12, + "x": 169.26, + "inherit": "noRotationOrReflection", + "color": "ff0000ff" + }, + { "name": "bone", "parent": "root", "x": -13.14, "y": 1871.72 }, + { + "name": "问号", + "parent": "身体4", + "length": 410.49, + "rotation": -36.92, + "x": 377.84, + "y": -780.7, + "color": "ff0000ff" + }, + { + "name": "生气符号1", + "parent": "身体4", + "length": 397.09, + "rotation": -79.38, + "x": 151.59, + "y": -691.54, + "color": "ff0000ff" + }, + { + "name": "生气符号2", + "parent": "身体4", + "length": 202.67, + "rotation": -123.64, + "x": 36.24, + "y": -704.4, + "color": "ff0000ff" + }, + { + "name": "星星1", + "parent": "身体4", + "x": 391.16, + "y": -746.45, + "color": "ff0000ff" + }, + { + "name": "星星2", + "parent": "身体4", + "x": 739.9, + "y": 806.68, + "color": "ff0000ff" + }, + { + "name": "星星3", + "parent": "身体4", + "x": 372.4, + "y": 973.96, + "color": "ff0000ff" + }, + { + "name": "星星4", + "parent": "身体4", + "x": 117.12, + "y": -774.66, + "color": "ff0000ff" + }, + { + "name": "可爱花朵", + "parent": "身体4", + "x": 988.12, + "y": 707.02, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵2", + "parent": "身体4", + "x": 840.95, + "y": 882.99, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵3", + "parent": "身体4", + "length": 106.85, + "rotation": -132.85, + "x": 760.04, + "y": 775.2, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵4", + "parent": "身体4", + "x": 620.17, + "y": 858.24, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵5", + "parent": "身体4", + "x": 443.88, + "y": 921.27, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵6", + "parent": "身体4", + "x": 602.43, + "y": -752.34, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵7", + "parent": "身体4", + "x": 440.6, + "y": -880.13, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵8", + "parent": "身体4", + "length": 68.65, + "rotation": 101.94, + "x": 401.18, + "y": -786.29, + "color": "e9ff00ff" + }, + { + "name": "可爱花朵9", + "parent": "身体4", + "x": 314.52, + "y": -790.06, + "color": "e9ff00ff" + }, + { + "name": "身体20", + "parent": "身体9", + "x": 183.54, + "y": 18, + "inherit": "noScale" + }, + { + "name": "身体21", + "parent": "身体20", + "length": 108.04, + "rotation": 35.14, + "x": 8.35, + "y": 9.34, + "color": "abe323ff" + }, + { + "name": "身体22", + "parent": "身体9", + "x": 184.7, + "y": -30.52, + "inherit": "noScale" + }, + { + "name": "身体23", + "parent": "身体22", + "length": 101.75, + "rotation": -54.41, + "x": 6.22, + "y": -8.08, + "color": "abe323ff" + }, + { + "name": "R大臂3", + "parent": "R大臂2", + "x": 102.89, + "y": 0.09, + "inherit": "noScale" + }, + { + "name": "身体24", + "parent": "身体4", + "x": 899.18, + "y": -57.13, + "color": "e9ff00ff" + }, + { + "name": "发饰1", + "parent": "发饰3", + "length": 160.08, + "rotation": -27.33, + "x": 10.24, + "y": -2.19, + "color": "abe323ff" + }, + { + "name": "发饰10", + "parent": "发饰1", + "length": 149.49, + "rotation": 4.15, + "x": 160.08, + "color": "abe323ff" + }, + { + "name": "领子", + "parent": "身体7", + "rotation": -97.84, + "x": 117.78, + "y": -56.72 + }, + { + "name": "领子2", + "parent": "领子", + "length": 108.92, + "rotation": 114.57, + "x": -4.48, + "y": 6.47 + }, + { + "name": "领子3", + "parent": "身体11", + "rotation": 105.55, + "x": 54.25, + "y": 56.08 + }, + { + "name": "领子4", + "parent": "领子3", + "length": 98.72, + "rotation": -122.65, + "x": -3.48, + "y": -4.48 + }, + { + "name": "领子5", + "parent": "领子2", + "length": 313.89, + "rotation": 135.01, + "x": 108.22, + "y": 0.87 + }, + { + "name": "领子6", + "parent": "领子4", + "length": 147.48, + "rotation": -103.04, + "x": 91.06, + "y": -3.73 + }, + { + "name": "target", + "parent": "身体12", + "rotation": -90, + "x": 21.4, + "y": 16.36, + "color": "ff3f00ff", + "icon": "ik" + }, + { + "name": "身体25", + "parent": "身体4", + "length": 81.63, + "rotation": 180, + "x": 302.64, + "y": -626.82, + "color": "0088ffff" + }, + { + "name": "身体25b", + "parent": "身体25", + "length": 81.63, + "x": 81.63, + "color": "0088ffff" + }, + { + "name": "身体25c", + "parent": "身体25b", + "length": 81.63, + "x": 81.63, + "color": "0088ffff" + }, + { + "name": "身体26", + "parent": "身体25c", + "x": 81.64, + "color": "ff0000ff", + "icon": "arrows" + }, + { + "name": "身体27", + "parent": "身体4", + "x": 122.91, + "y": 783.9, + "color": "ff0000ff", + "icon": "warning" + }, + { + "name": "target21", + "parent": "root", + "x": 194.39, + "y": 177.19, + "color": "ff3f00ff", + "icon": "ik" + }, + { + "name": "target23", + "parent": "root", + "x": -283.27, + "y": 93.87, + "color": "ff3f00ff", + "icon": "ik" + }, + { + "name": "身体35", + "parent": "身体10", + "length": 136.88, + "rotation": -126.75, + "x": 130.46, + "y": -78.73 + }, + { + "name": "身体36", + "parent": "身体10", + "length": 192.41, + "rotation": -138.99, + "x": 58.92, + "y": -65.81 + }, + { + "name": "身体37", + "parent": "身体10", + "length": 154.3, + "rotation": 151.45, + "x": 45.47, + "y": 65.73 + }, + { + "name": "身体38", + "parent": "身体10", + "length": 184.22, + "rotation": 137.14, + "x": 110.98, + "y": 69.32 + } + ], + "slots": [ + { "name": "腿-衣摆-后发/后脑勺", "bone": "root", "attachment": "后脑勺" }, + { "name": "腿-衣摆-后发/后发4", "bone": "后发15", "attachment": "后发4" }, + { "name": "腿-衣摆-后发/后发3", "bone": "后发9", "attachment": "后发3" }, + { "name": "腿-衣摆-后发/后发2", "bone": "后发4", "attachment": "后发2" }, + { "name": "腿-衣摆-后发/后发1", "bone": "后发12", "attachment": "后发1" }, + { "name": "腿-衣摆-后发/后摆", "bone": "后摆5", "attachment": "后摆" }, + { "name": "腿-衣摆-后发/裙边", "bone": "身体5", "attachment": "裙边" }, + { "name": "腿-衣摆-后发/右大腿", "bone": "右大腿", "attachment": "右大腿" }, + { "name": "腿-衣摆-后发/右小腿", "bone": "右大腿", "attachment": "右小腿" }, + { "name": "腿-衣摆-后发/左大腿", "bone": "左大腿", "attachment": "左大腿" }, + { "name": "腿-衣摆-后发/左小腿", "bone": "root", "attachment": "左小腿" }, + { + "name": "R大臂衣袖后", + "bone": "R大臂衣袖后", + "attachment": "R大臂衣袖后" + }, + { "name": "R大臂", "bone": "R大臂", "attachment": "R大臂" }, + { "name": "R大臂衣袖", "bone": "root", "attachment": "R大臂衣袖" }, + { "name": "身体", "bone": "身体5", "attachment": "身体" }, + { "name": "R袖口", "bone": "root" }, + { "name": "R手", "bone": "root" }, + { "name": "R小臂", "bone": "root", "attachment": "R正常右小臂" }, + { "name": "R正常手", "bone": "root", "attachment": "R正常右手" }, + { "name": "R挡左边", "bone": "root" }, + { "name": "R挡右边", "bone": "root" }, + { "name": "领结", "bone": "领结", "attachment": "领结" }, + { "name": "身体遮挡", "bone": "身体5" }, + { + "name": "L大臂衣袖后", + "bone": "L大臂衣袖后", + "attachment": "L大臂衣袖后" + }, + { "name": "L大臂", "bone": "root", "attachment": "L大臂" }, + { "name": "L袖口", "bone": "root", "attachment": "L正常左袖口" }, + { "name": "L手", "bone": "root", "attachment": "L正常左手" }, + { "name": "L小臂", "bone": "root", "attachment": "L正常左小臂" }, + { "name": "L大臂衣袖", "bone": "root", "attachment": "L大臂衣袖" }, + { "name": "L挡右边", "bone": "root" }, + { "name": "环抱遮挡", "bone": "身体8" }, + { "name": "L挡左边", "bone": "root" }, + { "name": "领子", "bone": "领子3", "attachment": "领子" }, + { "name": "胸饰", "bone": "root", "attachment": "胸饰" }, + { "name": "面部/发饰3", "bone": "发饰4", "attachment": "发饰3" }, + { "name": "面部/发饰2", "bone": "发饰8", "attachment": "发饰2" }, + { "name": "面部/发饰1", "bone": "发饰1", "attachment": "发饰1" }, + { "name": "面部/E眼白", "bone": "root", "attachment": "E眼白" }, + { "name": "面部/E眼珠", "bone": "root", "attachment": "E眼珠" }, + { "name": "面部/E脸2", "bone": "root" }, + { "name": "面部/E脸1", "bone": "root", "attachment": "E脸1" }, + { "name": "面部/鼻子", "bone": "root", "attachment": "鼻子" }, + { "name": "面部/M嘴巴", "bone": "root", "attachment": "M正常嘴巴" }, + { "name": "面部/E眼角", "bone": "root", "attachment": "E眼角" }, + { "name": "面部/E睫毛", "bone": "root", "attachment": "E睫毛" }, + { "name": "面部/E眼皮", "bone": "root", "attachment": "E眼皮" }, + { "name": "面部/X眼", "bone": "root" }, + { + "name": "前发/发影子", + "bone": "root", + "color": "ffffff7e", + "attachment": "发影子" + }, + { "name": "前发/发11内阴影", "bone": "root", "attachment": "发11内阴影" }, + { "name": "前发/发10", "bone": "root", "attachment": "发10" }, + { "name": "前发/发9", "bone": "root", "attachment": "发9" }, + { "name": "前发/发8", "bone": "发13", "attachment": "发8" }, + { "name": "前发/发7", "bone": "root", "attachment": "发7" }, + { "name": "前发/发6", "bone": "发6", "attachment": "发6" }, + { "name": "前发/发带", "bone": "root", "attachment": "发带" }, + { "name": "前发/发5", "bone": "发22", "attachment": "发5" }, + { "name": "前发/发4", "bone": "发4", "attachment": "发4" }, + { "name": "前发/发3", "bone": "发19", "attachment": "发3" }, + { "name": "前发/发2", "bone": "发26", "attachment": "发2" }, + { "name": "前发/发1", "bone": "发1", "attachment": "发1" }, + { "name": "前发/E眉毛", "bone": "root", "attachment": "E眉毛" }, + { "name": "c参考", "bone": "root", "color": "ff00008b" }, + { + "name": "附件/可爱花朵", + "bone": "可爱花朵9", + "color": "ffffff00", + "attachment": "可爱花朵" + }, + { + "name": "附件/脸红", + "bone": "root", + "color": "ffffff00", + "attachment": "脸红" + }, + { + "name": "附件/生气符号2", + "bone": "生气符号2", + "color": "ffffff00", + "attachment": "生气符号2" + }, + { + "name": "附件/生气符号1", + "bone": "生气符号1", + "color": "ffffff00", + "attachment": "生气符号1" + }, + { + "name": "附件/问号", + "bone": "问号", + "color": "ffffff00", + "attachment": "问号" + }, + { + "name": "附件/星星4", + "bone": "星星4", + "color": "ffffff00", + "attachment": "星星4" + }, + { + "name": "附件/星星3", + "bone": "星星3", + "color": "ffffff00", + "attachment": "星星3" + }, + { + "name": "附件/星星2", + "bone": "星星2", + "color": "ffffff00", + "attachment": "星星2" + }, + { + "name": "附件/星星1", + "bone": "星星1", + "color": "ffffff00", + "attachment": "星星1" + }, + { "name": "变身器翅膀2", "bone": "root" }, + { "name": "变身器翅膀1", "bone": "root" } + ], + "ik": [ + { + "name": "L", + "order": 7, + "bones": ["身体9"], + "target": "target23", + "mix": 0, + "compress": true, + "stretch": true + }, + { + "name": "R", + "order": 6, + "bones": ["R大臂2"], + "target": "target21", + "mix": 0, + "compress": true, + "stretch": true + }, + { + "name": "target", + "order": 1, + "bones": ["领子5"], + "target": "target", + "compress": true, + "stretch": true + }, + { + "name": "target2", + "order": 3, + "bones": ["领子6"], + "target": "target", + "compress": true, + "stretch": true + } + ], + "transform": [ + { + "name": "1", + "order": 8, + "bones": ["身体17"], + "target": "身体26", + "rotation": 180, + "x": -512.52, + "y": -547.07, + "mixRotate": 0.16, + "mixX": 0.16, + "mixScaleX": 0.16, + "mixShearY": 0.16 + }, + { + "name": "2", + "order": 9, + "bones": ["发12"], + "target": "身体26", + "rotation": 180, + "x": -522.31, + "y": -418.82, + "mixRotate": 0.16, + "mixX": 0.16, + "mixScaleX": 0.16, + "mixShearY": 0.16 + }, + { + "name": "3", + "order": 10, + "bones": ["发4"], + "target": "身体26", + "rotation": 180, + "x": -495, + "y": -158.86, + "mixRotate": 0.074, + "mixX": 0.074, + "mixScaleX": 0.074, + "mixShearY": 0.074 + }, + { + "name": "4", + "order": 11, + "bones": ["发22"], + "target": "身体26", + "rotation": 180, + "x": -437, + "y": -133.74, + "mixRotate": -0.028, + "mixX": -0.028, + "mixScaleX": -0.028, + "mixShearY": -0.028 + }, + { + "name": "5", + "order": 12, + "bones": ["发饰3"], + "target": "身体26", + "rotation": 180, + "x": -352.41, + "y": -148.51, + "mixRotate": -0.08, + "mixX": -0.08, + "mixScaleX": -0.08, + "mixShearY": -0.08 + }, + { + "name": "6", + "order": 13, + "bones": ["后发8"], + "target": "身体26", + "rotation": 180, + "x": -163.67, + "y": -217.63, + "mixRotate": -0.1, + "mixX": -0.1, + "mixScaleX": -0.1, + "mixShearY": -0.1 + }, + { + "name": "7", + "order": 14, + "bones": ["后发4"], + "target": "身体26", + "rotation": 180, + "x": -78.37, + "y": -300.71, + "mixRotate": -0.1, + "mixX": -0.1, + "mixScaleX": -0.1, + "mixShearY": -0.1 + }, + { + "name": "8", + "order": 15, + "bones": ["后发11"], + "target": "身体26", + "rotation": 180, + "x": -45.94, + "y": -377.7, + "mixRotate": -0.074, + "mixX": -0.074, + "mixScaleX": -0.074, + "mixShearY": -0.074 + }, + { + "name": "9", + "order": 16, + "bones": ["发9"], + "target": "身体26", + "rotation": 180, + "x": -508.96, + "y": -693.29, + "mixRotate": 0.166, + "mixX": 0.166, + "mixScaleX": 0.166, + "mixShearY": 0.166 + }, + { + "name": "10", + "order": 17, + "bones": ["发1"], + "target": "身体26", + "rotation": 180, + "x": -460.5, + "y": -1078.57, + "mixRotate": 0.18, + "mixX": 0.18, + "mixScaleX": 0.18, + "mixShearY": 0.18 + }, + { + "name": "11", + "order": 18, + "bones": ["发18"], + "target": "身体26", + "rotation": 180, + "x": -417.91, + "y": -1195.32, + "mixRotate": 0.1, + "mixX": 0.1, + "mixScaleX": 0.1, + "mixShearY": 0.1 + }, + { + "name": "12", + "order": 19, + "bones": ["发26"], + "target": "身体26", + "rotation": 180, + "x": -451.56, + "y": -1237.36, + "mixRotate": 0.1328, + "mixX": 0.1328, + "mixScaleX": 0.1328, + "mixShearY": 0.1328 + }, + { + "name": "13", + "order": 20, + "bones": ["后发6"], + "target": "身体26", + "rotation": 180, + "x": -417.96, + "y": -1274.57, + "mixRotate": -0.108, + "mixX": -0.108, + "mixScaleX": -0.108, + "mixShearY": -0.108 + }, + { + "name": "14", + "order": 21, + "bones": ["后发2"], + "target": "身体26", + "rotation": 180, + "x": -267.81, + "y": -1181.93, + "mixRotate": -0.102, + "mixX": -0.102, + "mixScaleX": -0.102, + "mixShearY": -0.102 + }, + { + "name": "15", + "order": 22, + "bones": ["后发13"], + "target": "身体26", + "rotation": 180, + "x": -217.89, + "y": -1002.84, + "mixRotate": -0.1, + "mixX": -0.1, + "mixScaleX": -0.1, + "mixShearY": -0.1 + }, + { + "name": "16", + "order": 23, + "bones": ["后发1"], + "target": "身体26", + "rotation": 180, + "x": -129.15, + "y": -1004.81, + "mixRotate": -0.06, + "mixX": -0.06, + "mixScaleX": -0.06, + "mixShearY": -0.06 + }, + { + "name": "17", + "order": 24, + "bones": ["身体24"], + "target": "身体26", + "rotation": 180, + "x": -841.44, + "y": -569.69, + "mixRotate": 0.06, + "mixX": 0.06, + "mixScaleX": 0.06, + "mixShearY": 0.06 + }, + { + "name": "18", + "order": 25, + "bones": ["发6"], + "target": "身体26", + "rotation": 180, + "x": -428.61, + "y": -483.52, + "mixRotate": 0.182, + "mixX": 0.182, + "mixScaleX": 0.182, + "mixShearY": 0.182 + }, + { + "name": "19", + "order": 26, + "bones": ["后发15"], + "target": "身体26", + "rotation": 180, + "x": -220.29, + "y": -387.82, + "mixRotate": -0.12, + "mixX": -0.12, + "mixScaleX": -0.12, + "mixShearY": -0.12 + }, + { + "name": "e1", + "order": 27, + "bones": ["身体15"], + "target": "身体26", + "rotation": 180, + "x": -143.68, + "y": -754.1, + "mixRotate": 0.1382, + "mixX": 0.1382, + "mixScaleX": 0.1382, + "mixShearY": 0.1382 + }, + { + "name": "e2", + "order": 28, + "bones": ["身体16"], + "target": "身体26", + "rotation": 180, + "x": -131.9, + "y": -400.11, + "mixRotate": 0.084, + "mixX": 0.084, + "mixScaleX": 0.084, + "mixShearY": 0.084 + }, + { + "name": "face", + "order": 29, + "bones": ["身体27"], + "target": "身体26", + "rotation": 180, + "x": -65.17, + "y": -1410.71, + "mixRotate": -1, + "mixX": -1, + "mixScaleX": -1, + "mixShearY": -1 + }, + { + "name": "R大臂", + "order": 2, + "bones": ["领子4"], + "target": "R大臂", + "rotation": 44.91, + "x": -86.24, + "y": -33.46, + "mixRotate": 0.35, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "R大臂衣袖后", + "order": 5, + "bones": ["R大臂2"], + "target": "R大臂衣袖后", + "rotation": -9.93, + "x": 1.1, + "y": 2.07, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "身体8", + "bones": ["领子2"], + "target": "身体8", + "rotation": -55.56, + "x": -58.41, + "y": 8.16, + "mixRotate": 0.35, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + }, + { + "name": "身体9", + "order": 31, + "bones": ["L大臂衣袖后"], + "target": "身体9", + "rotation": 3.41, + "x": 6.42, + "y": 0.67, + "mixRotate": 0, + "mixX": 0, + "mixScaleX": 0, + "mixShearY": 0 + } + ], + "physics": [ + { + "name": "L大臂衣袖后", + "order": 30, + "bone": "L大臂衣袖后", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "R大臂衣袖后", + "order": 4, + "bone": "R大臂衣袖后", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "右大腿3", + "order": 91, + "bone": "右大腿3", + "rotate": 0.394, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "左大腿3", + "order": 90, + "bone": "左大腿3", + "rotate": 0.3533, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "身体21", + "order": 33, + "bone": "身体21", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "身体23", + "order": 32, + "bone": "身体23", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发2", + "order": 78, + "bone": "发2", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发3", + "order": 79, + "bone": "发3", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发5", + "order": 55, + "bone": "发5", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发7", + "order": 68, + "bone": "发7", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发8", + "order": 69, + "bone": "发8", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发10", + "order": 66, + "bone": "发10", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发11", + "order": 67, + "bone": "发11", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发13", + "order": 64, + "bone": "发13", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发14", + "order": 65, + "bone": "发14", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发15", + "order": 56, + "bone": "发15", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发16", + "order": 57, + "bone": "发16", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发17", + "order": 80, + "bone": "发17", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发19", + "order": 81, + "bone": "发19", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发20", + "order": 82, + "bone": "发20", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发21", + "order": 83, + "bone": "发21", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发23", + "order": 52, + "bone": "发23", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发24", + "order": 53, + "bone": "发24", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发25", + "order": 54, + "bone": "发25", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发27", + "order": 34, + "bone": "发27", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发28", + "order": 35, + "bone": "发28", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发29", + "order": 36, + "bone": "发29", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰1", + "order": 62, + "bone": "发饰1", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰2", + "order": 60, + "bone": "发饰2", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰4", + "order": 49, + "bone": "发饰4", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰5", + "order": 50, + "bone": "发饰5", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰6", + "order": 51, + "bone": "发饰6", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰7", + "order": 61, + "bone": "发饰7", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰8", + "order": 58, + "bone": "发饰8", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰9", + "order": 59, + "bone": "发饰9", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/发饰10", + "order": 63, + "bone": "发饰10", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发3", + "order": 84, + "bone": "后发3", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发3b", + "order": 85, + "bone": "后发3b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发3c", + "order": 86, + "bone": "后发3c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发5", + "order": 43, + "bone": "后发5", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发5b", + "order": 44, + "bone": "后发5b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发5c", + "order": 45, + "bone": "后发5c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发7", + "order": 87, + "bone": "后发7", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发7b", + "order": 88, + "bone": "后发7b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发7c", + "order": 89, + "bone": "后发7c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发9", + "order": 46, + "bone": "后发9", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发9b", + "order": 47, + "bone": "后发9b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发9c", + "order": 48, + "bone": "后发9c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发10", + "order": 72, + "bone": "后发10", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发10b", + "order": 73, + "bone": "后发10b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发10c", + "order": 74, + "bone": "后发10c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发12", + "order": 37, + "bone": "后发12", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发12b", + "order": 38, + "bone": "后发12b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发12c", + "order": 39, + "bone": "后发12c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发14", + "order": 75, + "bone": "后发14", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发14b", + "order": 76, + "bone": "后发14b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发14c", + "order": 77, + "bone": "后发14c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发16", + "order": 40, + "bone": "后发16", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发16b", + "order": 41, + "bone": "后发16b", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/后发16c", + "order": 42, + "bone": "后发16c", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/身体18", + "order": 70, + "bone": "身体18", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + }, + { + "name": "头发物理/身体19", + "order": 71, + "bone": "身体19", + "rotate": 1, + "inertia": 0.5, + "damping": 0.85 + } + ], + "skins": [ + { + "name": "default", + "attachments": { + "L大臂": { + "L大臂": { + "type": "mesh", + "uvs": [ + 0.61654, 0.62127, 0.60225, 0.64746, 0.59017, 0.6638, 0.56096, + 0.69028, 0.53385, 0.70237, 0.50982, 0.70876, 0.45315, 0.70878, + 0.41319, 0.69956, 0.38345, 0.68602, 0.36053, 0.66931, 0.34238, + 0.64864, 0.33135, 0.62885, 0.31991, 0.59699, 0.31989, 0.54029, + 0.32547, 0.52429, 0.41397, 0.29388, 0.42047, 0.29027, 0.42937, + 0.29137, 0.46094, 0.30181, 0.67076, 0.36545, 0.67971, 0.36986, + 0.68086, 0.3773, 0.62755, 0.58121 + ], + "triangles": [ + 22, 18, 19, 21, 22, 19, 21, 19, 20, 12, 13, 14, 15, 16, 17, 15, + 17, 18, 14, 15, 18, 14, 18, 22, 0, 14, 22, 11, 12, 14, 0, 11, 14, + 1, 11, 0, 9, 10, 11, 11, 1, 9, 9, 7, 8, 9, 1, 7, 1, 2, 7, 6, 7, 2, + 3, 4, 2, 4, 5, 2, 5, 6, 2 + ], + "vertices": [ + 1, 28, 211.32, 61.77, 1, 1, 28, 222.56, 58.43, 1, 1, 28, 229.77, + 55.21, 1, 1, 28, 242.06, 46.53, 1, 1, 28, 248.53, 37.61, 1, 1, 28, + 252.56, 29.41, 1, 1, 28, 256.11, 9.03, 1, 1, 28, 254.96, -5.97, 1, + 1, 28, 251.48, -17.6, 1, 1, 28, 246.31, -26.99, 1, 1, 28, 239.28, + -34.94, 1, 1, 28, 232.15, -40.26, 1, 1, 28, 220.28, -46.57, 1, 1, + 28, 197.88, -50.47, 1, 1, 28, 191.21, -49.56, 1, 1, 28, 94.64, + -33.57, 1, 1, 28, 92.81, -31.48, 1, 1, 28, 92.69, -28.2, 1, 1, 28, + 94.84, -16.13, 1, 1, 28, 106.86, 63.69, 1, 1, 28, 108.04, 67.21, + 1, 1, 28, 110.91, 68.14, 1, 1, 28, 194.8, 62.98, 1 + ], + "hull": 23, + "edges": [ + 0, 44, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44 + ], + "width": 365, + "height": 401 + } + }, + "L大臂衣袖": { + "L大臂衣袖": { + "type": "mesh", + "uvs": [ + 0.58838, 0.2074, 0.6352, 0.19343, 0.66832, 0.1944, 0.71515, + 0.21125, 0.73919, 0.22603, 0.76146, 0.2843, 0.76717, 0.33583, + 0.76146, 0.40614, 0.72948, 0.52798, 0.70555, 0.6055, 0.70612, + 0.64451, 0.7027, 0.70374, 0.69299, 0.77887, 0.66958, 0.83377, + 0.60905, 0.87807, 0.48228, 0.8983, 0.38749, 0.88193, 0.31782, + 0.84581, 0.24473, 0.77405, 0.23331, 0.72889, 0.22817, 0.70856, + 0.23959, 0.66666, 0.26357, 0.64162, 0.30983, 0.59924, 0.36751, + 0.55541, 0.38909, 0.54306, 0.38623, 0.46504, 0.39822, 0.42122, + 0.45933, 0.39955, 0.51072, 0.28445, 0.55355, 0.22329, 0.26181, + 0.70781, 0.29321, 0.68951, 0.37087, 0.67506, 0.45139, 0.66302, + 0.52391, 0.64569, 0.58216, 0.61824, 0.61642, 0.59271, 0.61699, + 0.62642, 0.6364, 0.6871, 0.6484, 0.72948, 0.65011, 0.76512, + 0.65068, 0.79642, 0.45119, 0.51211, 0.52382, 0.48028, 0.58435, + 0.46286 + ], + "triangles": [ + 24, 25, 34, 35, 34, 43, 14, 15, 42, 34, 42, 15, 34, 15, 16, 17, + 33, 16, 16, 33, 34, 34, 41, 42, 14, 42, 13, 41, 34, 35, 39, 40, + 35, 39, 35, 36, 40, 41, 35, 17, 18, 32, 18, 31, 32, 17, 32, 33, + 13, 42, 12, 42, 41, 12, 11, 12, 40, 18, 19, 31, 12, 41, 40, 40, + 39, 11, 19, 20, 31, 20, 21, 31, 31, 21, 32, 11, 39, 10, 21, 22, + 32, 33, 32, 23, 32, 22, 23, 34, 33, 24, 33, 23, 24, 39, 38, 10, + 34, 25, 43, 35, 43, 36, 38, 9, 10, 36, 37, 38, 38, 37, 9, 43, 44, + 36, 36, 44, 37, 9, 37, 8, 44, 45, 37, 37, 45, 8, 25, 26, 43, 8, + 45, 7, 43, 26, 28, 43, 28, 44, 28, 26, 27, 44, 28, 45, 7, 45, 6, + 5, 29, 4, 3, 4, 0, 0, 4, 29, 0, 2, 3, 0, 1, 2, 28, 29, 45, 6, 45, + 29, 0, 29, 30, 5, 6, 29, 39, 36, 38 + ], + "vertices": [ + 1, 28, -19.37, -22.32, 1, 1, 28, -31.69, -0.41, 1, 1, 28, -33.99, + 16.2, 1, 1, 28, -28.09, 41.28, 1, 1, 28, -21.44, 54.78, 1, 1, 28, + 11.08, 71.87, 1, 1, 28, 41.04, 80.02, 1, 1, 28, 83.1, 84.4, 1, 2, + 28, 157.89, 80.98, 0.99521, 42, -86.36, 69.81, 0.00479, 2, 28, + 205.8, 77.02, 0.81345, 42, -38.39, 72.86, 0.18655, 2, 28, 228.8, + 81.32, 0.57479, 42, -16.25, 80.46, 0.42521, 2, 28, 264.12, 85.7, + 0.35733, 42, 18.04, 89.94, 0.64267, 2, 28, 309.37, 88.58, 0.04018, + 42, 62.39, 99.38, 0.95982, 2, 28, 343.85, 82.56, 0.00389, 42, + 97.38, 98.44, 0.99611, 1, 42, 132.22, 77.67, 1, 1, 42, 163.82, + 20.55, 1, 1, 42, 169.5, -28.08, 1, 1, 42, 159.95, -68.35, 1, 2, + 28, 345.38, -135.38, 0.00377, 42, 130.64, -116.95, 0.99623, 2, 28, + 319.67, -145.71, 0.0167, 42, 106.71, -130.92, 0.9833, 2, 28, + 308.1, -150.37, 0.02515, 42, 95.94, -137.2, 0.97485, 2, 28, + 282.35, -148.98, 0.05158, 42, 70.25, -139.58, 0.94842, 2, 28, + 265.47, -139.6, 0.08599, 42, 52.19, -132.76, 0.91401, 2, 28, + 236.4, -120.9, 0.21381, 42, 20.71, -118.49, 0.78619, 2, 28, + 205.49, -96.65, 0.49618, 42, -13.4, -99, 0.50382, 2, 28, 196.32, + -87.16, 0.65685, 42, -23.86, -90.95, 0.34315, 2, 28, 150.45, + -96.6, 0.9509, 42, -67.86, -106.97, 0.0491, 2, 28, 123.51, -95.13, + 0.98486, 42, -94.74, -109.44, 0.01514, 2, 28, 105.4, -66.9, + 0.99858, 42, -116.76, -84.14, 0.00142, 1, 28, 32.91, -53.11, 1, 1, + 28, -6.96, -38.05, 1, 2, 28, 304.74, -133.67, 0.02756, 42, 90.18, + -121.18, 0.97244, 2, 28, 291.2, -119.9, 0.04845, 42, 74.78, + -109.52, 0.95155, 2, 28, 275.93, -82.67, 0.09103, 42, 54.25, + -74.91, 0.90897, 2, 28, 261.83, -43.77, 0.10363, 42, 34.64, + -38.48, 0.89637, 1, 42, 13.27, -6.88, 1, 2, 28, 224.02, 16.82, + 0.52161, 42, -11.59, 15.95, 0.47839, 2, 28, 205.96, 31.27, + 0.57362, 42, -31.56, 27.63, 0.42638, 2, 28, 225.84, 35.02, + 0.74376, 42, -12.45, 34.23, 0.25624, 2, 28, 260.03, 50.94, + 0.40324, 42, 19.06, 54.96, 0.59676, 2, 28, 284.04, 61.28, 0.25309, + 42, 41.31, 68.68, 0.74691, 2, 28, 304.96, 65.79, 0.11842, 42, + 61.34, 76.19, 0.88158, 2, 28, 323.41, 69.3, 0.01433, 42, 79.09, + 82.35, 0.98567, 1, 28, 172.64, -59.38, 1, 2, 28, 147.53, -26.45, + 0.99469, 42, -80.97, -37.99, 0.00531, 1, 28, 131.98, 1.94, 1 + ], + "hull": 31, + "edges": [ + 6, 4, 4, 2, 2, 0, 0, 60, 60, 58, 58, 56, 56, 54, 54, 52, 52, 50, + 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 36, 34, 34, 32, 32, 30, + 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, + 14, 12, 12, 10, 10, 8, 8, 6, 40, 38, 38, 36, 38, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 26, 50, 86, 86, 88, 88, 90 + ], + "width": 506, + "height": 600 + } + }, + "L大臂衣袖后": { + "L大臂衣袖后": { + "type": "mesh", + "uvs": [ + 0.51187, 0.28232, 0.59321, 0.24666, 0.64333, 0.24666, 0.67291, + 0.27213, 0.70906, 0.33921, 0.73454, 0.41138, 0.74275, 0.48525, + 0.74933, 0.57526, 0.7485, 0.62365, 0.71975, 0.66696, 0.6762, + 0.70262, 0.59321, 0.73319, 0.50365, 0.74422, 0.44778, 0.73573, + 0.37548, 0.69837, 0.30482, 0.64998, 0.26538, 0.59394, 0.24812, + 0.54044, 0.25552, 0.49629, 0.27195, 0.45553, 0.30975, 0.41053, + 0.36973, 0.37063, 0.43217, 0.32732, 0.5965, 0.3893 + ], + "triangles": [ + 11, 12, 23, 23, 12, 13, 10, 11, 23, 23, 13, 14, 9, 10, 7, 14, 15, + 21, 15, 20, 21, 23, 14, 21, 8, 9, 7, 10, 23, 7, 15, 16, 20, 20, + 16, 19, 6, 7, 23, 17, 18, 16, 16, 18, 19, 23, 21, 22, 22, 0, 23, + 6, 23, 5, 23, 4, 5, 0, 1, 23, 23, 3, 4, 3, 1, 2, 3, 23, 1 + ], + "vertices": [ + 2, 28, 187.32, -47.49, 0.89094, 42, -38.54, -53.01, 0.10906, 1, + 28, 165.07, -13.04, 1, 1, 28, 161.09, 9.87, 1, 1, 28, 170.01, + 25.35, 1, 2, 28, 196.8, 47.04, 0.94776, 42, -42.92, 41.89, + 0.05224, 2, 28, 226.71, 64.23, 0.63137, 42, -15.84, 63.25, + 0.36863, 2, 28, 258.73, 73.67, 0.35879, 42, 14.46, 77.26, 0.64121, + 2, 28, 298.02, 83.6, 0.12571, 42, 51.89, 92.8, 0.87429, 2, 28, + 319.5, 86.95, 0.02255, 42, 72.65, 99.24, 0.97745, 2, 28, 340.94, + 77.13, 0.00635, 42, 95.29, 92.65, 0.99365, 2, 28, 360.17, 59.97, + 0.00021, 42, 116.82, 78.47, 0.99979, 1, 42, 141.91, 46.2, 1, 1, + 42, 159.62, 8.28, 1, 1, 42, 164.12, -17.53, 1, 2, 28, 382.2, + -77.83, 0.00048, 42, 158.69, -54.65, 0.99952, 2, 28, 366.41, + -113.85, 0.00894, 42, 148.31, -92.59, 0.99106, 2, 28, 344.76, + -136.19, 0.02363, 42, 130.14, -117.84, 0.97637, 2, 28, 322.47, + -148.2, 0.04023, 42, 109.83, -132.96, 0.95977, 2, 28, 302.35, + -148.21, 0.05837, 42, 89.93, -135.91, 0.94163, 2, 28, 283.01, + -143.84, 0.08372, 42, 70.16, -134.4, 0.91628, 2, 28, 260.1, + -130.02, 0.13613, 42, 45.48, -124.06, 0.86387, 2, 28, 237.68, + -105.67, 0.26288, 42, 19.76, -103.24, 0.73712, 2, 28, 213.56, + -80.46, 0.51171, 42, -7.78, -81.81, 0.48829, 2, 28, 227.91, -0.57, + 0.87792, 42, -5.21, -0.68, 0.12208 + ], + "hull": 23, + "edges": [ + 2, 0, 0, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, + 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, + 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2 + ], + "width": 464, + "height": 449 + } + }, + "L小臂": { + "L正常左小臂": { + "type": "mesh", + "uvs": [ + 0.68991, 0.19365, 0.71078, 0.19724, 0.72913, 0.20422, 0.74443, + 0.21201, 0.75953, 0.22381, 0.76726, 0.23738, 0.77375, 0.27794, + 0.77322, 0.29898, 0.76428, 0.3603, 0.72652, 0.50996, 0.71721, + 0.55622, 0.71255, 0.59471, 0.70432, 0.60688, 0.69309, 0.61637, + 0.67792, 0.62277, 0.70694, 0.63934, 0.72132, 0.65162, 0.72586, + 0.65661, 0.72857, 0.66602, 0.72857, 0.67431, 0.72548, 0.68471, + 0.70983, 0.70478, 0.6878, 0.72396, 0.69729, 0.74983, 0.71705, + 0.78319, 0.71689, 0.79106, 0.71376, 0.79809, 0.70924, 0.80132, + 0.69181, 0.80195, 0.67614, 0.80491, 0.63345, 0.80446, 0.61859, + 0.79954, 0.60998, 0.7923, 0.59712, 0.79577, 0.57617, 0.79278, + 0.5687, 0.78855, 0.55987, 0.78091, 0.55493, 0.77241, 0.52158, + 0.74003, 0.4929, 0.72069, 0.45574, 0.71864, 0.43996, 0.71413, + 0.42974, 0.72868, 0.42397, 0.73338, 0.40652, 0.73336, 0.39648, + 0.73165, 0.38349, 0.72624, 0.36085, 0.71042, 0.34922, 0.70065, + 0.34456, 0.69549, 0.32072, 0.65293, 0.29405, 0.63007, 0.26885, + 0.61935, 0.23565, 0.62299, 0.22884, 0.6205, 0.22819, 0.6116, + 0.23175, 0.60548, 0.24481, 0.59433, 0.27422, 0.5814, 0.3108, + 0.57078, 0.3483, 0.56234, 0.3691, 0.54446, 0.38879, 0.53608, + 0.36509, 0.52591, 0.35532, 0.51996, 0.33493, 0.50256, 0.32596, + 0.4883, 0.32031, 0.47211, 0.30872, 0.40167, 0.31405, 0.3908, + 0.34455, 0.39104, 0.39154, 0.39776, 0.43191, 0.41342, 0.45953, + 0.37332, 0.48194, 0.34484, 0.50728, 0.32111, 0.52947, 0.28991, + 0.55238, 0.24353, 0.57209, 0.21846, 0.58911, 0.204, 0.5958, + 0.20118, 0.61667, 0.19522, 0.63093, 0.19363 + ], + "triangles": [ + 70, 68, 69, 67, 68, 70, 67, 72, 66, 71, 67, 70, 72, 65, 66, 71, + 72, 67, 64, 65, 72, 63, 64, 72, 62, 63, 72, 62, 72, 10, 52, 57, + 58, 56, 57, 52, 53, 54, 55, 56, 53, 55, 52, 53, 56, 51, 58, 59, + 52, 58, 51, 60, 51, 59, 50, 51, 60, 49, 50, 60, 60, 47, 49, 48, + 49, 47, 60, 41, 47, 60, 61, 62, 62, 41, 60, 41, 62, 39, 46, 47, + 41, 41, 45, 46, 41, 44, 45, 42, 44, 41, 43, 44, 42, 14, 62, 10, + 10, 11, 13, 11, 12, 13, 13, 14, 10, 16, 19, 20, 18, 16, 17, 19, + 16, 18, 20, 21, 15, 20, 15, 16, 39, 40, 41, 14, 39, 62, 21, 22, + 14, 21, 14, 15, 38, 39, 14, 22, 38, 14, 37, 38, 22, 35, 36, 37, + 37, 22, 35, 22, 32, 35, 31, 32, 30, 23, 32, 22, 27, 23, 24, 33, + 34, 35, 32, 33, 35, 25, 26, 24, 23, 30, 32, 24, 26, 27, 27, 28, + 23, 23, 29, 30, 28, 29, 23, 6, 4, 5, 4, 7, 1, 6, 7, 4, 1, 8, 0, 2, + 4, 1, 3, 4, 2, 7, 8, 1, 82, 80, 81, 82, 8, 80, 8, 82, 0, 80, 78, + 79, 80, 8, 78, 8, 77, 78, 8, 76, 77, 8, 75, 76, 8, 9, 75, 9, 74, + 75, 9, 73, 74, 9, 72, 73, 10, 72, 9 + ], + "vertices": [ + 2, 29, -64.71, -2.26, 0.00001, 28, 162.95, 11, 0.99999, 1, 28, + 163.24, 21.96, 1, 1, 28, 165.76, 31.99, 1, 2, 29, -64.77, 27.92, + 0.00285, 28, 169.04, 40.56, 0.99715, 2, 29, -61.03, 37.78, 0.0138, + 28, 174.72, 49.44, 0.9862, 2, 29, -54.89, 44.5, 0.03237, 28, + 182.1, 54.76, 0.96763, 3, 29, -33.39, 56.62, 0.17678, 28, 205.62, + 62.25, 0.82305, 136, -216.93, 38.63, 0.00017, 3, 29, -21.5, 61.05, + 0.3029, 28, 218.16, 64.15, 0.69628, 136, -205.04, 43.05, 0.00082, + 4, 29, 14.57, 70.41, 0.73595, 28, 255.39, 65.95, 0.24963, 136, + -168.96, 52.41, 0.01038, 137, -120.21, 137.28, 0.00403, 3, 29, + 105.62, 85.62, 0.60801, 136, -77.91, 67.62, 0.17898, 137, -37, + 97.31, 0.21301, 3, 29, 133.32, 91.45, 0.35695, 136, -50.22, 73.45, + 0.23439, 137, -10.99, 86.14, 0.40866, 3, 29, 155.78, 97.78, + 0.19592, 136, -27.76, 79.79, 0.22072, 137, 11.02, 78.39, 0.58336, + 3, 29, 164.16, 96.55, 0.1599, 136, -19.37, 78.55, 0.20601, 137, + 17.17, 72.55, 0.63409, 3, 29, 171.61, 93.28, 0.12415, 136, -11.92, + 75.29, 0.18281, 137, 21.38, 65.59, 0.69304, 3, 29, 178.09, 87.45, + 0.06554, 136, -5.45, 69.45, 0.12756, 137, 23.31, 57.1, 0.8069, 3, + 29, 181.86, 105.02, 0.00939, 136, -1.68, 87.03, 0.04179, 137, + 36.51, 69.3, 0.94882, 3, 29, 186.01, 114.64, 0.00227, 136, 2.47, + 96.64, 0.02465, 137, 45.44, 74.77, 0.97308, 3, 29, 187.95, 117.92, + 0.00123, 136, 4.41, 99.93, 0.02116, 137, 48.92, 76.34, 0.97761, 3, + 29, 192.7, 121.31, 0.00035, 136, 9.17, 103.31, 0.01715, 137, + 54.76, 76.37, 0.9825, 3, 29, 197.35, 123.15, 0.00001, 136, 13.82, + 105.16, 0.01423, 137, 59.62, 75.21, 0.98576, 2, 136, 20.23, + 105.99, 0.01105, 137, 65.34, 72.2, 0.98895, 2, 136, 34.45, 102.96, + 0.00478, 137, 75.23, 61.54, 0.99522, 2, 136, 49.39, 96.69, + 0.00051, 137, 83.83, 47.81, 0.99949, 1, 137, 100.14, 48.92, 1, 1, + 137, 122.08, 54.12, 1, 1, 137, 126.67, 52.93, 1, 1, 137, 130.42, + 50.38, 1, 1, 137, 131.77, 47.66, 1, 1, 137, 130.04, 38.84, 1, 1, + 137, 129.89, 30.57, 1, 1, 137, 124.5, 9.26, 1, 1, 137, 119.83, + 2.51, 1, 1, 137, 114.55, -0.78, 1, 1, 137, 115.04, -7.71, 1, 2, + 137, 110.77, -17.78, 0.99975, 139, -34.42, 149.78, 0.00025, 2, + 137, 107.39, -20.93, 0.99914, 139, -31.3, 146.37, 0.00086, 2, 137, + 101.85, -24.27, 0.99703, 139, -28, 140.81, 0.00297, 2, 137, 96.27, + -25.55, 0.99344, 139, -26.77, 135.22, 0.00656, 2, 137, 73.28, + -37.7, 0.9198, 139, -14.8, 112.13, 0.0802, 3, 136, 84.58, 2.66, + 0.00117, 137, 58.49, -49.34, 0.74519, 139, -3.28, 97.25, 0.25363, + 3, 136, 90.49, -15.58, 0.00207, 137, 52.82, -67.66, 0.50923, 139, + 15, 91.45, 0.48871, 3, 136, 90.95, -24.14, 0.00133, 137, 48.28, + -74.92, 0.40331, 139, 22.23, 86.85, 0.59536, 3, 136, 101.05, + -25.79, 0.0001, 137, 55.59, -82.09, 0.33239, 139, 29.45, 94.1, + 0.66751, 2, 137, 57.65, -85.64, 0.32193, 139, 33.02, 96.13, + 0.67807, 2, 137, 55.54, -94.38, 0.29925, 139, 41.74, 93.95, + 0.70075, 2, 137, 53.33, -99.17, 0.28478, 139, 46.51, 91.71, + 0.71522, 2, 137, 48.59, -104.91, 0.26261, 139, 52.22, 86.93, + 0.73739, 2, 137, 36.6, -114.02, 0.21164, 139, 61.23, 74.86, + 0.78836, 2, 137, 29.47, -118.47, 0.18292, 139, 65.63, 67.7, + 0.81708, 2, 137, 25.89, -120.08, 0.17123, 139, 67.21, 64.11, + 0.82877, 2, 137, -1.93, -126.03, 0.06334, 139, 72.94, 36.24, + 0.93666, 2, 137, -18.54, -136.16, 0.01145, 139, 82.95, 19.55, + 0.98855, 2, 137, -27.86, -147.27, 0.00068, 139, 93.99, 10.15, + 0.99932, 1, 139, 111.11, 8.16, 1, 1, 139, 114.16, 5.86, 1, 1, 139, + 113.19, 0.57, 1, 1, 139, 110.52, -2.57, 1, 1, 139, 102.37, -7.48, + 1, 1, 139, 85.8, -11.39, 1, 1, 139, 65.97, -13.07, 1, 2, 139, 46, + -13.36, 0.99865, 138, 22.12, -53.26, 0.00135, 3, 29, 192.85, + -77.8, 0.00012, 139, 33, -21.24, 0.94003, 138, 8.15, -47.28, + 0.05986, 3, 29, 184.41, -70.24, 0.00915, 139, 21.94, -23.7, + 0.78402, 138, -0.29, -39.72, 0.20683, 3, 29, 183.22, -83.85, + 0.01523, 139, 32.31, -32.6, 0.64558, 138, -1.49, -53.33, 0.3392, + 3, 29, 181.74, -89.85, 0.01601, 139, 36.33, -37.29, 0.62035, 138, + -2.96, -59.33, 0.36363, 3, 29, 175.86, -103.48, 0.01838, 139, 44, + -50, 0.58268, 138, -8.84, -72.96, 0.39893, 3, 29, 169.57, -110.94, + 0.02196, 139, 46.41, -59.46, 0.56515, 138, -15.13, -80.42, + 0.41288, 3, 29, 161.57, -117.25, 0.02783, 139, 46.88, -69.63, + 0.54727, 138, -23.13, -86.73, 0.4249, 3, 29, 124.29, -138.46, + 0.04463, 139, 42.44, -112.3, 0.50542, 138, -60.41, -107.94, + 0.44994, 3, 29, 117.19, -138.33, 0.04547, 139, 38.2, -118, + 0.50438, 138, -67.51, -107.81, 0.45015, 3, 29, 111.53, -123.68, + 0.06138, 139, 22.99, -114.07, 0.49212, 138, -73.17, -93.16, + 0.4465, 3, 29, 106.37, -99.69, 0.14674, 139, 0.47, -104.31, + 0.42931, 138, -78.34, -69.17, 0.42395, 3, 29, 107.48, -76.88, + 0.3906, 139, -17.43, -90.14, 0.27035, 138, -77.22, -46.36, + 0.33905, 4, 29, 79.75, -72.57, 0.75198, 28, 290.01, -87.33, + 0.00025, 139, -37.06, -110.18, 0.08926, 138, -104.95, -42.05, + 0.15851, 4, 29, 59.54, -68.18, 0.86696, 28, 271.12, -78.9, 0.0102, + 139, -52.4, -124.07, 0.03952, 138, -125.17, -37.66, 0.08332, 4, + 29, 41.42, -61.33, 0.88952, 28, 254.78, -68.49, 0.05935, 139, + -68.51, -134.81, 0.01441, 138, -143.28, -30.81, 0.03672, 4, 29, + 19.72, -57.65, 0.74781, 28, 234.29, -60.46, 0.2405, 139, -84.14, + -150.31, 0.00238, 138, -164.98, -27.13, 0.0093, 3, 29, -10.63, + -57, 0.3334, 28, 204.71, -53.63, 0.66626, 138, -195.33, -26.48, + 0.00034, 2, 29, -28.42, -53.14, 0.14289, 28, 188.08, -46.22, + 0.85711, 2, 29, -39.76, -48.21, 0.06715, 28, 177.99, -39.08, + 0.93285, 2, 29, -42.61, -45.63, 0.05319, 28, 175.72, -35.97, + 0.94681, 2, 29, -49.92, -36.97, 0.01832, 28, 170.34, -26, 0.98168, + 2, 29, -53.52, -30.5, 0.00624, 28, 168.14, -18.93, 0.99376 + ], + "hull": 83, + "edges": [ + 0, 164, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, + 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 108, 110, + 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 122, + 124, 124, 126, 126, 128, 128, 130, 130, 132, 132, 134, 134, 136, + 136, 138, 138, 140, 140, 142, 142, 144, 144, 146, 146, 148, 148, + 150, 150, 152, 152, 154, 154, 156, 156, 158, 158, 160, 160, 162, + 162, 164 + ], + "width": 515, + "height": 603 + } + }, + "L手": { + "L正常左手": { + "type": "mesh", + "uvs": [ + 0.64371, 0.30896, 0.65918, 0.31476, 0.69427, 0.33451, 0.70978, + 0.35202, 0.71991, 0.36936, 0.72523, 0.38755, 0.72527, 0.43159, + 0.71691, 0.45858, 0.71124, 0.47689, 0.69504, 0.52921, 0.68061, + 0.58293, 0.64201, 0.65393, 0.5817, 0.68841, 0.46877, 0.68842, + 0.4471, 0.67619, 0.43246, 0.65758, 0.39495, 0.67701, 0.36652, + 0.68578, 0.33295, 0.68584, 0.29477, 0.67147, 0.28098, 0.65609, + 0.27471, 0.64237, 0.27479, 0.6116, 0.27846, 0.60009, 0.30209, + 0.55586, 0.32598, 0.51827, 0.35302, 0.48779, 0.41647, 0.45208, + 0.49494, 0.41196, 0.5095, 0.40646, 0.54444, 0.38678, 0.57013, + 0.36749, 0.58634, 0.34317, 0.60255, 0.31885, 0.61823, 0.30872, + 0.64344, 0.41378 + ], + "triangles": [ + 8, 35, 7, 9, 35, 8, 10, 35, 9, 35, 30, 31, 35, 29, 30, 29, 35, 10, + 10, 12, 29, 22, 23, 19, 20, 22, 19, 21, 22, 20, 15, 27, 28, 26, + 27, 15, 25, 26, 15, 16, 24, 25, 18, 19, 23, 12, 28, 29, 12, 15, + 28, 24, 17, 23, 15, 13, 14, 25, 15, 16, 24, 16, 17, 17, 18, 23, + 11, 12, 10, 12, 13, 15, 0, 33, 34, 35, 0, 1, 35, 1, 2, 35, 2, 3, + 35, 3, 4, 35, 4, 5, 35, 33, 0, 32, 33, 35, 31, 32, 35, 35, 5, 6, + 7, 35, 6 + ], + "vertices": [ + 2, 29, 181.96, -13.82, 0.96295, 30, -28.26, -28.23, 0.03705, 2, + 29, 181.58, -6.9, 0.98962, 30, -31.51, -22.11, 0.01038, 1, 29, + 183.01, 9.72, 1, 2, 29, 186.74, 18.29, 0.99886, 30, -37.36, 2.92, + 0.00114, 2, 29, 191.24, 24.7, 0.98281, 30, -35.95, 10.64, 0.01719, + 2, 29, 196.8, 29.35, 0.94371, 30, -32.85, 17.18, 0.05629, 2, 29, + 212.26, 35.5, 0.70643, 30, -21.38, 29.24, 0.29357, 2, 29, 223.06, + 35.96, 0.47558, 30, -11.77, 34.17, 0.52442, 2, 29, 230.38, 36.27, + 0.31159, 30, -5.25, 37.52, 0.68841, 2, 29, 251.3, 37.17, 0.04424, + 30, 13.38, 47.09, 0.95576, 2, 29, 272.44, 38.96, 0.0003, 30, + 31.83, 57.56, 0.99971, 1, 30, 62.22, 65.67, 1, 1, 30, 89.77, + 57.42, 1, 1, 30, 124.51, 24.32, 1, 1, 30, 127.99, 14.62, 1, 1, 30, + 127.64, 5.23, 1, 1, 30, 144.25, -0.45, 1, 1, 30, 155.29, -6.39, 1, + 1, 30, 165.63, -16.21, 1, 1, 30, 173.63, -31.34, 1, 1, 30, 173.86, + -39.59, 1, 1, 30, 172.21, -45.18, 1, 1, 30, 164.16, -53.58, 1, 1, + 30, 160.03, -55.66, 1, 1, 30, 141.23, -60.83, 1, 1, 30, 124.08, + -64.11, 1, 1, 30, 107.81, -64.53, 1, 1, 30, 78.97, -55.69, 1, 2, + 29, 241.47, -58.22, 0.0013, 30, 44.37, -43.66, 0.9987, 2, 29, + 237.26, -53.24, 0.00688, 30, 38.46, -40.9, 0.99312, 2, 29, 224.87, + -42.18, 0.08825, 30, 22.57, -36.04, 0.91175, 2, 29, 214.06, + -34.72, 0.31935, 30, 9.64, -33.79, 0.68065, 2, 29, 202.98, -31.71, + 0.62128, 30, -1.69, -35.69, 0.37872, 2, 29, 191.89, -28.7, + 0.82521, 30, -13.02, -37.59, 0.17479, 2, 29, 185.87, -23.91, + 0.89423, 30, -20.48, -35.77, 0.10577, 2, 29, 218.83, 0.69, + 0.65457, 30, -0.85, 0.37, 0.34543 + ], + "hull": 35, + "edges": [ + 0, 68, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, + 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, + 58, 58, 60, 60, 62, 66, 68, 28, 30, 12, 14, 14, 16, 16, 18, 62, + 64, 64, 66 + ], + "width": 425, + "height": 378 + } + }, + "L袖口": { + "L正常左袖口": { + "type": "mesh", + "uvs": [ + 0.65061, 0.37758, 0.68152, 0.41345, 0.69464, 0.43347, 0.70845, + 0.45882, 0.71585, 0.47951, 0.72592, 0.51452, 0.73285, 0.57694, + 0.73277, 0.60387, 0.73026, 0.62125, 0.72476, 0.64022, 0.71732, + 0.65628, 0.70228, 0.67371, 0.6821, 0.68533, 0.67455, 0.68825, + 0.65006, 0.69106, 0.59588, 0.69106, 0.57311, 0.68765, 0.54387, + 0.67916, 0.52264, 0.66949, 0.51569, 0.66194, 0.46727, 0.66195, + 0.42763, 0.65356, 0.38359, 0.62808, 0.36309, 0.61178, 0.3346, + 0.5788, 0.32181, 0.55605, 0.31297, 0.52531, 0.31294, 0.51118, + 0.29203, 0.48267, 0.26945, 0.43076, 0.26954, 0.39469, 0.27908, + 0.37258, 0.29138, 0.36306, 0.3116, 0.35135, 0.33822, 0.34656, + 0.35204, 0.33782, 0.37392, 0.32905, 0.43311, 0.31661, 0.46607, + 0.3116, 0.52223, 0.31157, 0.56702, 0.32098, 0.58485, 0.32833, + 0.60582, 0.34035, 0.63214, 0.36046 + ], + "triangles": [ + 10, 5, 6, 6, 7, 9, 17, 19, 16, 7, 8, 9, 6, 9, 10, 19, 41, 42, 19, + 42, 43, 19, 43, 0, 19, 0, 1, 19, 1, 2, 4, 19, 2, 4, 2, 3, 19, 17, + 18, 19, 4, 16, 5, 10, 12, 16, 4, 5, 10, 11, 12, 15, 16, 5, 5, 12, + 14, 12, 13, 14, 14, 15, 5, 33, 29, 32, 30, 31, 32, 32, 29, 30, 29, + 34, 28, 33, 34, 29, 27, 28, 34, 25, 26, 27, 27, 24, 25, 27, 36, + 24, 35, 27, 34, 27, 35, 36, 37, 23, 24, 36, 37, 24, 22, 23, 37, + 38, 21, 22, 19, 38, 39, 19, 39, 40, 19, 40, 41, 20, 38, 19, 38, + 22, 37, 20, 21, 38 + ], + "vertices": [ + 2, 139, -50.16, 34.86, 0.06165, 137, -4.26, -2.94, 0.93835, 1, + 137, 12.07, 7.04, 1, 1, 137, 20.77, 10.84, 1, 1, 137, 31.49, + 14.48, 1, 1, 137, 39.85, 15.79, 1, 1, 137, 53.75, 16.98, 1, 1, + 137, 77.4, 14.42, 1, 1, 137, 87.29, 12.01, 1, 1, 137, 93.42, 9.42, + 1, 1, 137, 99.83, 5.4, 1, 1, 137, 104.98, 0.83, 1, 2, 139, -45.11, + 148.94, 0.00309, 137, 109.85, -7.1, 0.99691, 2, 139, -35.49, + 151.08, 0.01365, 137, 112.06, -16.7, 0.98635, 2, 139, -32.02, + 151.36, 0.01855, 137, 112.36, -20.17, 0.98145, 2, 139, -21.38, + 149.81, 0.04182, 137, 110.9, -30.83, 0.95818, 2, 139, 1.6, 144.1, + 0.1313, 137, 105.37, -53.85, 0.8687, 2, 139, 10.94, 140.46, + 0.17963, 137, 101.8, -63.22, 0.82037, 2, 139, 22.58, 134.26, + 0.25524, 137, 95.7, -74.9, 0.74476, 2, 139, 30.7, 128.48, 0.32131, + 137, 89.98, -83.07, 0.67869, 2, 139, 32.96, 124.98, 0.3582, 137, + 86.5, -85.36, 0.6418, 2, 139, 53.49, 119.89, 0.52598, 137, 81.56, + -105.93, 0.47402, 2, 139, 69.54, 112.63, 0.62342, 137, 74.43, + -122.03, 0.37658, 2, 139, 85.9, 98.65, 0.72717, 137, 60.58, + -138.5, 0.27283, 2, 139, 93.11, 90.51, 0.77195, 137, 52.49, + -145.78, 0.22805, 2, 139, 102.19, 75.41, 0.83683, 137, 37.47, + -154.97, 0.16317, 2, 139, 105.55, 65.72, 0.86769, 137, 27.8, + -158.4, 0.13231, 2, 139, 106.49, 53.51, 0.90374, 137, 15.6, + -159.44, 0.09626, 2, 139, 105.22, 48.33, 0.92311, 137, 10.4, + -158.21, 0.07689, 2, 139, 111.49, 35.67, 0.96495, 137, -2.21, + -164.58, 0.03505, 2, 139, 116.34, 14.24, 0.99386, 137, -23.59, + -169.59, 0.00614, 2, 139, 113.02, 1.02, 0.99926, 137, -36.84, + -166.38, 0.00074, 1, 139, 106.96, -6.09, 1, 1, 139, 100.88, -8.28, + 1, 1, 139, 91.23, -10.45, 1, 1, 139, 79.51, -9.41, 1, 1, 139, + 72.85, -11.16, 1, 1, 139, 62.77, -12.07, 1, 1, 139, 36.54, -10.4, + 1, 1, 139, 22.1, -8.77, 1, 2, 139, -1.72, -2.87, 0.9983, 137, + -41.62, -51.67, 0.0017, 2, 139, -19.86, 5.3, 0.7527, 137, -33.59, + -33.46, 0.2473, 2, 139, -26.76, 9.87, 0.62064, 137, -29.07, + -26.53, 0.37936, 2, 139, -34.56, 16.49, 0.4442, 137, -22.52, + -18.68, 0.5558, 2, 139, -43.89, 26.64, 0.20739, 137, -12.44, + -9.27, 0.79261 + ], + "hull": 44, + "edges": [ + 0, 86, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 86 + ], + "width": 437, + "height": 378 + } + }, + "R大臂": { + "R大臂": { + "type": "mesh", + "uvs": [ + 0.62627, 0.71215, 0.60786, 0.72163, 0.57653, 0.73091, 0.49536, + 0.73091, 0.47111, 0.72867, 0.44751, 0.721, 0.41963, 0.70192, + 0.39792, 0.67838, 0.3787, 0.64547, 0.36595, 0.61815, 0.33419, + 0.50002, 0.31052, 0.42125, 0.31054, 0.37882, 0.3132, 0.35545, + 0.32429, 0.3363, 0.34392, 0.31489, 0.36658, 0.29897, 0.3934, + 0.28504, 0.42337, 0.27479, 0.45237, 0.26899, 0.50309, 0.26903, + 0.52771, 0.27318, 0.56613, 0.31567, 0.57277, 0.32574, 0.58938, + 0.35496, 0.62756, 0.44869, 0.6577, 0.51487, 0.68183, 0.55956, + 0.68944, 0.58038, 0.68939, 0.62325, 0.67795, 0.65326, 0.667, + 0.67193, 0.65572, 0.68666 + ], + "triangles": [ + 14, 12, 13, 14, 15, 12, 12, 16, 11, 16, 10, 11, 12, 15, 16, 25, 9, + 10, 19, 23, 18, 20, 22, 19, 22, 20, 21, 23, 17, 18, 23, 16, 17, + 16, 23, 10, 22, 23, 19, 24, 10, 23, 29, 27, 28, 9, 26, 8, 24, 25, + 10, 26, 9, 25, 8, 26, 27, 8, 27, 7, 29, 30, 27, 30, 31, 27, 31, 7, + 27, 31, 0, 7, 5, 6, 4, 31, 32, 0, 3, 4, 6, 0, 1, 7, 3, 6, 7, 1, 3, + 7, 2, 3, 1 + ], + "vertices": [ + 1, 34, 302.69, 19.6, 1, 1, 34, 305.22, 11.95, 1, 1, 34, 306.61, + -0.42, 1, 1, 34, 300.04, -30.22, 1, 1, 34, 297.12, -38.92, 1, 1, + 34, 291.96, -46.86, 1, 1, 34, 281.62, -55.32, 1, 1, 34, 269.88, + -61.09, 1, 1, 34, 254.38, -65.07, 1, 1, 34, 241.77, -67.2, 1, 1, + 34, 189.13, -67.81, 1, 1, 34, 153.83, -69.14, 1, 1, 34, 135.85, + -65.17, 1, 1, 34, 126.16, -62.01, 1, 1, 34, 118.94, -56.14, 1, 1, + 34, 111.46, -46.93, 1, 1, 34, 106.55, -37.13, 1, 1, 34, 102.81, + -25.98, 1, 1, 34, 100.9, -14.01, 1, 1, 34, 100.79, -2.83, 1, 1, + 34, 104.92, 15.79, 1, 1, 34, 108.67, 24.45, 1, 1, 34, 129.78, + 34.58, 1, 1, 34, 134.59, 36.08, 1, 1, 34, 148.32, 39.44, 1, 1, 34, + 191.14, 44.7, 1, 1, 34, 221.63, 49.58, 1, 1, 34, 242.52, 54.26, 1, + 1, 34, 251.96, 55.11, 1, 1, 34, 270.13, 51.08, 1, 1, 34, 281.92, + 44.08, 1, 1, 34, 288.95, 38.31, 1, 1, 34, 294.27, 32.79, 1 + ], + "hull": 33, + "edges": [ + 0, 64, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64 + ], + "width": 376, + "height": 434 + } + }, + "R大臂衣袖": { + "R大臂衣袖": { + "type": "mesh", + "uvs": [ + 0.39508, 0.21343, 0.46232, 0.24471, 0.53192, 0.3783, 0.58854, + 0.40868, 0.5962, 0.42521, 0.57615, 0.51993, 0.62067, 0.57564, + 0.64603, 0.59708, 0.67611, 0.62612, 0.69617, 0.64846, 0.72212, + 0.68376, 0.7286, 0.71682, 0.72035, 0.77803, 0.66668, 0.83388, + 0.57172, 0.85935, 0.5033, 0.86247, 0.41955, 0.84996, 0.35644, + 0.82405, 0.31869, 0.79188, 0.29451, 0.7548, 0.28861, 0.71012, + 0.28802, 0.6708, 0.2833, 0.60557, 0.28389, 0.48006, 0.27563, + 0.35853, 0.28066, 0.26124, 0.29953, 0.21746, 0.33256, 0.20495, + 0.37826, 0.27141, 0.35408, 0.74266, 0.39006, 0.71049, 0.44255, + 0.67073, 0.48914, 0.63588, 0.51569, 0.60415, 0.55284, 0.62649, + 0.59826, 0.64347, 0.65193, 0.67385, 0.69381, 0.70423 + ], + "triangles": [ + 21, 22, 31, 30, 20, 21, 31, 30, 21, 29, 20, 30, 19, 20, 29, 12, + 37, 11, 18, 19, 29, 16, 17, 29, 18, 29, 17, 13, 36, 37, 13, 37, + 12, 30, 15, 16, 16, 29, 30, 14, 31, 36, 14, 36, 13, 31, 15, 30, + 31, 14, 15, 28, 27, 0, 28, 0, 1, 26, 27, 28, 25, 26, 28, 24, 25, + 28, 28, 1, 2, 24, 28, 2, 23, 24, 2, 4, 5, 2, 4, 2, 3, 23, 2, 5, + 33, 23, 5, 33, 5, 6, 22, 23, 33, 34, 33, 6, 35, 34, 6, 32, 22, 33, + 32, 33, 34, 7, 35, 6, 35, 7, 8, 31, 22, 32, 36, 35, 8, 36, 8, 9, + 36, 9, 10, 37, 36, 10, 37, 10, 11, 32, 34, 35, 31, 32, 35, 31, 35, + 36 + ], + "vertices": [ + 1, 34, -32.04, 13.17, 1, 1, 34, -8.58, 37.47, 1, 1, 34, 71.54, + 50.3, 1, 1, 34, 93.52, 70.26, 1, 1, 34, 103.35, 71.46, 1, 1, 34, + 153.76, 51.55, 1, 2, 34, 188.6, 63.37, 0.99075, 43, -33.85, 66.51, + 0.00925, 2, 34, 202.77, 71.36, 0.94901, 43, -19.45, 74.08, + 0.05099, 2, 34, 221.57, 80.4, 0.83662, 43, -0.39, 82.55, 0.16338, + 2, 34, 235.74, 86.06, 0.72794, 43, 13.95, 87.79, 0.27206, 2, 34, + 257.61, 92.62, 0.56548, 43, 36, 93.69, 0.43452, 2, 34, 276.45, + 91.3, 0.44363, 43, 54.79, 91.81, 0.55637, 2, 34, 309.46, 80.4, + 0.23678, 43, 87.46, 79.93, 0.76322, 2, 34, 335.32, 51.17, 0.0815, + 43, 112.44, 49.95, 0.9185, 2, 34, 340.62, 8.38, 0.00254, 43, + 116.46, 7.02, 0.99746, 1, 43, 111.02, -21.81, 1, 1, 43, 95.41, + -54.84, 1, 1, 43, 74.61, -77.45, 1, 1, 43, 53.04, -88.67, 1, 2, + 34, 257.38, -94.75, 0.00184, 43, 30.19, -93.59, 0.99816, 2, 34, + 232.19, -91.78, 0.03777, 43, 5.1, -89.87, 0.96223, 2, 34, 210.44, + -87.24, 0.14933, 43, -16.51, -84.68, 0.85067, 2, 34, 174.01, + -81.27, 0.50221, 43, -52.74, -77.64, 0.49779, 2, 34, 104.82, + -65.75, 0.95897, 43, -121.44, -60.06, 0.04103, 1, 34, 37.01, + -54.41, 1, 1, 34, -16.21, -40.47, 1, 1, 34, -38.63, -27.25, 1, 1, + 34, -42.48, -11.93, 1, 1, 34, -1.6, -0.91, 1, 2, 34, 256.17, + -68.38, 0.00129, 43, 29.77, -67.19, 0.99871, 2, 34, 241.74, + -49.42, 0.0067, 43, 15.91, -47.82, 0.9933, 2, 34, 224.64, -22.64, + 0.02734, 43, -0.39, -20.54, 0.97266, 1, 34, 209.71, 1.07, 1, 1, + 34, 194.66, 16.03, 1, 2, 34, 210.41, 28.84, 0.99293, 43, -13.08, + 31.34, 0.00707, 2, 34, 223.96, 45.75, 0.88723, 43, 0.97, 47.84, + 0.11277, 2, 34, 245.67, 64.49, 0.66889, 43, 23.23, 65.92, 0.33111, + 2, 34, 266.3, 78.29, 0.49837, 43, 44.25, 79.11, 0.50163 + ], + "hull": 28, + "edges": [ + 50, 52, 52, 54, 54, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, + 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, + 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, + 46, 46, 48, 48, 50, 36, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, + 68, 68, 70, 70, 72, 72, 74, 74, 22 + ], + "width": 428, + "height": 565 + } + }, + "R大臂衣袖后": { + "R大臂衣袖后": { + "type": "mesh", + "uvs": [ + 0.45706, 0.27072, 0.49696, 0.27275, 0.55832, 0.28448, 0.60421, + 0.31048, 0.6481, 0.36656, 0.68701, 0.4211, 0.71095, 0.4731, + 0.72143, 0.50878, 0.71394, 0.56078, 0.689, 0.60309, 0.65409, + 0.64489, 0.61817, 0.68007, 0.56729, 0.70352, 0.51841, 0.71269, + 0.46753, 0.71218, 0.41566, 0.69944, 0.37077, 0.68261, 0.32687, + 0.65203, 0.29994, 0.6143, 0.28447, 0.56588, 0.27998, 0.50674, + 0.28697, 0.43843, 0.30542, 0.38796, 0.33535, 0.34361, 0.39022, + 0.30283, 0.48499, 0.442 + ], + "triangles": [ + 25, 19, 20, 9, 6, 8, 20, 21, 25, 25, 21, 22, 18, 19, 25, 9, 10, + 25, 17, 18, 25, 17, 25, 16, 10, 11, 25, 25, 15, 16, 15, 25, 14, + 11, 12, 25, 25, 13, 14, 12, 13, 25, 25, 0, 1, 25, 1, 2, 25, 2, 3, + 25, 3, 4, 24, 0, 25, 23, 24, 25, 8, 6, 7, 22, 23, 25, 6, 25, 5, 5, + 25, 4, 6, 9, 25 + ], + "vertices": [ + 2, 34, 154.44, 3.74, 0.99999, 43, -69.77, 7.92, 0.00001, 2, 34, + 158.85, 19.85, 0.99999, 43, -64.89, 23.89, 0.00001, 1, 34, 169.06, + 43.86, 1, 2, 34, 183.57, 60.3, 0.99976, 43, -38.97, 63.59, + 0.00024, 2, 34, 209.92, 73.27, 0.95078, 43, -12.25, 75.77, + 0.04922, 2, 34, 235.21, 84.35, 0.7948, 43, 13.36, 86.09, 0.2052, + 2, 34, 258.13, 89.54, 0.62564, 43, 36.43, 90.6, 0.37436, 2, 34, + 273.33, 90.67, 0.53121, 43, 51.65, 91.28, 0.46879, 2, 34, 293.42, + 83.04, 0.40207, 43, 71.51, 83.05, 0.59793, 2, 34, 308.07, 69.13, + 0.27403, 43, 85.74, 68.71, 0.72597, 2, 34, 321.63, 51.19, 0.13445, + 43, 98.75, 50.38, 0.86555, 2, 34, 332.44, 33.44, 0.04812, 43, + 109.03, 32.3, 0.95188, 2, 34, 337.23, 10.6, 0.00452, 43, 113.14, + 9.34, 0.99548, 1, 43, 111.78, -11.39, 1, 1, 43, 106.38, -31.96, 1, + 1, 43, 96.03, -51.71, 1, 1, 43, 84.77, -68.23, 1, 1, 43, 68.16, + -82.96, 1, 1, 43, 50.44, -90.11, 1, 2, 34, 256.79, -92.71, + 0.00095, 43, 29.66, -91.54, 0.99905, 2, 34, 232.76, -89.34, + 0.02551, 43, 5.75, -87.45, 0.97449, 2, 34, 206.11, -80.47, + 0.13782, 43, -20.63, -77.79, 0.86218, 2, 34, 187.62, -68.49, + 0.3086, 43, -38.76, -65.26, 0.6914, 2, 34, 172.6, -52.37, 0.53884, + 43, -53.29, -48.7, 0.46116, 2, 34, 161.25, -26.38, 0.86117, 43, + -63.86, -22.38, 0.13883, 1, 34, 225.37, 0.05, 1 + ], + "hull": 25, + "edges": [ + 0, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 34, + 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 18, + 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0 + ], + "width": 418, + "height": 409 + } + }, + "R小臂": { + "R正常右小臂": { + "type": "mesh", + "uvs": [ + 0.43694, 0.30544, 0.50046, 0.30059, 0.53925, 0.29762, 0.6207, + 0.33814, 0.68667, 0.38862, 0.7183, 0.45331, 0.71561, 0.5308, + 0.70148, 0.58483, 0.69744, 0.62677, 0.65638, 0.65876, 0.61262, + 0.66018, 0.54868, 0.69146, 0.47867, 0.70142, 0.42078, 0.69146, + 0.39184, 0.67298, 0.34472, 0.66232, 0.30837, 0.61397, 0.31106, + 0.58411, 0.29491, 0.51871, 0.28885, 0.46824, 0.31174, 0.40994, + 0.38107, 0.33388, 0.32768, 0.43889, 0.3626, 0.39024, 0.40123, + 0.33806, 0.53125, 0.32394, 0.60072, 0.36082, 0.65719, 0.40908, + 0.68059, 0.44478, 0.68505, 0.46871, 0.66796, 0.45341, 0.63639, + 0.44713, 0.6089, 0.40751, 0.57435, 0.37887, 0.54166, 0.36906, + 0.49596, 0.37063, 0.45882, 0.40084, 0.43764, 0.39613, 0.40421, + 0.40005, 0.36817, 0.41339, 0.34105, 0.44007, 0.32731, 0.4644, + 0.32248, 0.51108, 0.31728, 0.46636 + ], + "triangles": [ + 36, 37, 35, 17, 18, 42, 7, 29, 6, 38, 37, 36, 40, 39, 38, 40, 42, + 41, 40, 38, 42, 29, 7, 31, 10, 31, 7, 29, 31, 30, 8, 9, 7, 32, 31, + 36, 9, 10, 7, 38, 36, 42, 42, 14, 17, 15, 17, 14, 16, 17, 15, 36, + 35, 34, 33, 36, 34, 36, 33, 32, 36, 14, 42, 31, 14, 36, 13, 14, + 12, 12, 14, 31, 10, 11, 31, 31, 11, 12, 33, 34, 25, 35, 25, 34, + 37, 0, 35, 37, 38, 24, 33, 26, 32, 39, 23, 38, 39, 40, 23, 31, 32, + 27, 30, 31, 27, 41, 22, 40, 30, 28, 29, 42, 43, 41, 42, 18, 19, 6, + 29, 5, 25, 1, 2, 24, 21, 0, 26, 25, 2, 3, 26, 2, 35, 0, 1, 35, 1, + 25, 26, 33, 25, 23, 21, 24, 24, 0, 37, 38, 23, 24, 27, 32, 26, 3, + 27, 26, 4, 27, 3, 23, 20, 21, 22, 20, 23, 23, 40, 22, 28, 27, 4, + 28, 4, 5, 28, 30, 27, 20, 22, 19, 41, 43, 22, 43, 19, 22, 29, 28, + 5, 42, 19, 43 + ], + "vertices": [ + 1, 35, -5.99, -11.4, 1, 1, 35, -5.96, 14.97, 1, 1, 35, -5.94, + 31.07, 1, 1, 35, 12.38, 63.53, 1, 1, 35, 34.12, 89.32, 1, 1, 35, + 60.37, 100.51, 1, 1, 140, -12.31, 97.08, 1, 1, 140, 8.39, 89.69, + 1, 1, 140, 24.66, 86.81, 1, 1, 140, 35.92, 68.94, 1, 1, 140, + 35.14, 50.83, 1, 1, 140, 45.42, 23.53, 1, 1, 140, 47.19, -5.66, 1, + 1, 140, 41.53, -29.27, 1, 1, 140, 33.43, -40.69, 1, 1, 140, 27.82, + -59.84, 1, 1, 140, 7.82, -73.45, 1, 1, 140, -3.77, -71.48, 1, 1, + 140, -29.83, -76.27, 1, 1, 35, 53.15, -77.23, 1, 1, 35, 31.05, + -66.1, 1, 1, 35, 3.42, -35.28, 1, 1, 35, 42.85, -60.35, 1, 1, 35, + 24.9, -44.53, 1, 1, 35, 5.67, -27.08, 1, 1, 35, 4.11, 27.01, 1, 1, + 35, 20.64, 54.63, 1, 1, 35, 41.22, 76.55, 1, 1, 35, 55.89, 85.19, + 1, 1, 140, -37.51, 86.25, 1, 1, 140, -44.01, 79.64, 1, 1, 140, + -47.43, 66.78, 1, 1, 140, -63.75, 56.57, 1, 1, 140, -76, 43.13, 1, + 1, 140, -80.83, 29.92, 1, 1, 140, -81.61, 11.01, 1, 1, 140, + -70.93, -5.2, 1, 1, 140, -73.41, -13.81, 1, 1, 140, -72.89, + -27.72, 1, 1, 140, -68.78, -42.99, 1, 1, 140, -59.17, -54.95, 1, + 1, 140, -50.08, -61.33, 1, 1, 140, -31.97, -64.67, 1, 1, 35, + 53.27, -65.44, 1 + ], + "hull": 22, + "edges": [ + 34, 36, 36, 38, 38, 40, 40, 42, 42, 0, 4, 6, 6, 8, 8, 10, 10, 12, + 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, + 28, 30, 30, 32, 32, 34, 44, 46, 46, 48, 48, 0, 0, 2, 2, 4, 2, 50, + 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, + 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, + 82, 84, 84, 86, 86, 44 + ], + "width": 414, + "height": 392 + } + }, + "R正常手": { + "R正常右手": { + "type": "mesh", + "uvs": [ + 0.32224, 0.5932, 0.31832, 0.58416, 0.31835, 0.56068, 0.33218, + 0.52917, 0.3349, 0.50898, 0.35416, 0.45044, 0.36513, 0.42617, + 0.37452, 0.40999, 0.39816, 0.39, 0.44061, 0.36581, 0.46979, + 0.35922, 0.50461, 0.35933, 0.55542, 0.36932, 0.59712, 0.3813, + 0.62501, 0.39187, 0.65113, 0.40727, 0.66607, 0.42409, 0.67834, + 0.45087, 0.68437, 0.48358, 0.68442, 0.52614, 0.67532, 0.55013, + 0.64851, 0.59451, 0.63075, 0.61977, 0.61688, 0.62772, 0.60381, + 0.63144, 0.57952, 0.63142, 0.57128, 0.62897, 0.5507, 0.64066, + 0.52299, 0.64067, 0.50372, 0.63518, 0.494, 0.64067, 0.46884, + 0.64065, 0.4451, 0.63165, 0.4315, 0.6345, 0.39868, 0.63455, + 0.36277, 0.62535, 0.33807, 0.61116, 0.3662, 0.51217, 0.43932, + 0.53067, 0.57861, 0.53331, 0.65638, 0.5267 + ], + "triangles": [ + 38, 37, 6, 5, 6, 37, 4, 5, 37, 16, 39, 15, 40, 16, 17, 40, 17, 18, + 40, 18, 19, 38, 8, 9, 7, 8, 38, 38, 6, 7, 39, 12, 13, 39, 13, 14, + 39, 14, 15, 40, 39, 16, 11, 12, 39, 38, 10, 11, 38, 9, 10, 11, 39, + 38, 20, 40, 19, 36, 0, 2, 1, 2, 0, 21, 39, 40, 21, 40, 20, 37, 3, + 4, 36, 3, 37, 36, 2, 3, 22, 39, 21, 35, 36, 37, 34, 35, 37, 23, + 39, 22, 39, 29, 38, 25, 26, 39, 39, 24, 25, 23, 24, 39, 38, 31, + 32, 37, 38, 34, 32, 33, 38, 33, 34, 38, 28, 29, 39, 29, 31, 38, + 39, 26, 28, 26, 27, 28, 30, 31, 29 + ], + "vertices": [ + 1, 36, 62.54, -67.26, 1, 1, 36, 59.62, -68.76, 1, 1, 36, 51.99, + -68.86, 1, 1, 36, 41.67, -63.91, 1, 1, 36, 35.1, -63, 1, 1, 36, + 15.96, -56.18, 1, 1, 36, 8.01, -52.24, 1, 1, 36, 2.7, -48.85, 1, + 1, 36, -3.93, -40.21, 1, 1, 36, -12.04, -24.62, 1, 1, 36, -14.34, + -13.86, 1, 1, 36, -14.51, -0.98, 1, 1, 36, -11.56, 17.87, 1, 1, + 36, -7.91, 33.36, 1, 1, 36, -4.63, 43.73, 1, 1, 36, 0.22, 53.47, + 1, 1, 36, 5.6, 59.08, 1, 1, 36, 14.23, 63.76, 1, 1, 36, 24.83, + 66.16, 1, 1, 36, 38.66, 66.39, 1, 1, 36, 46.51, 63.15, 1, 1, 36, + 61.08, 53.45, 1, 1, 36, 69.39, 47.01, 1, 1, 36, 72.06, 41.92, 1, + 1, 36, 73.34, 37.1, 1, 1, 36, 73.47, 28.12, 1, 1, 36, 72.73, + 25.06, 1, 1, 36, 76.64, 17.5, 1, 1, 36, 76.81, 7.25, 1, 1, 36, + 75.13, 0.09, 1, 1, 36, 76.97, -3.47, 1, 1, 36, 77.11, -12.78, 1, + 1, 36, 74.33, -21.61, 1, 1, 36, 75.33, -26.63, 1, 1, 36, 75.54, + -38.77, 1, 1, 36, 72.75, -52.1, 1, 1, 36, 68.28, -61.31, 1, 1, 36, + 35.96, -51.41, 1, 1, 36, 41.54, -24.26, 1, 1, 36, 41.6, 27.28, 1, + 1, 36, 39, 56.02, 1 + ], + "hull": 37, + "edges": [ + 0, 72, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 74, 76, 76, 78, 78, 80 + ], + "width": 370, + "height": 325 + } + }, + "环抱遮挡": { + "环抱遮挡": { + "type": "clipping", + "end": "L挡左边", + "vertexCount": 9, + "vertices": [ + 1, 36, 73.38, 40.6, 1, 1, 28, 675.66, -77.29, 1, 1, 28, 530.09, + -449.33, 1, 1, 36, 358.78, 64.08, 1, 1, 36, 206.24, 68.63, 1, 1, + 36, 175.1, 69.33, 1, 1, 36, 138.81, 55.73, 1, 1, 36, 106.63, + 50.78, 1, 1, 36, 83.87, 39.46, 1 + ], + "color": "ce3a3aff" + } + }, + "胸饰": { + "胸饰": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 37, -187.1, -174.09, 1, 1, 37, -187.1, 191.91, 1, 1, 37, 186.9, + 191.91, 1, 1, 37, 186.9, -174.09, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 366, + "height": 374 + } + }, + "身体": { + "身体": { + "type": "mesh", + "uvs": [ + 0.4766, 0.11789, 0.51769, 0.12731, 0.55286, 0.16472, 0.5565, + 0.20694, 0.57241, 0.20785, 0.57871, 0.21545, 0.57871, 0.22426, + 0.5966, 0.22639, 0.60887, 0.23003, 0.61317, 0.23945, 0.6145, + 0.26223, 0.61814, 0.28289, 0.62113, 0.30385, 0.62842, 0.34583, + 0.65162, 0.35008, 0.66819, 0.3595, 0.68012, 0.37742, 0.69039, + 0.40203, 0.69735, 0.4312, 0.69636, 0.4634, 0.69603, 0.49196, + 0.70232, 0.55027, 0.69702, 0.55908, 0.74143, 0.58976, 0.76894, + 0.61316, 0.81434, 0.64931, 0.84914, 0.69032, 0.86936, 0.71584, + 0.85511, 0.72769, 0.82992, 0.71614, 0.8107, 0.70976, 0.7865, + 0.71068, 0.7633, 0.71766, 0.73248, 0.72921, 0.69868, 0.72981, + 0.66653, 0.72647, 0.62355, 0.71612, 0.5808, 0.72038, 0.53672, + 0.73587, 0.50889, 0.75228, 0.47309, 0.78539, 0.49331, 0.79815, + 0.47641, 0.82458, 0.43564, 0.84949, 0.38461, 0.87288, 0.33953, + 0.87774, 0.28419, 0.87319, 0.21161, 0.86711, 0.14201, 0.84524, + 0.12577, 0.83552, 0.14168, 0.80909, 0.12975, 0.79107, 0.16488, + 0.73061, 0.21061, 0.68019, 0.25869, 0.63094, 0.29579, 0.59057, + 0.28949, 0.5857, 0.29612, 0.5292, 0.2769, 0.45507, 0.25837, + 0.38319, 0.25009, 0.34643, 0.266, 0.31666, 0.30046, 0.2878, + 0.34322, 0.28051, 0.32168, 0.25469, 0.31571, 0.23494, 0.32002, + 0.22066, 0.33924, 0.2161, 0.37072, 0.2237, 0.36675, 0.20972, + 0.37106, 0.20182, 0.38431, 0.1997, 0.37934, 0.16324, 0.39242, + 0.14402, 0.4302, 0.12731, 0.43815, 0.20296, 0.47262, 0.21602, + 0.51206, 0.24518, 0.52299, 0.22756, 0.5452, 0.21298, 0.41083, + 0.3248, 0.45631, 0.43008, 0.46769, 0.54265, 0.46882, 0.62396, + 0.40855, 0.68337, 0.35966, 0.76676, 0.33578, 0.83869, 0.63939, + 0.42903, 0.65986, 0.56559, 0.68715, 0.60624, 0.74628, 0.6521, + 0.79973, 0.68442 + ], + "triangles": [ + 83, 55, 56, 84, 55, 83, 54, 55, 84, 85, 54, 84, 40, 85, 84, 53, + 54, 85, 50, 51, 52, 85, 52, 53, 86, 52, 85, 47, 50, 52, 47, 48, + 50, 49, 50, 48, 86, 85, 43, 52, 86, 47, 44, 86, 43, 46, 47, 86, + 45, 86, 44, 46, 86, 45, 36, 37, 89, 83, 39, 84, 37, 38, 83, 38, + 39, 83, 39, 40, 84, 42, 40, 41, 43, 85, 40, 43, 40, 42, 83, 88, + 89, 89, 37, 83, 87, 14, 15, 87, 15, 16, 87, 16, 17, 81, 80, 77, + 87, 17, 18, 19, 87, 18, 20, 87, 19, 81, 57, 58, 81, 58, 80, 82, + 81, 87, 87, 81, 13, 57, 81, 82, 21, 88, 20, 88, 87, 20, 22, 88, + 21, 82, 87, 88, 56, 82, 83, 89, 88, 22, 83, 82, 88, 82, 56, 57, + 89, 22, 23, 90, 23, 24, 90, 24, 25, 89, 23, 90, 91, 90, 25, 91, + 25, 26, 30, 91, 26, 91, 32, 90, 31, 91, 30, 35, 36, 89, 29, 30, + 26, 28, 29, 26, 31, 32, 91, 90, 35, 89, 35, 90, 34, 27, 28, 26, + 32, 33, 90, 33, 34, 90, 6, 4, 5, 87, 13, 14, 7, 9, 6, 77, 6, 10, + 8, 9, 7, 10, 6, 9, 77, 12, 81, 11, 77, 10, 11, 12, 77, 13, 81, 12, + 75, 71, 72, 75, 74, 0, 73, 74, 75, 75, 72, 73, 2, 76, 1, 79, 2, 3, + 76, 75, 0, 76, 0, 1, 79, 76, 2, 78, 76, 79, 77, 76, 78, 80, 75, + 76, 80, 76, 77, 6, 79, 3, 6, 3, 4, 78, 79, 6, 6, 77, 78, 71, 68, + 69, 67, 65, 66, 64, 65, 67, 68, 64, 67, 63, 64, 68, 75, 68, 71, + 71, 69, 70, 75, 80, 68, 63, 68, 80, 59, 60, 61, 61, 80, 59, 80, + 58, 59, 62, 63, 80, 62, 80, 61 + ], + "vertices": [ + 2, 26, -17.62, -151.09, 0.021, 5, 143.38, 17.1, 0.979, 2, 5, + 134.45, -18.61, 0.99965, 32, -35.94, 139.48, 0.00035, 2, 5, 98.99, + -49.17, 0.94328, 32, 3.01, 113.51, 0.05672, 2, 5, 58.96, -52.34, + 0.65245, 32, 16.79, 75.8, 0.34755, 2, 5, 58.09, -66.16, 0.5126, + 32, 30.34, 78.67, 0.4874, 2, 5, 50.89, -71.63, 0.4689, 32, 37.54, + 73.2, 0.5311, 2, 5, 42.54, -71.63, 0.38622, 32, 39.78, 65.15, + 0.61378, 2, 5, 40.53, -87.18, 0.25409, 32, 55.31, 67.38, 0.74591, + 2, 5, 37.07, -97.84, 0.21531, 32, 66.5, 66.91, 0.78469, 2, 5, + 28.14, -101.58, 0.19256, 32, 72.5, 59.31, 0.80744, 2, 5, 6.54, + -102.74, 0.10813, 32, 79.4, 38.81, 0.89187, 2, 5, -13.04, -105.9, + 0.03244, 32, 87.7, 20.79, 0.96756, 4, 5, -32.91, -108.5, 0.0005, + 32, 95.53, 2.34, 0.99119, 14, -266.12, 328.28, 0.00011, 3, 242.63, + -108.5, 0.0082, 4, 32, 112.3, -34.3, 0.67238, 14, -251.62, 290.68, + 0.00566, 3, 202.84, -114.83, 0.32073, 1, 113.56, 230.91, 0.00123, + 4, 32, 132.8, -32.78, 0.56712, 14, -231.06, 290.95, 0.01058, 3, + 198.81, -134.99, 0.41857, 1, 133.72, 226.87, 0.00373, 4, 32, + 149.07, -37.52, 0.52349, 14, -215.11, 285.22, 0.01365, 3, 189.88, + -149.39, 0.45672, 1, 148.12, 217.95, 0.00613, 4, 32, 163.61, + -51.11, 0.47309, 14, -201.43, 270.77, 0.01805, 3, 172.89, -159.76, + 0.49836, 1, 158.48, 200.95, 0.0105, 5, 32, 178.47, -71.19, + 0.40195, 14, -187.83, 249.82, 0.02667, 3, 149.56, -168.69, + 0.55042, 1, 167.41, 177.63, 0.02067, 15, 79.06, 338.39, 0.0003, 5, + 32, 191.7, -96.2, 0.32399, 14, -176.14, 224.04, 0.0405, 3, 121.91, + -174.74, 0.59434, 1, 173.46, 149.98, 0.03895, 15, 92.16, 313.31, + 0.00222, 5, 32, 199.06, -125.84, 0.23983, 14, -170.62, 194, + 0.06511, 3, 91.39, -173.87, 0.61313, 1, 172.6, 119.45, 0.07305, + 15, 99.35, 283.63, 0.00887, 5, 32, 206.04, -152, 0.16858, 14, + -165.25, 167.47, 0.10106, 3, 64.31, -173.58, 0.588, 1, 172.31, + 92.38, 0.12017, 15, 106.19, 257.43, 0.02219, 5, 32, 226.13, + -203.8, 0.06859, 14, -148.36, 114.54, 0.22365, 3, 9.03, -179.06, + 0.40836, 1, 177.78, 37.1, 0.22575, 15, 125.99, 205.53, 0.07364, 5, + 32, 223.93, -213.08, 0.05375, 14, -151.12, 105.41, 0.26334, 3, + 0.68, -174.45, 0.35309, 1, 173.17, 28.74, 0.24177, 15, 123.74, + 196.26, 0.08805, 5, 32, 268.9, -230.75, 0.01681, 14, -107.31, + 85.02, 0.48746, 3, -28.41, -213.04, 0.15355, 1, 211.76, -0.34, + 0.22563, 15, 168.62, 178.33, 0.11655, 5, 32, 297.88, -245.71, + 0.00759, 14, -79.31, 68.32, 0.62904, 3, -50.58, -236.94, 0.08446, + 1, 235.67, -22.52, 0.17586, 15, 197.51, 163.22, 0.10304, 5, 32, + 345.08, -268.15, 0.00121, 14, -33.57, 43.04, 0.85197, 3, -84.86, + -276.4, 0.02215, 1, 275.12, -56.79, 0.07505, 15, 244.59, 140.52, + 0.04961, 5, 32, 384.63, -297.5, 0.00001, 14, 4.12, 11.33, 0.99661, + 3, -123.74, -306.64, 0.00043, 1, 305.36, -95.67, 0.0018, 15, + 283.98, 110.95, 0.00115, 1, 14, 26.35, -8.66, 1, 1, 14, 16.58, + -22.24, 1, 4, 14, -7.11, -16.1, 0.99176, 3, -148.22, -289.94, + 0.00053, 1, 288.66, -120.15, 0.00433, 15, 274.3, 82.95, 0.00338, + 5, 32, 357.39, -324.21, 0.00002, 14, -24.71, -13.67, 0.93656, 3, + -142.17, -273.23, 0.00521, 1, 271.96, -114.1, 0.0329, 15, 256.59, + 84.39, 0.02531, 5, 32, 337.37, -330.68, 0.0001, 14, -45.09, -18.9, + 0.83357, 3, -143.03, -252.21, 0.01326, 1, 250.93, -114.97, + 0.08523, 15, 236.54, 78.03, 0.06783, 5, 32, 319.72, -342.47, + 0.00008, 14, -63.42, -29.59, 0.73332, 3, -149.66, -232.05, + 0.01885, 1, 230.77, -121.59, 0.135, 15, 218.83, 66.34, 0.11275, 4, + 14, -87.33, -45.88, 0.62646, 3, -160.6, -205.26, 0.02245, 1, + 203.99, -132.54, 0.18602, 15, 195.86, 48.75, 0.16507, 5, 32, + 268.7, -368.62, 0.00009, 14, -115.94, -52.58, 0.52809, 3, -161.18, + -175.89, 0.02525, 1, 174.61, -133.11, 0.22953, 15, 167.67, 40.47, + 0.21704, 5, 32, 240.94, -373.06, 0.00027, 14, -143.92, -55.31, + 0.42607, 3, -158.01, -147.95, 0.02658, 1, 146.68, -129.94, + 0.26956, 15, 139.88, 36.19, 0.27753, 5, 32, 202.33, -373.62, + 0.00045, 14, -182.49, -53.51, 0.26664, 3, -148.2, -110.61, + 0.02253, 1, 109.33, -120.13, 0.3107, 15, 101.27, 35.84, 0.39967, + 5, 32, 167.62, -387.46, 0.00005, 14, -217.99, -65.2, 0.124, 3, + -152.23, -73.45, 0.00639, 1, 72.18, -124.16, 0.26879, 15, 66.48, + 22.18, 0.60077, 3, 14, -252.38, -87.56, 0.02664, 1, 33.87, + -138.85, 0.0807, 15, 33.38, -2.06, 0.89266, 3, 14, -272.79, + -107.82, 0.00065, 15, 14.13, -23.42, 0.9671, 16, 157.88, -56.59, + 0.03225, 2, 15, -7.63, -61.88, 0.73249, 16, 126.78, -87.98, + 0.26751, 2, 15, 12.5, -68.93, 0.69866, 16, 144.35, -100.08, + 0.30134, 2, 15, 4.91, -96.97, 0.66032, 16, 129.66, -125.13, + 0.33968, 2, 15, -23.06, -129.06, 0.5472, 16, 94.23, -148.75, + 0.4528, 2, 15, -60.03, -162.12, 0.40602, 16, 49.88, -170.93, + 0.59398, 2, 15, -96.61, -176.86, 0.30544, 16, 10.71, -175.53, + 0.69456, 2, 15, -144.15, -185.33, 0.18123, 16, -37.38, -171.21, + 0.81877, 2, 15, -206.51, -196.34, 0.06475, 16, -100.45, -165.45, + 0.93525, 2, 15, -270.32, -192.23, 0.01426, 16, -160.93, -144.72, + 0.98574, 2, 15, -286.36, -187.05, 0.01194, 16, -175.04, -135.5, + 0.98806, 2, 15, -279.6, -159.24, 0.00908, 16, -161.22, -110.45, + 0.99092, 2, 15, -294.09, -145.49, 0.00475, 16, -171.59, -93.37, + 0.99525, 2, 15, -279.7, -82.17, 0.00008, 16, -141.06, -36.06, + 0.99992, 3, 26, 284.07, 345.45, 0.00033, 3, -114.13, 248.24, + 0.00293, 16, -101.32, 11.75, 0.99675, 4, 26, 236.31, 304.9, + 0.01018, 3, -67.44, 206.46, 0.06165, 1, -207.73, -39.37, 0.02861, + 16, -59.53, 58.44, 0.89956, 4, 26, 199.15, 271.38, 0.05131, 3, + -29.17, 174.22, 0.24585, 1, -175.5, -1.1, 0.09901, 16, -27.3, + 96.71, 0.60383, 4, 26, 203.95, 266.07, 0.05982, 3, -24.56, 179.7, + 0.27456, 1, -180.97, 3.51, 0.10169, 16, -32.77, 101.32, 0.56393, + 4, 26, 190.93, 213.79, 0.16517, 3, 29.01, 173.94, 0.46551, 1, + -175.21, 57.07, 0.07293, 16, -27.01, 154.89, 0.29639, 4, 26, + 197.9, 141.9, 0.44367, 3, 99.28, 190.64, 0.44001, 1, -191.92, + 127.34, 0.013, 16, -43.72, 225.16, 0.10332, 4, 26, 204.55, 72.19, + 0.78115, 3, 167.42, 206.74, 0.19071, 1, -208.01, 195.49, 0.00027, + 16, -59.81, 293.3, 0.02787, 3, 26, 206.93, 36.69, 0.89698, 3, + 202.27, 213.94, 0.09071, 16, -67.01, 328.15, 0.01231, 3, 26, + 189.38, 10.62, 0.95662, 3, 230.5, 200.11, 0.03825, 16, -53.19, + 356.37, 0.00513, 1, 26, 155.98, -12.4, 1, 2, 26, 118.23, -14.18, + 0.98963, 5, -10.78, 133.01, 0.01037, 2, 26, 133.44, -40.99, + 0.95618, 5, 13.7, 151.73, 0.04382, 2, 26, 136.02, -60.24, 0.94493, + 5, 32.42, 156.91, 0.05507, 2, 26, 130.47, -73.14, 0.93866, 5, + 45.95, 153.17, 0.06134, 2, 26, 113.33, -75.14, 0.91895, 5, 50.28, + 136.46, 0.08105, 2, 26, 87.21, -64.28, 0.76831, 5, 43.08, 109.1, + 0.23169, 2, 26, 88.82, -77.87, 0.64681, 5, 56.32, 112.56, 0.35319, + 2, 26, 84.09, -84.78, 0.62429, 5, 63.81, 108.82, 0.37571, 2, 26, + 72.41, -85.2, 0.53106, 5, 65.83, 97.3, 0.46894, 2, 26, 71.97, + -120.03, 0.30043, 5, 100.39, 101.62, 0.69957, 2, 26, 58.23, + -136.53, 0.2382, 5, 118.61, 90.25, 0.7618, 2, 26, 23.54, -147.75, + 0.12264, 5, 134.45, 57.42, 0.87736, 2, 26, 26.48, -75.76, 0.32911, + 5, 62.74, 50.51, 0.67089, 2, 26, -1.51, -59.41, 0.15945, 5, 50.35, + 20.56, 0.84055, 2, 5, 22.71, -13.71, 0.77318, 32, -10.7, 30.52, + 0.22682, 2, 5, 39.41, -23.22, 0.76467, 32, -6.02, 49.16, 0.23533, + 2, 5, 53.23, -42.51, 0.68649, 32, 8.87, 67.65, 0.31351, 3, 26, + 65.75, 35.42, 0.75519, 3, 222.78, 74.25, 0.24349, 16, 72.67, + 348.66, 0.00132, 3, 26, 40.21, 139.69, 0.0757, 3, 122.98, 34.73, + 0.91538, 16, 112.2, 248.85, 0.00892, 4, 26, 44.98, 246.76, + 0.00848, 3, 16.25, 24.85, 0.90298, 1, -26.12, 44.32, 0.05752, 16, + 122.08, 142.13, 0.03102, 6, 26, 54.51, 323.25, 0.00116, 14, + -332.23, 3.88, 0.00085, 3, -60.82, 23.86, 0.01562, 1, -25.13, + -32.76, 0.72874, 15, -51.43, 84.8, 0.16164, 16, 123.07, 65.05, + 0.09199, 5, 26, 114.08, 371.91, 0.00081, 3, -117.15, 76.23, + 0.01012, 1, -77.51, -89.08, 0.2104, 15, -87.16, 16.69, 0.31622, + 16, 70.69, 8.73, 0.46245, 3, 1, -120, -168.14, 0.00192, 15, + -107.38, -70.75, 0.29887, 16, 28.2, -70.32, 0.69921, 2, 15, + -109.49, -141.99, 0.28992, 16, 7.45, -138.51, 0.71008, 5, 32, + 142.63, -107.73, 0.31337, 14, -225.83, 215.53, 0.03027, 3, 123.96, + -124.37, 0.62784, 1, 123.09, 152.03, 0.02749, 15, 43.02, 302.05, + 0.00103, 5, 32, 194.47, -227.67, 0.04967, 14, -181.42, 92.65, + 0.21555, 3, -5.49, -142.16, 0.37777, 1, 140.88, 22.58, 0.26662, + 15, 94.2, 181.82, 0.09038, 5, 32, 227.65, -258.44, 0.02117, 14, + -150.18, 59.91, 0.36451, 3, -44.03, -165.87, 0.19557, 1, 164.6, + -15.96, 0.27796, 15, 127.22, 150.87, 0.14078, 5, 32, 288.81, + -286.56, 0.0044, 14, -90.86, 28.11, 0.64293, 3, -87.5, -217.26, + 0.05973, 1, 215.98, -59.44, 0.17467, 15, 188.22, 122.42, 0.11827, + 5, 32, 341.76, -303.62, 0.0004, 14, -39.04, 7.84, 0.87876, 3, + -118.14, -263.7, 0.01303, 1, 262.42, -90.07, 0.06222, 15, 241.08, + 105.07, 0.04559 + ], + "hull": 75, + "edges": [ + 144, 142, 142, 140, 140, 138, 138, 136, 136, 134, 134, 132, 132, + 130, 130, 128, 128, 126, 126, 124, 124, 122, 122, 120, 120, 118, + 118, 116, 116, 114, 114, 112, 112, 110, 110, 108, 108, 106, 106, + 104, 104, 102, 102, 100, 100, 98, 98, 96, 96, 94, 94, 92, 92, 90, + 90, 88, 88, 86, 86, 84, 84, 82, 82, 80, 80, 78, 78, 76, 76, 74, + 74, 72, 72, 70, 70, 68, 68, 66, 66, 64, 64, 62, 62, 60, 60, 58, + 58, 56, 56, 54, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, + 42, 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, + 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, + 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 148, 148, 146, 146, 144, 142, + 150, 150, 152, 152, 154, 154, 156, 156, 158, 158, 6, 126, 160, + 160, 162, 162, 164, 164, 166, 166, 168, 168, 170, 170, 172, 172, + 90, 26, 174, 174, 176, 176, 178, 178, 180, 180, 182, 182, 60, 112, + 166, 166, 178, 178, 44 + ], + "width": 869, + "height": 948 + } + }, + "身体遮挡": { + "身体遮挡": { + "type": "clipping", + "end": "L挡左边", + "vertexCount": 21, + "vertices": [ + -497.4, 74.85, -491.07, 60.19, -489.43, 28.53, -488.32, 8.29, + -479.44, 5.89, -485.47, -8.25, -518.21, -69.04, -546.42, -119.82, + -566.88, -162.28, -580.03, -212.23, -561.73, -222.13, -572.12, + -244.82, -559.41, -253.06, -562.28, -268.93, -557.42, -285.03, + -534.94, -314.52, -479.7, -377.01, -452.44, -408.81, -1471.69, + -591.38, -1765.64, 813.79, 190.06, 1006.9 + ], + "color": "ce3a3aff" + } + }, + "领子": { + "领子": { + "type": "mesh", + "uvs": [ + 0.44175, 0.24506, 0.50217, 0.25419, 0.62302, 0.26104, 0.68269, + 0.26675, 0.72045, 0.30899, 0.76048, 0.36264, 0.81487, 0.40603, + 0.82846, 0.44142, 0.81638, 0.52019, 0.82922, 0.60238, 0.80882, + 0.63207, 0.76879, 0.62636, 0.7416, 0.65147, 0.68193, 0.68915, + 0.65927, 0.69942, 0.63661, 0.7097, 0.56486, 0.71769, 0.47196, + 0.70856, 0.41455, 0.69371, 0.37528, 0.72796, 0.34733, 0.73139, + 0.33147, 0.71426, 0.31259, 0.63549, 0.27105, 0.61038, 0.22875, + 0.57498, 0.19476, 0.51448, 0.17588, 0.44484, 0.17361, 0.39347, + 0.21591, 0.36264, 0.27558, 0.34095, 0.31712, 0.27588, 0.36017, + 0.25076, 0.36546, 0.29985, 0.41229, 0.39347, 0.47649, 0.48708, + 0.53691, 0.55672, 0.60187, 0.62408, 0.63737, 0.66632, 0.6555, + 0.59325, 0.67589, 0.49736, 0.68118, 0.42772, 0.67816, 0.37749, + 0.6623, 0.32725, 0.33956, 0.30043, 0.29583, 0.36854, 0.2264, + 0.40234, 0.66851, 0.30882, 0.70215, 0.33878, 0.73052, 0.38721, + 0.77458, 0.42455, 0.80195, 0.45028, 0.6654, 0.31804, 0.67858, + 0.32486, 0.69332, 0.35598, 0.70119, 0.40542, 0.7018, 0.47194 + ], + "triangles": [ + 24, 45, 44, 26, 27, 45, 45, 29, 44, 27, 28, 45, 45, 28, 29, 44, + 30, 43, 44, 29, 30, 40, 42, 41, 40, 54, 55, 55, 48, 49, 55, 54, + 48, 50, 6, 7, 50, 49, 6, 40, 41, 54, 48, 5, 49, 49, 5, 6, 41, 53, + 54, 54, 53, 48, 53, 47, 48, 47, 4, 48, 48, 4, 5, 41, 42, 52, 41, + 52, 53, 53, 52, 47, 4, 47, 3, 47, 52, 46, 15, 37, 14, 14, 37, 13, + 12, 13, 38, 13, 37, 38, 37, 36, 38, 38, 39, 12, 39, 55, 12, 12, + 55, 11, 10, 11, 9, 11, 8, 9, 50, 8, 49, 49, 8, 55, 55, 8, 11, 38, + 36, 39, 39, 35, 40, 8, 50, 7, 39, 40, 55, 20, 21, 19, 18, 19, 22, + 15, 16, 37, 36, 16, 35, 34, 18, 22, 21, 22, 19, 37, 16, 36, 16, + 17, 35, 35, 17, 34, 17, 18, 34, 34, 22, 33, 23, 44, 22, 33, 22, + 44, 23, 24, 44, 39, 36, 35, 25, 45, 24, 42, 35, 34, 25, 26, 45, + 42, 40, 35, 34, 33, 1, 42, 34, 2, 2, 34, 1, 52, 42, 51, 42, 2, 51, + 51, 46, 52, 46, 3, 47, 51, 2, 46, 46, 2, 3, 44, 32, 33, 44, 43, + 32, 1, 33, 0, 33, 32, 0, 32, 43, 31, 43, 30, 31, 32, 31, 0 + ], + "vertices": [ + 3, 144, 26.88, -65.2, 0.66435, 146, 28.37, 156.29, 0.17992, 148, + 132.15, 131.52, 0.15573, 3, 144, 22.9, -105.02, 0.43696, 146, + 24.39, 116.47, 0.35366, 148, 170.86, 141.68, 0.20938, 4, 144, + 19.91, -184.66, 0.08967, 146, 21.4, 36.83, 0.82911, 148, 246.54, + 166.66, 0.07863, 149, 32.05, -135.37, 0.00259, 4, 144, 17.42, + -223.99, 0.00328, 146, 18.91, -2.49, 0.92464, 148, 284.26, 178.05, + 0.00159, 147, -13.76, 17.79, 0.07048, 2, 146, 0.5, -27.38, + 0.01072, 147, 17.13, 15.71, 0.98928, 1, 147, 51.96, 10.24, 1, 1, + 147, 92.34, 13.65, 1, 2, 149, -12.93, 14.27, 0.00427, 147, 108.21, + 5.49, 0.99573, 2, 149, 15.53, 34.09, 0.95264, 147, 120.03, -27.73, + 0.04736, 1, 149, 33.19, 66.16, 1, 1, 149, 51.4, 66.55, 1, 1, 149, + 68.66, 46.82, 1, 1, 149, 88.76, 42.7, 1, 1, 149, 127.83, 28.09, 1, + 2, 148, 335.61, -4.13, 0.07294, 149, 141.5, 21.24, 0.92706, 2, + 148, 323.18, -13.54, 0.55416, 149, 155.18, 14.4, 0.44584, 1, 148, + 280.08, -33.3, 1, 1, 148, 221.31, -50.93, 1, 1, 148, 183.6, + -58.06, 1, 1, 148, 164.56, -81.08, 1, 1, 148, 147.82, -88.91, 1, + 1, 148, 135.42, -85.56, 1, 1, 148, 111.77, -57.71, 1, 1, 148, + 82.3, -57, 1, 1, 148, 50.79, -52.26, 1, 1, 148, 20.6, -35.35, 1, + 2, 148, -1.66, -11.24, 0.86831, 145, 117.34, 7.64, 0.13169, 1, + 145, 109.38, -13.35, 1, 1, 145, 78.44, -13.98, 1, 1, 145, 38.75, + -6.23, 1, 2, 144, 13.44, 16.92, 0.40604, 145, 2.05, -20.64, + 0.59396, 3, 144, 24.39, -11.45, 0.95896, 146, 25.88, 210.05, + 0.02577, 148, 82.64, 110.43, 0.01528, 3, 144, 2.99, -14.93, + 0.93375, 146, 4.48, 206.57, 0.02456, 148, 93.37, 91.59, 0.04169, + 4, 144, -37.83, -45.79, 0.42947, 146, -36.34, 175.7, 0.07929, 148, + 136.53, 64.1, 0.43209, 145, -33.66, 52.06, 0.05915, 6, 144, + -78.64, -88.1, 0.12968, 146, -77.15, 133.4, 0.09102, 148, 190.42, + 40.61, 0.76982, 149, 166.55, -128.5, 0.00604, 147, -76.35, + -136.41, 0.00284, 145, -55.16, 106.78, 0.0006, 5, 144, -109.01, + -127.92, 0.02629, 146, -107.51, 93.58, 0.04907, 148, 238.33, + 26.05, 0.87726, 149, 158.11, -79.17, 0.03732, 147, -26.44, + -140.49, 0.01006, 5, 144, -138.37, -170.73, 0.00139, 146, -136.88, + 50.77, 0.00619, 148, 288.7, 13.46, 0.8212, 149, 146.87, -28.56, + 0.16711, 147, 25.44, -142.13, 0.00411, 1, 149, 142.29, 0.85, 1, 5, + 144, -124.93, -206.07, 0.00148, 146, -123.44, 15.43, 0.00831, 148, + 317.13, 38.38, 0.08352, 149, 112.63, -14.45, 0.89509, 147, 47.95, + -111.74, 0.01159, 5, 144, -83.12, -219.51, 0.00728, 146, -81.63, + 1.99, 0.04609, 148, 315.14, 82.26, 0.0713, 149, 75.31, -36.04, + 0.69125, 147, 36.71, -69.29, 0.18408, 5, 144, -52.76, -222.99, + 0.00972, 146, -51.27, -1.49, 0.08055, 148, 307.81, 111.93, + 0.05017, 149, 52.7, -55.98, 0.34122, 147, 23.26, -41.84, 0.51833, + 5, 144, -30.86, -221, 0.01005, 146, -29.37, 0.5, 0.14333, 148, + 298.3, 131.76, 0.032, 149, 39.62, -73.42, 0.1162, 147, 9.77, + -24.48, 0.69841, 5, 144, -8.96, -210.55, 0.01785, 146, -7.47, + 10.95, 0.72484, 148, 280.87, 148.64, 0.02609, 149, 32.61, -96.6, + 0.02178, 147, -10.84, -11.68, 0.20943, 2, 144, 2.73, 2.14, + 0.86538, 145, -6.94, -4.76, 0.13462, 2, 148, 60.82, 47.51, + 0.09534, 145, 31.61, 10.26, 0.90466, 2, 148, 23.08, 17.74, + 0.13196, 145, 79.35, 4.64, 0.86804, 4, 144, -0.92, -214.64, + 0.00914, 146, 0.57, 6.86, 0.97638, 148, 281.9, 157.6, 0.01018, + 149, 24.36, -99.72, 0.00431, 4, 144, -13.98, -236.81, 0.00015, + 148, 307.23, 153.09, 0.0006, 149, 17.11, -75.09, 0.00336, 147, + 13.98, -1.74, 0.99589, 4, 144, -35.1, -255.51, 0.00004, 148, + 332.12, 139.82, 0.00132, 149, 17.69, -46.89, 0.07419, 147, 41.11, + -9.43, 0.92446, 2, 149, 7.66, -15.23, 0.2983, 147, 74.34, -7.47, + 0.7017, 2, 149, 2.16, 5.25, 0.88847, 147, 95.58, -7.19, 0.11153, + 5, 144, -4.94, -212.59, 0.01316, 146, -3.45, 8.9, 0.84487, 148, + 281.38, 153.12, 0.01722, 149, 28.48, -98.16, 0.01156, 147, -11.29, + -7.19, 0.11319, 5, 144, -7.91, -221.28, 0.00311, 146, -6.42, 0.22, + 0.32951, 148, 290.56, 153.36, 0.00566, 149, 24.23, -90.08, + 0.00839, 147, -2.37, -5.01, 0.65333, 5, 144, -21.48, -230.99, + 0.00218, 146, -19.99, -9.49, 0.02487, 148, 304.4, 144.03, 0.00797, + 149, 26.25, -73.53, 0.04029, 147, 13.13, -11.19, 0.92468, 5, 144, + -43.04, -236.18, 0.00299, 146, -41.54, -14.68, 0.02178, 148, + 316.78, 125.64, 0.0174, 149, 36.81, -54.17, 0.22218, 147, 29.12, + -26.54, 0.73565, 5, 144, -72.04, -236.58, 0.00279, 146, -70.55, + -15.08, 0.01919, 148, 327.27, 98.6, 0.02435, 149, 55.73, -32.59, + 0.65821, 147, 45.11, -50.75, 0.29547 + ], + "hull": 32, + "edges": [ + 2, 0, 0, 62, 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, 52, 50, 50, + 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 34, + 32, 32, 30, 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, 14, + 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 62, 64, 64, 66, 66, 68, 68, + 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 74, + 30, 30, 28, 28, 26, 74, 28, 64, 86, 86, 88, 88, 90, 90, 52, 6, 92, + 92, 94, 94, 96, 96, 98, 98, 100, 100, 14, 84, 102, 102, 92, 102, + 104, 104, 106, 106, 108, 108, 110 + ], + "width": 659, + "height": 436 + } + }, + "领结": { + "领结": { + "type": "mesh", + "uvs": [ + 0.40395, 0.15537, 0.50291, 0.15128, 0.60425, 0.16508, 0.66134, + 0.20237, 0.68371, 0.25729, 0.67371, 0.32626, 0.64897, 0.37122, + 0.62471, 0.40085, 0.65659, 0.41106, 0.68323, 0.43099, 0.71083, + 0.46164, 0.73462, 0.51017, 0.74746, 0.56637, 0.75222, 0.64147, + 0.75603, 0.68847, 0.74508, 0.69306, 0.70987, 0.67774, 0.65659, + 0.64862, 0.61186, 0.62665, 0.57713, 0.59447, 0.55144, 0.55769, + 0.53288, 0.50915, 0.53003, 0.46828, 0.52813, 0.42639, 0.53288, + 0.39165, 0.51528, 0.39114, 0.51814, 0.4126, 0.52147, 0.45091, + 0.52384, 0.49229, 0.52194, 0.54083, 0.511, 0.5914, 0.49006, + 0.63738, 0.45771, 0.67467, 0.41441, 0.6992, 0.33686, 0.72729, + 0.26407, 0.74568, 0.2536, 0.72525, 0.27073, 0.66957, 0.28691, + 0.60009, 0.30499, 0.54593, 0.33306, 0.48565, 0.35971, 0.45857, + 0.39777, 0.43474, 0.35923, 0.43627, 0.33402, 0.42248, 0.29072, + 0.39438, 0.24124, 0.34891, 0.22649, 0.31213, 0.22221, 0.25287, + 0.24171, 0.20842, 0.32021, 0.16456, 0.27739, 0.30505, 0.36398, + 0.31936, 0.4796, 0.3214, 0.56191, 0.29586, 0.64089, 0.25601, + 0.44389, 0.41083, 0.58791, 0.39707 + ], + "triangles": [ + 35, 36, 34, 36, 37, 34, 33, 34, 38, 39, 32, 33, 38, 34, 37, 39, + 33, 38, 14, 15, 13, 15, 16, 13, 16, 17, 13, 13, 17, 12, 17, 18, + 12, 12, 18, 11, 18, 19, 11, 19, 10, 11, 10, 20, 9, 9, 20, 8, 8, + 20, 7, 22, 57, 7, 10, 19, 20, 7, 20, 21, 7, 21, 22, 57, 23, 24, + 57, 22, 23, 7, 57, 6, 31, 32, 39, 31, 39, 30, 30, 39, 40, 30, 40, + 41, 30, 41, 42, 30, 42, 28, 29, 30, 28, 27, 56, 26, 42, 56, 28, + 27, 28, 56, 56, 25, 26, 54, 57, 24, 24, 25, 53, 6, 57, 54, 54, 24, + 53, 6, 54, 5, 5, 54, 55, 5, 55, 4, 53, 1, 54, 54, 2, 55, 54, 1, 2, + 55, 3, 4, 55, 2, 3, 42, 43, 52, 56, 42, 52, 44, 52, 43, 44, 45, + 52, 56, 53, 25, 56, 52, 53, 46, 51, 45, 45, 51, 52, 46, 47, 51, + 52, 0, 53, 53, 0, 1, 51, 50, 52, 52, 50, 0, 47, 48, 51, 48, 49, + 51, 51, 49, 50 + ], + "vertices": [ + 2, 148, 247.39, 59.41, 0.80077, 149, 125.06, -86.16, 0.19923, 2, + 148, 292.64, 78.26, 0.28083, 149, 88.7, -54.31, 0.71917, 2, 148, + 341.87, 89.81, 0.00518, 149, 56.95, -15.59, 0.99482, 3, 149, + 48.07, 16.21, 0.97704, 37, 78.61, -69.46, 0.01585, 40, -53.32, + 105.97, 0.00711, 3, 149, 56.9, 42.32, 0.87781, 37, 53.29, -80.53, + 0.07783, 40, -26.97, 97.62, 0.04436, 3, 149, 81.5, 62.32, 0.65925, + 37, 21.49, -75.58, 0.18937, 40, -6.3, 72.96, 0.15138, 3, 149, + 104.01, 69.23, 0.42279, 37, 0.77, -63.34, 0.25268, 40, 1.23, 50.1, + 0.32453, 3, 149, 121.67, 71.12, 0.15158, 37, -12.89, -51.33, + 0.1741, 40, 3.6, 32.07, 0.67432, 4, 149, 113.47, 85.28, 0.03082, + 37, -17.6, -67.11, 0.03938, 40, 17.54, 40.84, 0.92863, 41, -53.77, + 37.52, 0.00116, 4, 149, 110.1, 100.98, 0.0056, 37, -26.79, -80.29, + 0.00709, 40, 33.13, 44.72, 0.95983, 41, -38.45, 42.38, 0.02749, 3, + 149, 109.67, 120.63, 0.00001, 40, 52.76, 45.69, 0.83957, 41, + -18.92, 44.59, 0.16042, 2, 40, 77.36, 39.82, 0.4284, 41, 5.99, + 40.28, 0.5716, 2, 40, 101.04, 27.55, 0.03739, 41, 30.4, 29.52, + 0.96261, 1, 41, 59.28, 10.28, 1, 1, 41, 77.6, -1.44, 1, 1, 41, + 75.98, -7.02, 1, 1, 41, 59.75, -16.53, 1, 2, 40, 99.95, -31.28, + 0.0625, 41, 33.03, -29.25, 0.9375, 2, 40, 77.75, -41.27, 0.39659, + 41, 11.51, -40.62, 0.60341, 2, 40, 55.27, -44.43, 0.77154, 41, + -10.74, -45.2, 0.22846, 2, 40, 34.13, -42.84, 0.9554, 41, -31.93, + -44.94, 0.0446, 2, 40, 11.24, -35.02, 0.99983, 41, -55.27, -38.58, + 0.00017, 2, 37, -43.98, -4.46, 0.01392, 40, -3.86, -23.67, + 0.98608, 2, 37, -24.67, -3.52, 0.25169, 40, -19.02, -11.67, + 0.74831, 4, 149, 151.45, 37.16, 0.00449, 37, -8.65, -5.87, + 0.74306, 38, -42.43, -0.59, 0.01031, 40, -29.52, 0.65, 0.24214, 4, + 148, 336.96, -23.23, 0.04669, 37, -8.42, 2.84, 0.78316, 38, + -36.88, -7.31, 0.15131, 40, -35.44, -5.75, 0.01884, 3, 148, + 341.73, -32, 0.04632, 37, -18.31, 1.43, 0.49659, 38, -30.36, 0.26, + 0.4571, 3, 148, 349.44, -47.98, 0.00361, 37, -35.97, -0.22, + 0.15839, 38, -18.13, 13.11, 0.83801, 2, 37, -55.05, -1.4, 0.0084, + 38, -4.53, 26.55, 0.9916, 2, 38, 12.94, 40.55, 0.99799, 39, + -65.48, 41.13, 0.00201, 2, 38, 34.07, 51.8, 0.94885, 39, -44.25, + 52.19, 0.05115, 2, 38, 56.85, 57.93, 0.79297, 39, -21.41, 58.12, + 0.20703, 2, 38, 80.34, 57.17, 0.52753, 39, 2.06, 57.15, 0.47247, + 2, 38, 102.95, 48.45, 0.21581, 39, 24.59, 48.23, 0.78419, 2, 38, + 137.95, 28.05, 0.00044, 39, 59.41, 27.52, 0.99956, 1, 39, 89.3, + 5.68, 1, 1, 39, 85.52, -4.39, 1, 1, 39, 60.51, -14.66, 1, 2, 38, + 110.02, -29.14, 0.02202, 39, 30.98, -29.42, 0.97798, 2, 38, 85.33, + -38.82, 0.38599, 39, 6.2, -38.87, 0.61401, 3, 148, 267.62, -95.53, + 0.01934, 38, 55.26, -46.62, 0.85526, 39, -23.94, -46.41, 0.12539, + 4, 148, 275.63, -79.22, 0.0725, 37, -39.5, 79.85, 0.00098, 38, + 37.18, -44.89, 0.89545, 39, -42.01, -44.52, 0.03107, 4, 148, + 289.46, -62.35, 0.36936, 37, -28.52, 61.01, 0.02528, 38, 16.51, + -37.92, 0.60488, 39, -62.61, -37.36, 0.00048, 3, 148, 271.83, + -69.67, 0.69546, 37, -29.22, 80.09, 0.01007, 38, 29.59, -51.83, + 0.29447, 3, 148, 257.91, -68.07, 0.79266, 37, -22.86, 92.57, + 0.00361, 38, 33, -65.41, 0.20373, 2, 148, 233.31, -63.41, 0.91308, + 38, 37.33, -90.08, 0.08692, 2, 148, 203.04, -52.31, 0.97974, 38, + 37.65, -122.31, 0.02026, 2, 148, 190.28, -38.96, 0.99312, 38, + 29.67, -138.96, 0.00688, 2, 148, 178.76, -14.1, 0.99994, 38, + 10.48, -158.52, 0.00006, 1, 148, 180.67, 8.47, 1, 2, 148, 210.03, + 40.98, 0.98155, 149, 157.59, -111.17, 0.01845, 2, 148, 212.76, + -27.12, 0.98886, 38, 10.65, -122.12, 0.01114, 3, 148, 255.23, + -18.34, 0.96021, 37, 24.67, 77.73, 0.00086, 38, -12.57, -85.49, + 0.03892, 2, 148, 309.19, 0.74, 0.92552, 149, 148.91, -4.53, + 0.07448, 3, 149, 111.9, 14.47, 0.84745, 37, 35.51, -20.24, + 0.12531, 40, -53.29, 40.54, 0.02724, 3, 149, 71.71, 27.5, 0.89875, + 37, 53.88, -59.33, 0.0658, 40, -41.38, 82.06, 0.03545, 3, 148, + 307.01, -44.06, 0.35911, 37, -17.5, 38.18, 0.14417, 38, -6.81, + -27.96, 0.49673, 3, 149, 133.57, 57.47, 0.12175, 37, -11.15, + -33.11, 0.29525, 40, -9.71, 19.5, 0.583 + ], + "hull": 51, + "edges": [ + 98, 96, 96, 94, 94, 92, 92, 90, 90, 88, 88, 86, 86, 84, 84, 82, + 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, 72, 70, 70, 68, 68, 66, + 66, 64, 64, 62, 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, 52, 50, + 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, + 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, + 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, + 100, 100, 98, 96, 102, 102, 104, 104, 106, 106, 108, 108, 110, + 110, 6, 84, 112, 112, 50, 48, 114, 114, 14 + ], + "width": 495, + "height": 461 + } + }, + "前发/E眉毛": { + "E眉毛": { + "type": "mesh", + "uvs": [ + 0.84533, 0.56544, 0.83257, 0.54043, 0.81045, 0.50395, 0.78664, + 0.46904, 0.765, 0.45458, 0.73481, 0.44312, 0.7095, 0.44625, + 0.69403, 0.45745, 0.68213, 0.46709, 0.40749, 0.44132, 0.39268, + 0.43715, 0.37487, 0.43194, 0.35968, 0.43116, 0.34187, 0.43142, + 0.32237, 0.43402, 0.29368, 0.44288, 0.2678, 0.45904, 0.23836, + 0.48353, 0.2078, 0.51428, 0.18155, 0.54659, 0.1568, 0.58202, + 0.13889, 0.61218, 0.15524, 0.5736, 0.18037, 0.53013, 0.20755, + 0.49469, 0.23699, 0.45925, 0.26531, 0.43059, 0.29381, 0.41183, + 0.32156, 0.3988, 0.33975, 0.39191, 0.35831, 0.39087, 0.37481, + 0.39816, 0.39169, 0.41484, 0.40707, 0.43256, 0.68257, 0.45757, + 0.69251, 0.4409, 0.70882, 0.41275, 0.73413, 0.41328, 0.76488, + 0.42943, 0.78889, 0.44975, 0.80914, 0.47894, 0.83032, 0.51854, + 0.84645, 0.55606, 0.86188, 0.60244 + ], + "triangles": [ + 12, 30, 31, 13, 29, 30, 13, 30, 12, 11, 31, 32, 12, 31, 11, 14, + 28, 29, 14, 29, 13, 27, 28, 14, 10, 32, 33, 11, 32, 10, 34, 9, 33, + 10, 33, 9, 15, 26, 27, 15, 27, 14, 5, 37, 38, 6, 36, 37, 6, 37, 5, + 35, 36, 6, 4, 38, 39, 5, 38, 4, 7, 35, 6, 34, 35, 7, 16, 26, 15, + 25, 26, 16, 8, 9, 34, 8, 34, 7, 3, 4, 39, 3, 39, 40, 17, 25, 16, + 24, 25, 17, 41, 2, 40, 3, 40, 2, 18, 24, 17, 41, 42, 1, 23, 24, + 18, 2, 41, 1, 19, 23, 18, 0, 1, 42, 22, 23, 19, 20, 22, 19, 0, 42, + 43, 21, 22, 20 + ], + "vertices": [ + 2, 154, -279.76, -293.94, 0.51994, 155, 214.59, -1116.77, 0.48006, + 2, 154, -287.77, -304.64, 0.52356, 155, 222.6, -1106.08, 0.47644, + 2, 154, -299.53, -323.25, 0.53013, 155, 234.35, -1087.46, 0.46987, + 2, 154, -310.84, -343.33, 0.53896, 155, 245.67, -1067.38, 0.46104, + 2, 154, -315.81, -361.72, 0.54696, 155, 250.64, -1049, 0.45304, 2, + 154, -320.06, -387.45, 0.55346, 155, 254.89, -1023.27, 0.44654, 2, + 154, -319.7, -409.14, 0.55546, 155, 254.53, -1001.58, 0.44454, 2, + 154, -316.62, -422.47, 0.55629, 155, 251.45, -988.25, 0.44371, 2, + 154, -313.94, -432.74, 0.55712, 155, 248.77, -977.97, 0.44288, 2, + 154, -328.43, -667.51, 0.59149, 155, 263.26, -743.2, 0.40851, 2, + 154, -330.07, -680.15, 0.59295, 155, 264.9, -730.56, 0.40705, 2, + 154, -332.1, -695.35, 0.59442, 155, 266.93, -715.37, 0.40558, 2, + 154, -332.7, -708.34, 0.59572, 155, 267.53, -702.38, 0.40428, 2, + 154, -333.05, -723.58, 0.59702, 155, 267.88, -687.13, 0.40298, 2, + 154, -332.71, -740.29, 0.59993, 155, 267.54, -670.43, 0.40007, 2, + 154, -330.67, -764.91, 0.60095, 155, 265.5, -645.8, 0.39905, 2, + 154, -326.31, -787.19, 0.60095, 155, 261.14, -623.52, 0.39905, 2, + 154, -319.47, -812.59, 0.60095, 155, 254.3, -598.12, 0.39905, 2, + 154, -310.74, -839.01, 0.59914, 155, 245.57, -571.7, 0.40086, 2, + 154, -301.42, -861.75, 0.59472, 155, 236.25, -548.96, 0.40528, 2, + 154, -291.1, -883.23, 0.59054, 155, 225.93, -527.48, 0.40946, 2, + 154, -282.24, -898.82, 0.58762, 155, 217.07, -511.9, 0.41238, 2, + 154, -293.73, -884.49, 0.59028, 155, 228.56, -526.22, 0.40972, 2, + 154, -306.51, -862.62, 0.59454, 155, 241.34, -548.09, 0.40546, 2, + 154, -316.77, -839.05, 0.59913, 155, 251.6, -571.66, 0.40087, 2, + 154, -326.98, -813.56, 0.60095, 155, 261.81, -597.16, 0.39905, 2, + 154, -335.13, -789.08, 0.60095, 155, 269.96, -621.63, 0.39905, 2, + 154, -340.22, -764.54, 0.60095, 155, 275.05, -646.18, 0.39905, 2, + 154, -343.57, -740.68, 0.59989, 155, 278.4, -670.04, 0.40011, 2, + 154, -345.26, -725.05, 0.59727, 155, 280.09, -685.66, 0.40273, 2, + 154, -345.14, -709.16, 0.59586, 155, 279.97, -701.56, 0.40414, 2, + 154, -342.5, -695.1, 0.59458, 155, 277.33, -715.61, 0.40542, 2, + 154, -336.96, -680.81, 0.59303, 155, 271.79, -729.91, 0.40697, 2, + 154, -331.14, -667.8, 0.59152, 155, 265.97, -742.91, 0.40848, 2, + 154, -316.86, -432.28, 0.55713, 155, 251.69, -978.44, 0.44287, 2, + 154, -321.76, -423.63, 0.55594, 155, 256.58, -987.08, 0.44406, 2, + 154, -330.03, -409.43, 0.55522, 155, 264.86, -1001.28, 0.44478, 2, + 154, -329.27, -387.78, 0.55333, 155, 264.09, -1022.94, 0.44667, 2, + 154, -323.56, -361.6, 0.547, 155, 258.39, -1049.11, 0.453, 2, 154, + -316.73, -341.24, 0.53814, 155, 251.56, -1069.48, 0.46186, 2, 154, + -307.26, -324.16, 0.53065, 155, 242.09, -1086.55, 0.46935, 2, 154, + -294.56, -306.37, 0.5242, 155, 229.39, -1104.34, 0.4758, 2, 154, + -282.62, -292.9, 0.51962, 155, 217.45, -1117.82, 0.48038, 2, 154, + -267.97, -280.1, 0.51524, 155, 202.8, -1130.62, 0.48476 + ], + "hull": 44, + "edges": [ + 42, 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, + 18, 16, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 86, 86, 84, 84, + 82, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, 72, 70, 70, 68, 68, + 16, 16, 14, 14, 12, 68, 66, 66, 18, 66, 64, 22, 20, 20, 18, 64, + 62, 62, 60, 60, 58, 26, 24, 24, 22, 58, 56, 56, 54, 54, 52, 52, + 50, 50, 48, 48, 46, 46, 44, 44, 42 + ], + "width": 856, + "height": 308 + } + }, + "前发/发1": { + "发1": { + "type": "mesh", + "uvs": [ + 0.1348, 0.62165, 0.13264, 0.56355, 0.13912, 0.50407, 0.16503, + 0.42954, 0.24707, 0.33101, 0.33846, 0.23435, 0.43058, 0.16231, + 0.49894, 0.12281, 0.62128, 0.09307, 0.7134, 0.08377, 0.8012, + 0.12467, 0.87316, 0.19113, 0.85805, 0.20597, 0.83718, 0.2069, + 0.79112, 0.17762, 0.75946, 0.16925, 0.72204, 0.18087, 0.66734, + 0.20643, 0.58746, 0.25663, 0.52054, 0.31472, 0.4716, 0.38396, + 0.43012, 0.46452, 0.41429, 0.50588, 0.40349, 0.55236, 0.40062, + 0.58582, 0.40637, 0.6137, 0.41429, 0.64982, 0.42292, 0.67631, + 0.4366, 0.70513, 0.45747, 0.73162, 0.48769, 0.76972, 0.51, + 0.79064, 0.53879, 0.81016, 0.57045, 0.82921, 0.61075, 0.85105, + 0.49036, 0.90556, 0.47114, 0.91426, 0.40349, 0.90543, 0.3342, + 0.88792, 0.28382, 0.86143, 0.23992, 0.83633, 0.1953, 0.79544, + 0.1694, 0.76151, 0.14925, 0.71504, 0.14056, 0.67509, 0.45459, + 0.87987, 0.4258, 0.85849, 0.48913, 0.86639, 0.55246, 0.86314, + 0.16823, 0.56078, 0.17548, 0.61634, 0.19269, 0.65436, 0.21442, + 0.69063, 0.23616, 0.72104, 0.29322, 0.75438, 0.34394, 0.78421, + 0.39919, 0.80644, 0.45897, 0.81989, 0.51784, 0.8275 + ], + "triangles": [ + 30, 56, 29, 57, 56, 30, 57, 30, 31, 58, 31, 32, 57, 31, 58, 58, + 32, 33, 46, 56, 57, 38, 39, 56, 48, 58, 33, 48, 33, 34, 47, 57, + 58, 47, 58, 48, 46, 57, 47, 45, 46, 47, 46, 38, 56, 37, 38, 46, + 37, 46, 45, 35, 47, 48, 45, 47, 35, 35, 48, 34, 36, 45, 35, 37, + 45, 36, 15, 9, 10, 14, 15, 10, 16, 9, 15, 8, 9, 16, 14, 10, 11, + 11, 13, 14, 17, 8, 16, 7, 8, 17, 12, 13, 11, 18, 7, 17, 6, 7, 18, + 5, 6, 18, 19, 5, 18, 20, 4, 5, 19, 20, 5, 21, 4, 20, 3, 4, 21, 22, + 3, 21, 2, 3, 22, 22, 49, 2, 52, 26, 27, 53, 52, 27, 54, 53, 27, + 43, 52, 53, 28, 54, 27, 55, 54, 28, 42, 43, 53, 29, 55, 28, 56, + 55, 29, 54, 41, 42, 54, 42, 53, 40, 41, 54, 40, 54, 55, 39, 40, + 55, 39, 55, 56, 23, 49, 22, 1, 2, 49, 24, 49, 23, 50, 49, 24, 50, + 24, 25, 1, 49, 50, 0, 1, 50, 51, 50, 25, 51, 25, 26, 51, 44, 0, + 51, 0, 50, 52, 51, 26, 44, 51, 52, 43, 44, 52 + ], + "vertices": [ + 3, 64, 78.9, -100.69, 0.95149, 65, -144.81, -52.87, 0.01312, 155, + 243.87, -224.21, 0.03538, 3, 64, 3.88, -96.54, 0.86406, 155, 319, + -224.5, 0.03947, 63, -76.32, 107.65, 0.09646, 5, 64, -72.37, + -85.05, 0.3543, 155, 395.74, -232.05, 0.04308, 63, 0.41, 100.09, + 0.5999, 141, -380.53, 608.97, 0.00044, 154, -460.91, -1178.66, + 0.00228, 5, 64, -166.71, -55.86, 0.00585, 155, 491.46, -256.36, + 0.04443, 63, 96.13, 75.78, 0.91964, 141, -284.81, 584.66, 0.02456, + 154, -556.63, -1154.35, 0.00552, 4, 155, 616.89, -328.39, 0.05989, + 63, 221.57, 3.75, 0.79613, 141, -159.38, 512.63, 0.13895, 154, + -682.06, -1082.32, 0.00504, 4, 155, 739.7, -408.17, 0.0754, 63, + 344.38, -76.02, 0.60848, 141, -36.56, 432.86, 0.30928, 154, + -804.88, -1002.55, 0.00684, 4, 155, 830.66, -487.65, 0.07124, 63, + 435.34, -155.5, 0.45243, 141, 54.39, 353.37, 0.4701, 154, -895.83, + -923.06, 0.00622, 4, 155, 880.13, -546.14, 0.05725, 63, 484.8, + -213.99, 0.36898, 141, 103.86, 294.89, 0.57291, 154, -945.3, + -864.58, 0.00086, 3, 155, 915.72, -649.33, 0.01717, 63, 520.4, + -317.18, 0.24938, 141, 139.45, 191.7, 0.73346, 3, 155, 925.59, + -726.55, 0.00723, 63, 530.26, -394.4, 0.17605, 141, 149.32, + 114.48, 0.81672, 3, 155, 870.68, -798.35, 0.00031, 63, 475.36, + -466.21, 0.09742, 141, 94.42, 42.67, 0.90227, 2, 63, 387.79, + -523.88, 0.00022, 141, 6.84, -15, 0.99978, 1, 141, -11.98, -1.85, + 1, 2, 63, 368.24, -493.28, 0.00107, 141, -12.7, 15.6, 0.99893, 2, + 63, 407.16, -455.89, 0.05649, 141, 26.22, 52.99, 0.94351, 2, 63, + 418.71, -429.76, 0.11964, 141, 37.76, 79.11, 0.88036, 2, 63, + 404.56, -398.11, 0.19726, 141, 23.62, 110.77, 0.80274, 2, 63, + 372.8, -351.54, 0.30804, 141, -8.14, 157.34, 0.69196, 2, 63, + 309.79, -283.05, 0.48856, 141, -71.16, 225.83, 0.51144, 2, 63, + 236.26, -225.09, 0.66617, 141, -144.68, 283.79, 0.33383, 2, 63, + 147.9, -181.75, 0.82403, 141, -233.04, 327.13, 0.17597, 3, 64, + -104.09, 161.22, 0.03627, 63, 44.75, -144.22, 0.90846, 141, + -336.19, 364.66, 0.05527, 3, 64, -51.83, 143.8, 0.20243, 63, + -8.34, -129.52, 0.77842, 141, -389.28, 379.36, 0.01916, 4, 64, + 7.36, 130.06, 0.578, 65, -115.26, 186.9, 0.00627, 63, -68.16, + -118.83, 0.41313, 141, -449.1, 390.05, 0.0026, 4, 64, 50.3, + 124.23, 0.78574, 65, -78.51, 163.96, 0.04838, 63, -111.34, + -115.22, 0.16575, 141, -492.28, 393.66, 0.00013, 3, 64, 86.62, + 126.17, 0.79401, 65, -44.59, 150.8, 0.14928, 63, -147.51, -119.02, + 0.05671, 4, 64, 133.7, 129.06, 0.5988, 65, -0.48, 134.1, 0.39299, + 63, -194.38, -124.32, 0.0076, 66, -112.05, 196.68, 0.00061, 4, 64, + 168.42, 133.53, 0.37115, 65, 33.01, 123.92, 0.61794, 63, -228.82, + -130.58, 0.00038, 66, -86.52, 172.74, 0.01053, 3, 64, 206.46, + 141.96, 0.1599, 65, 71.16, 115.98, 0.77767, 66, -55.81, 148.75, + 0.06243, 3, 64, 241.98, 156.62, 0.05117, 65, 109.57, 114.76, + 0.74434, 66, -21.9, 130.66, 0.20448, 3, 64, 293.1, 177.88, + 0.00415, 65, 164.91, 113.14, 0.4014, 66, 27.01, 104.74, 0.59446, + 3, 64, 321.54, 194.3, 0.00015, 65, 197.58, 116.44, 0.17679, 66, + 57.78, 93.26, 0.82306, 2, 65, 231.27, 125.35, 0.04728, 66, 91.94, + 86.35, 0.95272, 2, 65, 265.6, 136.65, 0.00694, 66, 127.72, 81.3, + 0.99306, 1, 66, 171.49, 77.44, 1, 2, 155, -131.37, -510.74, + 0.00647, 66, 129.48, -37.92, 0.99353, 2, 155, -142.16, -494.38, + 0.00982, 66, 122.77, -56.33, 0.99018, 3, 65, 284.81, -32.99, + 0.00094, 155, -129.18, -438.24, 0.01629, 66, 69.94, -79.34, + 0.98276, 3, 65, 237.1, -72.79, 0.12536, 155, -104.93, -381.03, + 0.02385, 66, 9.55, -93.95, 0.85079, 3, 65, 186.83, -93.16, + 0.49389, 155, -69.52, -339.94, 0.0275, 66, -44.55, -89.98, + 0.47861, 3, 65, 140.73, -109.65, 0.80309, 155, -36.06, -304.2, + 0.03181, 66, -93.19, -84.39, 0.1651, 4, 64, 306.91, -68.13, + 0.00205, 65, 76.45, -116.83, 0.94801, 155, 17.84, -268.44, + 0.03885, 66, -154.02, -62.4, 0.01109, 3, 64, 261.46, -86.22, + 0.05211, 65, 27.59, -114.66, 0.90866, 155, 62.29, -248.04, + 0.03922, 3, 64, 200.23, -98.24, 0.33835, 65, -33.18, -100.46, + 0.62451, 155, 122.83, -232.89, 0.03714, 3, 64, 148.17, -101.37, + 0.71419, 65, -81.93, -81.94, 0.24896, 155, 174.66, -227.08, + 0.03685, 2, 155, -97.33, -481.81, 0.00509, 66, 85.97, -27.81, + 0.99491, 3, 155, -69.03, -458.55, 0.00348, 154, 3.86, -952.16, + 0.0001, 66, 50.43, -18.93, 0.99641, 4, 65, 275.02, 53.99, 0.0001, + 155, -80.71, -511.13, 0.00168, 154, 15.54, -899.59, 0.00056, 66, + 99.62, 3, 0.99766, 4, 65, 296.8, 102.36, 0.00025, 155, -77.98, + -564.1, 0.00056, 154, 12.81, -846.61, 0.00063, 66, 140.55, 36.75, + 0.99856, 4, 64, 2.66, -66.63, 0.86464, 155, 321.76, -254.3, + 0.03029, 63, -73.56, 77.84, 0.10022, 154, -386.93, -1156.41, + 0.00484, 4, 64, 74.76, -66.29, 0.96564, 65, -134.46, -19.8, + 0.00432, 155, 249.77, -258.35, 0.02352, 154, -314.94, -1152.37, + 0.00653, 4, 64, 124.9, -55.86, 0.88151, 65, -84.46, -30.89, + 0.08786, 155, 200.23, -271.34, 0.02304, 154, -265.4, -1139.37, + 0.00759, 4, 64, 173.08, -41.48, 0.49024, 65, -34.62, -37.57, + 0.48143, 155, 152.86, -288.18, 0.01682, 154, -218.03, -1122.54, + 0.0115, 4, 64, 213.72, -26.5, 0.08139, 65, 8.58, -40.6, 0.89072, + 155, 113.04, -305.22, 0.01507, 154, -178.21, -1105.49, 0.01282, 3, + 65, 69.31, -19.61, 0.97257, 155, 68.62, -351.65, 0.00575, 154, + -133.79, -1059.07, 0.02169, 3, 65, 123.51, -1.07, 0.97823, 155, + 28.88, -392.91, 0.0024, 154, -94.05, -1017.81, 0.01937, 4, 65, + 170.92, 25.51, 0.31363, 155, -1.13, -438.22, 0.0008, 154, -64.04, + -972.49, 0.01767, 66, -6.34, 23.49, 0.66791, 3, 65, 210.2, 60.88, + 0.07737, 154, -45.26, -923.08, 0.01468, 66, 44.53, 37.84, 0.90795, + 3, 65, 242.5, 99.22, 0.03105, 154, -34.06, -874.22, 0.00601, 66, + 90.45, 57.95, 0.96295 + ], + "hull": 45, + "edges": [ + 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, + 4, 2, 2, 0, 0, 88, 88, 86, 86, 84, 84, 82, 82, 80, 80, 78, 78, 76, + 76, 74, 74, 72, 68, 66, 72, 70, 70, 68, 70, 90, 90, 92, 92, 94, + 94, 96, 96, 68, 66, 64, 64, 62, 62, 60, 60, 58, 58, 56, 56, 54, + 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, + 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22 + ], + "width": 835, + "height": 1293 + } + }, + "前发/发2": { + "发2": { + "type": "mesh", + "uvs": [ + 0.68742, 0.14151, 0.78187, 0.13303, 0.80885, 0.15537, 0.7953, + 0.20121, 0.76553, 0.3019, 0.73577, 0.40259, 0.64806, 0.40259, + 0.56036, 0.40259, 0.52213, 0.45265, 0.48278, 0.51042, 0.4333, + 0.56587, 0.38833, 0.62594, 0.36809, 0.64828, 0.33773, 0.69141, + 0.32086, 0.7199, 0.31524, 0.74609, 0.31, 0.76902, 0.31226, + 0.80008, 0.32209, 0.82494, 0.33494, 0.85186, 0.31075, 0.86325, + 0.27598, 0.83995, 0.24876, 0.81147, 0.21853, 0.77057, 0.20341, + 0.73743, 0.19736, 0.70067, 0.19736, 0.67063, 0.20643, 0.62714, + 0.21475, 0.59659, 0.22996, 0.544, 0.26095, 0.48704, 0.30782, + 0.42543, 0.37708, 0.35253, 0.42993, 0.31171, 0.51426, 0.24086, + 0.61546, 0.17385, 0.60887, 0.34245, 0.65871, 0.29855, 0.72563, + 0.25564, 0.45768, 0.49809, 0.48021, 0.41576, 0.50525, 0.34544, + 0.54031, 0.27598, 0.57286, 0.22023 + ], + "triangles": [ + 19, 20, 18, 20, 21, 18, 21, 17, 18, 21, 22, 17, 22, 16, 17, 22, + 23, 16, 16, 23, 15, 15, 23, 24, 15, 24, 14, 24, 25, 14, 14, 25, + 13, 25, 26, 13, 12, 13, 27, 13, 26, 27, 12, 27, 28, 11, 12, 28, + 28, 29, 11, 11, 29, 10, 29, 30, 10, 10, 39, 9, 10, 30, 39, 9, 39, + 8, 30, 31, 39, 39, 40, 8, 39, 31, 40, 8, 40, 7, 31, 32, 40, 40, + 32, 41, 40, 41, 7, 41, 32, 33, 7, 41, 36, 41, 42, 36, 41, 33, 42, + 33, 34, 42, 4, 5, 37, 37, 5, 36, 7, 36, 6, 5, 6, 36, 36, 42, 37, + 37, 38, 4, 4, 38, 3, 42, 43, 37, 37, 43, 38, 42, 34, 43, 43, 35, + 38, 35, 0, 38, 3, 0, 1, 3, 38, 0, 43, 34, 35, 3, 1, 2 + ], + "vertices": [ + 4, 63, 209.15, 9.82, 0.88532, 83, 218.09, -148.96, 0.11104, 84, + -304.17, 30.47, 0.00003, 154, -669.65, -1088.39, 0.00362, 3, 63, + 214.74, -44.57, 0.92238, 83, 223.67, -203.35, 0.07759, 84, + -335.03, 75.61, 0.00003, 3, 63, 195.59, -59.53, 0.92399, 83, + 204.53, -218.31, 0.07598, 84, -325.34, 97.89, 0.00003, 3, 63, + 157.41, -50.68, 0.91805, 83, 166.35, -209.47, 0.08193, 84, + -287.56, 108.33, 0.00003, 5, 63, 73.54, -31.25, 0.90874, 83, + 82.48, -190.03, 0.07142, 84, -204.58, 131.27, 0.00001, 154, + -534.04, -1047.32, 0.00273, 155, 468.87, -363.39, 0.0171, 2, 63, + -10.33, -11.81, 0.98286, 155, 385, -343.96, 0.01714, 4, 63, -8.92, + 38.51, 0.75852, 83, 0.01, -120.28, 0.21015, 154, -451.57, + -1117.08, 0.01443, 155, 386.4, -293.64, 0.0169, 5, 63, -7.52, + 88.83, 0.30228, 83, 1.42, -69.96, 0.64651, 84, -76.06, 64.41, + 0.01347, 154, -452.98, -1167.4, 0.02095, 155, 387.81, -243.32, + 0.01678, 4, 63, -48.84, 111.93, 0.03558, 83, -39.9, -46.85, + 0.59835, 84, -28.72, 63.82, 0.34182, 154, -411.65, -1190.5, + 0.02425, 4, 83, -87.66, -22.92, 0.09157, 84, 24.67, 65.57, + 0.88853, 154, -363.9, -1214.43, 0.01967, 155, 298.73, -196.28, + 0.00023, 4, 84, 78.96, 61.26, 0.9787, 154, -318.24, -1244.12, + 0.01102, 155, 253.07, -166.6, 0.00243, 85, -62.36, 88.22, 0.00785, + 4, 84, 135.53, 61.01, 0.69761, 154, -268.64, -1271.33, 0.00934, + 155, 203.47, -139.39, 0.00662, 85, -10.69, 65.17, 0.28643, 4, 84, + 157.48, 59.12, 0.40422, 154, -250.25, -1283.46, 0.01373, 155, + 185.08, -127.25, 0.00911, 85, 8.63, 54.59, 0.57295, 4, 84, 197.6, + 59.93, 0.03207, 154, -214.61, -1301.89, 0.01346, 155, 149.44, + -108.82, 0.01361, 85, 45.67, 39.15, 0.94086, 5, 84, 223.27, 62.1, + 0.00008, 154, -191.01, -1312.23, 0.00972, 155, 125.84, -98.48, + 0.0159, 85, 70.04, 30.78, 0.94736, 86, -22.41, 43.46, 0.02694, 4, + 154, -169.16, -1316.07, 0.00862, 155, 103.99, -94.64, 0.017, 85, + 92.12, 28.75, 0.64096, 86, -3.33, 32.15, 0.33342, 4, 154, -150.04, + -1319.62, 0.00799, 155, 84.87, -91.1, 0.01837, 85, 111.47, 26.78, + 0.15384, 86, 13.3, 22.07, 0.81979, 3, 154, -123.98, -1319.04, + 0.00669, 155, 58.81, -91.67, 0.02217, 86, 37.88, 13.39, 0.97113, + 3, 154, -103.01, -1313.99, 0.00407, 155, 37.84, -96.73, 0.02376, + 86, 59.29, 10.71, 0.97218, 3, 154, -80.25, -1307.24, 0.00203, 155, + 15.07, -103.47, 0.02489, 86, 82.96, 8.97, 0.97308, 3, 154, -71.09, + -1321.39, 0.00021, 155, 5.92, -89.33, 0.02837, 86, 86.53, -7.5, + 0.97142, 2, 155, 25.99, -69.92, 0.02915, 86, 60.88, -18.56, + 0.97085, 2, 155, 50.29, -54.97, 0.02914, 86, 32.88, -23.95, + 0.97086, 3, 155, 85.04, -38.58, 0.02385, 85, 115.62, -25.58, + 0.16916, 86, -5.43, -27, 0.80699, 3, 155, 113.04, -30.68, 0.02483, + 85, 88.36, -35.75, 0.79458, 86, -34.41, -24.49, 0.18058, 3, 155, + 143.93, -28.07, 0.02584, 85, 57.78, -40.89, 0.97271, 86, -64.23, + -16.01, 0.00145, 3, 84, 218.52, -19.8, 0.00061, 155, 169.09, + -28.77, 0.02328, 85, 32.65, -42.25, 0.97611, 3, 84, 183.66, + -31.65, 0.23627, 155, 205.38, -34.99, 0.02062, 85, -4.02, -39.03, + 0.74311, 3, 84, 158.67, -38.97, 0.72895, 155, 230.84, -40.47, + 0.01917, 85, -29.85, -35.65, 0.25188, 2, 84, 115.42, -51.12, + 0.97841, 155, 274.64, -50.43, 0.02159, 2, 84, 64.8, -56.85, + 0.97846, 155, 321.86, -69.55, 0.02154, 3, 83, -13.66, 75.48, + 0.11804, 84, 6.58, -56.21, 0.85509, 155, 372.72, -97.88, 0.02687, + 5, 63, 37.35, 192.82, 0.04186, 83, 46.29, 34.03, 0.85328, 84, + -65.88, -48.39, 0.05517, 154, -497.85, -1271.39, 0.0026, 155, + 432.67, -139.33, 0.04708, 4, 63, 70.7, 161.54, 0.18415, 83, 79.63, + 2.76, 0.73797, 154, -531.19, -1240.11, 0.01376, 155, 466.02, + -170.6, 0.06411, 5, 63, 128.7, 111.5, 0.46902, 83, 137.64, -47.29, + 0.39812, 84, -184.96, -20.5, 0.00003, 154, -589.2, -1190.07, + 0.03034, 155, 524.03, -220.64, 0.1025, 5, 63, 183.21, 51.87, + 0.69875, 83, 192.15, -106.92, 0.16408, 84, -261.31, 5.9, 0.00002, + 154, -643.7, -1130.44, 0.02265, 155, 578.53, -280.27, 0.11449, 4, + 63, 42.09, 59.59, 0.59642, 83, 51.03, -99.19, 0.36678, 154, + -502.58, -1138.16, 0.01999, 155, 437.41, -272.55, 0.0168, 5, 63, + 78.06, 29.97, 0.76341, 83, 87, -128.82, 0.20944, 84, -179.35, + 75.31, 0.00001, 154, -538.55, -1108.54, 0.01017, 155, 473.38, + -302.18, 0.01697, 5, 63, 112.93, -9.44, 0.87108, 83, 121.87, + -168.22, 0.10924, 84, -228.8, 93.3, 0.00002, 154, -573.43, + -1069.13, 0.00257, 155, 508.26, -341.58, 0.0171, 5, 63, -85.87, + 149.98, 0.00006, 83, -76.93, -8.81, 0.09639, 84, 21.98, 48.05, + 0.88464, 154, -374.62, -1228.55, 0.0149, 155, 309.45, -182.17, + 0.004, 5, 63, -17.27, 135.12, 0.06462, 83, -8.33, -23.66, 0.6747, + 84, -45.4, 28.37, 0.21552, 154, -443.23, -1213.69, 0.01846, 155, + 378.06, -197.02, 0.0267, 5, 63, 41.24, 119.11, 0.30088, 83, 50.18, + -39.67, 0.63196, 84, -104.46, 14.53, 0.00408, 154, -501.73, + -1197.68, 0.00733, 155, 436.56, -213.03, 0.05575, 5, 63, 98.86, + 97.37, 0.46586, 83, 107.8, -61.41, 0.38082, 84, -165.48, 6.15, + 0.00026, 154, -559.36, -1175.94, 0.04072, 155, 494.19, -234.77, + 0.11234, 5, 63, 145.04, 77.39, 0.59293, 83, 153.98, -81.39, + 0.28729, 84, -215.59, 1.68, 0.00011, 154, -605.53, -1155.96, + 0.02049, 155, 540.36, -254.75, 0.09918 + ], + "hull": 36, + "edges": [ + 64, 66, 66, 68, 68, 70, 70, 0, 0, 2, 2, 4, 14, 16, 16, 18, 18, 20, + 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, + 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, + 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 14, 72, 72, 74, + 74, 76, 4, 6, 76, 6, 10, 8, 8, 6, 10, 12, 12, 14, 78, 80, 80, 82, + 82, 84, 84, 86, 86, 70 + ], + "width": 574, + "height": 838 + } + }, + "前发/发3": { + "发3": { + "type": "mesh", + "uvs": [ + 0.94895, 0.16441, 0.90645, 0.16615, 0.84776, 0.1696, 0.77794, + 0.17423, 0.72128, 0.19673, 0.68383, 0.22271, 0.61502, 0.29541, + 0.55633, 0.36466, 0.48955, 0.45584, 0.44907, 0.51413, 0.4177, + 0.5678, 0.39354, 0.62779, 0.38241, 0.66414, 0.37027, 0.69935, + 0.35825, 0.74096, 0.35294, 0.7751, 0.35446, 0.80362, 0.36204, + 0.82912, 0.37037, 0.8477, 0.38325, 0.86542, 0.39689, 0.88314, + 0.4166, 0.89913, 0.39841, 0.90993, 0.37037, 0.89999, 0.33855, + 0.88789, 0.29081, 0.86585, 0.26353, 0.8477, 0.23549, 0.8248, + 0.20442, 0.79109, 0.18169, 0.7522, 0.16502, 0.70466, 0.15744, + 0.66058, 0.15517, 0.56508, 0.15593, 0.51667, 0.16349, 0.46662, + 0.19683, 0.3992, 0.25291, 0.32833, 0.33236, 0.26349, 0.42481, + 0.20212, 0.51422, 0.15934, 0.60389, 0.12921, 0.70609, 0.09747, + 0.77288, 0.08708, 0.83258, 0.08939, 0.88621, 0.0917, 0.93681, + 0.09516, 0.97121, 0.10095, 1, 0.10728, 1, 0.16672, 0.84877, + 0.10266, 0.84472, 0.12575, 0.81234, 0.15576, 0.15669, 0.61002, + 0.61862, 0.14927, 0.54703, 0.187, 0.47634, 0.23041, 0.40112, + 0.27693, 0.32319, 0.33688, 0.27788, 0.39838, 0.27063, 0.45782, + 0.3685, 0.42526, 0.43647, 0.42577 + ], + "triangles": [ + 24, 25, 18, 24, 18, 19, 24, 19, 20, 23, 24, 20, 23, 20, 21, 22, + 23, 21, 15, 29, 14, 28, 29, 15, 27, 28, 15, 16, 27, 15, 26, 27, + 16, 17, 26, 16, 25, 26, 17, 18, 25, 17, 33, 10, 32, 10, 52, 32, + 11, 52, 10, 12, 31, 52, 32, 52, 31, 11, 12, 52, 13, 31, 12, 30, + 31, 13, 14, 30, 13, 29, 30, 14, 39, 40, 53, 54, 39, 53, 38, 39, + 54, 5, 53, 4, 54, 53, 5, 55, 38, 54, 56, 37, 38, 55, 56, 38, 6, + 54, 5, 55, 54, 6, 57, 36, 37, 57, 37, 56, 6, 56, 55, 7, 56, 6, 57, + 56, 7, 58, 36, 57, 35, 36, 58, 61, 60, 57, 58, 57, 60, 7, 61, 57, + 8, 61, 7, 59, 35, 58, 59, 58, 60, 34, 35, 59, 9, 61, 8, 60, 9, 59, + 9, 60, 61, 10, 59, 9, 33, 34, 59, 10, 33, 59, 49, 43, 44, 50, 43, + 49, 53, 40, 41, 50, 51, 42, 50, 42, 43, 0, 45, 46, 0, 46, 47, 45, + 50, 44, 1, 45, 0, 50, 49, 44, 45, 1, 50, 2, 51, 50, 0, 47, 48, 1, + 2, 50, 51, 41, 42, 3, 41, 51, 53, 41, 3, 3, 51, 2, 4, 53, 3 + ], + "vertices": [ + 2, 141, 4.31, 43.92, 0.97617, 67, 427.83, -581.71, 0.02383, 2, + 141, 11.79, 108.38, 0.89912, 67, 435.31, -517.25, 0.10088, 2, 141, + 10.83, 191.59, 0.76075, 67, 434.36, -434.04, 0.23925, 3, 141, + 6.36, 242.42, 0.64752, 67, 429.88, -383.21, 0.35202, 155, 782.63, + -598.61, 0.00046, 3, 141, -21.12, 284.34, 0.52788, 67, 402.41, + -341.29, 0.47179, 155, 755.15, -556.68, 0.00032, 2, 141, -53.42, + 312.44, 0.43687, 67, 370.1, -313.19, 0.56313, 2, 141, -144.55, + 364.95, 0.27597, 67, 278.98, -260.67, 0.72403, 3, 141, -231.48, + 410.01, 0.1637, 67, 192.05, -215.62, 0.83252, 154, -609.96, + -979.7, 0.00378, 4, 141, -346.16, 461.71, 0.06046, 67, 77.37, + -163.92, 0.91846, 154, -495.28, -1031.4, 0.00599, 68, -140.86, + 164.31, 0.01509, 4, 141, -419.51, 493.15, 0.01865, 67, 4.02, + -132.47, 0.78595, 154, -421.93, -1062.84, 0.01648, 68, -67.42, + 133.08, 0.17893, 4, 141, -487.16, 517.82, 0.00231, 67, -63.64, + -107.8, 0.34892, 154, -354.28, -1087.52, 0.02579, 68, 0.31, + 108.61, 0.62298, 3, 67, -139.48, -88.14, 0.02083, 154, -278.43, + -1107.18, 0.02972, 68, 76.21, 89.16, 0.94944, 4, 155, 167.22, + -294.16, 0.00036, 154, -232.39, -1116.55, 0.02528, 68, 122.28, + 79.93, 0.97423, 69, -77.18, 102.73, 0.00013, 4, 155, 122.67, + -284.1, 0.00118, 154, -187.84, -1126.61, 0.02131, 68, 166.86, + 69.99, 0.90309, 69, -36.97, 81.06, 0.07442, 4, 155, 69.96, -273.9, + 0.00218, 154, -135.13, -1136.81, 0.02291, 68, 219.6, 59.95, + 0.3772, 69, 11.05, 57.06, 0.5977, 4, 155, 26.62, -268.84, 0.00324, + 154, -91.79, -1141.87, 0.01866, 68, 262.95, 55.01, 0.02799, 69, + 51.43, 40.53, 0.9501, 3, 155, -9.7, -268.93, 0.00428, 154, -55.47, + -1141.79, 0.01295, 69, 86.44, 30.85, 0.98277, 4, 155, -42.3, + -273.52, 0.00449, 154, -22.87, -1137.19, 0.00805, 69, 119.08, + 26.51, 0.89143, 70, -14.33, 32.25, 0.09604, 4, 155, -66.12, + -278.91, 0.0039, 154, 0.94, -1131.8, 0.00578, 69, 143.46, 25.29, + 0.26157, 70, 8.33, 23.17, 0.72876, 4, 155, -88.92, -287.63, + 0.00304, 154, 23.75, -1123.08, 0.00289, 69, 167.77, 27.56, + 0.00824, 70, 32.06, 17.4, 0.98582, 3, 155, -111.75, -296.9, + 0.00248, 154, 46.58, -1113.81, 0.00238, 70, 56.11, 12.08, 0.99513, + 3, 155, -132.49, -310.63, 0.0015, 154, 67.32, -1100.08, 0.0019, + 70, 80.99, 11.61, 0.9966, 2, 155, -145.87, -297.05, 0.00237, 70, + 84.29, -7.17, 0.99763, 2, 155, -132.66, -277.05, 0.00559, 70, + 62.07, -16.13, 0.99441, 2, 155, -116.61, -254.39, 0.01061, 70, + 35.99, -25.68, 0.98939, 4, 155, -87.6, -220.52, 0.02, 154, 22.43, + -1190.19, 0.0009, 69, 148.45, -36.72, 0.33998, 70, -7.11, -37.1, + 0.63912, 4, 155, -63.95, -201.37, 0.02587, 154, -1.22, -1209.34, + 0.00029, 69, 120.53, -48.81, 0.81903, 70, -37.45, -39.44, 0.1548, + 3, 155, -34.24, -181.84, 0.03036, 69, 86.66, -59.63, 0.96551, 70, + -73.01, -38.66, 0.00413, 3, 155, 9.28, -160.49, 0.03804, 68, + 280.6, -53.29, 0.01884, 69, 38.99, -68.49, 0.94312, 3, 155, 59.24, + -145.37, 0.04169, 68, 230.7, -68.55, 0.31926, 69, -13.18, -69.62, + 0.63904, 3, 155, 120.06, -134.96, 0.046, 68, 169.9, -79.14, + 0.85387, 69, -74.57, -63.28, 0.10013, 3, 155, 176.31, -131.03, + 0.04966, 68, 113.66, -83.23, 0.94992, 69, -129.8, -51.95, 0.00043, + 3, 67, -54.85, 82.63, 0.25767, 155, 297.89, -132.77, 0.05132, 68, + -7.92, -81.85, 0.69101, 4, 141, -416.81, 705.98, 0.0008, 67, 6.72, + 80.36, 0.76767, 155, 359.46, -135.04, 0.05228, 68, -69.5, -79.76, + 0.17925, 4, 141, -353.26, 698.72, 0.01086, 67, 70.27, 73.09, + 0.93105, 155, 423.01, -142.3, 0.05589, 68, -133.07, -72.68, + 0.0022, 3, 141, -268.15, 672.13, 0.04538, 67, 155.38, 46.5, + 0.89195, 155, 508.12, -168.89, 0.06267, 3, 141, -179.1, 628.92, + 0.10195, 67, 244.43, 3.29, 0.83339, 155, 597.17, -212.11, 0.06466, + 3, 141, -98.2, 568.95, 0.17653, 67, 325.33, -56.67, 0.7577, 155, + 678.07, -272.07, 0.06577, 3, 141, -21.98, 499.68, 0.27056, 67, + 401.55, -125.94, 0.6606, 155, 754.29, -341.34, 0.06884, 3, 141, + 30.65, 433.27, 0.36815, 67, 454.18, -192.35, 0.57928, 155, 806.92, + -407.75, 0.05257, 3, 141, 67.17, 367.13, 0.47561, 67, 490.7, + -258.5, 0.48498, 155, 843.44, -473.89, 0.03941, 3, 141, 105.49, + 291.83, 0.60635, 67, 529.02, -333.79, 0.36259, 155, 881.76, + -549.19, 0.03106, 3, 141, 117.36, 243, 0.67567, 67, 540.88, + -382.63, 0.30033, 155, 893.62, -598.03, 0.02399, 3, 141, 113.21, + 199.75, 0.74003, 67, 536.74, -425.87, 0.24547, 155, 889.48, + -641.27, 0.0145, 3, 141, 108.15, 164.32, 0.79497, 67, 531.68, + -461.3, 0.19544, 155, 884.42, -676.7, 0.00959, 3, 141, 95.34, + 105.4, 0.88163, 67, 518.87, -520.22, 0.11654, 155, 871.61, + -735.62, 0.00183, 2, 141, 62.38, 36.27, 0.96317, 67, 485.91, + -589.36, 0.03683, 1, 141, 11.08, -19.26, 1, 2, 141, -19.55, + -19.53, 0.99998, 67, 403.97, -645.16, 0.00002, 3, 141, 95.99, + 188.47, 0.76242, 67, 519.52, -437.15, 0.22809, 155, 872.26, + -652.55, 0.00949, 3, 141, 66.7, 192.23, 0.76187, 67, 490.22, + -433.4, 0.23432, 155, 842.97, -648.79, 0.00381, 3, 141, 29.17, + 216.8, 0.71429, 67, 452.7, -408.83, 0.28496, 155, 805.44, -624.23, + 0.00075, 3, 67, -112.08, 83.12, 0.02026, 155, 240.67, -132.27, + 0.05071, 68, 49.31, -82.18, 0.92904, 3, 141, 41.35, 357.15, + 0.47461, 67, 464.87, -268.47, 0.49698, 155, 817.62, -483.87, + 0.02841, 4, 141, -5.21, 410.45, 0.37122, 67, 418.31, -215.18, + 0.59427, 155, 771.06, -430.57, 0.03243, 154, -836.23, -980.14, + 0.00209, 4, 141, -59.02, 463.29, 0.27709, 67, 364.5, -162.34, + 0.6782, 155, 717.24, -377.73, 0.039, 154, -782.41, -1032.98, + 0.0057, 4, 141, -116.69, 519.53, 0.19342, 67, 306.83, -106.1, + 0.75307, 155, 659.58, -321.5, 0.04417, 154, -724.75, -1089.22, + 0.00934, 4, 141, -191.4, 578.22, 0.11284, 67, 232.12, -47.41, + 0.81949, 155, 584.87, -262.81, 0.04961, 154, -650.04, -1147.91, + 0.01807, 4, 141, -268.75, 613.28, 0.05751, 67, 154.78, -12.34, + 0.87057, 155, 507.52, -227.74, 0.04887, 154, -572.69, -1182.97, + 0.02304, 4, 141, -344.23, 620.66, 0.02238, 67, 79.29, -4.97, + 0.93424, 155, 432.03, -220.37, 0.0383, 154, -497.21, -1190.35, + 0.00508, 5, 141, -304.78, 548.47, 0.05961, 67, 118.74, -77.16, + 0.9265, 155, 471.49, -292.55, 0.01326, 154, -536.66, -1118.16, + 0.00016, 68, -181.98, 77.43, 0.00047, 4, 141, -306.82, 499.16, + 0.07403, 67, 116.71, -126.46, 0.92217, 155, 469.45, -341.86, + 0.00129, 68, -180.09, 126.74, 0.00252 + ], + "hull": 49, + "edges": [ + 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 86, 98, + 98, 100, 100, 102, 102, 6, 6, 8, 6, 4, 4, 2, 2, 0, 94, 96, 0, 96, + 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, + 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, + 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, + 58, 58, 60, 60, 62, 62, 104, 104, 64, 64, 66, 66, 68, 68, 70, 70, + 72, 72, 74, 74, 76, 76, 78, 78, 80, 106, 108, 108, 110, 110, 112, + 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 122, 16, 62, 64 + ], + "width": 726, + "height": 1273 + } + }, + "前发/发4": { + "发4": { + "type": "mesh", + "uvs": [ + 0.44079, 0.13062, 0.57857, 0.19491, 0.6913, 0.27422, 0.76645, + 0.34814, 0.8082, 0.4164, 0.8405, 0.49147, 0.85171, 0.57116, + 0.85237, 0.62587, 0.84512, 0.68901, 0.82863, 0.73559, 0.80358, + 0.78256, 0.76337, 0.82144, 0.71392, 0.85339, 0.66907, 0.87616, + 0.61172, 0.89733, 0.55436, 0.91081, 0.48844, 0.91697, 0.48745, + 0.90314, 0.48118, 0.81497, 0.48053, 0.80571, 0.49569, 0.79608, + 0.51876, 0.78376, 0.53392, 0.77183, 0.54909, 0.75835, 0.56623, + 0.74026, 0.57941, 0.72101, 0.59062, 0.69752, 0.60446, 0.67173, + 0.61881, 0.62632, 0.62541, 0.5782, 0.61815, 0.51468, 0.60449, + 0.45608, 0.57944, 0.39869, 0.53857, 0.33344, 0.46934, 0.27338, + 0.36782, 0.20548, 0.29398, 0.16121, 0.27684, 0.15813, 0.25641, + 0.16313, 0.22806, 0.17622, 0.17928, 0.19894, 0.13885, 0.18182, + 0.17115, 0.15488, 0.19027, 0.13293, 0.23971, 0.1029, 0.3063, + 0.08327, 0.51839, 0.81456, 0.55926, 0.80917, 0.59948, 0.79801, + 0.5797, 0.83535, 0.54278, 0.87269, 0.38763, 0.1594, 0.5232, + 0.22785, 0.62489, 0.31032, 0.66867, 0.36805, 0.70821, 0.44063, + 0.7294, 0.56269, 0.71104, 0.70206, 0.73505, 0.63361, 0.65455, + 0.76392 + ], + "triangles": [ + 47, 22, 48, 21, 22, 47, 46, 20, 21, 46, 21, 47, 19, 20, 46, 18, + 19, 46, 49, 47, 48, 49, 48, 12, 49, 50, 46, 49, 46, 47, 13, 49, + 12, 14, 50, 49, 13, 14, 49, 50, 17, 18, 50, 18, 46, 15, 50, 14, + 17, 50, 15, 16, 17, 15, 57, 25, 26, 59, 25, 57, 24, 25, 59, 10, + 57, 9, 59, 57, 10, 59, 23, 24, 48, 23, 59, 22, 23, 48, 11, 59, 10, + 12, 59, 11, 48, 59, 12, 56, 55, 5, 30, 55, 56, 56, 5, 6, 29, 30, + 56, 58, 56, 6, 58, 6, 7, 29, 56, 58, 28, 29, 58, 8, 58, 7, 58, 27, + 28, 57, 58, 8, 57, 27, 58, 26, 27, 57, 9, 57, 8, 37, 44, 45, 45, + 36, 37, 38, 43, 44, 0, 51, 45, 51, 36, 45, 37, 38, 44, 39, 42, 43, + 38, 39, 43, 40, 42, 39, 41, 42, 40, 35, 36, 51, 51, 0, 52, 35, 51, + 52, 52, 0, 1, 34, 35, 52, 52, 1, 2, 53, 52, 2, 34, 52, 53, 33, 34, + 53, 53, 2, 3, 54, 53, 3, 33, 53, 54, 32, 33, 54, 4, 55, 54, 4, 54, + 3, 32, 54, 55, 31, 32, 55, 55, 4, 5, 30, 31, 55 + ], + "vertices": [ + 3, 59, 418, 204.84, 0.32637, 141, 71.56, -205.99, 0.66969, 155, + 847.82, -1047.01, 0.00394, 3, 59, 330.87, 101.83, 0.57051, 141, + -15.58, -309, 0.40246, 155, 760.69, -1150.03, 0.02703, 3, 59, + 224.61, 18.52, 0.77208, 141, -121.83, -392.31, 0.18975, 155, + 654.44, -1233.34, 0.03816, 3, 59, 126.21, -36.25, 0.88145, 141, + -220.23, -447.08, 0.06383, 155, 556.04, -1288.11, 0.05472, 4, 59, + 35.93, -65.68, 0.88554, 141, -310.51, -476.51, 0.00696, 155, + 465.76, -1317.53, 0.07173, 60, -127.78, 51.72, 0.03576, 3, 59, + -63.07, -87.64, 0.23554, 155, 366.76, -1339.49, 0.08627, 60, + -31.01, 82, 0.67819, 2, 155, 262.17, -1345.15, 0.08806, 60, 72.73, + 96.51, 0.91194, 2, 155, 190.52, -1343.65, 0.10912, 60, 144.25, + 101.11, 0.89088, 3, 155, 108, -1335.8, 0.10656, 60, 227.14, + 100.29, 0.75303, 61, -91.87, 79.98, 0.14042, 3, 155, 47.35, + -1321.5, 0.10322, 60, 288.78, 91.18, 0.34453, 61, -31.16, 94, + 0.55225, 3, 155, -13.62, -1300.62, 0.08697, 60, 351.3, 75.56, + 0.04335, 61, 32.75, 102.27, 0.86969, 3, 155, -63.68, -1268.45, + 0.0838, 61, 91.88, 95.58, 0.89115, 62, -104.71, 66.91, 0.02505, 3, + 155, -104.47, -1229.47, 0.07093, 61, 145.71, 78.69, 0.6402, 62, + -49.34, 77.7, 0.28887, 3, 155, -133.32, -1194.34, 0.05222, 61, + 187.13, 59.96, 0.25748, 62, -3.99, 80.97, 0.6903, 3, 155, -159.82, + -1149.71, 0.04079, 61, 230.66, 31.67, 0.01946, 62, 47.75, 76.83, + 0.93975, 2, 155, -176.24, -1105.36, 0.03312, 62, 93.44, 64.63, + 0.96688, 2, 155, -182.9, -1054.72, 0.02471, 62, 138.63, 40.82, + 0.97529, 2, 155, -164.77, -1054.47, 0.02104, 62, 128.36, 25.88, + 0.97896, 3, 155, -49.18, -1052.9, 0.00539, 61, 174.3, -104.11, + 0.08529, 62, 62.9, -69.4, 0.90932, 3, 155, -37.04, -1052.73, + 0.00452, 61, 163.49, -109.64, 0.11249, 62, 56.02, -79.41, 0.88299, + 3, 155, -24.76, -1064.68, 0.00505, 61, 147.19, -104.36, 0.17485, + 62, 39.18, -82.53, 0.8201, 3, 155, -9.12, -1082.78, 0.00465, 61, + 125.16, -95.06, 0.35369, 62, 15.37, -84.85, 0.64166, 4, 155, 6.18, + -1094.81, 0.00824, 60, 349.04, -131.2, 0.00111, 61, 106.11, + -91.04, 0.54116, 62, -3.29, -90.4, 0.44949, 4, 155, 23.5, + -1106.89, 0.01589, 60, 330.76, -120.62, 0.00992, 61, 85.22, + -87.87, 0.71088, 62, -23.16, -97.56, 0.2633, 4, 155, 46.83, + -1120.66, 0.02273, 60, 306.34, -108.89, 0.05258, 61, 58.21, + -85.86, 0.82038, 62, -47.87, -108.66, 0.10431, 4, 155, 71.76, + -1131.45, 0.0263, 60, 280.59, -100.25, 0.16615, 61, 31.09, -87.22, + 0.77727, 62, -71.07, -122.78, 0.03028, 4, 155, 102.27, -1140.88, + 0.02901, 60, 249.39, -93.45, 0.40858, 61, -0.45, -92.27, 0.55858, + 62, -96.39, -142.25, 0.00383, 3, 155, 135.75, -1152.41, 0.03115, + 60, 215.05, -84.8, 0.71267, 61, -35.57, -96.75, 0.25618, 3, 155, + 194.91, -1165.04, 0.02487, 60, 155.03, -77.24, 0.95799, 61, + -94.21, -111.62, 0.01713, 3, 59, -172.04, 80.02, 0.0006, 155, + 257.79, -1171.84, 0.01834, 60, 91.81, -75.8, 0.98106, 4, 59, + -88.71, 83.24, 0.19566, 141, -435.15, -327.59, 0.00002, 155, + 341.12, -1168.61, 0.00811, 60, 9.05, -86.08, 0.79621, 3, 59, + -11.68, 91.55, 0.78966, 141, -358.12, -319.28, 0.00982, 60, -67, + -100.9, 0.20052, 3, 59, 64.01, 108.61, 0.93266, 141, -282.43, + -302.22, 0.06473, 60, -140.97, -124.32, 0.00261, 2, 59, 150.32, + 137.48, 0.80926, 141, -196.12, -273.35, 0.19074, 2, 59, 230.44, + 188.22, 0.62804, 141, -116, -222.61, 0.37196, 2, 59, 321.52, + 263.37, 0.3735, 141, -24.92, -147.46, 0.6265, 2, 59, 381.07, + 318.22, 0.17301, 141, 34.63, -92.61, 0.82699, 2, 59, 385.47, + 331.21, 0.12774, 141, 39.03, -79.62, 0.87226, 2, 59, 379.35, + 347.02, 0.08193, 141, 32.91, -63.81, 0.91807, 2, 59, 362.82, + 369.18, 0.03379, 141, 16.38, -41.65, 0.96621, 1, 141, -12.32, + -3.52, 1, 1, 141, 10.95, 26.77, 1, 2, 59, 391.99, 411.92, 0.02045, + 141, 45.55, 1.09, 0.97955, 2, 59, 420.32, 396.49, 0.05013, 141, + 73.88, -14.34, 0.94987, 2, 59, 458.58, 357.59, 0.10321, 141, + 112.14, -53.24, 0.89679, 2, 59, 482.87, 305.95, 0.1462, 141, + 136.43, -104.88, 0.8538, 3, 155, -49.44, -1081.37, 0.0044, 61, + 161.94, -78.47, 0.11385, 62, 39.81, -52.75, 0.88175, 3, 155, + -43.26, -1112.82, 0.00935, 61, 142.46, -53.01, 0.24561, 62, 10.56, + -39.64, 0.74504, 3, 155, -29.5, -1143.98, 0.01681, 61, 116.33, + -31.16, 0.65624, 62, -22.83, -32.88, 0.32695, 3, 155, -77.97, + -1127.49, 0.02483, 61, 167.1, -24.48, 0.0043, 62, 18.63, -2.82, + 0.97087, 2, 155, -126.09, -1097.9, 0.02257, 62, 70.57, 19.37, + 0.97743, 2, 59, 381.45, 246.54, 0.30807, 141, 35.01, -164.29, + 0.69193, 3, 59, 288.92, 145.37, 0.59271, 141, -57.52, -265.46, + 0.4064, 155, 718.75, -1106.49, 0.00089, 3, 59, 178.75, 70.62, + 0.81565, 141, -167.69, -340.21, 0.18036, 155, 608.58, -1181.23, + 0.00399, 4, 59, 102.22, 39.25, 0.9204, 141, -244.22, -371.58, + 0.07577, 155, 532.05, -1212.6, 0.00264, 60, -184.93, -58.46, + 0.00119, 4, 59, 6.34, 11.67, 0.82587, 141, -340.1, -399.16, + 0.00788, 155, 436.17, -1240.19, 0.0008, 60, -91.73, -22.84, + 0.16545, 3, 59, -153.95, -0.07, 0.03805, 155, 275.88, -1251.93, + 0.00408, 60, 66.98, 2.46, 0.95787, 3, 155, 93.76, -1232.79, + 0.01827, 60, 250.07, -1.14, 0.55837, 61, -33.5, -6.08, 0.42336, 3, + 155, 182.88, -1253.66, 0.0108, 60, 159.5, 12.08, 0.93928, 61, + -122.65, -26.83, 0.04992, 4, 155, 13.96, -1187.34, 0.02308, 60, + 333.43, -39.66, 0.19384, 61, 58.17, -11.52, 0.59623, 62, -83.32, + -43.32, 0.18685 + ], + "hull": 46, + "edges": [ + 82, 84, 84, 86, 86, 88, 88, 90, 90, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, + 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, + 26, 26, 28, 28, 30, 30, 32, 38, 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 36, 38, 36, + 92, 92, 94, 94, 96, 96, 98, 98, 100, 32, 34, 34, 36, 100, 34, 60, + 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, + 78, 78, 80, 80, 82 + ], + "width": 765, + "height": 1310 + } + }, + "前发/发5": { + "发5": { + "type": "mesh", + "uvs": [ + 0.44759, 0.16323, 0.48889, 0.17831, 0.54693, 0.21543, 0.58153, + 0.28387, 0.62506, 0.37146, 0.66748, 0.45208, 0.69092, 0.51298, + 0.71212, 0.5733, 0.71994, 0.64304, 0.71101, 0.69176, 0.68533, + 0.73178, 0.65855, 0.76832, 0.62618, 0.80545, 0.59492, 0.83097, + 0.55809, 0.85649, 0.52349, 0.84953, 0.52795, 0.82749, 0.52795, + 0.80139, 0.5179, 0.75788, 0.50228, 0.72192, 0.47661, 0.68132, + 0.44759, 0.64072, 0.39736, 0.58272, 0.35829, 0.52703, 0.32145, + 0.46265, 0.30471, 0.40117, 0.2835, 0.32693, 0.28127, 0.27403, + 0.28462, 0.20559, 0.29913, 0.15687, 0.36611, 0.14177, 0.38827, + 0.42658, 0.48683, 0.48526, 0.55956, 0.57526, 0.57966, 0.63245, + 0.59018, 0.6777, 0.59018, 0.72295, 0.57965, 0.75875, 0.57391, + 0.7866, 0.56147, 0.81245, 0.54248, 0.83099 + ], + "triangles": [ + 15, 40, 14, 14, 40, 13, 15, 16, 40, 40, 39, 13, 40, 16, 39, 13, + 39, 12, 16, 17, 39, 39, 38, 12, 39, 17, 38, 12, 38, 11, 17, 18, + 38, 38, 37, 11, 38, 18, 37, 11, 37, 36, 37, 18, 36, 10, 11, 36, + 18, 19, 36, 10, 36, 9, 36, 35, 9, 36, 19, 35, 19, 20, 35, 9, 35, + 8, 20, 34, 35, 20, 21, 34, 35, 34, 8, 34, 7, 8, 21, 33, 34, 21, + 22, 33, 34, 33, 7, 33, 22, 32, 33, 6, 7, 22, 23, 32, 33, 32, 6, + 23, 24, 32, 32, 5, 6, 24, 31, 32, 5, 32, 4, 24, 25, 31, 32, 31, 4, + 3, 4, 31, 26, 31, 25, 3, 31, 26, 27, 1, 2, 1, 27, 28, 3, 26, 2, + 28, 0, 1, 0, 28, 30, 28, 29, 30, 2, 26, 27 + ], + "vertices": [ + 2, 71, 80.41, -12.41, 0.97333, 154, -517.41, -121.33, 0.02667, 3, + 71, 68.05, -29, 0.9731, 154, -505.04, -104.74, 0.02667, 72, + -100.4, 47.64, 0.00024, 3, 71, 38.11, -51.97, 0.91489, 154, + -475.1, -81.77, 0.02667, 72, -65.48, 61.96, 0.05844, 3, 71, + -16.27, -64.65, 0.36902, 154, -420.73, -69.09, 0.0219, 72, -9.68, + 59.93, 0.60908, 4, 71, -85.84, -80.56, 0.00061, 154, -351.15, + -53.18, 0.01331, 72, 61.63, 57.05, 0.98459, 155, 285.98, -1357.54, + 0.00148, 3, 72, 127.55, 55.31, 0.98629, 155, 221.91, -1373.15, + 0.01039, 73, -91.86, 40.95, 0.00332, 3, 72, 176.33, 50.62, + 0.68334, 155, 173.61, -1381.41, 0.01989, 73, -43.47, 48.66, + 0.29677, 3, 72, 224.41, 45.19, 0.10124, 155, 125.79, -1388.78, + 0.03056, 73, 4.43, 55.48, 0.8682, 2, 155, 70.7, -1390.44, 0.03534, + 73, 59.54, 56.52, 0.96466, 3, 155, 32.37, -1385.71, 0.03731, 73, + 97.8, 51.35, 0.94987, 74, -61.75, 40.68, 0.01282, 3, 155, 1.1, + -1374.31, 0.03482, 73, 128.94, 39.59, 0.71736, 74, -28.63, 37.35, + 0.24782, 3, 155, -27.41, -1362.53, 0.03423, 73, 157.32, 27.48, + 0.15503, 74, 1.91, 32.96, 0.81074, 2, 155, -56.32, -1348.44, + 0.03227, 74, 33.4, 26.44, 0.96773, 2, 155, -76.09, -1335.07, + 0.03125, 74, 55.86, 18.36, 0.96875, 2, 155, -95.79, -1319.41, + 0.03624, 74, 78.82, 8.05, 0.96376, 2, 155, -89.91, -1305.39, + 0.03123, 74, 76.57, -7, 0.96877, 2, 155, -72.58, -1307.7, 0.02658, + 74, 59.2, -9.03, 0.97342, 2, 155, -51.99, -1308.28, 0.02046, 74, + 39.11, -13.55, 0.97954, 3, 155, -17.57, -1305.12, 0.01273, 73, + 146.82, -29.82, 0.1773, 74, 6.53, -25.11, 0.80997, 3, 155, 10.97, + -1299.5, 0.01111, 73, 118.22, -35.1, 0.81304, 74, -19.74, -37.58, + 0.17585, 4, 72, 278.09, -71.88, 0.00001, 155, 43.29, -1289.87, + 0.01389, 73, 85.79, -44.36, 0.98575, 74, -48.69, -54.89, 0.00035, + 3, 72, 243.98, -74.01, 0.02407, 155, 75.64, -1278.87, 0.0126, 73, + 53.31, -54.99, 0.96332, 3, 72, 194.22, -80.5, 0.32668, 155, + 121.96, -1259.57, 0.00803, 73, 6.78, -73.77, 0.66528, 3, 72, + 147.53, -83.14, 0.77013, 155, 166.33, -1244.78, 0.00474, 73, + -37.75, -88.04, 0.22512, 3, 72, 94.54, -82.92, 0.98034, 155, + 217.53, -1231.1, 0.00098, 73, -89.11, -101.13, 0.01869, 2, 71, + -105.62, 51.38, 0.00701, 72, 46.11, -75.47, 0.99299, 3, 71, + -46.82, 58.44, 0.2892, 154, -390.18, -192.18, 0.0219, 72, -12.48, + -66.86, 0.6889, 3, 71, -5.08, 58.19, 0.7698, 154, -431.92, + -191.93, 0.0219, 72, -52.69, -55.68, 0.20829, 3, 71, 48.87, 55.31, + 0.9779, 154, -485.86, -189.05, 0.0219, 72, -103.99, -38.76, + 0.0002, 2, 71, 87.13, 48.29, 0.9781, 154, -524.12, -182.03, + 0.0219, 2, 71, 98.27, 20.51, 0.9781, 154, -535.27, -154.25, + 0.0219, 2, 72, 75.21, -48.47, 0.99913, 73, -116.47, -72.64, + 0.00087, 3, 72, 131.21, -23.16, 0.97291, 155, 197.81, -1298.38, + 0.0018, 73, -68.62, -34.08, 0.02529, 3, 72, 207.81, -15.14, + 0.02397, 155, 125.99, -1326.21, 0.00379, 73, 3.51, -7.08, 0.97223, + 2, 155, 80.66, -1333.18, 0.00658, 73, 48.92, -0.62, 0.99342, 2, + 155, 44.85, -1336.5, 0.013, 73, 84.77, 2.28, 0.987, 2, 155, 9.16, + -1335.51, 0.01605, 73, 120.44, 0.88, 0.98395, 2, 155, -18.96, + -1330.4, 0.02223, 74, 1.64, -0.25, 0.97777, 2, 155, -40.85, + -1327.44, 0.0267, 74, 23.59, 2.27, 0.9733, 2, 155, -61.11, + -1321.77, 0.02816, 74, 44.62, 1.77, 0.97184, 2, 155, -75.51, + -1313.58, 0.03006, 74, 60.59, -2.61, 0.96994 + ], + "hull": 31, + "edges": [ + 60, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 50, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 30, 80, 80, 78 + ], + "width": 410, + "height": 789 + } + }, + "前发/发6": { + "发6": { + "type": "mesh", + "uvs": [ + 0.35994, 0.72467, 0.40382, 0.65528, 0.43381, 0.58762, 0.4532, + 0.53603, 0.45932, 0.49612, 0.4583, 0.43594, 0.44606, 0.36901, + 0.41748, 0.30207, 0.40625, 0.26461, 0.43993, 0.21979, 0.50526, + 0.19154, 0.55731, 0.18479, 0.61168, 0.20177, 0.65046, 0.24046, + 0.67189, 0.28037, 0.68553, 0.35991, 0.68655, 0.42991, 0.68451, + 0.50115, 0.66613, 0.57115, 0.62123, 0.64054, 0.53957, 0.71791, + 0.45282, 0.77379, 0.34463, 0.82046, 0.30788, 0.79774 + ], + "triangles": [ + 10, 12, 9, 10, 11, 12, 9, 12, 7, 2, 3, 18, 18, 3, 17, 17, 3, 4, + 16, 17, 5, 17, 4, 5, 5, 15, 16, 15, 6, 14, 13, 14, 7, 6, 15, 5, + 13, 7, 12, 6, 7, 14, 7, 8, 9, 22, 23, 21, 23, 0, 21, 21, 0, 20, 0, + 1, 20, 20, 1, 19, 1, 2, 19, 19, 2, 18 + ], + "vertices": [ + 1, 52, 91.39, -17.89, 1, 2, 52, 46.77, -25.64, 0.99986, 51, 237.8, + -55.84, 0.00014, 2, 52, 5.66, -37.25, 0.77163, 51, 196.59, -44.61, + 0.22837, 2, 52, -25.03, -47.18, 0.19299, 51, 165.17, -37.32, + 0.80701, 2, 52, -47.12, -57.68, 0.01546, 51, 140.83, -34.93, + 0.98454, 1, 51, 104.12, -35.1, 1, 2, 51, 63.27, -39.37, 0.99796, + 50, -84.45, 36.61, 0.00204, 2, 51, 22.38, -49.63, 0.84113, 50, + -43.35, 45.96, 0.15887, 2, 51, -0.49, -53.62, 0.60943, 50, -20.39, + 49.44, 0.39057, 2, 51, -27.77, -41.11, 0.22916, 50, 6.6, 36.32, + 0.77084, 2, 51, -44.87, -17.04, 0.00379, 50, 23.15, 11.87, + 0.99621, 2, 51, -48.88, 2.09, 0.0025, 50, 26.74, -7.34, 0.9975, 2, + 51, -38.41, 21.98, 0.16267, 50, 15.83, -26.99, 0.83733, 2, 51, + -14.73, 36.09, 0.66682, 50, -8.16, -40.56, 0.33318, 2, 51, 9.66, + 43.82, 0.95537, 50, -32.72, -47.75, 0.04463, 1, 51, 58.21, 48.55, + 1, 1, 51, 100.91, 48.68, 1, 2, 52, -86.66, 14.96, 0.00064, 51, + 144.36, 47.69, 0.99936, 2, 52, -46.5, 30.95, 0.23964, 51, 187.02, + 40.71, 0.76036, 2, 52, -1.68, 38.38, 0.91648, 51, 229.26, 23.99, + 0.08352, 1, 52, 54.2, 36.7, 1, 1, 52, 99.76, 26.72, 1, 1, 52, + 144.51, 7.1, 1, 1, 52, 139.47, -11.57, 1 + ], + "hull": 24, + "edges": [ + 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, + 4, 2, 2, 0, 0, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, + 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22 + ], + "width": 367, + "height": 610 + } + }, + "前发/发7": { + "发7": { + "type": "mesh", + "uvs": [ + 0.50555, 0.11582, 0.61209, 0.17361, 0.69321, 0.24518, 0.76101, + 0.34287, 0.77554, 0.44071, 0.77675, 0.49521, 0.78159, 0.54972, + 0.78644, 0.59963, 0.79007, 0.64888, 0.79007, 0.68696, 0.77796, + 0.74541, 0.76222, 0.80122, 0.73558, 0.85047, 0.70774, 0.88134, + 0.68473, 0.88396, 0.58788, 0.8577, 0.52855, 0.82946, 0.45712, + 0.79466, 0.39174, 0.75197, 0.3421, 0.70863, 0.30456, 0.66201, + 0.27187, 0.60882, 0.24039, 0.53724, 0.22586, 0.50001, 0.20528, + 0.38772, 0.21134, 0.28659, 0.24887, 0.21501, 0.33846, 0.14803, + 0.43532, 0.10994, 0.44259, 0.15456, 0.45712, 0.20578, 0.4777, + 0.26094, 0.49102, 0.36798, 0.51644, 0.46845, 0.55398, 0.56564, + 0.57335, 0.62408, 0.59151, 0.66939, 0.60382, 0.70017, 0.63556, + 0.76746, 0.6673, 0.81989 + ], + "triangles": [ + 12, 13, 14, 14, 15, 39, 12, 14, 39, 15, 16, 39, 12, 39, 11, 16, + 38, 39, 16, 17, 38, 39, 38, 11, 11, 38, 10, 38, 17, 37, 17, 18, + 37, 38, 37, 10, 37, 18, 36, 10, 37, 9, 37, 36, 9, 18, 19, 36, 36, + 19, 35, 9, 36, 8, 19, 20, 35, 36, 35, 8, 20, 21, 35, 35, 7, 8, 21, + 34, 35, 35, 34, 7, 21, 22, 34, 34, 6, 7, 22, 33, 34, 34, 5, 6, 34, + 33, 5, 22, 23, 33, 33, 23, 24, 33, 24, 32, 32, 25, 31, 25, 32, 24, + 33, 4, 5, 33, 32, 4, 32, 3, 4, 32, 2, 3, 32, 31, 2, 25, 26, 31, + 26, 30, 31, 30, 27, 29, 30, 26, 27, 31, 1, 2, 31, 30, 1, 30, 29, + 1, 29, 0, 1, 27, 28, 29, 29, 28, 0 + ], + "vertices": [ + 3, 141, 13.44, -28.12, 0.98995, 47, 342.36, -5.5, 0.01002, 154, + -854.88, -541.57, 0.00003, 2, 141, -46.11, -84.44, 0.76198, 47, + 282.81, -61.82, 0.23802, 3, 141, -119.11, -126.55, 0.47743, 47, + 209.81, -103.93, 0.51825, 155, 657.16, -967.57, 0.00432, 4, 141, + -218.07, -160.68, 0.20713, 47, 110.85, -138.06, 0.74046, 155, + 558.19, -1001.71, 0.00648, 48, -139.02, 151.63, 0.04592, 4, 141, + -316.39, -165.85, 0.04633, 47, 12.53, -143.23, 0.56282, 155, + 459.88, -1006.87, 0.00358, 48, -41.16, 140.77, 0.38727, 4, 141, + -371.06, -164.98, 0.00842, 47, -42.14, -142.36, 0.26839, 155, + 405.21, -1006, 0.00229, 48, 12.64, 131.05, 0.7209, 5, 141, + -425.78, -166.09, 0.00012, 47, -96.86, -143.47, 0.06167, 155, + 350.49, -1007.11, 0.00472, 48, 66.81, 123.27, 0.9247, 49, -124.33, + 130.54, 0.00879, 4, 47, -146.97, -144.71, 0.00482, 155, 300.38, + -1008.35, 0.0082, 48, 116.46, 116.36, 0.90432, 49, -75.26, 120.34, + 0.08266, 3, 155, 250.95, -1008.95, 0.0173, 48, 165.34, 108.93, + 0.67368, 49, -26.99, 109.67, 0.30902, 3, 155, 212.76, -1007.88, + 0.02115, 48, 202.84, 101.69, 0.39533, 49, 9.95, 99.93, 0.58352, 3, + 155, 154.35, -999.66, 0.02188, 48, 259.15, 84.1, 0.06338, 49, + 64.96, 78.63, 0.91474, 3, 155, 98.62, -989.54, 0.02358, 48, 312.5, + 65.07, 0.00006, 49, 116.92, 56.09, 0.97635, 2, 155, 49.65, + -973.68, 0.01641, 49, 160.99, 29.49, 0.98359, 2, 155, 19.13, + -957.67, 0.01293, 49, 187.07, 6.96, 0.98707, 2, 155, 16.84, + -945.09, 0.01197, 49, 186.43, -5.81, 0.98803, 2, 154, -109.82, + -517.56, 0.00236, 49, 147.53, -50.05, 0.99764, 3, 154, -139.03, + -549.03, 0.00376, 48, 316.19, -65.11, 0.00606, 49, 111.92, -74.05, + 0.99018, 3, 154, -175.01, -586.9, 0.00866, 48, 274.55, -96.64, + 0.09534, 49, 68.27, -102.73, 0.896, 3, 154, -218.8, -621.26, + 0.01594, 48, 225.76, -123.44, 0.35654, 49, 17.81, -126.22, + 0.62752, 4, 47, -249.52, 99.97, 0.00207, 154, -263, -647.04, + 0.0214, 48, 177.96, -141.71, 0.63779, 49, -31.11, -141.26, + 0.33874, 4, 47, -202.2, 119.08, 0.02426, 154, -310.32, -666.15, + 0.02049, 48, 128.17, -152.89, 0.82026, 49, -81.53, -149.09, + 0.13499, 4, 47, -148.38, 135.36, 0.10912, 154, -364.14, -682.44, + 0.02004, 48, 72.42, -160.23, 0.8416, 49, -137.65, -152.7, 0.02925, + 5, 141, -405.06, 127.86, 0.00882, 47, -76.13, 150.48, 0.37148, + 154, -436.38, -697.55, 0.02178, 48, -1.32, -163.43, 0.59768, 49, + -211.44, -150.97, 0.00024, 4, 141, -367.5, 134.72, 0.02816, 47, + -38.58, 157.34, 0.53858, 154, -473.94, -704.41, 0.01843, 48, + -39.48, -164.1, 0.41484, 4, 141, -254.61, 142.77, 0.19077, 47, + 74.31, 165.39, 0.7516, 154, -586.83, -712.46, 0.01345, 48, + -152.19, -153.73, 0.04418, 4, 141, -153.31, 136.65, 0.43287, 47, + 175.61, 159.27, 0.55832, 154, -688.13, -706.34, 0.00878, 48, + -251.16, -131.26, 0.00002, 3, 141, -82.11, 114.24, 0.64132, 47, + 246.81, 136.86, 0.35764, 154, -759.33, -683.93, 0.00104, 3, 141, + -16.32, 63.64, 0.88841, 47, 312.61, 86.26, 0.11031, 154, -825.12, + -633.33, 0.00127, 2, 141, 20.4, 9.91, 0.99991, 154, -861.84, + -579.6, 0.00009, 3, 141, -24.45, 7.2, 0.93698, 47, 304.47, 29.82, + 0.05643, 154, -816.99, -576.89, 0.00659, 3, 141, -76.02, 0.74, + 0.75161, 47, 252.9, 23.36, 0.23941, 154, -765.42, -570.43, + 0.00898, 3, 141, -131.64, -8.91, 0.53274, 47, 197.28, 13.71, + 0.45607, 154, -709.8, -560.78, 0.0112, 3, 141, -239.16, -13.16, + 0.18849, 47, 89.76, 9.46, 0.79315, 154, -602.28, -556.53, 0.01836, + 3, 47, -11.35, -1.56, 0.79226, 154, -501.16, -545.52, 0.02048, 48, + -40.58, -2.89, 0.18726, 3, 47, -109.36, -19.25, 0.00001, 154, + -403.15, -527.82, 0.0199, 48, 59.01, -1.34, 0.98009, 2, 154, + -344.26, -518.93, 0.01729, 48, 118.56, -2.11, 0.98271, 2, 154, + -298.56, -510.32, 0.01225, 48, 165.05, -1.03, 0.98775, 3, 154, + -267.51, -504.48, 0.00783, 48, 196.64, -0.31, 0.05461, 49, -3.04, + -1.42, 0.93756, 1, 49, 66.62, -1.91, 1, 2, 155, 81.35, -937.4, + 0.00334, 49, 121.86, 1.39, 0.99666 + ], + "hull": 29, + "edges": [ + 56, 54, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, + 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, + 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, + 6, 6, 4, 4, 2, 2, 0, 0, 56 + ], + "width": 544, + "height": 1003 + } + }, + "前发/发8": { + "发8": { + "type": "mesh", + "uvs": [ + 0.8116, 0.54276, 0.81434, 0.60031, 0.81434, 0.64659, 0.80703, + 0.69537, 0.78874, 0.75417, 0.76497, 0.79169, 0.72291, 0.8286, + 0.70919, 0.82359, 0.71376, 0.78669, 0.71651, 0.74854, 0.71285, + 0.69913, 0.70554, 0.65535, 0.69273, 0.60593, 0.6717, 0.54089, + 0.64945, 0.4923, 0.61196, 0.41787, 0.57813, 0.35345, 0.54338, + 0.29153, 0.51047, 0.21961, 0.48395, 0.15456, 0.46292, 0.08138, + 0.45378, 0.14955, 0.44189, 0.22023, 0.42726, 0.29966, 0.40806, + 0.38097, 0.3995, 0.43481, 0.39584, 0.49485, 0.39584, 0.56741, + 0.39767, 0.6262, 0.40498, 0.67061, 0.4123, 0.71877, 0.42693, + 0.78319, 0.44156, 0.82322, 0.47447, 0.86387, 0.44613, 0.87763, + 0.37207, 0.8376, 0.31995, 0.79632, 0.27423, 0.74253, 0.24131, + 0.69437, 0.20931, 0.63308, 0.18828, 0.56616, 0.18332, 0.50531, + 0.18332, 0.44339, 0.18789, 0.38085, 0.21532, 0.2864, 0.2583, + 0.20509, 0.3351, 0.11503, 0.40585, 0.07405, 0.4366, 0.05624, + 0.47226, 0.05249, 0.49161, 0.07198, 0.53638, 0.11706, 0.61319, + 0.18149, 0.68908, 0.26154, 0.73388, 0.32346, 0.76771, 0.39453, + 0.80063, 0.47584 + ], + "triangles": [ + 35, 32, 34, 34, 32, 33, 35, 31, 32, 35, 36, 31, 31, 36, 30, 36, + 37, 30, 30, 37, 29, 37, 38, 29, 38, 28, 29, 38, 39, 28, 39, 27, + 28, 39, 40, 27, 26, 27, 41, 27, 40, 41, 41, 42, 26, 26, 42, 25, + 42, 43, 25, 25, 43, 24, 43, 44, 24, 24, 44, 23, 44, 45, 23, 23, + 45, 22, 45, 46, 22, 22, 46, 21, 18, 19, 52, 19, 51, 52, 51, 19, + 20, 20, 50, 51, 46, 47, 21, 21, 47, 20, 47, 48, 20, 20, 49, 50, + 20, 48, 49, 14, 15, 55, 15, 54, 55, 15, 16, 54, 16, 53, 54, 16, + 17, 53, 17, 52, 53, 17, 18, 52, 5, 6, 8, 6, 7, 8, 4, 5, 9, 5, 8, + 9, 3, 4, 10, 4, 9, 10, 10, 11, 3, 3, 11, 2, 11, 12, 2, 12, 1, 2, + 12, 0, 1, 12, 13, 0, 13, 56, 0, 13, 14, 56, 14, 55, 56 + ], + "vertices": [ + 2, 57, 56.98, 47.45, 0.95784, 155, 333.69, -1052.78, 0.04216, 2, + 57, 109.89, 43.93, 0.96138, 155, 280.67, -1053.03, 0.03862, 3, 57, + 152.31, 39.72, 0.87994, 155, 238.06, -1051.84, 0.03603, 58, + -48.93, 34.34, 0.08403, 3, 57, 196.56, 30.69, 0.16738, 155, + 193.27, -1045.98, 0.03277, 58, -3.82, 36.45, 0.79985, 2, 155, + 139.47, -1032.95, 0.03451, 58, 51.44, 33.09, 0.96549, 2, 155, + 105.34, -1017.02, 0.02873, 58, 87.84, 23.4, 0.97127, 2, 155, 72.1, + -989.58, 0.02983, 58, 125.38, 2.24, 0.97017, 2, 155, 76.95, + -981.07, 0.0306, 58, 122.11, -6.99, 0.9694, 2, 155, 110.84, + -984.9, 0.02861, 58, 88.07, -9.18, 0.97139, 2, 155, 145.92, + -987.61, 0.02975, 58, 53.06, -12.69, 0.97025, 3, 57, 194.14, + -28.7, 0.02246, 155, 191.47, -986.58, 0.03079, 58, 8.4, -21.72, + 0.94675, 3, 57, 153.55, -29.29, 0.81295, 155, 231.91, -983.09, + 0.03005, 58, -30.79, -32.26, 0.157, 2, 57, 107.47, -32.82, 0.9801, + 155, 277.62, -976.3, 0.0199, 3, 57, 46.55, -40.08, 0.98672, 155, + 337.88, -964.73, 0.01307, 56, -119.26, 27.16, 0.00021, 3, 57, + 0.63, -49.61, 0.82338, 155, 383, -951.96, 0.00995, 56, -74.14, + 39.93, 0.16667, 4, 57, -69.92, -66.33, 0.09197, 155, 452.18, + -930.26, 0.00314, 56, -4.96, 61.63, 0.88536, 141, -324.09, -89.24, + 0.01953, 3, 155, 512.08, -910.61, 0.00027, 56, 54.94, 81.28, + 0.88004, 141, -264.19, -69.59, 0.11969, 2, 56, 112.56, 101.57, + 0.72801, 141, -206.57, -49.3, 0.27199, 3, 155, 636.5, -871.44, + 0.00009, 56, 179.36, 120.45, 0.5123, 141, -139.77, -30.42, + 0.48761, 2, 56, 239.71, 135.47, 0.29059, 141, -79.42, -15.39, + 0.70941, 3, 56, 307.45, 146.84, 0.01206, 141, -11.68, -4.03, + 0.97815, 53, 320.8, -127.63, 0.00979, 2, 141, -74.28, 3.48, + 0.77968, 53, 258.2, -120.12, 0.22032, 2, 141, -139.14, 12.78, + 0.53888, 53, 193.34, -110.82, 0.46112, 2, 141, -212.01, 24.04, + 0.29494, 53, 120.47, -99.56, 0.70506, 3, 141, -286.53, 38.22, + 0.10294, 53, 45.95, -85.38, 0.87511, 54, -95.61, 97.99, 0.02194, + 3, 141, -335.95, 44.99, 0.02449, 53, -3.47, -78.61, 0.73936, 54, + -47.91, 83.4, 0.23615, 3, 141, -391.16, 48.84, 0.00043, 53, + -58.68, -74.76, 0.22605, 54, 5.98, 70.78, 0.77352, 2, 53, -125.48, + -72.9, 0.00057, 54, 71.62, 58.26, 0.99942, 2, 54, 125.02, 49.24, + 0.99953, 55, -74.21, 67.62, 0.00047, 2, 54, 166.06, 46.11, + 0.84223, 55, -35.48, 53.69, 0.15777, 2, 54, 210.49, 42.32, + 0.18764, 55, 6.35, 38.23, 0.81236, 1, 55, 63.65, 20.28, 1, 1, 55, + 100.79, 12.27, 1, 1, 55, 143.54, 14.33, 1, 1, 55, 147.02, -7.29, + 1, 1, 55, 93.34, -32.86, 1, 1, 55, 44.73, -45.52, 1, 2, 54, + 215.69, -47.22, 0.2685, 55, -12.44, -49.48, 0.7315, 2, 54, 168.24, + -59.28, 0.86931, 55, -61.4, -48.49, 0.13069, 1, 54, 109.01, + -68.51, 1, 1, 54, 45.98, -69.97, 1, 2, 53, -64.57, 59.34, 0.16183, + 54, -9.65, -62.54, 0.83817, 3, 141, -340.05, 181.35, 0.00231, 53, + -7.57, 57.75, 0.78055, 54, -65.67, -51.86, 0.21714, 2, 141, + -282.55, 176.86, 0.05545, 53, 49.93, 53.26, 0.94455, 2, 141, + -196.08, 157.16, 0.24667, 53, 136.4, 33.56, 0.75333, 2, 141, + -121.98, 128.01, 0.47258, 53, 210.5, 4.41, 0.52742, 2, 141, + -40.41, 77.33, 0.78275, 53, 292.07, -46.27, 0.21725, 2, 141, + -3.93, 31.73, 0.95142, 53, 328.55, -91.88, 0.04858, 2, 141, 11.93, + 11.9, 0.99674, 53, 344.41, -111.7, 0.00326, 2, 56, 333.89, 140.22, + 0.00044, 141, 14.76, -10.65, 0.99956, 2, 56, 315.6, 128.53, + 0.03003, 141, -3.53, -22.34, 0.96997, 3, 155, 730.45, -890.4, + 0.00115, 56, 273.31, 101.49, 0.22159, 141, -45.82, -49.37, + 0.77726, 3, 155, 669.79, -937.11, 0.02192, 56, 212.65, 54.78, + 0.49119, 141, -106.48, -96.09, 0.48689, 3, 155, 594.75, -982.85, + 0.03055, 56, 137.61, 9.04, 0.73999, 141, -181.52, -141.82, + 0.22946, 3, 155, 536.95, -1009.47, 0.04544, 56, 79.82, -17.58, + 0.86346, 141, -239.31, -168.45, 0.0911, 4, 57, -81.6, 33.44, + 0.03784, 155, 470.93, -1028.95, 0.04519, 56, 13.79, -37.06, + 0.9116, 141, -305.34, -187.93, 0.00537, 3, 57, -5.04, 46.67, + 0.85798, 155, 395.5, -1047.59, 0.04789, 56, -61.64, -55.7, 0.09413 + ], + "hull": 57, + "edges": [ + 98, 96, 92, 90, 90, 88, 88, 86, 86, 84, 84, 82, 82, 80, 80, 78, + 78, 76, 76, 74, 74, 72, 72, 70, 70, 68, 68, 66, 66, 64, 64, 62, + 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, 52, 50, 50, 48, 48, 46, + 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, + 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, + 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 112, 112, 110, + 110, 108, 108, 106, 106, 104, 104, 102, 98, 100, 100, 102, 96, 94, + 94, 92 + ], + "width": 630, + "height": 921 + } + }, + "前发/发9": { + "发9": { + "type": "mesh", + "uvs": [ + 0.26196, 0.86485, 0.17395, 0.72201, 0.14668, 0.55929, 0.17023, + 0.41826, 0.31031, 0.26638, 0.54707, 0.15519, 0.72185, 0.10999, + 0.85696, 0.10727, 0.79622, 0.28356, 0.69086, 0.50956, 0.58797, + 0.66054, 0.47641, 0.76992, 0.34749, 0.86394, 0.2632, 0.89016, + 0.32766, 0.81241, 0.39584, 0.71659, 0.4417, 0.59454, 0.46897, + 0.45352, 0.34997, 0.64969, 0.32394, 0.54573, 0.32518, 0.44719, + 0.36857, 0.33057, 0.42311, 0.24197, 0.62268, 0.45984 + ], + "triangles": [ + 22, 4, 5, 8, 6, 7, 5, 6, 8, 21, 4, 22, 3, 4, 21, 20, 3, 21, 22, + 23, 17, 8, 22, 5, 21, 22, 17, 20, 21, 17, 8, 23, 22, 9, 23, 8, 20, + 2, 3, 19, 20, 17, 19, 2, 20, 16, 19, 17, 18, 19, 16, 23, 16, 17, + 9, 16, 23, 9, 10, 16, 15, 18, 16, 15, 16, 10, 18, 1, 2, 18, 2, 19, + 1, 18, 15, 11, 15, 10, 14, 1, 15, 14, 15, 11, 12, 14, 11, 0, 1, + 14, 0, 14, 12, 13, 0, 12 + ], + "vertices": [ + 2, 154, -119.17, -1029.17, 0.56678, 155, 54, -381.55, 0.43322, 2, + 154, -262.29, -1088.74, 0.56576, 155, 197.12, -321.97, 0.43424, 2, + 154, -423.87, -1103.93, 0.5492, 155, 358.7, -306.78, 0.4508, 2, + 154, -562.96, -1083.04, 0.52683, 155, 497.79, -327.68, 0.47317, 2, + 154, -710.44, -977.75, 0.50941, 155, 645.27, -432.96, 0.49059, 2, + 154, -815.71, -803.8, 0.53048, 155, 750.54, -606.91, 0.46952, 2, + 154, -856.92, -676.41, 0.52095, 155, 791.75, -734.3, 0.47905, 2, + 154, -856.89, -578.82, 0.54286, 155, 791.72, -831.89, 0.45714, 2, + 154, -683.66, -627.53, 0.5562, 155, 618.49, -783.19, 0.4438, 2, + 154, -462.12, -709.81, 0.57574, 155, 396.95, -700.9, 0.42426, 2, + 154, -314.79, -788.24, 0.58628, 155, 249.62, -622.48, 0.41372, 2, + 154, -208.78, -871.77, 0.58248, 155, 143.61, -538.94, 0.41752, 2, + 154, -118.34, -967.41, 0.57452, 155, 53.17, -443.3, 0.42548, 2, + 154, -94.09, -1028.97, 0.57048, 155, 28.92, -381.74, 0.42952, 2, + 154, -169.73, -980.3, 0.57023, 155, 104.56, -430.41, 0.42977, 2, + 154, -263.19, -928.45, 0.58751, 155, 198.02, -482.26, 0.41249, 2, + 154, -383.04, -891.98, 0.58242, 155, 317.87, -518.73, 0.41758, 2, + 154, -522.06, -868.4, 0.57617, 155, 456.89, -542.31, 0.42383, 2, + 154, -330.32, -959.71, 0.58353, 155, 265.15, -451.01, 0.41647, 2, + 154, -433.72, -975.62, 0.57647, 155, 368.55, -435.09, 0.42353, 2, + 154, -531.21, -972.01, 0.5681, 155, 466.04, -438.71, 0.4319, 2, + 154, -645.75, -937.47, 0.50283, 155, 580.58, -473.24, 0.49717, 2, + 154, -732.32, -895.66, 0.5, 155, 667.15, -515.05, 0.5, 2, 154, + -512.7, -757.64, 0.57883, 155, 447.53, -653.07, 0.42117 + ], + "hull": 14, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, + 20, 20, 22, 22, 24, 24, 26, 0, 26 + ], + "width": 722, + "height": 990 + } + }, + "前发/发10": { + "发10": { + "type": "mesh", + "uvs": [ + 0.82602, 0.56216, 0.81921, 0.68143, 0.78924, 0.79978, 0.73475, + 0.88206, 0.67345, 0.88299, 0.6176, 0.81642, 0.53178, 0.73321, + 0.44051, 0.61486, 0.3397, 0.4845, 0.25933, 0.35228, 0.19394, + 0.20898, 0.13128, 0.11652, 0.25388, 0.11097, 0.43778, 0.16552, + 0.5958, 0.24503, 0.71431, 0.34211, 0.78787, 0.43734, 0.71023, + 0.44751, 0.69933, 0.58713, 0.66664, 0.69253, 0.61351, 0.77111, + 0.50181, 0.45769, 0.53586, 0.5372, 0.62305, 0.53258, 0.59444, + 0.45491 + ], + "triangles": [ + 3, 5, 2, 2, 19, 1, 1, 18, 0, 17, 16, 0, 17, 15, 16, 18, 17, 0, 20, + 19, 2, 6, 20, 5, 20, 6, 19, 19, 7, 22, 19, 22, 18, 19, 6, 7, 18, + 22, 23, 22, 8, 21, 22, 7, 8, 18, 23, 17, 22, 24, 23, 22, 21, 24, + 23, 24, 17, 8, 9, 21, 24, 21, 14, 17, 24, 15, 14, 15, 24, 9, 14, + 21, 9, 13, 14, 9, 10, 13, 10, 12, 13, 10, 11, 12, 5, 20, 2, 4, 5, + 3, 19, 18, 1 + ], + "vertices": [ + 2, 154, -411.42, -137.11, 0.47333, 155, 346.25, -1273.6, 0.52667, + 2, 154, -296.14, -144.81, 0.47333, 155, 230.97, -1265.91, 0.52667, + 2, 154, -182.17, -167.68, 0.47333, 155, 117, -1243.03, 0.52667, 2, + 154, -103.55, -205.69, 0.47333, 155, 38.38, -1205.02, 0.52667, 2, + 154, -103.78, -245.97, 0.50762, 155, 38.61, -1164.74, 0.49238, 2, + 154, -169.22, -280.86, 0.53143, 155, 104.05, -1129.86, 0.46857, 2, + 154, -251.31, -334.97, 0.54857, 155, 186.14, -1075.74, 0.45143, 2, + 154, -367.49, -391.72, 0.55333, 155, 302.32, -1019, 0.44667, 2, + 154, -495.48, -454.4, 0.57238, 155, 430.31, -956.31, 0.42762, 2, + 154, -624.89, -503.61, 0.57143, 155, 559.72, -907.1, 0.42857, 2, + 154, -764.75, -542.69, 0.54857, 155, 699.58, -868.03, 0.45143, 2, + 154, -855.37, -581.34, 0.4981, 155, 790.2, -829.37, 0.5019, 2, + 154, -858.49, -500.68, 0.50857, 155, 793.32, -910.04, 0.49143, 2, + 154, -802.34, -381.37, 0.51524, 155, 737.16, -1029.34, 0.48476, 2, + 154, -722.5, -279.74, 0.48667, 155, 657.33, -1130.97, 0.51333, 2, + 154, -626.39, -204.53, 0.48667, 155, 561.22, -1206.18, 0.51333, 2, + 154, -532.9, -158.79, 0.47333, 155, 467.73, -1251.92, 0.52667, 2, + 154, -524.48, -210.06, 0.51714, 155, 459.31, -1200.65, 0.48286, 2, + 154, -389.59, -220.99, 0.53048, 155, 324.42, -1189.73, 0.46952, 2, + 154, -288.2, -245.3, 0.53524, 155, 223.03, -1165.41, 0.46476, 2, + 154, -213.13, -282.32, 0.53524, 155, 147.96, -1128.4, 0.46476, 2, + 154, -518.46, -347.21, 0.56381, 155, 453.29, -1063.5, 0.43619, 2, + 154, -440.89, -326.99, 0.55714, 155, 375.72, -1083.72, 0.44286, 2, + 154, -443.77, -269.61, 0.54095, 155, 378.6, -1141.1, 0.45905, 2, + 154, -519.44, -286.3, 0.54476, 155, 454.27, -1124.41, 0.45524 + ], + "hull": 17, + "edges": [ + 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, + 6, 6, 4, 4, 2, 2, 0, 0, 32, 32, 30, 30, 28, 28, 26, 26, 24, 30, + 34, 34, 36, 36, 38, 38, 40, 42, 44, 44, 46, 46, 48, 48, 42 + ], + "width": 657, + "height": 968 + } + }, + "前发/发11内阴影": { + "发11内阴影": { + "type": "mesh", + "uvs": [ + 0.13278, 0.66546, 0.18588, 0.49839, 0.27689, 0.33133, 0.39541, + 0.26072, 0.45514, 0.27449, 0.51771, 0.39678, 0.5746, 0.26933, + 0.63433, 0.24177, 0.70923, 0.28483, 0.80119, 0.43295, 0.86092, + 0.57418, 0.85428, 0.71713, 0.77844, 0.69129, 0.67699, 0.60001, + 0.61916, 0.55179, 0.5708, 0.52595, 0.5253, 0.51906, 0.47884, + 0.52078, 0.41152, 0.54662, 0.32146, 0.5914, 0.22096, 0.71368, + 0.13468, 0.77569 + ], + "triangles": [ + 15, 16, 5, 17, 4, 5, 17, 5, 16, 6, 15, 5, 18, 3, 4, 18, 4, 17, 2, + 3, 18, 14, 6, 7, 14, 7, 8, 13, 14, 8, 15, 6, 14, 19, 2, 18, 1, 2, + 19, 9, 13, 8, 12, 13, 9, 12, 9, 10, 20, 1, 19, 0, 1, 20, 11, 12, + 10, 21, 0, 20 + ], + "vertices": [ + 2, 154, -746.21, -899.29, 0.5, 155, 681.03, -511.43, 0.5, 2, 154, + -821.46, -852.99, 0.5, 155, 756.29, -557.72, 0.5, 2, 154, -895.83, + -775.16, 0.5, 155, 830.66, -635.55, 0.5, 2, 154, -925.41, -675.7, + 0.5, 155, 860.24, -735.02, 0.5, 2, 154, -917.72, -626.2, 0.5, 155, + 852.54, -784.52, 0.5, 2, 154, -860.28, -575.72, 0.5, 155, 795.11, + -834.99, 0.5, 2, 154, -917.31, -526.78, 0.5, 155, 852.14, -883.93, + 0.5, 2, 154, -928.54, -476.75, 0.5, 155, 863.37, -933.96, 0.5, 2, + 154, -907.09, -415.01, 0.5, 155, 841.92, -995.7, 0.5, 2, 154, + -837.14, -340.42, 0.5, 155, 771.97, -1070.3, 0.5, 2, 154, -771.1, + -292.55, 0.5, 155, 705.93, -1118.17, 0.5, 2, 154, -705.8, -299.89, + 0.5, 155, 640.63, -1110.82, 0.5, 2, 154, -719.39, -362.64, 0.5, + 155, 654.22, -1048.07, 0.5, 2, 154, -763.54, -445.85, 0.5, 155, + 698.37, -964.87, 0.5, 2, 154, -786.96, -493.33, 0.5, 155, 721.79, + -917.38, 0.5, 2, 154, -799.91, -533.21, 0.5, 155, 734.74, -877.5, + 0.5, 2, 154, -804.12, -570.97, 0.5, 155, 738.95, -839.74, 0.5, 2, + 154, -804.41, -609.63, 0.5, 155, 739.24, -801.08, 0.5, 2, 154, + -794.14, -665.95, 0.5, 155, 728.97, -744.77, 0.5, 2, 154, -775.73, + -741.43, 0.5, 155, 710.56, -669.29, 0.5, 2, 154, -722.08, -826.57, + 0.5, 155, 656.91, -584.14, 0.5, 2, 154, -695.7, -899.12, 0.5, 155, + 630.53, -511.6, 0.5 + ], + "hull": 22, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, + 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, + 36, 36, 38, 38, 40, 40, 42, 0, 42 + ], + "width": 832, + "height": 458 + } + }, + "前发/发带": { + "发带": { + "type": "mesh", + "uvs": [ + 0.12956, 0.48093, 0.09917, 0.8246, 0.22075, 0.68253, 0.35318, + 0.56752, 0.47983, 0.50528, 0.61805, 0.48364, 0.75483, 0.51611, + 0.87351, 0.63517, 0.83009, 0.35104, 0.71213, 0.22656, 0.59779, + 0.18056, 0.45956, 0.18326, 0.3322, 0.25227, 0.23377, 0.34833 + ], + "triangles": [ + 5, 10, 9, 4, 11, 10, 4, 10, 5, 12, 11, 4, 6, 9, 8, 5, 9, 6, 3, 12, + 4, 13, 12, 3, 6, 8, 7, 2, 0, 13, 2, 13, 3, 1, 0, 2 + ], + "vertices": [ + 2, 154, -649.41, -1001.28, 0.53619, 155, 584.24, -409.44, 0.46381, + 2, 154, -450.05, -1039.98, 0.53619, 155, 384.88, -370.73, 0.46381, + 2, 154, -529.15, -905.2, 0.57002, 155, 463.98, -505.51, 0.42998, + 2, 154, -592.15, -759.04, 0.57709, 155, 526.98, -651.68, 0.42291, + 2, 154, -624.57, -620.03, 0.5831, 155, 559.4, -790.68, 0.4169, 2, + 154, -632.98, -469.08, 0.58845, 155, 567.81, -941.64, 0.41155, 2, + 154, -609.9, -320.58, 0.54881, 155, 544.73, -1090.14, 0.45119, 2, + 154, -536.9, -193.2, 0.48596, 155, 471.73, -1217.51, 0.51404, 2, + 154, -703.81, -235.89, 0.4805, 155, 638.64, -1174.83, 0.5195, 2, + 154, -779.94, -362.39, 0.52915, 155, 714.77, -1048.32, 0.47085, 2, + 154, -810.22, -486.23, 0.55112, 155, 745.05, -924.49, 0.44888, 2, + 154, -812.85, -636.88, 0.55656, 155, 747.68, -773.84, 0.44344, 2, + 154, -776.51, -776.78, 0.5553, 155, 711.34, -633.94, 0.4447, 2, + 154, -723.52, -885.58, 0.55496, 155, 658.34, -525.14, 0.44504 + ], + "hull": 14, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, + 20, 20, 22, 22, 24, 24, 26, 0, 26, 26, 4, 6, 24, 8, 22, 10, 20, + 18, 12 + ], + "width": 1090, + "height": 583 + } + }, + "前发/发影子": { + "发影子": { + "type": "mesh", + "uvs": [ + 0.53739, 0.12834, 0.67787, 0.13632, 0.74146, 0.152, 0.78006, + 0.17552, 0.8133, 0.23243, 0.83948, 0.29509, 0.8618, 0.36844, + 0.87853, 0.41225, 0.88411, 0.45828, 0.88478, 0.5076, 0.88366, + 0.54478, 0.8801, 0.57485, 0.8763, 0.60194, 0.87251, 0.62343, + 0.87273, 0.6032, 0.87072, 0.58347, 0.86498, 0.55521, 0.84044, + 0.51753, 0.81098, 0.47959, 0.77573, 0.4414, 0.74516, 0.41484, + 0.74739, 0.45076, 0.74628, 0.48566, 0.74182, 0.54383, 0.73356, + 0.59264, 0.71362, 0.63919, 0.70024, 0.65184, 0.61523, 0.6445, + 0.5494, 0.62123, 0.52196, 0.59164, 0.49809, 0.55927, 0.47655, + 0.52257, 0.46205, 0.49121, 0.44888, 0.46035, 0.43349, 0.41381, + 0.41876, 0.35615, 0.38953, 0.40496, 0.36744, 0.44088, 0.32261, + 0.50625, 0.28558, 0.55304, 0.25456, 0.58449, 0.26549, 0.65329, + 0.28044, 0.70412, 0.29706, 0.7385, 0.31798, 0.77389, 0.34076, + 0.80736, 0.36439, 0.82591, 0.39881, 0.84944, 0.41617, 0.85898, + 0.43846, 0.86991, 0.41501, 0.86206, 0.39626, 0.85495, 0.35844, + 0.83708, 0.32288, 0.81667, 0.28236, 0.79013, 0.22963, 0.79335, + 0.17606, 0.7709, 0.14049, 0.73926, 0.11618, 0.69435, 0.10718, + 0.63412, 0.12023, 0.58463, 0.14409, 0.55758, 0.17291, 0.54635, + 0.19407, 0.54941, 0.18755, 0.50069, 0.18956, 0.44471, 0.20049, + 0.38604, 0.21768, 0.3218, 0.24822, 0.24418, 0.27834, 0.19587, + 0.30378, 0.17867, 0.37183, 0.15565, 0.45283, 0.13416 + ], + "triangles": [ + 0, 33, 34, 21, 31, 20, 33, 20, 32, 0, 20, 33, 31, 32, 20, 21, 30, + 31, 0, 34, 35, 21, 22, 30, 22, 29, 30, 22, 27, 29, 29, 27, 28, 27, + 22, 23, 23, 24, 27, 25, 27, 24, 26, 27, 25, 20, 5, 6, 70, 68, 69, + 67, 68, 36, 37, 66, 67, 36, 37, 67, 38, 65, 66, 0, 1, 20, 37, 38, + 66, 64, 65, 38, 38, 39, 64, 4, 2, 3, 19, 6, 7, 18, 19, 7, 8, 18, + 7, 17, 18, 8, 9, 17, 8, 10, 17, 9, 16, 17, 10, 11, 16, 10, 15, 16, + 11, 12, 15, 11, 14, 15, 12, 13, 14, 12, 4, 20, 2, 20, 4, 5, 19, + 20, 6, 20, 1, 2, 35, 71, 72, 70, 71, 35, 70, 35, 68, 36, 68, 35, + 35, 72, 0, 39, 63, 64, 40, 63, 39, 61, 58, 59, 60, 61, 59, 63, 57, + 58, 61, 62, 63, 63, 58, 61, 63, 41, 57, 41, 56, 57, 40, 41, 63, + 56, 41, 42, 42, 55, 56, 42, 43, 55, 54, 43, 44, 43, 54, 55, 53, + 44, 45, 54, 44, 53, 52, 45, 46, 53, 45, 52, 51, 46, 47, 52, 46, + 51, 50, 47, 48, 51, 47, 50, 50, 48, 49 + ], + "vertices": [ + 2, 154, -600.27, -626.42, 0.5, 155, 535.1, -784.29, 0.5, 2, 154, + -588.46, -475.25, 0.5, 155, 523.29, -935.46, 0.5, 2, 154, -571.64, + -407.15, 0.5, 155, 506.47, -1003.57, 0.5, 2, 154, -548.12, + -366.18, 0.5, 155, 482.95, -1044.54, 0.5, 2, 154, -493.02, + -331.86, 0.5, 155, 427.85, -1078.85, 0.5, 2, 154, -432.66, + -305.31, 0.5, 155, 367.49, -1105.4, 0.5, 2, 154, -362.26, -283.22, + 0.49905, 155, 297.09, -1127.5, 0.50095, 2, 154, -320.12, -266.35, + 0.50857, 155, 254.95, -1144.37, 0.49143, 2, 154, -276.19, -261.56, + 0.50857, 155, 211.02, -1149.16, 0.49143, 2, 154, -229.29, -262.14, + 0.50857, 155, 164.12, -1148.57, 0.49143, 2, 154, -193.98, -264.33, + 0.50857, 155, 128.81, -1146.38, 0.49143, 2, 154, -165.49, -268.97, + 0.51048, 155, 100.32, -1141.74, 0.48952, 2, 154, -139.86, -273.78, + 0.51048, 155, 74.69, -1136.93, 0.48952, 2, 154, -119.54, -278.44, + 0.51048, 155, 54.37, -1132.27, 0.48952, 2, 154, -138.77, -277.66, + 0.51048, 155, 73.59, -1133.05, 0.48952, 2, 154, -157.58, -279.3, + 0.51143, 155, 92.41, -1131.41, 0.48857, 2, 154, -184.62, -284.74, + 0.51524, 155, 119.45, -1125.97, 0.48476, 2, 154, -221.18, -310.19, + 0.52857, 155, 156.01, -1100.53, 0.47143, 2, 154, -258.13, -340.92, + 0.54191, 155, 192.96, -1069.8, 0.45809, 2, 154, -295.5, -377.89, + 0.56286, 155, 230.33, -1032.82, 0.43714, 3, 49, -34.29, 102.79, + 0.13564, 47, -190.86, -136.94, 0.00202, 48, 158.51, 101.58, + 0.86235, 2, 49, -0.65, 96.41, 0.46852, 48, 192.5, 97.46, 0.53148, + 2, 49, 31.14, 86.79, 0.74861, 48, 224.86, 89.99, 0.25139, 2, 49, + 83.42, 68.05, 0.97846, 48, 278.27, 74.77, 0.02154, 1, 49, 126.04, + 47.62, 1, 1, 49, 163.37, 15.56, 1, 1, 49, 171.32, -1.46, 1, 2, 49, + 141.23, -88.3, 0.95395, 48, 346.38, -77.37, 0.04605, 3, 49, + 101.76, -151.28, 0.79203, 47, -381.17, 79.48, 0.00043, 48, 311.2, + -142.84, 0.20754, 3, 49, 67.01, -172.72, 0.66663, 47, -352.22, + 108.27, 0.005, 48, 277.96, -166.55, 0.32838, 3, 49, 30.68, + -189.76, 0.51111, 47, -320.72, 133.13, 0.01819, 48, 242.85, + -185.98, 0.4707, 3, 49, -8.98, -203.32, 0.34809, 47, -285.19, + 155.37, 0.04675, 48, 204.18, -202.16, 0.60516, 3, 49, -41.81, + -210.84, 0.23529, 47, -254.94, 170.16, 0.08561, 48, 171.93, + -211.85, 0.6791, 3, 49, -73.8, -217.09, 0.1489, 47, -225.21, + 183.53, 0.14085, 48, 140.42, -220.22, 0.71025, 3, 49, -120.82, + -221.86, 0.06403, 47, -180.51, 198.89, 0.26053, 48, 93.82, + -228.12, 0.67544, 3, 49, -177.9, -223.25, 0.00849, 47, -125.25, + 213.22, 0.52755, 48, 36.97, -233.31, 0.46397, 2, 154, -341.75, + -793.09, 0.58381, 155, 276.58, -617.63, 0.41619, 2, 154, -308.27, + -817.84, 0.58952, 155, 243.1, -592.87, 0.41048, 2, 154, -247.47, + -867.88, 0.59143, 155, 182.3, -542.83, 0.40857, 2, 154, -204.11, + -909.04, 0.58095, 155, 138.94, -501.68, 0.41905, 2, 154, -175.14, + -943.29, 0.5781, 155, 109.97, -467.42, 0.4219, 2, 154, -109.41, + -933.34, 0.57524, 155, 44.24, -477.38, 0.42476, 2, 154, -60.63, + -918.58, 0.57714, 155, -4.54, -492.14, 0.42286, 2, 154, -27.45, + -901.58, 0.57048, 155, -37.72, -509.13, 0.42952, 2, 154, 6.81, + -879.97, 0.56191, 155, -71.99, -530.74, 0.43809, 2, 154, 39.32, + -856.32, 0.56095, 155, -104.49, -554.4, 0.43905, 2, 154, 57.67, + -831.35, 0.55429, 155, -122.84, -579.36, 0.44571, 2, 154, 81.07, + -794.88, 0.54, 155, -146.24, -615.83, 0.46, 2, 154, 90.66, + -776.42, 0.53714, 155, -155.83, -634.29, 0.46286, 2, 154, 101.71, + -752.7, 0.54, 155, -166.89, -658.02, 0.46, 2, 154, 93.55, -777.76, + 0.53714, 155, -158.72, -632.95, 0.46286, 2, 154, 86.22, -797.77, + 0.54, 155, -151.39, -612.94, 0.46, 2, 154, 68.11, -838.05, + 0.54476, 155, -133.28, -572.66, 0.45524, 2, 154, 47.63, -875.84, + 0.54476, 155, -112.8, -534.88, 0.45524, 2, 154, 21.19, -918.79, + 0.54762, 155, -86.36, -491.92, 0.45238, 2, 154, 22.66, -975.69, + 0.54762, 155, -87.83, -435.02, 0.45238, 2, 154, -0.3, -1032.83, + 0.54762, 155, -64.87, -377.88, 0.45238, 2, 154, -31.45, -1070.32, + 0.53905, 155, -33.73, -340.4, 0.46095, 2, 154, -74.87, -1095.32, + 0.53905, 155, 9.7, -315.39, 0.46095, 2, 154, -132.39, -1103.43, + 0.53905, 155, 67.22, -307.29, 0.46095, 2, 154, -179.05, -1088.05, + 0.53905, 155, 113.88, -322.67, 0.46095, 2, 154, -204.04, -1061.62, + 0.53905, 155, 138.87, -349.1, 0.46095, 2, 154, -213.85, -1030.27, + 0.54762, 155, 148.68, -380.44, 0.45238, 2, 154, -210.3, -1007.55, + 0.54762, 155, 145.13, -403.17, 0.45238, 2, 154, -256.82, -1013.28, + 0.5, 155, 191.65, -397.43, 0.5, 2, 154, -309.97, -1009.63, 0.5, + 155, 244.8, -401.09, 0.5, 2, 154, -365.42, -996.29, 0.5, 155, + 300.25, -414.43, 0.5, 2, 154, -425.97, -976.07, 0.5, 155, 360.8, + -434.64, 0.5, 2, 154, -498.84, -941.09, 0.5, 155, 433.67, -469.62, + 0.5, 2, 154, -543.86, -907.35, 0.5, 155, 478.69, -503.36, 0.5, 2, + 154, -559.45, -879.49, 0.5, 155, 494.27, -531.22, 0.5, 2, 154, + -579.28, -805.55, 0.5, 155, 514.11, -605.17, 0.5, 2, 154, -597.28, + -717.7, 0.5, 155, 532.11, -693.01, 0.5 + ], + "hull": 73, + "edges": [ + 126, 124, 124, 122, 122, 120, 120, 118, 118, 116, 116, 114, 114, + 112, 112, 110, 110, 108, 108, 106, 106, 104, 104, 102, 102, 100, + 100, 98, 98, 96, 96, 94, 94, 92, 92, 90, 90, 88, 88, 86, 86, 84, + 84, 82, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, 72, 70, 70, 68, + 68, 66, 66, 64, 64, 62, 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, + 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, + 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, + 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, + 2, 0, 0, 144, 144, 142, 142, 140, 140, 138, 138, 136, 136, 134, + 134, 132, 132, 130, 130, 128, 128, 126 + ], + "width": 1078, + "height": 951 + } + }, + "腿-衣摆-后发/右大腿": { + "右大腿": { + "type": "mesh", + "uvs": [ + 0.48088, 0.27908, 0.48825, 0.28177, 0.54395, 0.28155, 0.65197, + 0.30758, 0.7174, 0.33013, 0.738, 0.34707, 0.76134, 0.37674, + 0.77321, 0.40791, 0.77866, 0.47467, 0.77864, 0.56854, 0.76568, + 0.61339, 0.74281, 0.65674, 0.7264, 0.6774, 0.69267, 0.70385, + 0.64804, 0.71804, 0.59847, 0.7206, 0.46894, 0.72064, 0.43652, + 0.71834, 0.36452, 0.7138, 0.31725, 0.70285, 0.2794, 0.67268, + 0.25037, 0.63586, 0.23472, 0.60238, 0.21727, 0.51394, 0.22206, + 0.46048, 0.23194, 0.42177, 0.24593, 0.39139, 0.28863, 0.33706, + 0.31273, 0.31607, 0.35084, 0.29756, 0.40213, 0.28212, 0.44897, + 0.2794 + ], + "triangles": [ + 6, 7, 5, 26, 24, 25, 27, 22, 24, 23, 24, 22, 31, 0, 1, 18, 30, 31, + 8, 5, 7, 9, 10, 8, 26, 27, 24, 20, 21, 22, 4, 5, 8, 10, 11, 8, 22, + 18, 20, 3, 4, 8, 11, 12, 8, 29, 27, 28, 22, 27, 18, 19, 20, 18, 3, + 8, 14, 12, 13, 8, 18, 29, 30, 18, 27, 29, 1, 17, 18, 1, 18, 31, 1, + 16, 17, 3, 14, 2, 13, 14, 8, 2, 16, 1, 14, 15, 2, 15, 16, 2 + ], + "vertices": [ + 1, 11, 130.13, 60.52, 1, 1, 11, 134.2, 60.25, 1, 1, 11, 163.16, + 66.52, 1, 1, 11, 221.63, 67.87, 1, 1, 11, 257.64, 65.92, 1, 1, 11, + 269.83, 61.28, 1, 1, 11, 284.57, 51.74, 1, 1, 11, 293.46, 40.32, + 1, 1, 11, 302.12, 13.63, 1, 1, 11, 310.3, -24.75, 1, 1, 11, + 307.47, -44.52, 1, 1, 11, 299.35, -64.78, 1, 1, 11, 292.62, + -75.05, 1, 1, 11, 277.38, -89.6, 1, 1, 11, 255.39, -100.36, 1, 1, + 11, 229.82, -106.91, 1, 1, 11, 162.43, -121.31, 1, 1, 11, 145.37, + -123.97, 1, 1, 11, 107.51, -130.11, 1, 1, 11, 81.96, -130.88, 1, + 1, 11, 59.64, -122.75, 1, 1, 11, 41.32, -110.92, 1, 1, 11, 30.26, + -98.96, 1, 1, 11, 13.46, -64.75, 1, 1, 11, 11.29, -42.36, 1, 1, + 11, 13.05, -25.45, 1, 1, 11, 17.68, -11.47, 1, 1, 11, 35.16, + 15.48, 1, 1, 11, 45.87, 26.74, 1, 1, 11, 64.08, 38.53, 1, 1, 11, + 89.42, 50.54, 1, 1, 11, 113.55, 56.85, 1 + ], + "hull": 32, + "edges": [ + 0, 62, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62 + ], + "width": 532, + "height": 418 + } + }, + "腿-衣摆-后发/右小腿": { + "右小腿": { + "type": "mesh", + "uvs": [ + 0.55945, 0.16263, 0.59403, 0.16269, 0.62304, 0.16712, 0.64853, + 0.17514, 0.66699, 0.18383, 0.68183, 0.19396, 0.69559, 0.21089, + 0.70755, 0.23358, 0.7114, 0.24882, 0.71444, 0.2679, 0.71415, + 0.2824, 0.70665, 0.32357, 0.69759, 0.3404, 0.69585, 0.35142, + 0.68373, 0.38855, 0.65271, 0.46658, 0.64726, 0.48345, 0.68145, + 0.4941, 0.69191, 0.49945, 0.70667, 0.50894, 0.71295, 0.51436, + 0.72248, 0.52623, 0.72717, 0.5339, 0.72716, 0.54914, 0.72028, + 0.56622, 0.70278, 0.588, 0.71853, 0.59224, 0.7349, 0.60242, + 0.74054, 0.60936, 0.74076, 0.62163, 0.73676, 0.65817, 0.7265, + 0.67992, 0.71282, 0.69101, 0.70054, 0.69475, 0.7027, 0.70336, + 0.70271, 0.70958, 0.69857, 0.7173, 0.71216, 0.72823, 0.71609, + 0.73554, 0.71612, 0.75463, 0.71339, 0.77176, 0.70441, 0.7969, + 0.6996, 0.80359, 0.6732, 0.81989, 0.64707, 0.82815, 0.62016, + 0.83406, 0.57311, 0.83871, 0.53522, 0.83905, 0.49001, 0.8323, + 0.44759, 0.81669, 0.41489, 0.801, 0.38004, 0.78973, 0.32767, + 0.77952, 0.30842, 0.77343, 0.29308, 0.76616, 0.27657, 0.75562, + 0.26874, 0.74642, 0.26542, 0.72896, 0.27739, 0.6962, 0.28841, + 0.67407, 0.27808, 0.66449, 0.27668, 0.65152, 0.29091, 0.61968, + 0.2976, 0.59178, 0.28437, 0.57721, 0.26722, 0.5461, 0.26151, + 0.53247, 0.26178, 0.50069, 0.26585, 0.49288, 0.28147, 0.48299, + 0.29356, 0.47799, 0.31803, 0.47196, 0.3372, 0.46957, 0.33716, + 0.4191, 0.34482, 0.37956, 0.353, 0.35196, 0.3711, 0.30919, + 0.37903, 0.29441, 0.41812, 0.24442, 0.44214, 0.21973, 0.46419, + 0.20107, 0.4932, 0.18296, 0.50998, 0.17607, 0.52373, 0.17195, + 0.5493, 0.16801, 0.4948, 0.63847 + ], + "triangles": [ + 59, 60, 61, 62, 59, 61, 31, 32, 30, 32, 33, 30, 36, 33, 34, 36, + 34, 35, 55, 56, 57, 57, 54, 55, 59, 62, 85, 59, 51, 58, 58, 53, + 57, 53, 54, 57, 36, 85, 33, 36, 38, 39, 38, 36, 37, 58, 52, 53, + 58, 51, 52, 59, 85, 51, 50, 51, 85, 50, 85, 36, 39, 40, 36, 36, + 40, 50, 50, 40, 49, 40, 41, 43, 49, 47, 48, 41, 42, 43, 43, 44, + 40, 46, 49, 40, 44, 45, 40, 45, 46, 40, 46, 47, 49, 10, 8, 9, 8, + 10, 5, 8, 6, 7, 8, 5, 6, 11, 12, 10, 5, 10, 12, 80, 5, 79, 13, 14, + 12, 84, 0, 1, 84, 1, 2, 84, 2, 3, 82, 83, 84, 82, 84, 81, 4, 84, + 3, 84, 80, 81, 84, 5, 80, 5, 84, 4, 5, 12, 79, 12, 78, 79, 12, 14, + 78, 14, 77, 78, 14, 76, 77, 14, 75, 76, 14, 74, 75, 15, 74, 14, + 73, 74, 15, 72, 73, 15, 16, 72, 15, 69, 67, 68, 67, 70, 66, 70, + 65, 66, 23, 21, 22, 23, 24, 20, 23, 20, 21, 67, 69, 70, 71, 64, + 65, 18, 24, 17, 19, 24, 18, 24, 19, 20, 70, 71, 65, 72, 63, 64, + 85, 72, 16, 16, 25, 85, 72, 64, 71, 85, 63, 72, 27, 29, 26, 29, + 27, 28, 25, 26, 30, 29, 30, 26, 25, 30, 33, 25, 17, 24, 25, 33, + 85, 62, 63, 85, 17, 25, 16 + ], + "vertices": [ + 1, 12, -64.22, -13.64, 1, 1, 12, -66.14, 1.81, 1, 1, 12, -64.6, + 15.16, 1, 1, 12, -60.28, 27.27, 1, 1, 12, -55.09, 36.3, 1, 1, 12, + -48.65, 43.85, 1, 1, 12, -37.27, 51.54, 1, 1, 12, -21.65, 58.94, + 1, 1, 12, -10.92, 62.05, 1, 1, 12, 2.61, 65.14, 1, 1, 12, 13.05, + 66.33, 1, 1, 12, 43.04, 66.74, 1, 1, 12, 55.64, 64.23, 1, 1, 12, + 63.65, 64.45, 1, 1, 12, 91.01, 62.42, 1, 1, 12, 148.81, 55.68, 1, + 1, 12, 161.23, 54.79, 1, 2, 12, 166.95, 71.02, 0.99871, 13, + -116.74, 66.22, 0.00129, 2, 12, 170.2, 76.17, 0.99725, 13, -113.7, + 71.5, 0.00275, 2, 12, 176.18, 83.63, 0.99345, 13, -108.04, 79.2, + 0.00655, 2, 12, 179.72, 86.93, 0.99087, 13, -104.64, 82.64, + 0.00913, 2, 12, 187.7, 92.26, 0.9836, 13, -96.89, 88.3, 0.0164, 2, + 12, 192.95, 95.05, 0.97835, 13, -91.76, 91.32, 0.02165, 2, 12, + 203.89, 96.44, 0.9642, 13, -80.89, 93.15, 0.0358, 2, 12, 216.55, + 94.92, 0.935, 13, -68.18, 92.17, 0.065, 2, 12, 233.19, 89.09, + 0.83141, 13, -51.31, 87.04, 0.16859, 2, 12, 235.34, 96.51, + 0.77598, 13, -49.47, 94.53, 0.22402, 2, 12, 241.72, 104.75, + 0.72966, 13, -43.43, 103.03, 0.27034, 2, 12, 246.39, 107.9, + 0.70867, 13, -38.9, 106.37, 0.29133, 2, 12, 255.19, 109.11, + 0.67298, 13, -30.16, 107.95, 0.32702, 2, 12, 281.66, 110.65, + 0.51805, 13, -3.78, 110.59, 0.48195, 2, 12, 297.86, 108.05, + 0.42042, 13, 12.52, 108.67, 0.57958, 2, 12, 306.6, 102.96, + 0.36038, 13, 21.47, 103.94, 0.63962, 2, 12, 309.99, 97.82, + 0.30034, 13, 25.06, 98.95, 0.69966, 2, 12, 316.04, 99.56, 0.23862, + 13, 31.04, 100.94, 0.76138, 2, 12, 320.51, 100.14, 0.20347, 13, + 35.48, 101.7, 0.79653, 2, 12, 326.29, 98.99, 0.15414, 13, 41.31, + 100.8, 0.84586, 2, 12, 333.37, 106.05, 0.10081, 13, 48.08, 108.15, + 0.89919, 2, 12, 338.4, 108.47, 0.08587, 13, 53.01, 110.77, + 0.91413, 2, 12, 352.11, 110.23, 0.05326, 13, 66.63, 113.1, + 0.94674, 2, 12, 364.57, 110.57, 0.03129, 13, 79.06, 113.96, + 0.96871, 2, 12, 383.14, 108.85, 0.01176, 13, 97.69, 113.01, + 0.98824, 2, 12, 388.21, 107.31, 0.00902, 13, 102.82, 111.68, + 0.99098, 2, 12, 401.41, 97.01, 0.00283, 13, 116.44, 101.94, + 0.99717, 2, 12, 408.82, 86.1, 0.00058, 13, 124.3, 91.35, 0.99942, + 1, 13, 130.54, 80.12, 1, 1, 13, 137.39, 59.81, 1, 1, 13, 140.49, + 43.04, 1, 1, 13, 139.06, 22.17, 1, 1, 13, 131.11, 1.45, 1, 1, 13, + 122.37, -14.95, 1, 1, 13, 116.94, -31.77, 1, 1, 13, 113.58, + -56.25, 1, 2, 12, 388.69, -70.07, 0.00045, 13, 110.68, -65.52, + 0.99955, 2, 12, 384.34, -77.58, 0.00196, 13, 106.65, -73.21, + 0.99804, 2, 12, 377.71, -85.91, 0.00548, 13, 100.37, -81.81, + 0.99452, 2, 12, 371.54, -90.24, 0.00911, 13, 94.39, -86.39, + 0.99089, 2, 12, 359.18, -93.32, 0.02009, 13, 82.17, -89.98, + 0.97991, 2, 12, 334.98, -90.96, 0.07944, 13, 57.89, -88.62, + 0.92056, 2, 12, 318.46, -88.05, 0.18265, 13, 41.27, -86.41, + 0.81735, 2, 12, 312.17, -93.54, 0.24078, 13, 35.2, -92.15, + 0.75922, 2, 12, 302.93, -95.34, 0.29293, 13, 26.05, -94.34, + 0.70707, 2, 12, 279.25, -91.89, 0.4969, 13, 2.25, -91.88, 0.5031, + 2, 12, 258.83, -91.44, 0.7274, 13, -18.17, -92.28, 0.2726, 2, 12, + 249.12, -98.68, 0.82794, 13, -27.58, -99.91, 0.17206, 2, 12, + 227.75, -109.17, 0.92764, 13, -48.49, -111.28, 0.07236, 2, 12, + 218.28, -112.96, 0.94999, 13, -57.79, -115.46, 0.05001, 2, 12, + 195.44, -115.73, 0.97999, 13, -80.5, -119.19, 0.02001, 2, 12, + 189.6, -114.63, 0.98347, 13, -86.38, -118.32, 0.01653, 2, 12, + 181.61, -108.56, 0.98792, 13, -94.61, -112.59, 0.01208, 2, 12, + 177.34, -103.61, 0.99034, 13, -99.09, -107.83, 0.00966, 2, 12, + 171.62, -93.24, 0.99439, 13, -105.23, -97.7, 0.00561, 2, 12, + 168.82, -84.9, 0.9976, 13, -108.38, -89.49, 0.00241, 1, 12, + 132.57, -89.51, 1, 1, 12, 103.74, -89.7, 1, 1, 12, 83.45, -88.56, + 1, 1, 12, 51.71, -84.37, 1, 1, 12, 40.64, -82.18, 1, 1, 12, 2.52, + -69.28, 1, 1, 12, -16.57, -60.81, 1, 1, 12, -31.22, -52.66, 1, 1, + 12, -45.87, -41.36, 1, 1, 12, -51.77, -34.5, 1, 1, 12, -55.51, + -28.73, 1, 1, 12, -59.79, -17.68, 1, 2, 12, 281.21, 0.84, 0.46406, + 13, 0.34, 0.86, 0.53594 + ], + "hull": 85, + "edges": [ + 0, 168, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, + 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 108, 110, + 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 122, + 124, 124, 126, 126, 128, 128, 130, 130, 132, 132, 134, 134, 136, + 136, 138, 138, 140, 140, 142, 142, 144, 144, 146, 146, 148, 148, + 150, 150, 152, 152, 154, 154, 156, 156, 158, 158, 160, 160, 162, + 162, 164, 164, 166, 166, 168 + ], + "width": 450, + "height": 724 + } + }, + "腿-衣摆-后发/后发1": { + "后发1": { + "type": "mesh", + "uvs": [ + 0.21329, 0.12833, 0.78578, 0.18282, 0.81004, 0.20633, 0.84141, + 0.23992, 0.84847, 0.26878, 0.85775, 0.31812, 0.84406, 0.38057, + 0.83213, 0.42728, 0.82859, 0.47713, 0.82683, 0.52227, 0.83213, + 0.55008, 0.84891, 0.59732, 0.8741, 0.65183, 0.89045, 0.69487, + 0.89354, 0.72741, 0.88559, 0.7673, 0.86836, 0.80351, 0.8476, + 0.835, 0.818, 0.85861, 0.77205, 0.87593, 0.73583, 0.86858, 0.6996, + 0.84812, 0.71551, 0.75312, 0.74201, 0.7463, 0.75703, 0.70484, + 0.76366, 0.66391, 0.76366, 0.6235, 0.75818, 0.5807, 0.72434, + 0.54191, 0.69229, 0.4848, 0.68339, 0.41288, 0.69704, 0.35788, + 0.73325, 0.2902, 0.78548, 0.2352, 0.78726, 0.19783, 0.22519, + 0.13648, 0.26792, 0.17597, 0.31066, 0.23661, 0.34805, 0.31699, + 0.35592, 0.39898, 0.35295, 0.4561, 0.33752, 0.51533, 0.312, + 0.57314, 0.27639, 0.61474, 0.24137, 0.65423, 0.23425, 0.68173, + 0.23959, 0.71134, 0.25562, 0.73673, 0.27817, 0.75788, 0.3025, + 0.76352, 0.33159, 0.75929, 0.32921, 0.79454, 0.29835, 0.82345, + 0.26749, 0.86012, 0.22891, 0.86364, 0.19211, 0.85659, 0.14403, + 0.82486, 0.10842, 0.76705, 0.10052, 0.69875, 0.11179, 0.64658, + 0.13732, 0.60216, 0.17471, 0.55985, 0.20795, 0.51684, 0.20082, + 0.48158, 0.18005, 0.42165, 0.15156, 0.36947, 0.12545, 0.29896, + 0.11476, 0.2207, 0.11773, 0.18192, 0.13079, 0.13891, 0.16996, + 0.11916, 0.78666, 0.61101, 0.79458, 0.63347, 0.79238, 0.66548, + 0.78354, 0.69907, 0.7641, 0.72898 + ], + "triangles": [ + 45, 60, 44, 59, 60, 45, 58, 46, 57, 45, 58, 59, 46, 58, 45, 51, + 49, 50, 52, 48, 49, 52, 49, 51, 56, 57, 46, 56, 46, 47, 55, 56, + 47, 54, 55, 47, 47, 48, 54, 52, 53, 48, 53, 54, 48, 39, 63, 64, + 40, 63, 39, 41, 63, 40, 62, 63, 41, 42, 62, 41, 43, 62, 42, 61, + 62, 43, 44, 61, 43, 60, 61, 44, 74, 25, 73, 24, 25, 74, 75, 24, + 74, 23, 24, 75, 13, 74, 73, 74, 13, 14, 15, 74, 14, 16, 74, 15, + 75, 74, 16, 17, 75, 16, 18, 75, 17, 23, 75, 18, 20, 22, 23, 19, + 20, 23, 21, 22, 20, 18, 19, 23, 8, 29, 7, 8, 28, 29, 9, 28, 8, 27, + 28, 9, 27, 9, 10, 71, 27, 10, 71, 10, 11, 26, 27, 71, 72, 71, 11, + 26, 71, 72, 72, 11, 12, 25, 26, 72, 73, 25, 72, 73, 72, 12, 13, + 73, 12, 35, 66, 67, 36, 66, 35, 37, 66, 36, 65, 37, 38, 66, 37, + 65, 64, 65, 38, 39, 64, 38, 2, 34, 1, 34, 35, 1, 33, 34, 2, 4, 33, + 3, 5, 33, 4, 33, 2, 3, 32, 5, 6, 32, 33, 5, 6, 31, 32, 7, 31, 6, + 30, 31, 7, 7, 29, 30, 1, 35, 0, 68, 35, 67, 68, 0, 35, 70, 68, 69, + 70, 0, 68 + ], + "vertices": [ + 1, 95, 17.01, -6.06, 1, 4, 95, -49.02, -615.87, 0.00013, 98, + -49.38, -12.61, 0.00013, 97, 34.19, 11.24, 0.98807, 96, 30.94, + 612.83, 0.01167, 3, 98, -29.7, 14.42, 0.03805, 97, 12.35, -14.08, + 0.96139, 96, 52.99, 637.96, 0.00056, 2, 98, -1.39, 49.53, 0.67507, + 97, -18.77, -46.72, 0.32493, 2, 98, 24.1, 58.49, 0.88491, 97, + -44.92, -53.54, 0.11509, 2, 98, 67.84, 70.82, 0.98948, 97, -89.53, + -62.21, 0.01052, 1, 98, 124.7, 59.3, 1, 2, 98, 167.33, 48.88, + 0.86142, 113, -28.48, 48.88, 0.13858, 2, 98, 212.29, 47.58, + 0.20582, 113, 16.48, 47.58, 0.79418, 1, 113, 57.1, 47.92, 1, 2, + 113, 81.76, 54.95, 0.99775, 114, -114.06, 54.95, 0.00225, 2, 113, + 123.17, 75.18, 0.92068, 114, -72.64, 75.18, 0.07932, 2, 113, + 170.63, 104.73, 0.56373, 114, -25.18, 104.73, 0.43627, 2, 113, + 208.3, 124.29, 0.29917, 114, 12.49, 124.29, 0.70083, 2, 113, + 237.33, 129.19, 0.17508, 114, 41.51, 129.19, 0.82492, 2, 113, + 273.6, 122.68, 0.07324, 114, 77.79, 122.68, 0.92676, 2, 113, + 307.11, 106.1, 0.01877, 114, 111.3, 106.1, 0.98123, 2, 113, 336.6, + 85.51, 0.00119, 114, 140.78, 85.51, 0.99881, 1, 114, 163.72, + 55.12, 1, 1, 114, 181.96, 6.98, 1, 1, 114, 177.49, -32.02, 1, 1, + 114, 161.24, -71.66, 1, 1, 114, 75.04, -59.39, 1, 1, 114, 67.36, + -31.46, 1, 2, 113, 225.08, -17.49, 0.00041, 114, 29.27, -17.49, + 0.99959, 2, 113, 187.94, -12.44, 0.72905, 114, -7.87, -12.44, + 0.27095, 1, 113, 151.67, -14.44, 1, 1, 113, 113.57, -22.4, 1, 2, + 98, 276.56, -60.39, 0.04671, 113, 80.74, -60.39, 0.95329, 2, 98, + 227.17, -97.39, 0.3575, 113, 31.36, -97.39, 0.6425, 2, 98, 163.13, + -110.44, 0.75848, 113, -32.68, -110.44, 0.24152, 2, 98, 112.96, + -98.6, 0.94071, 113, -82.85, -98.6, 0.05929, 1, 98, 50.08, -63.33, + 1, 2, 98, -2.35, -10.35, 0.97259, 97, -12.86, 12.87, 0.02741, 3, + 95, -62.54, -617.08, 0.00007, 97, 20.67, 10.03, 0.9925, 96, 44.48, + 613.92, 0.00743, 3, 95, 9.33, -18.56, 0.95805, 97, 92.54, 608.55, + 0.00751, 96, -32.33, 16.02, 0.03444, 3, 95, -27.43, -63.19, + 0.01664, 97, 55.78, 563.92, 0.00017, 96, 4.79, 60.34, 0.98319, 2, + 96, 60.92, 103.98, 0.99038, 111, -151.64, 103.98, 0.00962, 2, 96, + 134.58, 141.28, 0.8437, 111, -77.98, 141.28, 0.1563, 2, 96, + 208.55, 147.01, 0.51785, 111, -4.01, 147.01, 0.48215, 2, 96, + 259.74, 141.99, 0.26716, 111, 47.19, 141.99, 0.73284, 2, 96, + 312.36, 123.6, 0.07712, 111, 99.8, 123.6, 0.92288, 2, 96, 363.32, + 94.48, 0.00515, 111, 150.76, 94.48, 0.99485, 2, 111, 186.76, + 55.12, 0.96773, 112, -25.8, 55.12, 0.03227, 2, 111, 220.88, 16.46, + 0.38, 112, 8.33, 16.46, 0.62, 1, 112, 32.76, 7.97, 1, 1, 112, + 59.57, 12.7, 1, 1, 112, 82.99, 28.98, 1, 1, 112, 102.87, 52.37, 1, + 1, 112, 108.87, 78.16, 1, 1, 112, 106.2, 109.33, 1, 1, 112, + 137.78, 105.66, 1, 1, 112, 162.56, 71.78, 1, 1, 112, 194.31, + 37.64, 1, 1, 112, 195.99, -3.65, 1, 1, 112, 188.23, -42.69, 1, 1, + 112, 157.87, -92.97, 1, 2, 111, 317.11, -129.1, 0.00732, 112, + 104.55, -129.1, 0.99268, 2, 111, 255.45, -135.32, 0.08954, 112, + 42.89, -135.32, 0.91046, 2, 111, 209.01, -121.59, 0.24978, 112, + -3.55, -121.59, 0.75022, 2, 111, 170.08, -92.9, 0.52903, 112, + -42.47, -92.9, 0.47097, 2, 111, 133.52, -51.62, 0.89555, 112, + -79.04, -51.62, 0.10445, 2, 111, 96.16, -14.75, 0.9982, 112, + -116.4, -14.75, 0.0018, 1, 111, 64.21, -21.21, 1, 2, 96, 222.12, + -41.43, 0.46585, 111, 9.57, -41.43, 0.53415, 3, 95, -197.85, + 65.89, 0.00069, 96, 174.15, -70.14, 0.98321, 111, -38.41, -70.14, + 0.0161, 2, 95, -133.71, 92, 0.03754, 96, 109.79, -95.72, 0.96246, + 2, 95, -63.06, 101.44, 0.21771, 96, 39.06, -104.58, 0.78229, 2, + 95, -28.3, 97.3, 0.37028, 96, 4.34, -100.15, 0.62972, 2, 95, 9.96, + 82.28, 0.56076, 96, -33.8, -84.82, 0.43924, 2, 95, 26.54, 39.97, + 0.83445, 96, -50.03, -42.37, 0.16555, 1, 113, 139.12, 9.48, 1, 2, + 113, 158.81, 19.03, 0.99811, 114, -37.01, 19.03, 0.00189, 2, 113, + 187.67, 18.25, 0.67583, 114, -8.14, 18.25, 0.32417, 2, 113, + 218.34, 10.49, 0.00661, 114, 22.53, 10.49, 0.99339, 1, 114, 50.52, + -8.76, 1 + ], + "hull": 71, + "edges": [ + 0, 140, 140, 138, 138, 136, 136, 134, 134, 132, 132, 130, 130, + 128, 128, 126, 126, 124, 124, 122, 122, 120, 120, 118, 118, 116, + 116, 114, 114, 112, 112, 110, 110, 108, 108, 106, 106, 104, 104, + 102, 102, 100, 100, 98, 98, 96, 96, 94, 94, 92, 92, 90, 90, 88, + 88, 86, 86, 84, 84, 82, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, + 72, 70, 70, 68, 68, 66, 66, 64, 64, 62, 62, 60, 60, 58, 58, 56, + 56, 54, 54, 142, 142, 144, 144, 146, 146, 148, 148, 150, 150, 46, + 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, + 30, 28, 28, 26, 26, 24, 54, 52, 52, 50, 50, 48, 48, 46, 24, 22, + 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, + 4, 68, 0, 2, 2, 4 + ], + "width": 1068, + "height": 899 + } + }, + "腿-衣摆-后发/后发2": { + "后发2": { + "type": "mesh", + "uvs": [ + 0.28724, 0.10343, 0.83397, 0.24358, 0.8365, 0.2652, 0.82819, + 0.28945, 0.82023, 0.3293, 0.81517, 0.38677, 0.81517, 0.43843, + 0.82095, 0.47375, 0.83252, 0.51066, 0.86, 0.556, 0.89109, 0.60134, + 0.91821, 0.64773, 0.93014, 0.69518, 0.93195, 0.73893, 0.92544, + 0.7674, 0.90375, 0.79851, 0.89652, 0.81681, 0.89507, 0.83737, + 0.89977, 0.85372, 0.90736, 0.86532, 0.91712, 0.86848, 0.91532, + 0.88746, 0.8882, 0.89273, 0.86253, 0.89168, 0.83361, 0.8806, + 0.81372, 0.86004, 0.79565, 0.82789, 0.78733, 0.79467, 0.78805, + 0.7583, 0.7942, 0.73141, 0.80649, 0.70663, 0.81372, 0.68133, + 0.81011, 0.66393, 0.79456, 0.64495, 0.77793, 0.61332, 0.76166, + 0.56831, 0.7519, 0.51928, 0.74756, 0.45602, 0.75009, 0.40646, + 0.75913, 0.34847, 0.77251, 0.30313, 0.79095, 0.27255, 0.8271, + 0.25199, 0.29194, 0.11397, 0.30568, 0.1572, 0.31218, 0.18514, + 0.32447, 0.24577, 0.32845, 0.30376, 0.33062, 0.37546, 0.33294, + 0.41486, 0.32643, 0.45756, 0.31269, 0.4892, 0.29967, 0.51397, + 0.28341, 0.54561, 0.27147, 0.57355, 0.26244, 0.5978, 0.25882, + 0.61889, 0.25774, 0.6347, 0.25882, 0.65526, 0.26931, 0.67582, + 0.28124, 0.689, 0.29497, 0.69796, 0.3098, 0.70587, 0.32498, + 0.70904, 0.32607, 0.71905, 0.32028, 0.73276, 0.30329, 0.74594, + 0.28232, 0.75385, 0.26135, 0.7549, 0.26027, 0.79128, 0.25376, + 0.8208, 0.24002, 0.8519, 0.22231, 0.87405, 0.19519, 0.89303, + 0.167, 0.90146, 0.14132, 0.90041, 0.12722, 0.89039, 0.12939, + 0.87668, 0.14494, 0.86456, 0.15651, 0.84452, 0.16337, 0.82027, + 0.16338, 0.79866, 0.15795, 0.78073, 0.14674, 0.76914, 0.12107, + 0.75016, 0.10047, 0.73434, 0.08311, 0.71114, 0.07335, 0.68742, + 0.06721, 0.64314, 0.07046, 0.61941, 0.07877, 0.58778, 0.09938, + 0.55299, 0.13554, 0.50685, 0.16771, 0.46415, 0.1876, 0.4283, + 0.20351, 0.38612, 0.21291, 0.34289, 0.21869, 0.28965, 0.21833, + 0.24378, 0.21725, 0.18842, 0.21327, 0.15047, 0.21544, 0.12938, + 0.2346, 0.10671, 0.26135, 0.09827 + ], + "triangles": [ + 86, 87, 89, 85, 86, 89, 64, 65, 62, 64, 62, 63, 84, 85, 90, 66, + 61, 62, 66, 62, 65, 57, 83, 84, 67, 60, 61, 67, 61, 66, 68, 58, + 59, 68, 59, 60, 68, 60, 67, 58, 83, 57, 58, 82, 83, 68, 82, 58, + 68, 81, 82, 69, 81, 68, 70, 81, 69, 71, 80, 81, 70, 71, 81, 72, + 80, 71, 73, 79, 80, 72, 73, 80, 74, 78, 79, 75, 77, 78, 74, 75, + 78, 76, 77, 75, 79, 73, 74, 52, 94, 95, 51, 52, 95, 53, 94, 52, + 93, 94, 53, 54, 93, 53, 55, 93, 54, 55, 92, 93, 56, 92, 55, 57, + 92, 56, 88, 89, 87, 90, 85, 89, 90, 91, 84, 57, 91, 92, 57, 84, + 91, 13, 15, 12, 13, 14, 15, 12, 15, 31, 30, 31, 15, 16, 30, 15, + 29, 30, 16, 28, 29, 16, 27, 28, 16, 26, 27, 16, 16, 25, 26, 16, + 24, 25, 17, 24, 16, 23, 24, 17, 21, 19, 20, 18, 23, 17, 22, 23, + 18, 22, 18, 19, 22, 19, 21, 8, 35, 36, 34, 35, 8, 34, 8, 9, 33, + 34, 9, 32, 33, 9, 32, 9, 10, 31, 32, 10, 11, 12, 31, 11, 31, 10, + 1, 43, 0, 102, 100, 101, 99, 100, 102, 103, 99, 102, 43, 103, 0, + 99, 103, 43, 43, 98, 99, 46, 97, 98, 44, 98, 43, 45, 98, 44, 46, + 98, 45, 47, 97, 46, 48, 97, 47, 48, 96, 97, 49, 96, 48, 49, 95, + 96, 50, 95, 49, 51, 95, 50, 42, 43, 1, 42, 1, 2, 3, 42, 2, 41, 42, + 3, 4, 41, 3, 40, 41, 4, 4, 39, 40, 5, 39, 4, 38, 39, 5, 6, 38, 5, + 37, 38, 6, 7, 36, 37, 7, 37, 6, 8, 36, 7 + ], + "vertices": [ + 4, 90, -390.62, -774.9, 0.00096, 89, 218.86, 837.89, 0.00565, 88, + -80.29, 30.43, 0.03236, 87, 29.42, -43.33, 0.96103, 3, 89, 36.39, + -53.46, 0.99024, 88, -91.8, 940.19, 0.00087, 87, -153.05, -934.68, + 0.00889, 4, 90, -34.67, 71.74, 0.01173, 89, 11.99, -56.93, + 0.98072, 88, -68.69, 948.77, 0.00067, 87, -177.45, -938.15, + 0.00688, 4, 90, -10.64, 53, 0.21647, 89, -14.87, -42.55, 0.78174, + 88, -39.38, 940.44, 0.00016, 87, -204.32, -923.77, 0.00163, 2, 90, + 30.71, 31.38, 0.91372, 89, -59.29, -28.27, 0.08628, 1, 90, 92.39, + 10.5, 1, 1, 90, 149.32, -0.97, 1, 1, 90, 190.11, 0.49, 1, 2, 90, + 234.52, 10.89, 0.35944, 115, 2.95, 10.89, 0.64056, 1, 115, 61.79, + 44.98, 1, 2, 115, 121.81, 84.88, 0.98577, 116, -109.76, 84.88, + 0.01423, 2, 115, 181.7, 118.16, 0.79983, 116, -49.87, 118.16, + 0.20017, 2, 115, 237.85, 126.8, 0.51337, 116, 6.27, 126.8, + 0.48663, 2, 115, 286.65, 120, 0.27699, 116, 55.07, 119.99, + 0.72301, 2, 115, 315.91, 103.22, 0.16575, 116, 84.34, 103.22, + 0.83425, 2, 115, 343.16, 61.47, 0.03189, 116, 111.59, 61.47, + 0.96811, 2, 115, 361, 45.79, 0.00453, 116, 129.43, 45.79, 0.99547, + 1, 116, 151.61, 38.9, 1, 1, 116, 171.14, 42.83, 1, 1, 116, 186.38, + 52.45, 1, 1, 116, 193.02, 67.44, 1, 1, 116, 213.35, 60.32, 1, 1, + 116, 210.39, 15.58, 1, 1, 116, 200.92, -25.43, 1, 1, 116, 179.36, + -69.44, 1, 1, 116, 150.28, -96.83, 1, 2, 115, 340.56, -118.74, + 0.0003, 116, 108.99, -118.74, 0.9997, 2, 115, 301.27, -124.73, + 0.02137, 116, 69.7, -124.73, 0.97863, 2, 115, 261.43, -115.5, + 0.10032, 116, 29.86, -115.5, 0.89968, 2, 115, 233.79, -99.66, + 0.22222, 116, 2.22, -99.66, 0.77778, 2, 115, 210.46, -74.41, + 0.48616, 116, -21.11, -74.41, 0.51384, 2, 115, 184.92, -57.18, + 0.83978, 116, -46.65, -57.18, 0.16022, 3, 90, 396.15, -59.13, + 0.00272, 115, 164.58, -59.13, 0.96741, 116, -66.99, -59.13, + 0.02986, 3, 90, 370.21, -79.9, 0.01952, 115, 138.64, -79.9, + 0.97865, 116, -92.93, -79.9, 0.00183, 2, 90, 329.97, -99.6, + 0.09022, 115, 98.4, -99.6, 0.90978, 2, 90, 275.12, -115.76, + 0.31456, 115, 43.55, -115.76, 0.68544, 2, 90, 217.93, -120.56, + 0.65761, 115, -13.64, -120.56, 0.34239, 2, 90, 146.82, -113.5, + 0.95005, 115, -84.75, -113.5, 0.04995, 2, 90, 93.03, -98.44, + 0.99976, 115, -138.54, -98.44, 0.00024, 1, 90, 32.06, -71.05, 1, + 2, 90, -13.57, -39.5, 0.9294, 89, -27.7, 49.1, 0.0706, 2, 90, + -41.3, -3.08, 0.07468, 89, 5.81, 17.93, 0.92532, 4, 90, -52.26, + 59.57, 0.00211, 89, 27.26, -41.94, 0.98585, 88, -80.41, 930.88, + 0.00107, 87, -162.19, -923.16, 0.01097, 4, 90, -377.48, -769.68, + 0.00164, 89, 206.8, 830.52, 0.00973, 88, -70.08, 40.19, 0.05487, + 87, 17.36, -50.7, 0.93376, 4, 90, -325.4, -757.2, 0.00015, 89, + 157.6, 809.37, 0.00089, 88, -26.51, 71.34, 0.63873, 87, -31.84, + -71.85, 0.36023, 4, 90, -292.51, -752.94, 0.00002, 89, 125.91, + 799.58, 0.00014, 88, 2.37, 87.65, 0.89225, 87, -63.53, -81.64, + 0.10759, 3, 88, 65.59, 120.09, 0.99926, 87, -132.22, -99.88, + 0.00043, 107, -222.12, 120.09, 0.00032, 2, 88, 128.43, 138.59, + 0.97226, 107, -159.27, 138.59, 0.02774, 2, 88, 206.96, 157.04, + 0.80236, 107, -80.75, 157.04, 0.19764, 2, 88, 249.77, 168.99, + 0.64534, 107, -37.94, 168.99, 0.35466, 2, 88, 298.92, 167.42, + 0.45218, 107, 11.21, 167.42, 0.54782, 2, 88, 338.03, 151.89, + 0.29337, 107, 50.32, 151.89, 0.70663, 2, 88, 369.36, 136.1, + 0.16583, 107, 81.65, 136.1, 0.83417, 3, 88, 409.24, 116.49, + 0.05253, 107, 121.53, 116.49, 0.94538, 108, -166.18, 116.49, + 0.0021, 3, 88, 443.73, 103.1, 0.01015, 107, 156.02, 103.1, + 0.97152, 108, -131.69, 103.1, 0.01833, 3, 88, 473.27, 93.61, + 0.00083, 107, 185.56, 93.61, 0.93838, 108, -102.15, 93.61, + 0.06079, 2, 107, 209.95, 92.18, 0.86304, 108, -77.76, 92.18, + 0.13696, 2, 107, 227.75, 93.73, 0.78128, 108, -59.96, 93.73, + 0.21872, 2, 107, 250.12, 99.77, 0.6327, 108, -37.59, 99.77, + 0.3673, 2, 107, 269.64, 120.94, 0.44494, 108, -18.07, 120.94, + 0.55506, 2, 107, 280.57, 142.91, 0.34351, 108, -7.14, 142.91, + 0.65649, 2, 107, 286.29, 166.91, 0.29663, 108, -1.42, 166.91, + 0.70337, 2, 107, 290.52, 192.43, 0.28016, 108, 2.81, 192.43, + 0.71984, 2, 107, 289.39, 217.54, 0.27677, 108, 1.68, 217.54, + 0.72323, 2, 107, 300.13, 221.38, 0.27678, 108, 12.42, 221.38, + 0.72322, 2, 107, 317.02, 214.92, 0.27651, 108, 29.31, 214.92, + 0.72349, 2, 107, 336.75, 190.3, 0.27267, 108, 49.04, 190.3, + 0.72733, 2, 107, 351.86, 158.18, 0.24801, 108, 64.15, 158.18, + 0.75199, 2, 107, 359.4, 124.63, 0.16644, 108, 71.69, 124.63, + 0.83356, 2, 107, 399.91, 130.47, 0.05517, 108, 112.2, 130.47, + 0.94483, 2, 107, 434.5, 126.15, 0.01847, 108, 146.79, 126.15, + 0.98153, 2, 107, 473.03, 110.51, 0.00201, 108, 185.32, 110.51, + 0.99799, 1, 108, 215.16, 86.6, 1, 1, 108, 244.37, 46.89, 1, 1, + 108, 262.27, 3.25, 1, 1, 108, 268.91, -38.33, 1, 1, 108, 262.14, + -63.13, 1, 1, 108, 246.34, -62.5, 1, 1, 108, 228.22, -39.99, 1, 1, + 108, 202.57, -25.53, 1, 1, 108, 173.7, -19.53, 1, 1, 108, 149.82, + -24.04, 1, 2, 107, 419.39, -36.51, 0.00176, 108, 131.68, -36.51, + 0.99824, 2, 107, 409.99, -56.98, 0.02113, 108, 122.28, -56.98, + 0.97887, 2, 107, 396.83, -102.28, 0.12591, 108, 109.12, -102.28, + 0.87409, 2, 107, 385.63, -138.77, 0.24033, 108, 97.92, -138.77, + 0.75967, 2, 107, 365.29, -171.56, 0.33962, 108, 77.58, -171.56, + 0.66038, 2, 107, 342.06, -192.23, 0.41477, 108, 54.35, -192.23, + 0.58523, 2, 107, 295.01, -211.36, 0.54101, 108, 7.31, -211.36, + 0.45899, 2, 107, 267.82, -211.07, 0.60689, 108, -19.89, -211.07, + 0.39311, 2, 107, 230.36, -204.28, 0.6998, 108, -57.35, -204.28, + 0.3002, 2, 107, 185.66, -178.35, 0.82785, 108, -102.05, -178.35, + 0.17215, 2, 107, 123.71, -129.74, 0.97165, 108, -164, -129.74, + 0.02835, 2, 88, 354.46, -86.83, 0.00141, 107, 66.76, -86.83, + 0.99859, 2, 88, 308.82, -62.28, 0.145, 107, 21.11, -62.28, 0.855, + 2, 88, 257.4, -45.46, 0.88346, 107, -30.31, -45.46, 0.11654, 1, + 88, 206.8, -39.34, 1, 1, 88, 146.23, -41.13, 1, 2, 88, 95.68, + -51.28, 0.99462, 87, -125.12, 73.96, 0.00538, 2, 88, 34.87, + -64.57, 0.83438, 87, -62.88, 74.01, 0.16562, 2, 88, -5.84, -78.89, + 0.4946, 87, -20.05, 79.33, 0.5054, 2, 88, -29.79, -79.8, 0.34033, + 87, 3.54, 75.12, 0.65967, 2, 88, -60.66, -53.66, 0.11039, 87, + 28.14, 43.01, 0.88961, 3, 90, -404.67, -815.34, 0.00012, 89, + 225.84, 880.14, 0.00071, 87, 36.39, -1.09, 0.99917 + ], + "hull": 104, + "edges": [ + 206, 204, 204, 202, 202, 200, 200, 198, 198, 196, 196, 194, 194, + 192, 192, 190, 190, 188, 188, 186, 186, 184, 184, 182, 182, 180, + 180, 178, 178, 176, 176, 174, 174, 172, 172, 170, 170, 168, 168, + 166, 166, 164, 164, 162, 162, 160, 160, 158, 158, 156, 156, 154, + 154, 152, 152, 150, 150, 148, 148, 146, 146, 144, 144, 142, 142, + 140, 140, 138, 138, 136, 136, 134, 134, 132, 132, 130, 130, 128, + 128, 126, 126, 124, 124, 122, 122, 120, 120, 118, 118, 116, 116, + 114, 114, 112, 112, 110, 110, 108, 108, 106, 106, 104, 104, 102, + 102, 100, 100, 98, 98, 96, 96, 94, 94, 92, 92, 90, 90, 88, 88, 86, + 206, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 86 + ], + "width": 1639, + "height": 1124 + } + }, + "腿-衣摆-后发/后发3": { + "后发3": { + "type": "mesh", + "uvs": [ + 0.86774, 0.34271, 0.87485, 0.34143, 0.88459, 0.35033, 0.88196, + 0.38464, 0.88117, 0.43548, 0.88643, 0.47318, 0.88986, 0.51724, + 0.89749, 0.55918, 0.91269, 0.62464, 0.92296, 0.67801, 0.92796, + 0.72461, 0.92822, 0.77248, 0.92454, 0.80806, 0.91559, 0.83899, + 0.9019, 0.86144, 0.88505, 0.87669, 0.8661, 0.88474, 0.84109, + 0.88093, 0.82583, 0.86822, 0.80872, 0.83687, 0.8114, 0.81623, + 0.83324, 0.8192, 0.84738, 0.78909, 0.84799, 0.76225, 0.84738, + 0.73542, 0.84678, 0.71346, 0.83772, 0.67771, 0.82824, 0.64679, + 0.82192, 0.60019, 0.82208, 0.54701, 0.82945, 0.4966, 0.84076, + 0.44238, 0.85779, 0.37939, 0.86674, 0.35439, 0.22255, 0.12483, + 0.23334, 0.15109, 0.23439, 0.20235, 0.23571, 0.25403, 0.23781, + 0.31715, 0.24196, 0.39769, 0.23643, 0.4642, 0.22308, 0.52225, + 0.20071, 0.56122, 0.17833, 0.58965, 0.17175, 0.62689, 0.16754, + 0.6612, 0.16965, 0.69085, 0.18176, 0.71881, 0.18664, 0.7559, + 0.18058, 0.8018, 0.16664, 0.8408, 0.14814, 0.86892, 0.13816, + 0.85916, 0.14279, 0.81671, 0.13566, 0.79663, 0.11071, 0.77369, + 0.08929, 0.74144, 0.07397, 0.69899, 0.06969, 0.66228, 0.0729, + 0.61179, 0.08787, 0.55615, 0.11211, 0.50853, 0.13777, 0.46494, + 0.14882, 0.41388, 0.15274, 0.36741, 0.15274, 0.32439, 0.15096, + 0.24752, 0.15453, 0.20449, 0.17057, 0.15286, 0.19552, 0.11614, + 0.21441, 0.1127, 0.15543, 0.67179, 0.13753, 0.66289, 0.12543, + 0.65654, 0.12069, 0.64764, 0.13438, 0.63197, 0.14859, 0.61757, + 0.8572, 0.71541, 0.87246, 0.73659, 0.8701, 0.76371, 0.86009, + 0.79251, 0.85009, 0.80734 + ], + "triangles": [ + 60, 74, 59, 75, 74, 60, 73, 74, 75, 45, 76, 44, 58, 59, 74, 72, + 75, 76, 71, 72, 76, 73, 75, 72, 45, 71, 76, 71, 45, 46, 57, 58, + 74, 73, 56, 57, 73, 57, 74, 72, 55, 56, 72, 56, 73, 55, 46, 54, + 71, 55, 72, 46, 55, 71, 54, 46, 47, 54, 47, 48, 49, 54, 48, 53, + 54, 49, 50, 53, 49, 52, 53, 50, 51, 52, 50, 40, 63, 39, 62, 63, + 40, 41, 62, 40, 42, 62, 41, 43, 61, 62, 42, 43, 62, 76, 61, 43, + 60, 61, 76, 44, 76, 43, 76, 75, 60, 10, 78, 9, 24, 77, 78, 79, 23, + 24, 78, 79, 24, 78, 10, 11, 79, 78, 11, 80, 22, 23, 79, 80, 23, + 81, 22, 80, 12, 79, 11, 81, 21, 22, 12, 80, 79, 13, 80, 12, 14, + 80, 13, 21, 19, 20, 18, 19, 21, 15, 80, 14, 81, 80, 15, 17, 21, + 81, 16, 17, 81, 18, 21, 17, 15, 16, 81, 28, 29, 7, 27, 7, 8, 27, + 28, 7, 26, 27, 8, 77, 26, 8, 77, 25, 26, 8, 9, 77, 78, 77, 9, 24, + 25, 77, 3, 32, 33, 4, 32, 3, 31, 32, 4, 31, 4, 5, 30, 31, 5, 30, + 5, 6, 6, 29, 30, 7, 29, 6, 70, 0, 34, 69, 70, 34, 35, 69, 34, 37, + 65, 66, 35, 68, 69, 68, 35, 36, 67, 68, 36, 65, 38, 64, 67, 36, + 37, 67, 37, 66, 38, 65, 37, 64, 39, 63, 39, 64, 38, 0, 33, 34, 2, + 0, 1, 2, 3, 0, 3, 33, 0 + ], + "vertices": [ + 3, 93, 15.74, 8.97, 0.99863, 92, 46.18, 1073.45, 0.00049, 91, + -238.55, -1047.97, 0.00088, 3, 93, 16.68, -2.36, 0.9996, 92, + 43.36, 1084.46, 0.00014, 91, -237.61, -1059.31, 0.00025, 1, 93, + 7.46, -17.6, 1, 2, 93, -26.31, -12.47, 0.06917, 94, 3.14, 16.85, + 0.93083, 1, 94, 53.36, 18.33, 1, 2, 94, 90.1, 28.72, 0.99977, 117, + -79.16, 28.72, 0.00023, 2, 94, 133.27, 36.52, 0.89917, 117, -36, + 36.52, 0.10083, 2, 94, 173.98, 50.9, 0.30225, 117, 4.72, 50.9, + 0.69775, 2, 117, 67.98, 78.56, 0.97117, 118, -101.28, 78.56, + 0.02883, 2, 117, 119.75, 97.73, 0.77526, 118, -49.52, 97.73, + 0.22474, 2, 117, 165.29, 108.18, 0.45379, 118, -3.98, 108.18, + 0.54621, 2, 117, 212.49, 111.17, 0.16867, 118, 43.22, 111.17, + 0.83133, 2, 117, 247.91, 107.23, 0.04945, 118, 78.65, 107.23, + 0.95055, 2, 117, 279.19, 94.69, 0.00701, 118, 109.93, 94.69, + 0.99299, 1, 118, 133.27, 74.17, 1, 1, 118, 149.77, 48.24, 1, 1, + 118, 159.35, 18.58, 1, 1, 118, 157.76, -21.32, 1, 2, 117, 315.8, + -46.25, 0.00001, 118, 146.54, -46.25, 0.99999, 2, 117, 286.36, + -75.1, 0.00002, 118, 117.1, -75.1, 0.99998, 2, 117, 265.77, + -71.96, 0.00002, 118, 96.51, -71.96, 0.99998, 2, 117, 266.8, + -37.11, 0.00002, 118, 97.54, -37.11, 0.99998, 2, 117, 235.88, + -16.28, 0.00005, 118, 66.61, -16.28, 0.99995, 1, 118, 40.08, + -16.76, 1, 2, 117, 182.92, -19.17, 0.20967, 118, 13.66, -19.17, + 0.79033, 2, 117, 161.31, -21.31, 0.75297, 118, -7.95, -21.31, + 0.24703, 1, 117, 126.83, -37.62, 1, 1, 117, 97.14, -54.33, 1, 2, + 94, 220.98, -66.86, 0.08031, 117, 51.72, -66.86, 0.91969, 2, 94, + 168.51, -69.49, 0.52376, 117, -0.76, -69.49, 0.47624, 2, 94, + 118.14, -60.5, 0.92539, 117, -51.13, -60.5, 0.07461, 1, 94, 63.66, + -45.45, 1, 2, 93, -20.05, 25.8, 0.0323, 94, 0.05, -21.81, 0.9677, + 4, 93, 4.24, 10.89, 0.96252, 92, 57.84, 1073.48, 0.0003, 91, + -250.05, -1046.06, 0.00054, 94, -25.38, -8.94, 0.03663, 4, 93, + 259.54, 1028.43, 0.00024, 92, -23.95, 27.59, 0.17025, 91, 5.25, + -28.51, 0.82446, 94, -196.07, -1044.04, 0.00505, 4, 93, 233.12, + 1012, 0.00004, 92, -0.65, 48.2, 0.92991, 91, -21.17, -44.94, + 0.06913, 94, -171.1, -1025.49, 0.00092, 1, 92, 49.27, 56.92, 1, 1, + 92, 99.54, 66.11, 1, 2, 92, 160.83, 78.12, 0.98024, 105, -81.62, + 78.12, 0.01976, 2, 92, 238.71, 95.74, 0.5809, 105, -3.73, 95.74, + 0.4191, 2, 92, 305, 96.2, 0.14135, 105, 62.56, 96.2, 0.85865, 2, + 92, 364.75, 83.18, 0.01269, 105, 122.31, 83.18, 0.98731, 1, 105, + 165.4, 53.32, 1, 1, 105, 198.18, 22.01, 1, 2, 105, 236.06, 16.78, + 0.7005, 106, -6.38, 16.78, 0.2995, 1, 106, 28.12, 14.87, 1, 2, + 105, 299.11, 22.27, 0.00131, 106, 56.67, 22.27, 0.99869, 2, 105, + 323.78, 45.19, 0.00077, 106, 81.34, 45.19, 0.99923, 2, 105, + 358.99, 57.99, 0.0001, 106, 116.54, 57.99, 0.9999, 1, 106, 162.79, + 54.77, 1, 1, 106, 204.03, 38.2, 1, 1, 106, 235.64, 12.94, 1, 1, + 106, 228.31, -4.12, 1, 1, 106, 185.75, -2.67, 1, 1, 106, 167.69, + -16.66, 1, 2, 105, 393.22, -59.11, 0.00226, 106, 150.77, -59.11, + 0.99774, 2, 105, 366.42, -97.27, 0.03547, 106, 123.98, -97.27, + 0.96453, 2, 105, 328.28, -127.25, 0.12566, 106, 85.84, -127.25, + 0.87434, 2, 105, 293.31, -139.05, 0.23342, 106, 50.87, -139.05, + 0.76658, 2, 105, 243.21, -140.95, 0.44591, 106, 0.77, -140.95, + 0.55409, 2, 105, 185.45, -125.04, 0.72453, 106, -56.99, -125.04, + 0.27547, 2, 105, 133.49, -93.44, 0.92827, 106, -108.95, -93.44, + 0.07173, 2, 105, 85.15, -59.03, 0.99629, 106, -157.29, -59.03, + 0.00371, 2, 92, 275.19, -48.67, 0.17417, 105, 32.75, -48.67, + 0.82583, 2, 92, 228.86, -48.89, 0.75087, 105, -13.58, -48.89, + 0.24913, 2, 92, 186.77, -54.82, 0.99623, 105, -55.68, -54.82, + 0.00377, 1, 92, 111.95, -68.21, 1, 1, 92, 69.07, -68.53, 1, 2, 92, + 15, -50.39, 0.99693, 91, -20.13, 54.87, 0.00307, 1, 91, 15.02, + 14.2, 1, 4, 93, 271.87, 1041.02, 0.00003, 92, -34.01, 13.12, + 0.03684, 91, 17.58, -15.92, 0.96238, 94, -207.33, -1057.61, + 0.00075, 2, 105, 283.61, -2.73, 0.00056, 106, 41.17, -2.73, + 0.99944, 2, 105, 278.87, -32.14, 0.11465, 106, 36.43, -32.14, + 0.88535, 2, 105, 275.34, -52.08, 0.20025, 106, 32.9, -52.08, + 0.79975, 2, 105, 267.69, -60.77, 0.27181, 106, 25.25, -60.77, + 0.72819, 2, 105, 249.32, -41.37, 0.43837, 106, 6.88, -41.37, + 0.56163, 2, 105, 232.08, -20.98, 0.75551, 106, -10.37, -20.98, + 0.24449, 2, 117, 162.34, -4.66, 0.68692, 118, -6.93, -4.66, + 0.31308, 2, 117, 181.91, 20.72, 0.20196, 118, 12.65, 20.72, + 0.79804, 2, 117, 208.86, 18.41, 0.00465, 118, 39.6, 18.41, + 0.99535, 1, 118, 68.89, 4.08, 1, 2, 117, 253.64, -11, 0.00001, + 118, 84.38, -11, 0.99999 + ], + "hull": 71, + "edges": [ + 140, 138, 138, 136, 136, 134, 134, 132, 132, 130, 130, 128, 128, + 126, 126, 124, 124, 122, 122, 120, 120, 118, 118, 116, 116, 114, + 114, 112, 112, 110, 110, 108, 108, 106, 106, 104, 104, 102, 102, + 100, 100, 98, 98, 96, 96, 94, 94, 92, 92, 142, 142, 144, 144, 146, + 146, 148, 148, 150, 150, 152, 152, 86, 86, 84, 84, 82, 86, 88, 88, + 90, 90, 92, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, 72, 70, 70, + 68, 68, 66, 66, 64, 64, 62, 62, 60, 60, 58, 58, 56, 56, 54, 54, + 52, 52, 154, 154, 156, 156, 158, 158, 160, 160, 162, 162, 42, 42, + 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, + 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, + 8, 6, 6, 4, 4, 2, 2, 0, 0, 140, 52, 50, 50, 48, 48, 46, 46, 44, + 44, 42 + ], + "width": 1590, + "height": 988 + } + }, + "腿-衣摆-后发/后发4": { + "后发4": { + "type": "mesh", + "uvs": [ + 0.51409, 0.08959, 0.56918, 0.09613, 0.64939, 0.10565, 0.77793, + 0.12349, 0.8716, 0.15799, 0.87941, 0.19129, 0.86171, 0.28764, + 0.85079, 0.36257, 0.85443, 0.43275, 0.86484, 0.49579, 0.88617, + 0.54754, 0.8997, 0.56419, 0.91375, 0.59333, 0.92, 0.63853, + 0.91375, 0.68373, 0.88688, 0.74191, 0.86138, 0.78592, 0.85774, + 0.80317, 0.85462, 0.82577, 0.8567, 0.84182, 0.86606, 0.85253, + 0.88428, 0.86383, 0.88428, 0.89059, 0.8619, 0.90189, 0.81298, + 0.90903, 0.77656, 0.90189, 0.74481, 0.88524, 0.71099, 0.87394, + 0.67716, 0.85075, 0.64125, 0.81328, 0.62356, 0.77165, 0.59026, + 0.77581, 0.55955, 0.77046, 0.55695, 0.75202, 0.56736, 0.74548, + 0.58973, 0.72228, 0.61159, 0.68065, 0.5965, 0.64199, 0.58401, + 0.59441, 0.571, 0.65032, 0.55435, 0.68957, 0.52573, 0.73418, + 0.49086, 0.76986, 0.45495, 0.79008, 0.41801, 0.84242, 0.37065, + 0.88345, 0.29935, 0.90249, 0.24315, 0.90605, 0.19476, 0.89654, + 0.1526, 0.87453, 0.15521, 0.84777, 0.18747, 0.83766, 0.20256, + 0.82398, 0.21037, 0.799, 0.20725, 0.76927, 0.19268, 0.74429, + 0.16353, 0.71931, 0.13023, 0.69195, 0.1, 0.65008, 0.08231, + 0.60845, 0.0797, 0.56741, 0.09219, 0.5127, 0.11665, 0.44668, + 0.13955, 0.38424, 0.1562, 0.31406, 0.15776, 0.25458, 0.15777, + 0.19213, 0.15568, 0.15586, 0.21761, 0.13564, 0.27173, 0.12017, + 0.38243, 0.1003, 0.58028, 0.50932, 0.57596, 0.36767, 0.57524, + 0.22932 + ], + "triangles": [ + 40, 42, 55, 55, 43, 54, 40, 41, 42, 42, 43, 55, 54, 45, 53, 43, + 44, 54, 44, 45, 54, 46, 52, 53, 48, 51, 52, 52, 47, 48, 49, 50, + 51, 48, 49, 51, 53, 45, 46, 46, 47, 52, 32, 33, 34, 16, 30, 36, + 35, 36, 30, 31, 34, 35, 31, 32, 34, 35, 30, 31, 15, 16, 36, 30, + 28, 29, 30, 16, 28, 16, 17, 28, 17, 27, 28, 17, 26, 27, 18, 26, + 17, 18, 25, 26, 22, 20, 21, 23, 19, 20, 23, 20, 22, 19, 25, 18, + 19, 24, 25, 23, 24, 19, 38, 71, 8, 38, 9, 37, 7, 8, 71, 9, 38, 8, + 36, 37, 9, 39, 71, 38, 10, 36, 9, 11, 13, 10, 13, 11, 12, 14, 15, + 10, 13, 14, 10, 36, 10, 15, 3, 72, 73, 3, 71, 72, 73, 2, 3, 7, 71, + 3, 73, 1, 2, 5, 6, 3, 5, 3, 4, 7, 3, 6, 72, 0, 73, 73, 0, 1, 58, + 59, 60, 57, 58, 61, 58, 60, 61, 71, 40, 72, 71, 39, 40, 62, 56, + 61, 56, 57, 61, 63, 72, 40, 40, 62, 63, 62, 55, 56, 62, 40, 55, + 66, 67, 68, 69, 72, 66, 72, 65, 66, 65, 72, 64, 64, 72, 63, 0, 72, + 70, 72, 69, 70, 69, 66, 68 + ], + "vertices": [ + 5, 99, 79.2, -255.11, 0.36509, 100, -117.1, 249.67, 0.27378, 109, + -407.53, 249.67, 0.00004, 102, -98.05, -357.75, 0.251, 101, 76.8, + 359.91, 0.1101, 6, 99, 69.16, -331.1, 0.24964, 100, -110.49, + 326.04, 0.23288, 109, -400.93, 326.04, 0.00075, 102, -87.65, + -281.81, 0.35243, 101, 66.76, 283.92, 0.16417, 103, -393.57, + -281.81, 0.00013, 5, 99, 54.54, -441.75, 0.11578, 100, -100.87, + 437.24, 0.12743, 109, -391.31, 437.24, 0.00056, 102, -72.5, + -171.23, 0.46901, 101, 52.14, 173.27, 0.28721, 3, 99, 27.98, + -618.98, 0.00049, 100, -82.33, 615.48, 0.00047, 101, 25.57, -3.95, + 0.99904, 2, 102, 0.89, 134.07, 0.90999, 101, -19.8, -132.38, + 0.09001, 2, 102, 41.55, 143.55, 0.94489, 101, -60.42, -142.05, + 0.05511, 1, 102, 157.36, 115.27, 1, 2, 102, 247.57, 97.19, + 0.87749, 103, -58.35, 97.19, 0.12251, 2, 102, 332.68, 99.46, + 0.23929, 103, 26.75, 99.46, 0.76071, 3, 102, 409.45, 111.36, + 0.00356, 103, 103.53, 111.36, 0.99376, 104, -202.4, 111.36, + 0.00268, 2, 103, 167.12, 138.83, 0.9411, 104, -138.81, 138.83, + 0.0589, 2, 103, 187.88, 156.89, 0.89036, 104, -118.04, 156.89, + 0.10964, 2, 103, 223.79, 175.17, 0.80324, 104, -82.13, 175.17, + 0.19676, 2, 103, 278.78, 182.02, 0.64366, 104, -27.14, 182.02, + 0.35634, 2, 103, 333.21, 171.6, 0.44163, 104, 27.28, 171.6, + 0.55837, 2, 103, 402.41, 132.12, 0.13962, 104, 96.49, 132.12, + 0.86038, 2, 103, 454.52, 95.11, 0.01543, 104, 148.6, 95.11, + 0.98457, 2, 103, 475.23, 89.39, 0.00345, 104, 169.31, 89.39, + 0.99655, 2, 103, 502.45, 84.18, 0.00037, 104, 196.53, 84.18, + 0.99963, 1, 104, 216.06, 86.42, 1, 1, 104, 229.44, 98.95, 1, 1, + 104, 243.93, 123.7, 1, 1, 104, 276.33, 122.64, 1, 1, 104, 288.99, + 91.24, 1, 1, 104, 295.42, 23.3, 1, 1, 104, 285.14, -26.81, 1, 2, + 109, 550.36, 585.51, 0.00046, 104, 263.55, -70.06, 0.99954, 3, + 109, 537.48, 538.47, 0.00213, 103, 554.26, -116.4, 0.00313, 104, + 248.34, -116.4, 0.99474, 4, 109, 510.21, 491.17, 0.00612, 103, + 524.66, -162.28, 0.02319, 104, 218.74, -162.28, 0.97054, 110, + 219.77, 491.17, 0.00016, 4, 109, 465.69, 440.71, 0.01494, 103, + 477.69, -210.46, 0.07975, 104, 171.77, -210.46, 0.90431, 110, + 175.26, 440.71, 0.001, 5, 100, 706.14, 415.36, 0.00015, 109, + 415.7, 415.36, 0.02903, 103, 426.5, -233.29, 0.1687, 104, 120.58, + -233.29, 0.79927, 110, 125.27, 415.36, 0.00285, 5, 100, 711.98, + 369.36, 0.00005, 109, 421.54, 369.36, 0.03473, 103, 430.04, + -279.52, 0.20112, 104, 124.12, -279.52, 0.7608, 110, 131.1, + 369.36, 0.0033, 4, 109, 415.79, 326.76, 0.03492, 103, 422.17, + -321.78, 0.20259, 104, 116.25, -321.78, 0.75933, 110, 125.35, + 326.76, 0.00316, 4, 109, 393.53, 322.77, 0.03508, 103, 399.74, + -324.66, 0.20335, 104, 93.82, -324.66, 0.75838, 110, 103.09, + 322.77, 0.00319, 5, 100, 675.8, 337.04, 0.00005, 109, 385.36, + 337.04, 0.03552, 103, 392.29, -310, 0.20543, 104, 86.37, -310, + 0.75568, 110, 94.92, 337.04, 0.00333, 6, 100, 647.18, 367.52, + 0.00079, 109, 356.74, 367.52, 0.04174, 102, 671.15, -278.13, + 0.00007, 103, 365.23, -278.13, 0.23454, 104, 59.3, -278.13, + 0.7179, 110, 66.3, 367.52, 0.00496, 6, 100, 596.25, 396.9, + 0.00553, 109, 305.81, 396.9, 0.07947, 102, 621.75, -246.25, + 0.00268, 103, 315.83, -246.25, 0.37506, 104, 9.9, -246.25, + 0.52313, 110, 15.38, 396.9, 0.01413, 6, 100, 549.8, 375.21, + 0.01524, 109, 259.36, 375.21, 0.1525, 102, 574.28, -265.6, 0.0125, + 103, 268.36, -265.6, 0.48649, 104, -37.57, -265.6, 0.29932, 110, + -31.07, 375.21, 0.03395, 6, 100, 492.49, 356.94, 0.03314, 109, + 202.05, 356.94, 0.3128, 102, 516.13, -280.99, 0.03482, 103, 210.2, + -280.99, 0.42954, 104, -95.72, -280.99, 0.0952, 110, -88.39, + 356.94, 0.09452, 6, 100, 560.49, 340.1, 0.01526, 109, 270.05, + 340.1, 0.43314, 102, 583.2, -301.2, 0.01756, 103, 277.28, -301.2, + 0.25078, 104, -28.64, -301.2, 0.02427, 110, -20.38, 340.1, + 0.25899, 6, 100, 608.41, 317.87, 0.00624, 109, 317.98, 317.87, + 0.42154, 102, 629.96, -325.79, 0.00923, 103, 324.04, -325.79, + 0.18773, 104, 18.12, -325.79, 0.01123, 110, 27.54, 317.87, + 0.36403, 6, 100, 663.1, 279.19, 0.00088, 109, 372.67, 279.19, + 0.35486, 102, 682.65, -367.14, 0.00309, 103, 376.73, -367.14, + 0.12688, 104, 70.81, -367.14, 0.00368, 110, 82.23, 279.19, + 0.51061, 5, 109, 416.7, 231.69, 0.25528, 102, 724.27, -416.78, + 0.00055, 103, 418.35, -416.78, 0.08148, 104, 112.43, -416.78, + 0.00084, 110, 126.27, 231.69, 0.66185, 4, 109, 442.04, 182.42, + 0.14109, 103, 441.2, -467.25, 0.04509, 104, 135.28, -467.25, + 0.00007, 110, 151.6, 182.42, 0.81375, 3, 109, 506.29, 132.38, + 0.02159, 103, 502.88, -520.43, 0.01205, 110, 215.85, 132.38, + 0.96636, 2, 103, 550.4, -587.55, 0.00152, 110, 266.67, 67.71, + 0.99848, 1, 110, 291.41, -30.55, 1, 1, 110, 297.07, -108.25, 1, 1, + 110, 286.7, -175.42, 1, 1, 110, 261.05, -234.21, 1, 2, 109, + 519.02, -231.16, 0.00004, 110, 228.59, -231.16, 0.99996, 2, 109, + 506.02, -186.73, 0.00449, 110, 215.58, -186.73, 0.99551, 2, 109, + 489.09, -166.13, 0.01595, 110, 198.66, -166.13, 0.98405, 2, 109, + 458.66, -155.85, 0.05553, 110, 168.23, -155.85, 0.94447, 3, 100, + 713.17, -160.79, 0.00008, 109, 422.73, -160.79, 0.15406, 110, + 132.29, -160.79, 0.84586, 3, 100, 683.27, -181.47, 0.00139, 109, + 392.83, -181.47, 0.30669, 110, 102.4, -181.47, 0.69192, 3, 100, + 653.72, -222.32, 0.00765, 109, 363.28, -222.32, 0.49848, 110, + 72.84, -222.32, 0.49387, 3, 100, 621.39, -268.97, 0.02076, 109, + 330.95, -268.97, 0.63482, 110, 40.51, -268.97, 0.34443, 3, 100, + 571.41, -311.68, 0.0445, 109, 280.97, -311.68, 0.72603, 110, + -9.46, -311.68, 0.22948, 3, 100, 521.42, -337.03, 0.0714, 109, + 230.98, -337.03, 0.76489, 110, -59.45, -337.03, 0.16371, 3, 100, + 471.8, -341.48, 0.10273, 109, 181.36, -341.48, 0.77628, 110, + -109.08, -341.48, 0.12099, 3, 100, 405.25, -325.34, 0.17553, 109, + 114.81, -325.34, 0.7561, 110, -175.62, -325.34, 0.06837, 4, 99, + -337.73, 306.79, 0.00103, 100, 324.73, -292.87, 0.34532, 109, + 34.3, -292.87, 0.63335, 110, -256.14, -292.87, 0.0203, 4, 99, + -263.02, 273.01, 0.01279, 100, 248.58, -262.48, 0.5855, 109, + -41.86, -262.48, 0.39962, 110, -332.3, -262.48, 0.0021, 3, 99, + -178.71, 247.6, 0.06702, 100, 163.21, -240.9, 0.7919, 109, + -127.23, -240.9, 0.14109, 3, 99, -106.77, 243.43, 0.17095, 100, + 91.16, -239.98, 0.79418, 109, -199.28, -239.98, 0.03487, 3, 99, + -31.17, 241.32, 0.30644, 100, 15.53, -241.27, 0.6903, 109, -274.9, + -241.27, 0.00325, 3, 99, 12.82, 242.97, 0.34444, 100, -28.33, + -244.91, 0.65548, 109, -318.77, -244.91, 0.00008, 2, 99, 34.9, + 156.62, 0.46836, 100, -54.29, -159.64, 0.53164, 2, 99, 51.53, + 81.22, 0.76296, 100, -74.3, -85.07, 0.23704, 4, 99, 71.32, -72.6, + 0.855, 100, -101, 67.71, 0.08488, 102, -91.04, -540.29, 0.04175, + 101, 68.92, 542.42, 0.01837, 8, 99, -431.45, -332.5, 0.00156, 100, + 389.54, 350, 0.09159, 109, 99.1, 350, 0.31256, 102, 412.96, + -282.79, 0.10977, 101, -433.85, 282.52, 0.00092, 103, 107.04, + -282.79, 0.41909, 104, -198.89, -282.79, 0.02415, 110, -191.34, + 350, 0.04036, 7, 99, -259.81, -331.3, 0.03035, 100, 218.14, + 341.07, 0.24946, 109, -72.3, 341.07, 0.162, 102, 241.32, -283.17, + 0.34133, 101, -262.22, 283.72, 0.01899, 103, -64.6, -283.17, + 0.19559, 110, -362.74, 341.07, 0.00228, 6, 99, -92.31, -334.98, + 0.13742, 100, 50.63, 337.19, 0.27652, 109, -239.8, 337.19, + 0.03206, 102, 73.84, -278.7, 0.42222, 101, -94.71, 280.04, + 0.09889, 103, -232.09, -278.7, 0.03289 + ], + "hull": 71, + "edges": [ + 138, 136, 136, 134, 134, 132, 132, 130, 130, 128, 128, 126, 126, + 124, 124, 122, 122, 120, 120, 118, 118, 116, 116, 114, 114, 112, + 112, 110, 110, 108, 108, 106, 106, 104, 104, 102, 102, 100, 100, + 98, 98, 96, 96, 94, 94, 92, 92, 90, 90, 88, 88, 86, 86, 84, 84, + 82, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, 72, 70, 70, 68, 68, + 66, 66, 64, 64, 62, 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, 52, + 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, + 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, + 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 0, 140, + 140, 138, 76, 142, 142, 144, 144, 146, 4, 2, 2, 0, 146, 2 + ], + "width": 1384, + "height": 1211 + } + }, + "腿-衣摆-后发/后摆": { + "后摆": { + "type": "mesh", + "uvs": [ + 0.86649, 0.64135, 0.87337, 0.66663, 0.88196, 0.70456, 0.88884, + 0.74529, 0.898, 0.79446, 0.90545, 0.83449, 0.91118, 0.87593, + 0.87795, 0.88295, 0.83154, 0.87453, 0.79831, 0.85627, 0.77596, + 0.83519, 0.7645, 0.81202, 0.74044, 0.8071, 0.71694, 0.79516, + 0.6946, 0.77339, 0.68199, 0.73968, 0.67879, 0.6787, 0.67683, + 0.64135, 0.47629, 0.64205, 0.45165, 0.67928, 0.40868, 0.73195, + 0.37086, 0.76777, 0.32503, 0.76707, 0.30095, 0.79728, 0.27632, + 0.80991, 0.25398, 0.81413, 0.22991, 0.84854, 0.20355, 0.87242, + 0.17147, 0.88787, 0.13881, 0.89138, 0.08724, 0.87944, 0.08781, + 0.85767, 0.09641, 0.83239, 0.10901, 0.78744, 0.11818, 0.74319, + 0.13006, 0.69938, 0.1398, 0.65846, 0.15256, 0.61958, 0.16517, + 0.61045, 0.18579, 0.60834, 0.23163, 0.53459, 0.26028, 0.46015, + 0.28778, 0.36814, 0.31586, 0.28315, 0.34279, 0.15557, 0.34263, + 0.12645, 0.36383, 0.1089, 0.40279, 0.1103, 0.46639, 0.13067, + 0.48473, 0.16087, 0.47098, 0.28659, 0.44863, 0.38913, 0.42686, + 0.47833, 0.38904, 0.60615, 0.46639, 0.61388, 0.48301, 0.63003, + 0.66939, 0.63011, 0.686, 0.60693, 0.71236, 0.60272, 0.85102, + 0.60623, 0.86248, 0.6273, 0.27158, 0.78286, 0.29449, 0.74074, + 0.32208, 0.68968, 0.34402, 0.62564, 0.33842, 0.64256, 0.75942, + 0.78796, 0.74692, 0.74329, 0.7412, 0.69032, 0.73805, 0.62911 + ], + "triangles": [ + 51, 42, 43, 51, 43, 50, 50, 43, 44, 44, 46, 47, 49, 50, 47, 47, + 50, 44, 49, 47, 48, 44, 45, 46, 29, 33, 28, 29, 30, 31, 29, 31, + 32, 27, 28, 33, 26, 27, 33, 32, 33, 29, 26, 33, 34, 25, 26, 34, + 25, 61, 24, 61, 25, 35, 24, 61, 23, 25, 34, 35, 61, 35, 36, 22, + 23, 62, 23, 61, 62, 62, 61, 36, 20, 21, 63, 62, 63, 22, 21, 22, + 63, 62, 37, 63, 36, 37, 62, 63, 65, 20, 20, 65, 19, 63, 37, 65, + 65, 64, 19, 19, 64, 18, 65, 37, 64, 18, 55, 56, 18, 64, 55, 64, + 53, 55, 53, 54, 55, 64, 37, 39, 37, 38, 39, 39, 40, 64, 53, 64, + 41, 64, 40, 41, 53, 41, 52, 41, 42, 52, 52, 42, 51, 6, 7, 5, 7, 8, + 5, 5, 8, 4, 4, 8, 9, 1, 68, 0, 1, 67, 68, 15, 16, 68, 16, 69, 68, + 68, 60, 0, 68, 69, 60, 16, 17, 69, 18, 56, 17, 17, 56, 69, 56, 58, + 69, 56, 57, 58, 69, 59, 60, 69, 58, 59, 13, 14, 67, 14, 15, 67, + 15, 68, 67, 4, 9, 3, 3, 9, 10, 12, 66, 11, 3, 10, 11, 12, 13, 66, + 66, 13, 67, 11, 66, 3, 3, 66, 2, 66, 67, 2, 67, 1, 2 + ], + "vertices": [ + 3, 21, -48.22, 82.8, 0.04739, 20, 46.8, 82.8, 0.08843, 19, 231.55, + -14.88, 0.86418, 3, 21, -21.06, 78.45, 0.2203, 20, 73.96, 78.45, + 0.23603, 19, 239.82, -41.11, 0.54366, 3, 21, 18.67, 70, 0.66602, + 20, 113.69, 70, 0.14092, 19, 250.05, -80.43, 0.19306, 4, 21, + 59.97, 58.28, 0.8923, 20, 154.99, 58.28, 0.00372, 19, 258.06, + -122.6, 0.03924, 22, -35.05, 58.28, 0.06475, 3, 21, 110.32, 45.1, + 0.34693, 19, 268.82, -173.52, 0.00098, 22, 15.31, 45.1, 0.6521, 2, + 21, 151.31, 34.36, 0.00631, 22, 56.3, 34.36, 0.99369, 1, 22, + 97.57, 21.01, 1, 1, 22, 84.56, -19.62, 1, 3, 21, 144.72, -67.65, + 0.18425, 20, 239.74, -67.65, 0.00629, 22, 49.7, -67.65, 0.80945, + 4, 21, 108.57, -96.22, 0.47725, 20, 203.59, -96.22, 0.05287, 19, + 141.68, -235.23, 0.00429, 22, 13.56, -96.22, 0.46559, 4, 21, + 76.22, -111.23, 0.59877, 20, 171.24, -111.23, 0.13097, 19, 113.77, + -213.03, 0.02279, 22, -18.8, -111.23, 0.24747, 4, 21, 48.31, + -113.03, 0.58635, 20, 143.33, -113.03, 0.23938, 19, 99.67, + -188.87, 0.06671, 22, -46.71, -113.03, 0.10757, 4, 21, 29.74, + -137.67, 0.47535, 20, 124.75, -137.67, 0.34501, 19, 69.31, -183.3, + 0.14895, 22, -65.28, -137.67, 0.03068, 4, 21, 5.07, -158.33, + 0.37912, 20, 100.09, -158.33, 0.38164, 19, 39.8, -170.49, 0.23135, + 22, -89.95, -158.33, 0.00789, 4, 21, -27.92, -173.01, 0.29013, 20, + 67.1, -173.01, 0.37872, 19, 11.9, -147.56, 0.33064, 22, -122.94, + -173.01, 0.00051, 3, 21, -66.14, -171.06, 0.20438, 20, 28.87, + -171.06, 0.33814, 19, -3.47, -112.52, 0.45747, 3, 21, -123.81, + -145.55, 0.06184, 20, -28.79, -145.55, 0.14658, 19, -6.48, -49.53, + 0.79157, 4, 21, -159.14, -129.93, 0.0051, 20, -64.12, -129.93, + 0.01298, 19, -8.33, -10.95, 0.97832, 17, 655.94, -7.67, 0.0036, 3, + 19, -261.99, -7.51, 0.00176, 17, 402.3, -12.76, 0.99788, 18, + -133.96, 189.36, 0.00035, 3, 19, -293.79, -45.41, 0.00001, 17, + 371.8, -51.7, 0.95906, 18, -84.53, 187.36, 0.04093, 4, 19, + -349.03, -98.88, 0.00001, 17, 318.38, -106.99, 0.68026, 18, -8.45, + 176.31, 0.31419, 23, -119.71, 176.31, 0.00553, 4, 19, -397.47, + -135.05, 0.00001, 17, 271.19, -144.78, 0.39588, 18, 49.79, 160.08, + 0.56154, 23, -61.48, 160.08, 0.04257, 3, 17, 213.2, -145.05, + 0.12665, 18, 83.89, 113.18, 0.67497, 23, -27.38, 113.18, 0.19838, + 3, 17, 183.28, -176.74, 0.01968, 18, 127.09, 107.42, 0.51163, 23, + 15.82, 107.42, 0.46869, 4, 17, 152.36, -190.31, 0.00309, 18, + 156.17, 90.25, 0.34046, 23, 44.91, 90.25, 0.65386, 24, -66.36, + 90.25, 0.00259, 3, 18, 176.57, 70.19, 0.1622, 23, 65.3, 70.19, + 0.79117, 24, -45.97, 70.19, 0.04664, 3, 18, 223.24, 67.04, + 0.01646, 23, 111.97, 67.04, 0.57823, 24, 0.71, 67.04, 0.40531, 2, + 23, 151.66, 55.06, 0.17719, 24, 40.4, 55.06, 0.82281, 2, 23, + 188.72, 32.07, 0.00559, 24, 77.45, 32.07, 0.99441, 1, 24, 105.07, + 1.13, 1, 1, 24, 134.21, -58.52, 1, 3, 17, -85.23, -243.69, 0.0016, + 23, 227.04, -71.38, 0.00287, 24, 115.77, -71.38, 0.99553, 3, 17, + -74.8, -217.42, 0.01102, 23, 199.62, -78.28, 0.03183, 24, 88.36, + -78.27, 0.95715, 3, 17, -59.66, -170.76, 0.06707, 23, 152.91, + -93.24, 0.22357, 24, 41.64, -93.24, 0.70936, 3, 17, -48.85, + -124.91, 0.20314, 23, 109.38, -111.26, 0.45187, 24, -1.89, + -111.26, 0.34499, 3, 17, -34.6, -79.44, 0.45405, 23, 64.16, + -126.26, 0.44001, 24, -47.11, -126.26, 0.10594, 4, 17, -23.01, + -37, 0.77062, 18, 134.21, -141.64, 0.00107, 23, 22.94, -141.64, + 0.20718, 24, -88.33, -141.64, 0.02113, 2, 17, -7.56, 3.39, + 0.99996, 24, -130.14, -152.71, 0.00004, 1, 17, 8.22, 13.09, 1, 2, + 17, 34.27, 15.71, 0.9998, 44, -489.81, 288.28, 0.0002, 2, 17, + 90.94, 92.8, 0.95916, 44, -413.7, 230.29, 0.04084, 2, 17, 125.86, + 170.24, 0.82686, 44, -336.87, 194.05, 0.17314, 2, 17, 159.01, + 265.78, 0.58776, 44, -241.92, 159.26, 0.41224, 2, 17, 193.01, + 354.08, 0.32633, 44, -154.22, 123.74, 0.67367, 2, 17, 224.81, + 486.31, 0.03635, 44, -22.55, 89.68, 0.96365, 2, 17, 224.1, 516.35, + 0.01511, 44, 7.49, 89.88, 0.98489, 2, 17, 250.6, 534.93, 0.00671, + 44, 25.61, 63.06, 0.99329, 1, 44, 24.16, 13.77, 1, 2, 17, 380.71, + 514.69, 0.00537, 44, 3.15, -66.68, 0.99463, 2, 17, 404.43, 483.93, + 0.01813, 44, -28.02, -89.88, 0.98187, 2, 17, 389.27, 353.91, + 0.20849, 44, -157.76, -72.48, 0.79151, 2, 17, 362.83, 247.61, + 0.47739, 44, -263.59, -44.22, 0.52261, 2, 17, 336.87, 155.1, + 0.72031, 44, -355.64, -16.67, 0.27969, 2, 17, 291.31, 22.38, + 0.98881, 44, -487.56, 31.17, 0.01119, 2, 19, -274.04, 21.76, + 0.00012, 17, 389.28, 16.09, 0.99988, 3, 20, -187.83, -341.94, + 0.00001, 19, -253.29, 4.75, 0.01171, 17, 410.59, -0.21, 0.98828, + 5, 21, -173.78, -132.92, 0.00079, 20, -78.76, -132.92, 0.0019, 19, + -17.56, 0.8, 0.97513, 17, 646.32, 3.76, 0.02217, 18, -289.93, + 377.75, 0.00001, 1, 19, 3.85, 24.37, 1, 1, 19, 37.26, 28.18, 1, 3, + 21, -89.4, 82.21, 0.00008, 20, 5.62, 82.21, 0.00013, 19, 212.58, + 21.68, 0.99979, 3, 21, -63.42, 85.01, 0.00294, 20, 31.6, 85.01, + 0.00506, 19, 226.72, -0.3, 0.992, 3, 17, 145.87, -162.5, 0.00364, + 18, 137.39, 68.74, 0.37441, 23, 26.12, 68.74, 0.62194, 3, 17, + 174.1, -118.54, 0.03705, 18, 85.22, 65.96, 0.73595, 23, -26.05, + 65.96, 0.227, 3, 17, 208.1, -65.26, 0.21908, 18, 22.12, 62.42, + 0.76165, 23, -89.15, 62.42, 0.01927, 2, 17, 234.71, 1.3, 0.99975, + 44, -507.66, 88.12, 0.00025, 3, 17, 227.93, -16.28, 0.84317, 18, + -29.22, 49.9, 0.15681, 23, -140.49, 49.9, 0.00002, 4, 21, 23.33, + -107.25, 0.52869, 20, 118.34, -107.25, 0.31877, 19, 93.65, + -163.95, 0.1058, 22, -71.69, -107.25, 0.04673, 4, 21, -24.86, + -99.95, 0.31875, 20, 70.16, -99.95, 0.46185, 19, 78.6, -117.59, + 0.21563, 22, -119.88, -99.95, 0.00377, 3, 21, -76.68, -81.1, + 0.10015, 20, 18.33, -81.1, 0.42615, 19, 72.25, -62.81, 0.47371, 1, + 19, 69.31, 0.41, 1 + ], + "hull": 61, + "edges": [ + 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, + 106, 106, 108, 108, 110, 110, 112, 112, 114, 114, 116, 116, 118, + 118, 120, 120, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, + 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, + 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, + 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, + 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, + 82, 84, 84, 86, 86, 88, 88, 90, 50, 122, 122, 124, 124, 126, 110, + 128, 128, 74, 126, 130, 130, 128, 30, 32, 32, 34, 22, 132, 132, + 134, 134, 136, 112, 138, 138, 120, 136, 138 + ], + "width": 1265, + "height": 1032 + } + }, + "腿-衣摆-后发/后脑勺": { + "后脑勺": { + "type": "mesh", + "uvs": [ + 0.63223, 0.10133, 0.56212, 0.09084, 0.47772, 0.09234, 0.39877, + 0.10732, 0.313, 0.14403, 0.21091, 0.20997, 0.15101, 0.28714, + 0.11017, 0.35832, 0.07954, 0.46022, 0.07886, 0.52091, 0.09656, + 0.64604, 0.13195, 0.74944, 0.17755, 0.80113, 0.27987, 0.86105, + 0.39694, 0.90001, 0.49767, 0.90975, 0.63312, 0.89477, 0.73386, + 0.86105, 0.83119, 0.80785, 0.88088, 0.74042, 0.90606, 0.64601, + 0.91627, 0.54786, 0.91083, 0.42048, 0.89706, 0.3579, 0.88973, + 0.32458, 0.8625, 0.26831, 0.80941, 0.20312, 0.75088, 0.15517, + 0.69506, 0.12445, 0.85842, 0.30802, 0.79512, 0.24358, 0.73726, + 0.20687, 0.66239, 0.1769, 0.56982, 0.15892, 0.49291, 0.15068, + 0.40851, 0.15592, 0.34589, 0.16641, 0.28871, 0.18664 + ], + "triangles": [ + 34, 2, 1, 35, 3, 2, 35, 2, 34, 36, 4, 3, 33, 1, 0, 34, 1, 33, 35, + 36, 3, 32, 0, 28, 33, 0, 32, 37, 4, 36, 31, 28, 27, 31, 27, 26, + 32, 28, 31, 37, 5, 4, 30, 31, 26, 30, 26, 25, 29, 30, 25, 29, 25, + 24, 29, 24, 23, 21, 29, 22, 22, 29, 23, 7, 9, 8, 6, 10, 9, 30, 29, + 21, 20, 19, 21, 7, 6, 9, 12, 11, 10, 6, 37, 10, 37, 12, 10, 30, + 21, 31, 19, 18, 21, 5, 37, 6, 13, 12, 37, 37, 36, 35, 33, 37, 35, + 37, 33, 13, 33, 14, 13, 32, 17, 33, 31, 18, 32, 21, 18, 31, 32, + 18, 17, 17, 16, 33, 33, 15, 14, 16, 15, 33, 35, 34, 33 + ], + "vertices": [ + 2, 154, -938.03, -527.32, 0.44571, 155, 872.85, -883.39, 0.55429, + 2, 154, -953.82, -623.38, 0.44571, 155, 888.65, -787.33, 0.55429, + 2, 154, -955.19, -739.53, 0.44571, 155, 890.02, -671.19, 0.55429, + 2, 154, -939.5, -848.65, 0.44571, 155, 874.33, -562.07, 0.55429, + 2, 154, -896.91, -967.89, 0.44571, 155, 831.74, -442.82, 0.55429, + 2, 154, -818.45, -1110.62, 0.44571, 155, 753.28, -300.09, 0.55429, + 2, 154, -724.32, -1195.7, 0.44571, 155, 659.15, -215.01, 0.55429, + 2, 154, -636.94, -1254.35, 0.44571, 155, 571.77, -156.36, 0.55429, + 2, 154, -510.8, -1300.04, 0.44571, 155, 445.62, -110.68, 0.55429, + 2, 154, -434.99, -1303.09, 0.44571, 155, 369.82, -107.62, 0.55429, + 2, 154, -277.96, -1283.11, 0.44571, 155, 212.79, -127.6, 0.55429, + 2, 154, -147.41, -1238.03, 0.44571, 155, 82.24, -172.68, 0.55429, + 2, 154, -81.06, -1177.11, 0.44571, 155, 15.89, -233.6, 0.55429, 2, + 154, -2.27, -1038.47, 0.44571, 155, -62.9, -372.24, 0.55429, 2, + 154, 50.91, -878.8, 0.44571, 155, -116.08, -531.91, 0.55429, 2, + 154, 66.95, -740.58, 0.44571, 155, -132.12, -670.13, 0.55429, 2, + 154, 53.42, -553.75, 0.44571, 155, -118.59, -856.96, 0.55429, 2, + 154, 15.16, -414.02, 0.44571, 155, -80.33, -996.69, 0.55429, 2, + 154, -47.58, -278.29, 0.44571, 155, -17.6, -1132.43, 0.55429, 2, + 154, -129.93, -207.59, 0.44571, 155, 64.76, -1203.12, 0.55429, 2, + 154, -246.92, -169.66, 0.44571, 155, 181.75, -1241.05, 0.55429, 2, + 154, -369.17, -152.19, 0.44571, 155, 304, -1258.52, 0.55429, 2, + 154, -528.54, -155.24, 0.44571, 155, 463.37, -1255.47, 0.55429, 2, + 154, -607.27, -172, 0.44571, 155, 542.1, -1238.71, 0.55429, 2, + 154, -649.18, -180.92, 0.44571, 155, 584.01, -1229.79, 0.55429, 2, + 154, -720.54, -216.41, 0.44571, 155, 655.37, -1194.3, 0.55429, 2, + 154, -804.03, -287.16, 0.44571, 155, 738.86, -1123.55, 0.55429, 2, + 154, -866.19, -366, 0.44571, 155, 801.02, -1044.71, 0.55429, 2, + 154, -906.72, -441.7, 0.44571, 155, 841.55, -969.01, 0.55429, 2, + 154, -671.08, -223.41, 0.5, 155, 605.91, -1187.3, 0.5, 2, 154, + -754.02, -308.23, 0.5, 155, 688.85, -1102.48, 0.5, 2, 154, + -802.12, -386.53, 0.5, 155, 736.94, -1024.18, 0.5, 2, 154, + -842.44, -488.47, 0.5, 155, 777.27, -922.25, 0.5, 2, 154, -868.46, + -615.16, 0.5, 155, 803.29, -795.55, 0.5, 2, 154, -881.71, -720.67, + 0.5, 155, 816.54, -690.04, 0.5, 2, 154, -878.4, -836.94, 0.5, 155, + 813.23, -573.77, 0.5, 2, 154, -867.69, -923.44, 0.5, 155, 802.52, + -487.27, 0.5, 2, 154, -844.61, -1002.79, 0.44571, 155, 779.44, + -407.93, 0.55429 + ], + "hull": 29, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, + 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, + 36, 36, 38, 38, 40, 40, 42, 42, 44, 48, 50, 50, 52, 52, 54, 54, + 56, 0, 56, 44, 46, 46, 48, 46, 58, 58, 60, 60, 62, 62, 64, 64, 66, + 66, 68, 68, 70, 70, 72, 72, 74 + ], + "width": 1376, + "height": 1250 + } + }, + "腿-衣摆-后发/左大腿": { + "左大腿": { + "type": "mesh", + "uvs": [ + 0.46357, 0.2796, 0.46886, 0.28379, 0.52082, 0.2838, 0.57393, + 0.29195, 0.61525, 0.30631, 0.67825, 0.33105, 0.71216, 0.34796, + 0.75152, 0.37477, 0.76414, 0.38668, 0.78975, 0.42274, 0.79508, + 0.43494, 0.79686, 0.44329, 0.80007, 0.5257, 0.79188, 0.57743, + 0.78103, 0.61765, 0.76688, 0.65204, 0.75854, 0.66698, 0.74687, + 0.68343, 0.73112, 0.69814, 0.7062, 0.71273, 0.6953, 0.71662, + 0.6809, 0.71859, 0.60723, 0.71865, 0.57296, 0.71623, 0.56928, + 0.7139, 0.5331, 0.71376, 0.52958, 0.71137, 0.47638, 0.71138, + 0.47462, 0.70906, 0.41917, 0.709, 0.41509, 0.70666, 0.38447, + 0.7075, 0.3197, 0.69932, 0.26222, 0.68392, 0.24447, 0.67141, + 0.23538, 0.66088, 0.21793, 0.63623, 0.21168, 0.62446, 0.20677, + 0.61157, 0.20135, 0.58333, 0.20133, 0.53556, 0.20584, 0.50658, + 0.2123, 0.48055, 0.22298, 0.4504, 0.23273, 0.43013, 0.24551, + 0.40899, 0.26372, 0.38552, 0.27902, 0.36854, 0.32754, 0.32887, + 0.35039, 0.31319, 0.37796, 0.29985, 0.4461, 0.2833 + ], + "triangles": [ + 12, 8, 11, 11, 9, 10, 11, 8, 9, 37, 38, 39, 41, 37, 40, 40, 37, + 39, 8, 13, 7, 12, 13, 8, 41, 36, 37, 42, 35, 41, 35, 36, 41, 7, + 13, 14, 44, 34, 43, 34, 42, 43, 34, 35, 42, 6, 7, 14, 15, 16, 14, + 44, 33, 34, 19, 6, 14, 16, 17, 14, 45, 32, 44, 32, 33, 44, 17, 18, + 14, 31, 32, 47, 46, 47, 32, 32, 45, 46, 30, 50, 51, 49, 50, 30, + 48, 49, 30, 48, 31, 47, 30, 31, 48, 28, 29, 30, 28, 1, 2, 26, 28, + 2, 3, 26, 2, 4, 26, 3, 5, 26, 4, 51, 0, 1, 28, 51, 1, 28, 30, 51, + 24, 25, 26, 6, 19, 5, 27, 28, 26, 19, 14, 18, 26, 5, 24, 23, 24, + 22, 5, 22, 24, 5, 19, 21, 19, 20, 21, 5, 21, 22 + ], + "vertices": [ + 1, 8, 105.95, 58.53, 1, 1, 8, 109.39, 57.67, 1, 1, 8, 138.72, + 65.65, 1, 1, 8, 169.59, 70.55, 1, 1, 8, 194.47, 71.16, 1, 1, 8, + 232.74, 70.94, 1, 1, 8, 253.72, 69.38, 1, 1, 8, 278.86, 64.69, 1, + 1, 8, 287.28, 61.86, 1, 1, 8, 305.67, 51.36, 1, 1, 8, 310.01, + 47.3, 1, 1, 8, 311.92, 44.23, 1, 1, 8, 322.72, 11.72, 1, 1, 8, + 323.74, -10.25, 1, 1, 8, 322.01, -28.02, 1, 1, 8, 317.77, -43.97, + 1, 1, 8, 314.69, -51.23, 1, 1, 8, 309.9, -59.61, 1, 1, 8, 302.61, + -67.92, 1, 1, 8, 290.14, -77.6, 1, 1, 8, 284.41, -80.83, 1, 1, 8, + 276.5, -83.83, 1, 1, 8, 234.92, -95.18, 1, 1, 8, 215.31, -99.48, + 1, 1, 8, 212.98, -99.12, 1, 1, 8, 192.55, -104.62, 1, 1, 8, 190.3, + -104.21, 1, 1, 8, 160.27, -112.39, 1, 1, 8, 159.03, -111.73, 1, 1, + 8, 127.72, -120.23, 1, 1, 8, 125.17, -119.93, 1, 1, 8, 107.97, + -124.97, 1, 1, 8, 70.52, -131.65, 1, 1, 8, 36.4, -134.32, 1, 1, 8, + 25.01, -132.04, 1, 1, 8, 18.74, -129.22, 1, 1, 8, 6.2, -122.03, 1, + 1, 8, 1.39, -118.28, 1, 1, 8, -2.79, -113.88, 1, 1, 8, -8.93, + -103.4, 1, 1, 8, -14.15, -84.28, 1, 1, 8, -14.77, -71.98, 1, 1, 8, + -13.96, -60.57, 1, 1, 8, -11.22, -46.85, 1, 1, 8, -7.93, -37.24, + 1, 1, 8, -3.02, -26.81, 1, 1, 8, 4.7, -14.61, 1, 1, 8, 11.48, + -5.46, 1, 1, 8, 34.54, 17.89, 1, 1, 8, 45.73, 27.68, 1, 1, 8, + 59.84, 37.26, 1, 1, 8, 96.49, 54.36, 1 + ], + "hull": 52, + "edges": [ + 0, 102, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, + 98, 98, 100, 100, 102 + ], + "width": 585, + "height": 415 + } + }, + "腿-衣摆-后发/左小腿": { + "左小腿": { + "type": "mesh", + "uvs": [ + 0.73256, 0.17224, 0.74566, 0.17579, 0.75569, 0.1808, 0.76966, + 0.19621, 0.78804, 0.236, 0.79263, 0.25736, 0.79258, 0.30253, + 0.78747, 0.32494, 0.78289, 0.33449, 0.76943, 0.3551, 0.75819, + 0.36759, 0.71654, 0.43091, 0.6939, 0.45916, 0.64002, 0.52052, + 0.65155, 0.53476, 0.66394, 0.55484, 0.67003, 0.56998, 0.67007, + 0.58081, 0.66768, 0.58803, 0.64598, 0.60609, 0.6198, 0.62106, + 0.5884, 0.63514, 0.56266, 0.69887, 0.56063, 0.72351, 0.55105, + 0.73684, 0.55104, 0.75502, 0.54492, 0.77303, 0.53374, 0.79013, + 0.51068, 0.80641, 0.48314, 0.81819, 0.46818, 0.82263, 0.44807, + 0.82629, 0.39593, 0.82628, 0.38267, 0.82274, 0.35985, 0.81336, + 0.33215, 0.79726, 0.30079, 0.77132, 0.28627, 0.75172, 0.27019, + 0.72204, 0.26086, 0.6988, 0.2466, 0.678, 0.23492, 0.66952, + 0.22789, 0.66195, 0.21838, 0.64633, 0.21028, 0.62889, 0.20743, + 0.61407, 0.20741, 0.58873, 0.20847, 0.5854, 0.21706, 0.57262, + 0.23091, 0.56114, 0.24109, 0.5546, 0.23634, 0.54936, 0.23412, + 0.54371, 0.23342, 0.53208, 0.23904, 0.51451, 0.24932, 0.50012, + 0.27981, 0.47481, 0.28864, 0.46971, 0.30314, 0.4644, 0.31651, + 0.46126, 0.33764, 0.39571, 0.3479, 0.37393, 0.3528, 0.3684, + 0.36066, 0.36332, 0.36709, 0.36104, 0.38985, 0.36102, 0.40605, + 0.36536, 0.41939, 0.37076, 0.43426, 0.3464, 0.44915, 0.32569, + 0.47446, 0.29427, 0.52258, 0.25367, 0.58582, 0.21274, 0.60522, + 0.20163, 0.62927, 0.19023, 0.65277, 0.18251, 0.67938, 0.17516, + 0.70773, 0.1752, 0.71169, 0.17223 + ], + "triangles": [ + 48, 45, 46, 47, 48, 46, 49, 44, 45, 48, 49, 45, 50, 43, 44, 50, + 42, 43, 44, 49, 50, 40, 41, 42, 40, 42, 50, 59, 39, 40, 21, 38, + 59, 59, 38, 39, 21, 22, 38, 38, 22, 37, 23, 24, 22, 24, 37, 22, + 24, 36, 37, 35, 36, 24, 25, 26, 24, 24, 26, 28, 35, 24, 34, 26, + 27, 28, 31, 34, 24, 28, 29, 24, 29, 30, 24, 31, 33, 34, 31, 32, + 33, 31, 24, 30, 3, 1, 2, 5, 9, 4, 6, 7, 5, 7, 8, 5, 4, 78, 3, 8, + 9, 5, 78, 4, 77, 9, 10, 77, 0, 3, 78, 0, 1, 3, 9, 77, 4, 10, 76, + 77, 76, 11, 75, 10, 11, 76, 11, 74, 75, 11, 73, 74, 11, 72, 73, + 11, 71, 72, 11, 70, 71, 11, 69, 70, 12, 69, 11, 68, 69, 12, 67, + 68, 12, 13, 67, 12, 50, 51, 52, 52, 53, 50, 50, 54, 55, 50, 53, + 54, 16, 19, 15, 17, 19, 16, 14, 20, 13, 19, 14, 15, 17, 18, 19, + 67, 13, 59, 19, 20, 14, 20, 21, 13, 62, 63, 64, 64, 65, 62, 65, + 61, 62, 66, 61, 65, 66, 60, 61, 67, 60, 66, 67, 59, 60, 56, 40, + 50, 55, 56, 50, 13, 21, 59, 56, 57, 58, 58, 59, 56, 40, 56, 59 + ], + "vertices": [ + 1, 9, -60.66, 5.48, 1, 1, 9, -62.31, 13.05, 1, 1, 9, -62.24, + 19.64, 1, 1, 9, -57.21, 31.72, 1, 1, 9, -39.19, 54.29, 1, 1, 9, + -28, 63.86, 1, 1, 9, -1.58, 79.33, 1, 1, 9, 12.98, 84.55, 1, 1, 9, + 19.87, 85.6, 1, 1, 9, 35.75, 86.13, 1, 1, 9, 46.26, 84.96, 1, 2, + 9, 95.16, 86.47, 0.99633, 10, -185.57, 54.82, 0.00367, 2, 9, + 118.12, 85.18, 0.98351, 10, -162.72, 57.45, 0.01649, 2, 9, 169.36, + 80.07, 0.814, 10, -111.36, 61.14, 0.186, 2, 9, 174.4, 90.56, + 0.72497, 10, -108.18, 72.33, 0.27503, 2, 9, 182.61, 103.47, + 0.65198, 10, -102.29, 86.45, 0.34802, 2, 9, 189.73, 111.62, + 0.61759, 10, -96.66, 95.7, 0.38241, 2, 9, 196.05, 115.36, 0.60048, + 10, -91.06, 100.45, 0.39952, 2, 9, 200.95, 116.67, 0.59028, 10, + -86.46, 102.58, 0.40972, 2, 9, 217.7, 112.34, 0.53622, 10, -69.22, + 101.16, 0.46378, 2, 9, 233.91, 104.76, 0.44428, 10, -51.96, 96.46, + 0.55572, 2, 9, 251.09, 94.35, 0.27173, 10, -33.25, 89.12, 0.72827, + 2, 9, 295.69, 103.72, 0.01843, 10, 9.1, 105.95, 0.98157, 2, 9, + 310.68, 111.19, 0.00284, 10, 22.6, 115.86, 0.99716, 2, 9, 321.2, + 111.11, 0.00047, 10, 32.98, 117.57, 0.99953, 1, 10, 42.4, 125.53, + 1, 1, 10, 53.95, 130.78, 1, 1, 10, 66.87, 133.46, 1, 1, 10, 83.68, + 130.67, 1, 1, 10, 99.78, 123.98, 1, 1, 10, 107.52, 119.49, 1, 1, + 10, 116.73, 112.45, 1, 1, 10, 135.67, 90.03, 1, 1, 10, 138.66, + 82.78, 1, 1, 10, 142.1, 68.86, 1, 1, 10, 143.83, 49.91, 1, 1, 10, + 141.79, 25.07, 1, 1, 10, 136.92, 10.24, 1, 2, 9, 392.59, -30.33, + 0.00186, 10, 127.4, -9.66, 0.99814, 2, 9, 381.66, -42.84, 0.02078, + 10, 118.76, -23.84, 0.97922, 2, 9, 373.56, -56.9, 0.07091, 10, + 113.17, -39.08, 0.92909, 2, 9, 371.93, -65.48, 0.10362, 10, + 113.03, -47.81, 0.89638, 2, 9, 369.51, -71.49, 0.12605, 10, + 111.66, -54.15, 0.87395, 2, 9, 363.08, -81.47, 0.1722, 10, 107.03, + -65.08, 0.8278, 2, 9, 355.2, -91.39, 0.2256, 10, 100.94, -76.19, + 0.7744, 2, 9, 347.34, -97.86, 0.26961, 10, 94.31, -83.91, 0.73039, + 2, 9, 332.54, -106.57, 0.34839, 10, 81.2, -95, 0.65161, 2, 9, + 330.28, -107.19, 0.35724, 10, 79.08, -96, 0.64276, 2, 9, 320.36, + -107.41, 0.40394, 10, 69.34, -97.91, 0.59606, 2, 9, 309.71, + -104.62, 0.48017, 10, 58.37, -96.98, 0.51983, 2, 9, 302.98, + -101.93, 0.56397, 10, 51.28, -95.46, 0.43603, 2, 9, 301.27, + -106.03, 0.61055, 10, 50.3, -99.8, 0.38945, 2, 9, 298.6, -109.05, + 0.6408, 10, 48.17, -103.23, 0.3592, 2, 9, 292, -113.38, 0.68705, + 10, 42.41, -108.61, 0.31295, 2, 9, 280.12, -116.68, 0.74626, 10, + 31.27, -113.89, 0.25374, 2, 9, 268.78, -116.63, 0.7939, 10, 20.08, + -115.77, 0.2061, 2, 9, 245.29, -110.51, 0.88995, 10, -4.11, + -113.74, 0.11005, 2, 9, 239.79, -107.97, 0.90752, 10, -9.96, + -112.17, 0.09248, 2, 9, 232.56, -102.75, 0.93417, 10, -17.97, + -108.26, 0.06583, 2, 9, 226.91, -97.34, 0.96092, 10, -24.46, + -103.89, 0.03908, 1, 9, 182.56, -109.58, 1, 1, 9, 166.9, -112.07, + 1, 1, 9, 162.27, -111.59, 1, 1, 9, 157.06, -109.52, 1, 1, 9, + 153.89, -107.18, 1, 1, 9, 147.4, -96.14, 1, 1, 9, 145.32, -86.78, + 1, 1, 9, 144.67, -78.45, 1, 1, 9, 126.19, -79.59, 1, 1, 9, 109.84, + -79.47, 1, 1, 9, 84.25, -77.96, 1, 1, 9, 46.8, -68.53, 1, 1, 9, + 4.84, -51.87, 1, 1, 9, -7.18, -46.27, 1, 1, 9, -20.7, -38.5, 1, 1, + 9, -31.92, -29.74, 1, 1, 9, -43.8, -19.35, 1, 1, 9, -51.85, -5.56, + 1, 1, 9, -54.72, -4.66, 1 + ], + "hull": 79, + "edges": [ + 0, 156, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, + 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 108, 110, + 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 122, + 124, 124, 126, 126, 128, 128, 130, 130, 132, 132, 134, 134, 136, + 136, 138, 138, 140, 140, 142, 142, 144, 144, 146, 146, 148, 148, + 150, 150, 152, 152, 154, 154, 156 + ], + "width": 563, + "height": 678 + } + }, + "腿-衣摆-后发/裙边": { + "裙边": { + "type": "mesh", + "uvs": [ + 0.4521, 0.27322, 0.49756, 0.27324, 0.50655, 0.27922, 0.56611, + 0.34001, 0.58436, 0.35393, 0.62748, 0.39788, 0.64841, 0.42233, + 0.67446, 0.45085, 0.68389, 0.4653, 0.6888, 0.47538, 0.69139, + 0.49091, 0.69161, 0.51477, 0.68824, 0.53198, 0.70007, 0.54405, + 0.73, 0.6168, 0.73568, 0.63814, 0.72915, 0.65835, 0.72187, + 0.66921, 0.69751, 0.69637, 0.66617, 0.71238, 0.6311, 0.72427, + 0.61123, 0.72923, 0.59942, 0.72912, 0.58529, 0.72555, 0.58087, + 0.72222, 0.54293, 0.72677, 0.4835, 0.72671, 0.44637, 0.72443, + 0.42504, 0.71975, 0.40369, 0.71214, 0.34684, 0.68496, 0.31746, + 0.65486, 0.31132, 0.64705, 0.2998, 0.62753, 0.28483, 0.59052, + 0.27482, 0.55913, 0.26741, 0.52131, 0.26446, 0.47646, 0.26786, + 0.44344, 0.27338, 0.41576, 0.2815, 0.38971, 0.29767, 0.35708, + 0.31795, 0.32998, 0.33341, 0.31682, 0.37351, 0.29635, 0.40603, + 0.28334, 0.42958, 0.27761 + ], + "triangles": [ + 36, 37, 38, 11, 7, 10, 10, 8, 9, 10, 7, 8, 39, 41, 38, 38, 41, 36, + 41, 35, 36, 41, 39, 40, 42, 34, 35, 41, 42, 35, 31, 32, 33, 33, + 34, 31, 34, 44, 31, 19, 13, 14, 16, 14, 15, 16, 17, 14, 44, 42, + 43, 42, 44, 34, 31, 29, 30, 0, 3, 46, 2, 0, 1, 3, 45, 46, 2, 3, 0, + 44, 45, 3, 3, 31, 44, 13, 19, 12, 17, 18, 14, 31, 4, 29, 4, 31, 3, + 29, 4, 5, 28, 29, 5, 28, 5, 6, 7, 12, 6, 7, 11, 12, 6, 12, 28, 19, + 14, 18, 27, 28, 26, 12, 20, 24, 19, 20, 12, 28, 12, 26, 22, 23, + 24, 12, 25, 26, 24, 25, 12, 24, 21, 22, 20, 21, 24 + ], + "vertices": [ + 1, 14, -58.6, 32.38, 1, 1, 14, -39.03, 36.55, 1, 1, 14, -34.63, + 34.85, 1, 1, 14, -3.53, 14.7, 1, 1, 14, 5.57, 10.5, 1, 1, 14, + 28.08, -4.06, 1, 1, 14, 39.29, -12.45, 1, 1, 14, 53.06, -22.07, 1, + 1, 14, 58.42, -27.3, 1, 1, 14, 61.44, -31.1, 1, 1, 14, 63.95, + -37.41, 1, 1, 14, 66.19, -47.44, 1, 1, 14, 66.29, -55.01, 1, 1, + 14, 72.47, -59.01, 1, 1, 14, 91.89, -86.92, 1, 1, 14, 96.25, + -95.4, 1, 1, 14, 95.26, -104.51, 1, 1, 14, 93.11, -109.76, 1, 1, + 14, 85.07, -123.45, 1, 1, 14, 73.02, -133.07, 1, 1, 14, 59, + -141.31, 1, 1, 14, 50.89, -145.22, 1, 1, 14, 45.8, -146.26, 1, 1, + 14, 39.4, -146.05, 1, 1, 14, 37.2, -145.05, 1, 1, 14, 21.29, + -150.46, 1, 1, 14, -4.29, -155.89, 1, 1, 14, -20.48, -158.34, 1, + 1, 14, -30.08, -158.32, 1, 1, 14, -39.95, -157.08, 1, 1, 14, + -66.86, -150.84, 1, 1, 14, -82.21, -140.85, 1, 1, 14, -85.55, + -138.12, 1, 1, 14, -92.26, -130.95, 1, 1, 14, -102.04, -116.73, 1, + 1, 14, -109.16, -104.42, 1, 1, 14, -115.76, -89.15, 1, 1, 14, + -121.06, -70.52, 1, 1, 14, -122.57, -56.29, 1, 1, 14, -122.68, + -44.11, 1, 1, 14, -121.53, -32.39, 1, 1, 14, -117.51, -17.15, 1, + 1, 14, -111.22, -3.86, 1, 1, 14, -105.75, 3.1, 1, 1, 14, -90.34, + 15.41, 1, 1, 14, -77.51, 23.88, 1, 1, 14, -67.89, 28.46, 1 + ], + "hull": 47, + "edges": [ + 0, 92, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, + 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, + 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, + 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, + 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, + 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92 + ], + "width": 440, + "height": 431 + } + }, + "附件/可爱花朵": { + "可爱花朵": { + "type": "mesh", + "uvs": [ + 0.05484, 0.79263, 0.10292, 0.83045, 0.13699, 0.71965, 0.11202, + 0.65626, 0.11692, 0.60459, 0.13583, 0.60406, 0.14236, 0.54387, + 0.16126, 0.4922, 0.1762, 0.49166, 0.19721, 0.42881, 0.17387, + 0.35689, 0.1601, 0.37447, 0.15963, 0.40856, 0.14096, 0.38885, + 0.15123, 0.38513, 0.16313, 0.35103, 0.1538, 0.234, 0.16593, + 0.20471, 0.17527, 0.23241, 0.1944, 0.23134, 0.20817, 0.18926, + 0.82825, 0.4961, 0.82195, 0.53019, 0.82895, 0.55842, 0.83828, + 0.57973, 0.85859, 0.56748, 0.87492, 0.61808, 0.86311, 0.63344, + 0.86079, 0.67805, 0.86847, 0.72286, 0.86739, 0.72468, 0.8628, + 0.71221, 0.84673, 0.71219, 0.83135, 0.74084, 0.83694, 0.7725, + 0.84723, 0.77278, 0.86773, 0.75097, 0.86744, 0.72512, 0.86843, + 0.72339, 0.87027, 0.7506, 0.87535, 0.7649, 0.88307, 0.77063, + 0.88144, 0.77923, 0.86424, 0.76977, 0.84861, 0.78037, 0.84229, + 0.84278, 0.85404, 0.87273, 0.87195, 0.88653, 0.88701, 0.87013, + 0.8934, 0.83731, 0.89249, 0.8131, 0.88184, 0.77977, 0.88375, + 0.77093, 0.92399, 0.80169, 0.94403, 0.75511, 0.95067, 0.665, + 0.931, 0.59372, 0.91121, 0.59484, 0.87544, 0.61768, 0.85893, + 0.56644, 0.86665, 0.5529, 0.86524, 0.50586, 0.85699, 0.48761, + 0.84272, 0.48127, 0.82922, 0.49515, 0.20709, 0.18673, 0.20338, + 0.13502, 0.18693, 0.11764, 0.17189, 0.11691, 0.16344, 0.13794, + 0.15999, 0.17314, 0.16511, 0.20323, 0.15226, 0.23527, 0.1422, + 0.1992, 0.08789, 0.18917, 0.05926, 0.20476, 0.05162, 0.28754, + 0.05227, 0.35436, 0.05487, 0.4067, 0.06691, 0.42192, 0.09992, + 0.45273, 0.11797, 0.45793, 0.13017, 0.44308, 0.13733, 0.4138, + 0.13982, 0.38919, 0.15919, 0.41083, 0.14426, 0.41867, 0.13917, + 0.43596, 0.14178, 0.45691, 0.16234, 0.48828, 0.13968, 0.55027, + 0.13417, 0.50214, 0.11029, 0.50214, 0.09768, 0.53013, 0.09945, + 0.56096, 0.10046, 0.57684, 0.10615, 0.59793, 0.11675, 0.60131, + 0.11132, 0.66148, 0.08943, 0.64716, 0.06621, 0.65708, 0.05578, + 0.70327, 0.05541, 0.77328 + ], + "triangles": [ + 51, 42, 41, 51, 50, 42, 49, 46, 50, 43, 45, 44, 46, 43, 42, 46, + 45, 43, 50, 46, 42, 46, 49, 47, 48, 47, 49, 37, 30, 38, 37, 36, + 32, 37, 31, 30, 37, 32, 31, 35, 34, 33, 36, 35, 32, 35, 33, 32, + 38, 30, 29, 38, 29, 39, 41, 40, 39, 28, 58, 29, 41, 39, 58, 58, + 26, 59, 27, 26, 28, 55, 57, 56, 28, 26, 58, 57, 52, 41, 41, 58, + 57, 52, 57, 55, 54, 52, 55, 53, 52, 54, 52, 51, 41, 58, 39, 29, + 64, 21, 20, 64, 22, 21, 23, 22, 64, 59, 62, 61, 59, 61, 60, 62, + 59, 63, 23, 63, 59, 64, 63, 23, 25, 24, 59, 24, 23, 59, 26, 25, + 59, 64, 20, 65, 69, 17, 70, 71, 70, 17, 69, 67, 17, 17, 67, 65, + 65, 67, 66, 19, 65, 20, 68, 67, 69, 65, 19, 17, 17, 19, 18, 16, + 71, 17, 16, 72, 71, 72, 16, 15, 74, 77, 76, 72, 15, 13, 73, 72, + 74, 74, 72, 84, 15, 14, 13, 13, 84, 72, 74, 78, 77, 75, 74, 76, + 74, 79, 78, 84, 13, 85, 74, 84, 79, 84, 80, 79, 84, 83, 80, 83, + 81, 80, 82, 81, 83, 85, 13, 12, 88, 87, 86, 12, 10, 9, 10, 12, 11, + 9, 85, 12, 8, 89, 85, 88, 86, 85, 89, 88, 85, 9, 8, 85, 7, 89, 8, + 7, 6, 89, 6, 90, 89, 94, 93, 92, 95, 97, 96, 97, 95, 94, 92, 91, + 90, 90, 94, 92, 94, 90, 97, 5, 97, 90, 5, 90, 6, 4, 97, 5, 97, 4, + 3, 3, 98, 97, 98, 101, 99, 101, 100, 99, 101, 98, 102, 1, 102, 98, + 0, 102, 1, 98, 3, 2, 1, 98, 2 + ], + "vertices": [ + 1, 131, -48.67, 85.94, 1, 1, 131, -88.31, -19.43, 1, 1, 131, + 17.02, -97.84, 1, 1, 131, 80.02, -44.29, 1, 1, 130, -46.47, 6.49, + 1, 1, 130, -47.12, -35.36, 1, 1, 130, 10.84, -51.45, 1, 1, 129, + 63.01, -50.81, 1, 1, 129, 87.53, -28.61, 1, 1, 129, 82.3, 47.89, + 1, 1, 129, -2.54, 66.27, 1, 1, 129, -14.22, 33.35, 1, 1, 129, 6.8, + 7.8, 1, 1, 128, -59.55, -77.29, 1, 1, 128, -56.56, -100.12, 1, 1, + 128, -24.24, -127.38, 1, 1, 128, 89.81, -109.89, 1, 1, 127, -29.7, + 38.43, 1, 1, 127, -57.14, 18.52, 1, 1, 127, -57.29, -23.86, 1, 1, + 127, -17.33, -55.47, 1, 1, 132, 32.54, 39.88, 1, 1, 132, -0.13, + 54.75, 1, 1, 132, -27.93, 40.02, 1, 1, 132, -49.17, 19.94, 1, 1, + 132, -38.54, -25.33, 1, 1, 133, 73.21, 67.67, 1, 1, 133, 59.05, + 94.22, 1, 1, 133, 15.94, 100.56, 1, 1, 133, -27.99, 84.78, 1, 1, + 134, -8.49, -8.15, 1, 1, 134, -1.42, -22.3, 1, 1, 134, 33.15, + -30.64, 1, 1, 134, 72.75, -11.59, 1, 1, 134, 67.92, 21.16, 1, 1, + 134, 45.83, 26.76, 1, 1, 134, -3.24, 16.81, 1, 1, 134, -8.49, + -7.72, 1, 1, 133, -28.5, 84.88, 1, 1, 133, -55, 81.56, 1, 1, 133, + -69.18, 70.7, 1, 1, 133, -75.21, 53.77, 1, 1, 135, 42.63, -32.45, + 1, 1, 135, 52.86, 5.35, 1, 1, 135, 43.55, 40.22, 1, 1, 135, + -16.58, 55.91, 1, 1, 135, -46.34, 30.71, 1, 1, 135, -60.83, -8.56, + 1, 1, 135, -45.85, -42.33, 1, 1, 135, -14.43, -57.36, 1, 1, 135, + 9.11, -55.99, 1, 1, 135, 42.08, -33.33, 1, 1, 133, -75.54, 52.27, + 1, 1, 133, -107.85, -35.96, 1, 1, 133, -63.92, -81.58, 1, 1, 133, + 23.04, -98.71, 1, 1, 133, 93.37, -57.1, 1, 1, 133, 93.5, -13.27, + 1, 1, 133, 73.56, 66.52, 1, 1, 132, -37.56, -26.11, 1, 1, 132, + -24.91, -43.57, 1, 1, 132, 20.78, -41.73, 1, 1, 132, 39, -23.95, + 1, 1, 132, 46.02, 7.45, 1, 1, 132, 33.4, 37.71, 1, 1, 127, -14.81, + -53.14, 1, 1, 127, 35.55, -46.33, 1, 1, 127, 53.42, -10.4, 1, 1, + 127, 55.06, 22.87, 1, 1, 127, 35.19, 42.13, 1, 1, 127, 1.27, + 50.73, 1, 1, 127, -28.22, 40.22, 1, 1, 128, 88.68, -106.46, 1, 1, + 128, 124.27, -85.18, 1, 1, 128, 137.35, 34.77, 1, 1, 128, 124, + 98.54, 1, 1, 128, 44.21, 117.69, 1, 1, 128, -20.62, 118.06, 1, 1, + 128, -71.53, 113.72, 1, 1, 128, -87.03, 87.49, 1, 1, 128, -118.95, + 15.26, 1, 1, 128, -125.1, -24.55, 1, 1, 128, -111.46, -51.95, 1, + 1, 128, -83.51, -68.59, 1, 1, 128, -59.8, -74.76, 1, 1, 129, 7.52, + 5.51, 1, 1, 129, -12.31, -22, 1, 1, 129, -9.73, -42.03, 1, 1, 129, + 8.01, -53.51, 1, 1, 129, 62.3, -46.39, 1, 1, 130, 4.79, -45.34, 1, + 1, 130, 51.81, -34.45, 1, 1, 130, 53.28, 18.39, 1, 1, 130, 26.92, + 47.08, 1, 1, 130, -3.08, 43.98, 1, 1, 130, -18.54, 42.18, 1, 1, + 130, -39.35, 30.16, 1, 1, 130, -43.28, 6.78, 1, 1, 131, 75.01, + -42.61, 1, 1, 131, 90.24, 5.46, 1, 1, 131, 82.06, 57.12, 1, 1, + 131, 37.91, 81.45, 1, 1, 131, -29.94, 84.17, 1 + ], + "hull": 103, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, + 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, + 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, + 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, + 68, 68, 70, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, + 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, + 108, 108, 110, 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, + 120, 122, 122, 124, 124, 126, 126, 128, 128, 130, 130, 132, 132, + 134, 134, 136, 136, 138, 138, 140, 140, 142, 142, 144, 144, 146, + 146, 148, 148, 150, 150, 152, 152, 154, 154, 156, 156, 158, 158, + 160, 160, 162, 162, 164, 164, 166, 166, 168, 168, 170, 170, 172, + 172, 174, 174, 176, 176, 178, 178, 180, 180, 182, 182, 184, 184, + 186, 186, 188, 188, 190, 190, 192, 192, 194, 194, 196, 196, 198, + 198, 200, 200, 202, 202, 204, 0, 204, 74, 76, 70, 72, 72, 74, 76, + 78, 78, 80 + ], + "width": 2214, + "height": 970 + } + }, + "附件/星星1": { + "星星1": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 123, -292.37, -259.43, 1, 1, 123, -277.36, 278.36, 1, 1, 123, + 287.42, 262.6, 1, 1, 123, 272.41, -275.19, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 538, + "height": 565 + } + }, + "附件/星星2": { + "星星2": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 124, -397.19, -348.79, 1, 1, 124, -377.13, 369.93, 1, 1, 124, + 400.57, 348.22, 1, 1, 124, 380.51, -370.5, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 719, + "height": 778 + } + }, + "附件/星星3": { + "星星3": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 125, -347.18, -314.14, 1, 1, 125, -329.27, 327.61, 1, 1, 125, + 354.47, 308.53, 1, 1, 125, 336.56, -333.22, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 642, + "height": 684 + } + }, + "附件/星星4": { + "星星4": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 126, -340.61, -308.26, 1, 1, 126, -322.98, 323.49, 1, 1, 126, + 341.77, 304.94, 1, 1, 126, 324.14, -326.81, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 632, + "height": 665 + } + }, + "附件/生气符号1": { + "生气符号1": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 121, 418.29, -344.34, 1, 1, 121, -171.05, -216.71, 1, 1, 121, + -44.69, 366.76, 1, 1, 121, 544.64, 239.13, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 603, + "height": 597 + } + }, + "附件/生气符号2": { + "生气符号2": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 122, 350.3, -62.78, 1, 1, 122, 25.65, -265.98, 1, 1, 122, -168, + 43.41, 1, 1, 122, 156.65, 246.61, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 383, + "height": 365 + } + }, + "附件/脸红": { + "脸红": { + "type": "mesh", + "uvs": [ + 0.12591, 0.22709, 0.13069, 0.73013, 0.29226, 0.76471, 0.49877, + 0.74915, 0.61541, 0.74396, 0.75021, 0.72841, 0.87736, 0.6558, + 0.87258, 0.234, 0.74543, 0.2098, 0.60967, 0.22363, 0.49494, + 0.22882, 0.29321, 0.21844 + ], + "triangles": [ + 6, 5, 8, 6, 8, 7, 9, 8, 5, 1, 0, 11, 4, 9, 5, 10, 9, 4, 3, 10, 4, + 2, 1, 11, 3, 2, 11, 3, 11, 10 + ], + "vertices": [ + 2, 154, -165.62, -972.52, 0.57048, 155, 100.45, -438.2, 0.42952, + 2, 154, 93.97, -975.3, 0.57048, 155, -159.14, -435.41, 0.42952, 2, + 154, 116.01, -825.11, 0.58095, 155, -181.18, -585.61, 0.41905, 2, + 154, 113.36, -632.29, 0.56952, 155, -178.53, -778.43, 0.43048, 2, + 154, 113.72, -523.43, 0.55524, 155, -178.89, -887.28, 0.44476, 2, + 154, 109.2, -397.48, 0.54286, 155, -174.37, -1013.23, 0.45714, 2, + 154, 75.06, -277.85, 0.50857, 155, -140.23, -1132.87, 0.49143, 2, + 154, -142.62, -276.23, 0.50857, 155, 77.45, -1134.48, 0.49143, 2, + 154, -158.42, -394.48, 0.54286, 155, 93.25, -1016.24, 0.45714, 2, + 154, -154.82, -521.29, 0.55524, 155, 89.65, -889.42, 0.44476, 2, + 154, -155.13, -628.36, 0.56952, 155, 89.96, -782.35, 0.43048, 2, + 154, -165.73, -816.35, 0.58095, 155, 100.56, -594.36, 0.41905 + ], + "hull": 12, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, + 20, 20, 22, 0, 22 + ], + "width": 933, + "height": 516 + } + }, + "附件/问号": { + "问号": { + "type": "mesh", + "uvs": [1, 1, 0, 1, 0, 0, 1, 0], + "triangles": [1, 2, 3, 1, 3, 0], + "vertices": [ + 1, 120, 113.34, -417.13, 1, 1, 120, -212.13, 42.26, 1, 1, 120, + 292.95, 400.11, 1, 1, 120, 618.42, -59.28, 1 + ], + "hull": 4, + "edges": [0, 2, 2, 4, 4, 6, 0, 6], + "width": 563, + "height": 619 + } + }, + "面部/E眼珠": { + "E眼珠": { + "type": "mesh", + "uvs": [ + 0.65599, 0.29222, 0.38952, 0.27558, 0.1563, 0.26551, 0.15933, + 0.73117, 0.39243, 0.72624, 0.66207, 0.72042, 0.84129, 0.71662, + 0.84008, 0.30189 + ], + "triangles": [4, 1, 0, 3, 2, 1, 3, 1, 4, 4, 0, 5, 5, 0, 7, 5, 7, 6], + "vertices": [ + 2, 154, -230.9, -464.1, 0.0181, 46, 99, 63.99, 0.9819, 2, 154, + -243.95, -666.87, 0.01619, 45, 100.27, -87.23, 0.98381, 3, 154, + -253.38, -844.39, 0.01524, 45, 109.69, 90.28, 0.98101, 155, + 188.21, -566.33, 0.00375, 3, 154, -46.64, -847.85, 0.01524, 45, + -97.05, 93.75, 0.98101, 155, -18.53, -562.87, 0.00375, 2, 154, + -43.87, -670.23, 0.01619, 45, -99.81, -83.87, 0.98381, 2, 154, + -40.72, -464.77, 0.0181, 46, -91.17, 64.66, 0.9819, 2, 46, -93.3, + -71.9, 0.98286, 155, -26.57, -1082.5, 0.01714, 2, 46, 90.8, + -76.11, 0.98286, 155, 157.52, -1086.72, 0.01714 + ], + "hull": 8, + "edges": [ + 4, 6, 12, 14, 4, 2, 6, 8, 2, 8, 2, 0, 0, 14, 8, 10, 10, 12, 0, 10 + ], + "width": 762, + "height": 444 + } + }, + "面部/E眼白": { + "E眼白": { + "type": "mesh", + "uvs": [ + 0.13869, 0.3771, 0.14922, 0.6336, 0.21034, 0.74254, 0.41738, + 0.72769, 0.46111, 0.63558, 0.62127, 0.61181, 0.67237, 0.71679, + 0.82041, 0.69698, 0.85044, 0.58507, 0.86045, 0.36422, 0.82199, + 0.2642, 0.66025, 0.27113, 0.61547, 0.36918, 0.459, 0.39691, + 0.41686, 0.27212, 0.1861, 0.27905 + ], + "triangles": [ + 13, 3, 2, 2, 1, 15, 14, 13, 2, 3, 13, 4, 14, 2, 15, 7, 6, 8, 8, 6, + 5, 9, 8, 11, 12, 11, 8, 4, 13, 5, 1, 0, 15, 13, 12, 5, 8, 5, 12, + 9, 11, 10 + ], + "vertices": [ + 2, 154, -199.36, -910.53, 0.57048, 155, 134.19, -500.18, 0.42952, + 2, 154, -79.62, -904.64, 0.57048, 155, 14.45, -506.08, 0.42952, 2, + 154, -27.38, -852.54, 0.57048, 155, -37.79, -558.17, 0.42952, 2, + 154, -29.24, -671.05, 0.57048, 155, -35.93, -739.67, 0.42952, 2, + 154, -71.07, -631.56, 0.57048, 155, 5.9, -779.16, 0.42952, 2, 154, + -78.23, -491, 0.54286, 155, 13.06, -919.71, 0.45714, 2, 154, + -28.08, -447.62, 0.54286, 155, -37.09, -963.09, 0.45714, 2, 154, + -33.69, -317.73, 0.51714, 155, -31.48, -1092.98, 0.48286, 2, 154, + -85.09, -289.98, 0.51714, 155, 19.92, -1120.73, 0.48286, 2, 154, + -187.72, -278.34, 0.51714, 155, 122.55, -1132.37, 0.48286, 2, 154, + -235.25, -310.72, 0.51714, 155, 170.08, -1099.99, 0.48286, 2, 154, + -235.97, -452.44, 0.54286, 155, 170.8, -958.28, 0.45714, 2, 154, + -191.4, -492.93, 0.54286, 155, 126.23, -917.79, 0.45714, 2, 154, + -182.3, -630.3, 0.57048, 155, 117.13, -780.41, 0.42952, 2, 154, + -241.46, -665.58, 0.57048, 155, 176.29, -745.13, 0.42952, 2, 154, + -243.87, -867.74, 0.57048, 155, 178.7, -542.98, 0.42952 + ], + "hull": 16, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, + 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 26, 8, 24, 10 + ], + "width": 876, + "height": 466 + } + }, + "面部/E眼皮": { + "E眼皮": { + "type": "mesh", + "uvs": [ + 0.78561, 0.47658, 0.76036, 0.48612, 0.73389, 0.50578, 0.70985, + 0.53329, 0.69455, 0.55912, 0.34456, 0.54396, 0.32489, 0.51645, + 0.29818, 0.48668, 0.2637, 0.47265, 0.22291, 0.4704, 0.19111, + 0.47931, 0.19093, 0.46987, 0.22144, 0.45324, 0.26296, 0.45044, + 0.30132, 0.46391, 0.32901, 0.49536, 0.346, 0.5341, 0.69359, + 0.55014, 0.70742, 0.51532, 0.73122, 0.485, 0.75914, 0.46029, + 0.78537, 0.45636, 0.80982, 0.46563, 0.80992, 0.47941 + ], + "triangles": [ + 9, 12, 13, 11, 12, 9, 8, 13, 14, 9, 13, 8, 0, 21, 22, 20, 21, 0, + 10, 11, 9, 0, 22, 23, 1, 20, 0, 19, 20, 1, 7, 8, 14, 7, 14, 15, 2, + 19, 1, 18, 19, 2, 6, 7, 15, 3, 18, 2, 6, 15, 16, 5, 6, 16, 17, 18, + 3, 4, 17, 3, 16, 17, 4, 5, 16, 4 + ], + "vertices": [ + 2, 154, -249.02, -392.28, 0.54453, 155, 183.85, -1018.43, 0.45547, + 2, 154, -246.87, -408.23, 0.54726, 155, 181.7, -1002.48, 0.45274, + 2, 154, -241.99, -425.03, 0.54982, 155, 176.82, -985.69, 0.45018, + 2, 154, -234.93, -440.35, 0.55192, 155, 169.76, -970.37, 0.44808, + 2, 154, -228.17, -450.16, 0.55327, 155, 163, -960.55, 0.44673, 2, + 154, -238.44, -670.11, 0.58201, 155, 173.27, -740.61, 0.41799, 2, + 154, -246.26, -682.26, 0.58248, 155, 181.09, -728.45, 0.41752, 2, + 154, -254.82, -698.83, 0.58313, 155, 189.65, -711.88, 0.41687, 2, + 154, -259.25, -720.41, 0.58401, 155, 194.07, -690.31, 0.41599, 2, + 154, -260.57, -746.04, 0.5855, 155, 195.4, -664.68, 0.4145, 2, + 154, -258.71, -766.1, 0.58667, 155, 193.54, -644.61, 0.41333, 2, + 154, -261.28, -766.14, 0.58667, 155, 196.11, -644.57, 0.41333, 2, + 154, -265.26, -746.84, 0.58555, 155, 200.09, -663.88, 0.41445, 2, + 154, -265.3, -720.71, 0.58403, 155, 200.13, -690.01, 0.41597, 2, + 154, -260.96, -696.69, 0.58306, 155, 195.79, -714.03, 0.41694, 2, + 154, -251.93, -679.52, 0.58238, 155, 186.75, -731.19, 0.41762, 2, + 154, -241.09, -669.13, 0.58197, 155, 175.92, -741.59, 0.41803, 2, + 154, -230.63, -450.7, 0.55335, 155, 165.46, -960.01, 0.44665, 2, + 154, -239.86, -441.74, 0.5521, 155, 174.69, -968.98, 0.4479, 2, + 154, -247.68, -426.55, 0.55004, 155, 182.51, -984.17, 0.44996, 2, + 154, -253.91, -408.8, 0.54738, 155, 188.74, -1001.91, 0.45262, 2, + 154, -254.52, -392.28, 0.54454, 155, 189.35, -1018.43, 0.45546, 2, + 154, -251.57, -376.98, 0.54191, 155, 186.4, -1033.74, 0.45809, 2, + 154, -247.82, -377.02, 0.54191, 155, 182.65, -1033.69, 0.45809 + ], + "hull": 24, + "edges": [ + 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, + 38, 40, 40, 42, 42, 44, 44, 46, 46, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, + 10, 10, 12, 12, 14, 14, 16, 16, 18, 22, 20, 18, 20 + ], + "width": 629, + "height": 272 + } + }, + "面部/E眼角": { + "E眼角": { + "type": "mesh", + "uvs": [ + 0.12932, 0.39568, 0.19225, 0.64567, 0.23211, 0.64567, 0.7964, + 0.59347, 0.82997, 0.60309, 0.87087, 0.3531, 0.82577, 0.34898, + 0.17599, 0.34486 + ], + "triangles": [6, 2, 7, 4, 6, 5, 3, 6, 4, 3, 2, 6, 1, 7, 2, 0, 7, 1], + "vertices": [ + 2, 154, -147.26, -915.68, 0.56571, 155, 82.09, -495.04, 0.43429, + 2, 154, -61.75, -862.66, 0.56952, 155, -3.42, -548.05, 0.43048, 2, + 154, -60.77, -827.6, 0.57333, 155, -4.4, -583.11, 0.42667, 2, 154, + -64.45, -330.72, 0.53143, 155, -0.72, -1079.99, 0.46857, 2, 154, + -60.4, -301.29, 0.5181, 155, -4.77, -1109.43, 0.4819, 2, 154, + -143.36, -262.96, 0.5181, 155, 78.19, -1147.75, 0.4819, 2, 154, + -145.85, -302.6, 0.52857, 155, 80.68, -1108.12, 0.47143, 2, 154, + -163.18, -874.14, 0.57333, 155, 98.01, -536.57, 0.42667 + ], + "hull": 8, + "edges": [ + 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 0, 14, 14, 4, 12, 6 + ], + "width": 880, + "height": 336 + } + }, + "面部/E睫毛": { + "E睫毛": { + "type": "mesh", + "uvs": [ + 0.18635, 0.66309, 0.15161, 0.64686, 0.13639, 0.63231, 0.12346, + 0.6096, 0.15439, 0.57884, 0.18291, 0.53686, 0.19777, 0.5061, + 0.1892, 0.46446, 0.18414, 0.41478, 0.19846, 0.43087, 0.22013, + 0.44175, 0.23586, 0.42756, 0.25578, 0.4039, 0.2764, 0.37645, + 0.30313, 0.35185, 0.3255, 0.33907, 0.35723, 0.34144, 0.39043, + 0.36557, 0.41751, 0.40201, 0.43872, 0.44778, 0.45026, 0.4899, + 0.63133, 0.53135, 0.63797, 0.49681, 0.64898, 0.45659, 0.66576, + 0.41684, 0.6883, 0.37946, 0.71084, 0.36053, 0.74229, 0.35769, + 0.76396, 0.37047, 0.78825, 0.39791, 0.7983, 0.40417, 0.81341, + 0.40738, 0.83421, 0.39981, 0.83019, 0.43009, 0.81935, 0.45469, + 0.83054, 0.49018, 0.8405, 0.51999, 0.85762, 0.56305, 0.87807, + 0.60138, 0.86042, 0.61841, 0.84043, 0.6243, 0.81134, 0.62577, + 0.80175, 0.58673, 0.7934, 0.55215, 0.77926, 0.50871, 0.76077, + 0.47559, 0.73956, 0.46013, 0.7151, 0.46013, 0.68954, 0.47927, + 0.67024, 0.50577, 0.65528, 0.53669, 0.64142, 0.57571, 0.63217, + 0.5816, 0.45118, 0.55351, 0.43226, 0.52109, 0.40928, 0.48932, + 0.37958, 0.46144, 0.34846, 0.44847, 0.31924, 0.45495, 0.28644, + 0.48348, 0.25795, 0.52174, 0.23616, 0.56259, 0.21772, 0.61251, + 0.20527, 0.65725 + ], + "triangles": [ + 33, 31, 32, 57, 15, 16, 56, 57, 16, 34, 31, 33, 58, 14, 15, 58, + 15, 57, 47, 26, 27, 25, 26, 47, 46, 47, 27, 46, 27, 28, 17, 56, + 16, 56, 17, 18, 7, 8, 9, 45, 46, 28, 45, 28, 29, 48, 25, 47, 24, + 25, 48, 59, 13, 14, 59, 14, 58, 12, 13, 59, 55, 56, 18, 55, 18, + 19, 49, 24, 48, 23, 24, 49, 50, 22, 23, 6, 7, 9, 6, 9, 10, 44, 45, + 29, 44, 29, 30, 54, 55, 19, 54, 19, 20, 60, 12, 59, 11, 12, 60, + 49, 50, 23, 21, 22, 50, 42, 43, 30, 44, 30, 43, 31, 34, 30, 53, + 20, 21, 54, 20, 53, 60, 10, 11, 61, 10, 60, 6, 10, 61, 51, 21, 50, + 52, 21, 51, 53, 21, 52, 34, 35, 42, 30, 34, 42, 42, 35, 36, 62, 6, + 61, 5, 6, 62, 39, 37, 38, 36, 41, 42, 40, 36, 37, 40, 37, 39, 40, + 41, 36, 2, 3, 4, 1, 2, 4, 63, 5, 62, 0, 4, 5, 0, 1, 4, 5, 63, 0 + ], + "vertices": [ + 2, 154, -136.82, -904.12, 0.56866, 155, 71.65, -506.6, 0.43134, 2, + 154, -143.53, -937.44, 0.56486, 155, 78.36, -473.27, 0.43514, 2, + 154, -149.12, -951.96, 0.56351, 155, 83.95, -458.76, 0.43649, 2, + 154, -157.55, -964.19, 0.56233, 155, 92.38, -446.52, 0.43767, 2, + 154, -167.66, -934.08, 0.56518, 155, 102.49, -476.63, 0.43482, 2, + 154, -181.84, -906.18, 0.56804, 155, 116.66, -504.53, 0.43196, 2, + 154, -192.38, -891.56, 0.57097, 155, 127.21, -519.15, 0.42903, 2, + 154, -207.43, -899.4, 0.56948, 155, 142.26, -511.31, 0.43052, 2, + 154, -225.25, -903.79, 0.56871, 155, 160.08, -506.93, 0.43129, 2, + 154, -219.14, -890.14, 0.57145, 155, 153.96, -520.57, 0.42855, 2, + 154, -214.68, -869.37, 0.57564, 155, 149.51, -541.34, 0.42436, 2, + 154, -219.31, -854.07, 0.57848, 155, 154.14, -556.64, 0.42152, 2, + 154, -227.19, -834.64, 0.58198, 155, 162.02, -576.07, 0.41802, 2, + 154, -236.4, -814.5, 0.58561, 155, 171.23, -596.21, 0.41439, 2, + 154, -244.44, -788.49, 0.58753, 155, 179.27, -622.22, 0.41247, 2, + 154, -248.39, -766.81, 0.58843, 155, 183.22, -643.9, 0.41157, 2, + 154, -246.69, -736.27, 0.58969, 155, 181.52, -674.45, 0.41031, 2, + 154, -237.21, -704.51, 0.58818, 155, 172.04, -706.2, 0.41182, 2, + 154, -223.52, -678.78, 0.58362, 155, 158.35, -731.94, 0.41638, 2, + 154, -206.66, -658.79, 0.58009, 155, 141.48, -751.92, 0.41991, 2, + 154, -191.36, -648.1, 0.57824, 155, 126.19, -762.62, 0.42176, 2, + 154, -171.74, -474.02, 0.55344, 155, 106.57, -936.7, 0.44656, 2, + 154, -183.85, -467.27, 0.55279, 155, 118.68, -943.44, 0.44721, 2, + 154, -197.87, -456.27, 0.55175, 155, 132.7, -954.45, 0.44825, 2, + 154, -211.56, -439.71, 0.55029, 155, 146.39, -971.01, 0.44971, 2, + 154, -224.26, -417.61, 0.54837, 155, 159.09, -993.1, 0.45163, 2, + 154, -230.39, -395.7, 0.54513, 155, 165.22, -1015.01, 0.45487, 2, + 154, -230.55, -365.37, 0.54069, 155, 165.38, -1045.35, 0.45931, 2, + 154, -225.42, -344.61, 0.53679, 155, 160.25, -1066.1, 0.46321, 2, + 154, -215, -321.48, 0.5316, 155, 149.83, -1089.23, 0.4684, 2, 154, + -212.51, -311.86, 0.52952, 155, 147.33, -1098.85, 0.47048, 2, 154, + -210.96, -297.33, 0.5246, 155, 145.79, -1113.39, 0.4754, 2, 154, + -213.09, -277.22, 0.51804, 155, 147.92, -1133.5, 0.48196, 2, 154, + -202.43, -281.39, 0.51929, 155, 137.25, -1129.33, 0.48071, 2, 154, + -193.96, -292.07, 0.52274, 155, 128.79, -1118.64, 0.47726, 2, 154, + -181.03, -281.65, 0.51919, 155, 115.86, -1129.07, 0.48081, 2, 154, + -170.16, -272.35, 0.51618, 155, 104.98, -1138.37, 0.48382, 2, 154, + -154.37, -256.27, 0.51196, 155, 89.2, -1154.44, 0.48804, 2, 154, + -140.18, -236.95, 0.50693, 155, 75.01, -1173.76, 0.49307, 2, 154, + -134.6, -254.13, 0.51123, 155, 69.42, -1156.59, 0.48877, 2, 154, + -133.04, -273.45, 0.51612, 155, 67.87, -1137.27, 0.48388, 2, 154, + -133.3, -301.49, 0.52623, 155, 68.13, -1109.22, 0.47377, 2, 154, + -147.45, -310.35, 0.52952, 155, 82.28, -1100.36, 0.47048, 2, 154, + -159.98, -318.05, 0.53111, 155, 94.81, -1092.66, 0.46889, 2, 154, + -175.81, -331.25, 0.53385, 155, 110.64, -1079.47, 0.46615, 2, 154, + -188.1, -348.73, 0.53753, 155, 122.93, -1061.98, 0.46247, 2, 154, + -194.17, -369.01, 0.54126, 155, 129, -1041.7, 0.45874, 2, 154, + -194.83, -392.59, 0.54477, 155, 129.66, -1018.12, 0.45523, 2, 154, + -188.71, -417.41, 0.54847, 155, 123.54, -993.3, 0.45153, 2, 154, + -179.79, -436.27, 0.55013, 155, 114.62, -974.44, 0.44987, 2, 154, + -169.19, -450.99, 0.55146, 155, 104.02, -959.72, 0.44854, 2, 154, + -155.68, -464.74, 0.55273, 155, 90.51, -945.97, 0.44727, 2, 154, + -153.83, -473.71, 0.55353, 155, 88.66, -937.01, 0.44647, 2, 154, + -168.7, -647.84, 0.57828, 155, 103.53, -762.88, 0.42172, 2, 154, + -180.74, -665.74, 0.58143, 155, 115.57, -744.97, 0.41857, 2, 154, + -192.67, -687.58, 0.58528, 155, 127.5, -723.14, 0.41472, 2, 154, + -203.39, -715.91, 0.59031, 155, 138.22, -694.8, 0.40969, 2, 154, + -208.84, -745.78, 0.58927, 155, 143.67, -664.93, 0.41073, 2, 154, + -207.32, -773.99, 0.58809, 155, 142.15, -636.72, 0.41191, 2, 154, + -198.05, -805.89, 0.58675, 155, 132.88, -604.83, 0.41325, 2, 154, + -185.2, -833.72, 0.582, 155, 120.03, -576.99, 0.418, 2, 154, + -171.25, -855.13, 0.57823, 155, 106.08, -555.59, 0.42177, 2, 154, + -153.98, -873.39, 0.575, 155, 88.81, -537.33, 0.425, 2, 154, + -138.39, -885.83, 0.57246, 155, 73.22, -524.88, 0.42754 + ], + "hull": 64, + "edges": [ + 2, 0, 0, 126, 126, 124, 124, 122, 122, 120, 120, 118, 118, 116, + 116, 114, 114, 112, 112, 110, 110, 108, 108, 106, 106, 104, 104, + 102, 102, 100, 100, 98, 98, 96, 96, 94, 94, 92, 92, 90, 90, 88, + 88, 86, 86, 84, 84, 82, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, + 72, 70, 70, 68, 68, 66, 66, 64, 64, 62, 60, 84, 62, 60, 60, 58, + 58, 56, 56, 54, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, + 42, 104, 42, 40, 40, 106, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, + 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, + 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2 + ], + "width": 964, + "height": 356 + } + }, + "面部/E脸1": { + "E脸1": { + "type": "mesh", + "uvs": [ + 0.8159, 0.22043, 0.86539, 0.35668, 0.88435, 0.42584, 0.88551, + 0.46326, 0.88666, 0.50068, 0.88323, 0.52892, 0.87981, 0.55716, + 0.87464, 0.59977, 0.8677, 0.639, 0.86446, 0.68493, 0.86122, + 0.71383, 0.84975, 0.74893, 0.83282, 0.77412, 0.811, 0.79721, + 0.77903, 0.82155, 0.75608, 0.83394, 0.73314, 0.84632, 0.69514, + 0.86143, 0.65226, 0.86941, 0.60374, 0.87235, 0.55032, 0.87151, + 0.49916, 0.86689, 0.44951, 0.85933, 0.40136, 0.84464, 0.36149, + 0.82617, 0.32048, 0.80392, 0.28362, 0.77706, 0.23335, 0.77492, + 0.19761, 0.76358, 0.16413, 0.74133, 0.13743, 0.71237, 0.11899, + 0.67711, 0.11373, 0.64143, 0.11937, 0.59903, 0.13442, 0.56713, + 0.15548, 0.54866, 0.18031, 0.54194, 0.19874, 0.5474, 0.18625, + 0.50154, 0.18474, 0.45369, 0.1964, 0.38526, 0.23722, 0.25674, + 0.30374, 0.18519, 0.46253, 0.14774, 0.58358, 0.14172, 0.725, + 0.15108, 0.77953, 0.18051, 0.20692, 0.39349, 0.19595, 0.45117, + 0.19682, 0.49789, 0.21212, 0.56201, 0.24481, 0.65542, 0.28667, + 0.75564, 0.30573, 0.77626, 0.32508, 0.7914, 0.36377, 0.81332, + 0.4016, 0.82943, 0.4504, 0.84489, 0.49891, 0.8536, 0.54915, + 0.85972, 0.60112, 0.86133, 0.6505, 0.85617, 0.69227, 0.84844, + 0.72692, 0.83523, 0.77399, 0.81009, 0.75097, 0.82352, 0.80371, + 0.78788, 0.82286, 0.76879, 0.83793, 0.74656, 0.85146, 0.71464, + 0.85538, 0.68465, 0.85896, 0.63791, 0.86483, 0.59887, 0.8716, + 0.55801, 0.87492, 0.52609, 0.87568, 0.49902, 0.87543, 0.46141, + 0.87496, 0.42667, 0.86015, 0.35885, 0.3088, 0.58734, 0.31118, + 0.63713, 0.34776, 0.68573, 0.39407, 0.70291, 0.45136, 0.7015, + 0.49696, 0.67845, 0.52942, 0.63885, 0.52942, 0.5621, 0.49489, + 0.53212, 0.44991, 0.52196, 0.39454, 0.52388, 0.34816, 0.54486, + 0.78876, 0.52203, 0.75448, 0.52468, 0.72201, 0.53526, 0.68899, + 0.57919, 0.69141, 0.65339, 0.72266, 0.69178, 0.75384, 0.6966, + 0.79151, 0.69045, 0.82841, 0.6711, 0.85466, 0.64181, 0.85839, + 0.57795, 0.83043, 0.53824, 0.43875, 0.75269, 0.62667, 0.73393, + 0.77651, 0.7411 + ], + "triangles": [ + 20, 60, 19, 19, 61, 18, 19, 60, 61, 21, 59, 20, 20, 59, 60, 18, + 62, 17, 18, 61, 62, 22, 58, 21, 21, 58, 59, 17, 63, 16, 17, 62, + 63, 61, 60, 104, 104, 60, 59, 22, 57, 58, 22, 23, 57, 62, 61, 104, + 84, 58, 103, 103, 83, 84, 84, 104, 59, 104, 84, 85, 84, 59, 58, + 62, 104, 63, 16, 65, 15, 16, 63, 65, 23, 56, 57, 56, 103, 57, 58, + 57, 103, 23, 24, 56, 65, 63, 96, 14, 15, 64, 24, 55, 56, 56, 55, + 103, 24, 25, 55, 63, 104, 96, 15, 65, 64, 64, 65, 105, 105, 65, + 96, 13, 64, 66, 13, 14, 64, 25, 54, 55, 103, 55, 82, 64, 105, 66, + 97, 105, 96, 26, 53, 25, 13, 67, 12, 13, 66, 67, 55, 54, 82, 54, + 81, 82, 54, 53, 81, 66, 105, 67, 26, 52, 53, 26, 27, 52, 53, 52, + 81, 52, 27, 51, 12, 68, 11, 12, 67, 68, 67, 105, 68, 51, 27, 28, + 28, 29, 51, 52, 80, 81, 52, 51, 80, 103, 82, 83, 11, 69, 10, 11, + 68, 69, 105, 98, 68, 68, 98, 69, 69, 98, 99, 29, 30, 51, 105, 97, + 98, 104, 95, 96, 104, 85, 95, 69, 70, 10, 69, 99, 70, 10, 70, 9, + 51, 31, 50, 50, 31, 35, 50, 36, 37, 50, 35, 36, 31, 51, 30, 33, + 35, 32, 35, 33, 34, 83, 82, 89, 90, 89, 82, 82, 81, 90, 89, 88, + 83, 84, 88, 87, 84, 83, 88, 98, 97, 92, 96, 92, 97, 96, 93, 92, + 93, 95, 94, 92, 91, 98, 98, 91, 99, 81, 80, 90, 8, 9, 71, 99, 100, + 70, 71, 70, 100, 70, 71, 9, 84, 87, 85, 35, 31, 32, 100, 99, 101, + 99, 91, 102, 51, 79, 80, 51, 50, 79, 85, 94, 95, 95, 93, 96, 71, + 100, 72, 101, 99, 102, 7, 8, 72, 85, 86, 94, 85, 87, 86, 8, 71, + 72, 72, 100, 101, 80, 79, 90, 72, 73, 7, 7, 73, 6, 72, 101, 73, + 90, 79, 49, 94, 86, 93, 101, 102, 73, 86, 87, 93, 49, 79, 50, 6, + 73, 74, 73, 102, 74, 6, 74, 5, 38, 49, 37, 50, 37, 49, 89, 90, 48, + 74, 102, 75, 93, 0, 92, 88, 43, 87, 45, 93, 44, 87, 44, 93, 5, 74, + 4, 74, 75, 4, 76, 75, 102, 78, 91, 92, 45, 0, 93, 87, 43, 44, 43, + 88, 89, 102, 91, 76, 91, 77, 76, 91, 78, 77, 78, 92, 0, 46, 0, 45, + 47, 89, 48, 89, 47, 41, 89, 41, 42, 43, 89, 42, 38, 39, 49, 75, 3, + 4, 75, 76, 3, 39, 48, 49, 49, 48, 90, 76, 2, 3, 76, 77, 2, 47, 48, + 39, 47, 39, 40, 2, 77, 1, 77, 78, 1, 47, 40, 41, 78, 0, 1, 25, 53, + 54 + ], + "vertices": [ + 2, 154, -501.04, -328.84, 0.5, 155, 435.87, -1081.88, 0.5, 2, 154, + -367.99, -279.18, 0.5, 155, 302.82, -1131.53, 0.5, 2, 154, + -300.63, -260.61, 0.50952, 155, 235.46, -1150.1, 0.49048, 2, 154, + -264.47, -260.38, 0.50952, 155, 199.3, -1150.34, 0.49048, 2, 154, + -228.3, -260.14, 0.50952, 155, 163.13, -1150.57, 0.49048, 2, 154, + -201.13, -264.59, 0.50952, 155, 135.96, -1146.12, 0.49048, 2, 154, + -173.96, -269.05, 0.51333, 155, 108.79, -1141.67, 0.48667, 2, 154, + -132.97, -275.77, 0.51714, 155, 67.8, -1134.95, 0.48286, 2, 154, + -95.31, -284.3, 0.51714, 155, 30.14, -1126.41, 0.48286, 2, 154, + -51.05, -289.03, 0.51238, 155, -14.12, -1121.69, 0.48762, 2, 154, + -23.24, -293.29, 0.50762, 155, -41.93, -1117.42, 0.49238, 2, 154, + 10.31, -306.61, 0.50667, 155, -75.48, -1104.11, 0.49333, 2, 154, + 34.12, -325.53, 0.50571, 155, -99.29, -1085.19, 0.49429, 2, 154, + 55.76, -349.66, 0.50667, 155, -120.93, -1061.05, 0.49333, 2, 154, + 78.31, -384.77, 0.50667, 155, -143.48, -1025.94, 0.49333, 2, 154, + 89.58, -409.83, 0.51048, 155, -154.75, -1000.88, 0.48952, 2, 154, + 100.84, -434.89, 0.51143, 155, -166.01, -975.82, 0.48857, 2, 154, + 114.29, -476.24, 0.51048, 155, -179.46, -934.48, 0.48952, 2, 154, + 120.71, -522.66, 0.51143, 155, -185.88, -888.05, 0.48857, 2, 154, + 122.08, -575.03, 0.51714, 155, -187.25, -835.68, 0.48286, 2, 154, + 119.67, -632.57, 0.52286, 155, -184.84, -778.15, 0.47714, 2, 154, + 113.67, -687.57, 0.52762, 155, -178.84, -723.14, 0.47238, 2, 154, + 104.88, -740.87, 0.53429, 155, -170.05, -669.84, 0.46571, 2, 154, + 89.25, -792.36, 0.54, 155, -154.42, -618.35, 0.46, 2, 154, 70.21, + -834.83, 0.54476, 155, -135.38, -575.88, 0.45524, 2, 154, 47.49, + -878.41, 0.54571, 155, -112.67, -532.3, 0.45429, 2, 154, 20.44, + -917.41, 0.54738, 155, -85.61, -493.3, 0.45262, 2, 154, 16.87, + -971.53, 0.5391, 155, -82.04, -439.19, 0.4609, 2, 154, 4.85, + -1009.73, 0.53523, 155, -70.02, -400.98, 0.46477, 2, 154, -17.64, + -1045.21, 0.53527, 155, -47.53, -365.51, 0.46473, 2, 154, -46.41, + -1073.21, 0.5357, 155, -18.76, -337.51, 0.4643, 2, 154, -81.02, + -1092.12, 0.53908, 155, 15.85, -318.6, 0.46092, 2, 154, -115.63, + -1096.83, 0.53908, 155, 50.46, -313.88, 0.46092, 2, 154, -156.4, + -1089.61, 0.53743, 155, 91.23, -321.11, 0.46257, 2, 154, -186.75, + -1072.53, 0.53706, 155, 121.58, -338.18, 0.46294, 2, 154, -203.96, + -1049.34, 0.53944, 155, 138.79, -361.38, 0.46056, 2, 154, -209.7, + -1022.4, 0.5446, 155, 144.53, -388.31, 0.4554, 2, 154, -203.87, + -1002.69, 0.54684, 155, 138.7, -408.02, 0.45316, 2, 154, -248.53, + -1014.91, 0.54631, 155, 183.36, -395.8, 0.45369, 2, 154, -294.78, + -1015.25, 0.54762, 155, 229.61, -395.47, 0.45238, 2, 154, -360.5, + -1000.84, 0.54762, 155, 295.33, -409.88, 0.45238, 2, 154, -483.38, + -953.39, 0.54381, 155, 418.21, -457.32, 0.45619, 2, 154, -550.47, + -879.79, 0.53619, 155, 485.3, -530.93, 0.46381, 2, 154, -581.86, + -707.66, 0.5, 155, 516.69, -703.05, 0.5, 2, 154, -584.03, -577.06, + 0.5, 155, 518.86, -833.65, 0.5, 2, 154, -570.74, -424.92, 0.5, + 155, 505.57, -985.79, 0.5, 2, 154, -540.69, -366.95, 0.5, 155, + 475.52, -1043.76, 0.5, 2, 154, -352.25, -989.72, 0.54762, 155, + 287.08, -420.99, 0.45238, 2, 154, -296.88, -1003.1, 0.54762, 155, + 231.71, -407.61, 0.45238, 2, 154, -251.74, -1003.43, 0.54762, 155, + 186.57, -407.29, 0.45238, 2, 154, -189.36, -988.67, 0.54762, 155, + 124.19, -422.05, 0.45238, 2, 154, -98.17, -955.96, 0.54762, 155, + 33, -454.75, 0.45238, 2, 154, -0.14, -913.54, 0.54762, 155, + -65.03, -497.17, 0.45238, 2, 154, 20.34, -893.56, 0.54762, 155, + -85.51, -517.15, 0.45238, 2, 154, 35.55, -873.12, 0.54571, 155, + -100.72, -537.59, 0.45429, 2, 154, 57.87, -832.02, 0.54476, 155, + -123.04, -578.69, 0.45524, 2, 154, 74.56, -791.69, 0.54, 155, + -139.73, -619.02, 0.46, 2, 154, 90.97, -739.52, 0.53429, 155, + -156.14, -671.19, 0.46571, 2, 154, 100.83, -687.49, 0.52762, 155, + -166, -723.23, 0.47238, 2, 154, 108.25, -633.51, 0.52286, 155, + -173.42, -777.2, 0.47714, 2, 154, 111.37, -577.55, 0.51714, 155, + -176.54, -833.17, 0.48286, 2, 154, 107.87, -524.2, 0.51143, 155, + -173.04, -886.51, 0.48857, 2, 154, 101.66, -478.98, 0.51048, 155, + -166.83, -931.73, 0.48952, 2, 154, 89.95, -441.29, 0.51143, 155, + -155.12, -969.43, 0.48857, 2, 154, 67.09, -389.89, 0.50667, 155, + -132.26, -1020.82, 0.49333, 2, 154, 79.36, -415.06, 0.51048, 155, + -144.53, -995.65, 0.48952, 2, 154, 46.53, -357.26, 0.50667, 155, + -111.71, -1053.45, 0.49333, 2, 154, 28.67, -336.11, 0.50571, 155, + -93.84, -1074.6, 0.49429, 2, 154, 7.66, -319.28, 0.50667, 155, + -72.83, -1091.44, 0.49333, 2, 154, -22.75, -303.83, 0.50762, 155, + -42.42, -1106.88, 0.49238, 2, 154, -51.59, -298.8, 0.51238, 155, + -13.58, -1111.91, 0.48762, 2, 154, -96.62, -293.69, 0.51714, 155, + 31.45, -1117.02, 0.48286, 2, 154, -134.14, -286.31, 0.51714, 155, + 68.97, -1124.4, 0.48286, 2, 154, -173.39, -277.92, 0.51333, 155, + 108.22, -1132.8, 0.48667, 2, 154, -204.11, -273.48, 0.50952, 155, + 138.94, -1137.23, 0.49048, 2, 154, -230.23, -271.93, 0.50952, 155, + 165.06, -1138.79, 0.49048, 2, 154, -266.56, -271.19, 0.50952, 155, + 201.39, -1139.53, 0.49048, 2, 154, -300.11, -270.75, 0.50952, 155, + 234.94, -1139.96, 0.49048, 2, 154, -366.05, -284.88, 0.5, 155, + 300.88, -1125.83, 0.5, 2, 154, -162, -885.17, 0.56857, 155, 96.82, + -525.55, 0.43143, 2, 154, -113.84, -883.94, 0.56857, 155, 48.67, + -526.77, 0.43143, 2, 154, -65.81, -845.83, 0.57619, 155, 0.64, + -564.88, 0.42381, 2, 154, -47.84, -796.4, 0.57905, 155, -17.33, + -614.32, 0.42095, 2, 154, -47.47, -734.63, 0.57619, 155, -17.7, + -676.09, 0.42381, 2, 154, -68.36, -684.87, 0.58095, 155, 3.19, + -725.85, 0.41905, 2, 154, -105.62, -648.82, 0.57905, 155, 40.45, + -761.89, 0.42095, 2, 154, -179.73, -646.75, 0.57905, 155, 114.56, + -763.96, 0.42095, 2, 154, -209.72, -683.16, 0.58095, 155, 144.55, + -727.56, 0.41905, 2, 154, -220.88, -731.34, 0.58286, 155, 155.71, + -679.37, 0.41714, 2, 154, -220.69, -791.07, 0.57905, 155, 155.52, + -619.65, 0.42095, 2, 154, -201.83, -841.61, 0.57619, 155, 136.66, + -569.1, 0.42381, 2, 154, -210.63, -366.21, 0.53905, 155, 145.46, + -1044.5, 0.46095, 2, 154, -209.09, -403.22, 0.54476, 155, 143.92, + -1007.49, 0.45524, 2, 154, -199.85, -438.5, 0.54762, 155, 134.68, + -972.22, 0.45238, 2, 154, -158.43, -475.26, 0.55429, 155, 93.26, + -935.45, 0.44571, 2, 154, -86.7, -474.66, 0.55429, 155, 21.53, + -936.06, 0.44571, 2, 154, -48.7, -442.02, 0.54762, 155, -16.47, + -968.7, 0.45238, 2, 154, -43.11, -408.54, 0.54476, 155, -22.06, + -1002.17, 0.45524, 2, 154, -47.91, -367.79, 0.53905, 155, -17.26, + -1042.93, 0.46095, 2, 154, -65.49, -327.5, 0.53048, 155, 0.32, + -1083.22, 0.46952, 2, 154, -92.98, -298.42, 0.5219, 155, 27.81, + -1112.29, 0.4781, 2, 154, -154.53, -292.69, 0.5219, 155, 89.36, + -1118.02, 0.4781, 2, 154, -193.72, -321.75, 0.53048, 155, 128.55, + -1088.96, 0.46952, 2, 154, 1.58, -749.59, 0.5, 155, -66.75, + -661.12, 0.5, 2, 154, -10.88, -546.59, 0.58381, 155, -54.29, + -864.12, 0.41619, 2, 154, 0.55, -385.32, 0.56095, 155, -65.72, + -1025.39, 0.43905 + ], + "hull": 47, + "edges": [ + 0, 2, 2, 4, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, + 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, + 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, + 80, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 0, 92, 94, 96, + 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 108, 110, + 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 122, + 124, 124, 126, 28, 30, 30, 32, 126, 130, 130, 128, 128, 132, 132, + 134, 134, 136, 136, 138, 138, 140, 140, 142, 142, 144, 144, 146, + 12, 14, 146, 148, 8, 10, 10, 12, 148, 150, 150, 152, 4, 6, 6, 8, + 152, 154, 154, 156, 158, 160, 160, 162, 162, 164, 164, 166, 166, + 168, 168, 170, 170, 172, 172, 174, 174, 176, 176, 178, 178, 180, + 180, 158, 180, 162, 164, 178, 176, 166, 168, 174, 182, 184, 184, + 186, 186, 188, 188, 190, 190, 192, 192, 194, 194, 196, 196, 198, + 198, 200, 200, 202, 202, 204, 204, 182, 198, 204, 182, 196, 194, + 184, 186, 192 + ], + "width": 1078, + "height": 966 + }, + "E脸2": { + "type": "linkedmesh", + "parent": "E脸1", + "width": 1078, + "height": 966 + } + }, + "面部/M嘴巴": { + "M正常嘴巴": { + "type": "mesh", + "path": "M嘴巴", + "uvs": [ + 0.59504, 0.42683, 0.57241, 0.44377, 0.54183, 0.45484, 0.50391, + 0.45795, 0.46354, 0.45276, 0.42745, 0.44654, 0.39228, 0.43098, + 0.36078, 0.41265, 0.35344, 0.43236, 0.38036, 0.45, 0.42195, + 0.46452, 0.46079, 0.47109, 0.50391, 0.47213, 0.54489, 0.4704, + 0.57731, 0.46106, 0.60514, 0.44481, 0.62043, 0.42821, 0.60789, + 0.41196 + ], + "triangles": [ + 0, 17, 16, 9, 8, 7, 15, 0, 16, 1, 0, 15, 6, 9, 7, 14, 1, 15, 2, 1, + 14, 10, 6, 5, 9, 6, 10, 13, 2, 14, 11, 5, 4, 10, 5, 11, 12, 3, 2, + 12, 2, 13, 4, 3, 12, 11, 4, 12 + ], + "vertices": [ + 2, 154, 31.5, -535.07, 0.57024, 155, -96.67, -875.64, 0.42976, 2, + 154, 36.6, -543.25, 0.57006, 155, -101.77, -867.46, 0.42994, 2, + 154, 39.77, -554.2, 0.57072, 155, -104.94, -856.51, 0.42928, 2, + 154, 40.37, -567.69, 0.57222, 155, -105.54, -843.03, 0.42778, 2, + 154, 38.34, -581.97, 0.57408, 155, -103.51, -828.75, 0.42592, 2, + 154, 36.03, -594.72, 0.5756, 155, -101.2, -816, 0.4244, 2, 154, + 30.8, -607.06, 0.5762, 155, -95.97, -803.65, 0.4238, 2, 154, + 24.73, -618.08, 0.57714, 155, -89.9, -792.64, 0.42286, 2, 154, + 30.85, -620.86, 0.57542, 155, -96.02, -789.86, 0.42458, 2, 154, + 36.65, -611.46, 0.57411, 155, -101.82, -799.25, 0.42589, 2, 154, + 41.62, -596.83, 0.5735, 155, -106.79, -813.89, 0.4265, 2, 154, + 44.06, -583.1, 0.57183, 155, -109.23, -827.61, 0.42817, 2, 154, + 44.82, -567.81, 0.57059, 155, -109.99, -842.9, 0.42941, 2, 154, + 44.68, -553.25, 0.56893, 155, -109.85, -857.46, 0.43107, 2, 154, + 42.07, -541.67, 0.56787, 155, -107.24, -869.05, 0.43213, 2, 154, + 37.25, -531.65, 0.56771, 155, -102.42, -879.06, 0.43229, 2, 154, + 32.19, -526.08, 0.56831, 155, -97.36, -884.64, 0.43169, 2, 154, + 26.96, -530.39, 0.5709, 155, -92.13, -880.33, 0.4291 + ], + "hull": 18, + "edges": [ + 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, + 30, 32, 32, 34, 34, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, + 14 + ], + "width": 355, + "height": 314 + }, + "M笑口": { + "type": "mesh", + "uvs": [ + 0.62838, 0.39087, 0.59352, 0.39295, 0.55284, 0.39433, 0.51003, + 0.39364, 0.46996, 0.39191, 0.43204, 0.38914, 0.3825, 0.38534, + 0.35589, 0.41992, 0.34335, 0.45864, 0.34488, 0.4984, 0.35283, + 0.52917, 0.37485, 0.56375, 0.40268, 0.59072, 0.4403, 0.60489, + 0.48556, 0.61146, 0.53205, 0.60835, 0.56997, 0.59245, 0.59994, + 0.56617, 0.62746, 0.53436, 0.64612, 0.49391, 0.6559, 0.45518, + 0.65774, 0.40436, 0.65223, 0.3888, 0.39504, 0.41023, 0.43112, + 0.41196, 0.46752, 0.41438, 0.51125, 0.41508, 0.55498, 0.41577, + 0.59963, 0.41507, 0.63755, 0.40989, 0.63694, 0.44827, 0.63144, + 0.48008, 0.61767, 0.51742, 0.5981, 0.54612, 0.56874, 0.57481, + 0.53357, 0.59694, 0.48617, 0.60109, 0.44366, 0.59556, 0.4192, + 0.58242, 0.39076, 0.55511, 0.3721, 0.52261, 0.36293, 0.49218, + 0.36507, 0.4576, 0.37608, 0.42925 + ], + "triangles": [ + 29, 0, 22, 29, 22, 21, 23, 6, 5, 24, 23, 5, 25, 24, 5, 4, 25, 5, + 28, 1, 0, 28, 0, 29, 26, 3, 2, 4, 3, 26, 25, 4, 26, 27, 2, 1, 27, + 1, 28, 26, 2, 27, 43, 7, 6, 23, 43, 6, 30, 28, 29, 21, 30, 29, 20, + 30, 21, 42, 7, 43, 8, 7, 42, 31, 28, 30, 31, 30, 20, 41, 8, 42, + 19, 31, 20, 9, 8, 41, 31, 27, 28, 32, 31, 19, 42, 24, 41, 40, 41, + 24, 10, 9, 41, 10, 41, 40, 18, 32, 19, 32, 33, 27, 31, 32, 27, 33, + 32, 18, 42, 43, 24, 24, 43, 23, 39, 40, 24, 11, 40, 39, 10, 40, + 11, 17, 33, 18, 34, 27, 33, 34, 33, 17, 25, 38, 39, 25, 39, 24, + 12, 39, 38, 11, 39, 12, 16, 34, 17, 37, 38, 25, 36, 37, 25, 34, + 35, 26, 34, 26, 27, 35, 34, 16, 26, 36, 25, 35, 36, 26, 13, 38, + 37, 12, 38, 13, 15, 36, 35, 15, 35, 16, 14, 37, 36, 14, 36, 15, + 13, 37, 14 + ], + "vertices": [ + 2, 154, 20.55, -522.93, 0.57168, 155, -85.72, -887.79, 0.42832, 2, + 154, 20.85, -535.32, 0.57402, 155, -86.02, -875.39, 0.42598, 2, + 154, 20.88, -549.77, 0.57684, 155, -86.05, -860.95, 0.42316, 2, + 154, 20.24, -564.95, 0.57929, 155, -85.41, -845.76, 0.42071, 2, + 154, 19.3, -579.15, 0.58168, 155, -84.47, -831.56, 0.41832, 2, + 154, 18.06, -592.59, 0.58094, 155, -83.23, -818.13, 0.41906, 2, + 154, 16.37, -610.14, 0.57999, 155, -81.55, -800.58, 0.42001, 2, + 154, 26.96, -619.88, 0.57624, 155, -92.13, -790.84, 0.42376, 2, + 154, 38.99, -624.67, 0.5728, 155, -104.16, -786.05, 0.4272, 2, + 154, 51.49, -624.47, 0.56992, 155, -116.66, -786.24, 0.43008, 2, + 154, 61.23, -621.92, 0.56754, 155, -126.4, -788.79, 0.43246, 2, + 154, 72.3, -614.41, 0.56449, 155, -137.47, -796.3, 0.43551, 2, + 154, 81.04, -604.77, 0.56181, 155, -146.21, -805.94, 0.43819, 2, + 154, 85.86, -591.55, 0.55928, 155, -151.03, -819.17, 0.44072, 2, + 154, 88.37, -575.54, 0.55728, 155, -153.54, -835.17, 0.44272, 2, + 154, 87.85, -559.02, 0.55626, 155, -153.02, -851.69, 0.44374, 2, + 154, 83.24, -545.42, 0.55638, 155, -148.41, -865.29, 0.44362, 2, + 154, 75.29, -534.56, 0.55724, 155, -140.46, -876.16, 0.44276, 2, + 154, 65.57, -524.51, 0.55844, 155, -130.75, -886.2, 0.44156, 2, + 154, 53.06, -517.54, 0.56096, 155, -118.23, -893.18, 0.43904, 2, + 154, 41, -513.73, 0.56387, 155, -106.17, -896.99, 0.43613, 2, 154, + 25.07, -512.63, 0.56833, 155, -90.24, -898.09, 0.43167, 2, 154, + 20.13, -514.45, 0.57014, 155, -85.3, -896.27, 0.42986, 2, 154, + 24.31, -605.9, 0.57817, 155, -89.48, -804.81, 0.42183, 2, 154, + 25.21, -593.11, 0.57889, 155, -90.38, -817.6, 0.42111, 2, 154, + 26.33, -580.22, 0.57795, 155, -91.5, -830.5, 0.42205, 2, 154, + 26.98, -564.71, 0.57693, 155, -92.15, -846.01, 0.42307, 2, 154, + 27.63, -549.19, 0.57459, 155, -92.8, -861.52, 0.42541, 2, 154, + 27.86, -533.34, 0.57153, 155, -93.03, -877.37, 0.42847, 2, 154, + 26.61, -519.84, 0.5693, 155, -91.78, -890.87, 0.4307, 2, 154, + 38.65, -520.39, 0.56584, 155, -103.82, -890.32, 0.43416, 2, 154, + 48.58, -522.63, 0.56324, 155, -113.75, -888.09, 0.43676, 2, 154, + 60.16, -527.84, 0.56065, 155, -125.33, -882.88, 0.43935, 2, 154, + 68.97, -535.03, 0.5591, 155, -134.14, -875.68, 0.4409, 2, 154, + 77.69, -545.7, 0.55776, 155, -142.86, -865.01, 0.44224, 2, 154, + 84.29, -558.38, 0.55707, 155, -149.46, -852.34, 0.44293, 2, 154, + 85.12, -575.23, 0.55832, 155, -150.29, -835.48, 0.44168, 2, 154, + 82.96, -590.27, 0.56013, 155, -148.13, -820.44, 0.43987, 2, 154, + 78.6, -598.84, 0.56187, 155, -143.77, -811.88, 0.43813, 2, 154, + 69.74, -608.69, 0.5651, 155, -134.91, -802.02, 0.4349, 2, 154, + 59.36, -615.03, 0.56808, 155, -124.53, -795.69, 0.43192, 2, 154, + 49.71, -618.02, 0.57065, 155, -114.89, -792.7, 0.42935, 2, 154, + 38.88, -616.95, 0.5735, 155, -104.05, -793.76, 0.4265, 2, 154, + 30.09, -612.8, 0.57609, 155, -95.26, -797.92, 0.42391 + ], + "hull": 23, + "edges": [ + 8, 6, 6, 4, 4, 2, 2, 0, 0, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, + 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, + 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 46, 48, 48, 50, 50, 52, + 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, + 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, + 84, 86, 86, 46 + ], + "width": 355, + "height": 314 + }, + "M说话": { + "type": "mesh", + "uvs": [ + 0.59, 0.39235, 0.54821, 0.3941, 0.50148, 0.3948, 0.45814, 0.3927, + 0.40522, 0.392, 0.37303, 0.40599, 0.35198, 0.43224, 0.34362, + 0.46828, 0.34548, 0.49558, 0.35229, 0.52567, 0.36962, 0.55647, + 0.395, 0.58376, 0.42719, 0.60091, 0.4487, 0.60546, 0.47022, 0.61, + 0.51974, 0.60965, 0.55626, 0.59881, 0.59062, 0.57501, 0.61569, + 0.54947, 0.63643, 0.51552, 0.65035, 0.47703, 0.6502, 0.45446, + 0.65004, 0.43189, 0.64014, 0.406, 0.61785, 0.39305, 0.41234, + 0.41089, 0.38634, 0.42559, 0.36931, 0.44939, 0.36095, 0.46933, + 0.36281, 0.49733, 0.37086, 0.52112, 0.38231, 0.54352, 0.4015, + 0.56871, 0.42657, 0.58761, 0.45102, 0.59636, 0.47238, 0.59951, + 0.5185, 0.59811, 0.54945, 0.58866, 0.58288, 0.56241, 0.60052, + 0.54247, 0.61754, 0.51272, 0.63085, 0.47948, 0.63457, 0.45569, + 0.63581, 0.43749, 0.62838, 0.42349, 0.61569, 0.41404, 0.59, + 0.41404, 0.54883, 0.41579, 0.50086, 0.41614, 0.45783, 0.41264 + ], + "triangles": [ + 25, 4, 3, 49, 25, 3, 49, 3, 2, 46, 1, 0, 45, 46, 0, 24, 45, 0, 45, + 24, 23, 47, 1, 46, 48, 49, 2, 47, 48, 2, 47, 2, 1, 44, 45, 23, 26, + 5, 4, 26, 4, 25, 44, 23, 22, 6, 5, 26, 43, 44, 22, 27, 6, 26, 43, + 22, 21, 42, 44, 43, 42, 43, 21, 7, 6, 27, 28, 7, 27, 42, 21, 20, + 42, 45, 44, 41, 42, 20, 8, 7, 28, 29, 28, 27, 8, 28, 29, 45, 41, + 46, 42, 41, 45, 19, 41, 20, 40, 41, 19, 25, 30, 27, 29, 27, 30, 9, + 8, 29, 9, 29, 30, 46, 40, 47, 41, 40, 46, 25, 31, 30, 18, 39, 40, + 18, 40, 19, 10, 9, 30, 10, 30, 31, 39, 38, 47, 40, 39, 47, 27, 26, + 25, 49, 32, 31, 10, 31, 32, 49, 31, 25, 33, 32, 49, 17, 38, 39, + 17, 39, 18, 11, 10, 32, 49, 34, 33, 11, 32, 33, 38, 48, 47, 37, + 48, 38, 48, 34, 49, 34, 48, 35, 37, 36, 48, 16, 37, 38, 16, 38, + 17, 36, 35, 48, 12, 33, 34, 11, 33, 12, 13, 12, 34, 15, 36, 37, + 15, 37, 16, 14, 34, 35, 13, 34, 14, 15, 14, 35, 15, 35, 36 + ], + "vertices": [ + 2, 154, 20.63, -536.56, 0.57427, 155, -85.8, -874.15, 0.42573, 2, + 154, 20.76, -551.41, 0.57711, 155, -85.94, -859.31, 0.42289, 2, + 154, 20.52, -568, 0.57958, 155, -85.69, -842.72, 0.42042, 2, 154, + 19.43, -583.36, 0.58214, 155, -84.6, -827.36, 0.41786, 2, 154, + 18.69, -602.13, 0.58057, 155, -83.86, -808.58, 0.41943, 2, 154, + 22.76, -613.68, 0.57809, 155, -87.93, -797.04, 0.42191, 2, 154, + 30.79, -621.38, 0.57522, 155, -95.96, -789.34, 0.42478, 2, 154, + 42.02, -624.66, 0.5722, 155, -107.19, -786.06, 0.4278, 2, 154, + 50.61, -624.24, 0.57027, 155, -115.78, -786.48, 0.42973, 2, 154, + 60.12, -622.08, 0.56813, 155, -125.29, -788.63, 0.43187, 2, 154, + 69.96, -616.2, 0.56591, 155, -135.13, -794.51, 0.43409, 2, 154, + 78.78, -607.44, 0.56258, 155, -143.95, -803.28, 0.43742, 2, 154, + 84.48, -596.16, 0.56001, 155, -149.65, -814.55, 0.43999, 2, 154, + 86.12, -588.57, 0.55895, 155, -151.29, -822.15, 0.44105, 2, 154, + 87.76, -580.98, 0.5579, 155, -152.93, -829.74, 0.4421, 2, 154, + 88.14, -563.4, 0.55647, 155, -153.31, -847.32, 0.44353, 2, 154, + 85.1, -550.34, 0.55634, 155, -150.27, -860.37, 0.44366, 2, 154, + 77.97, -537.94, 0.55703, 155, -143.14, -872.77, 0.44297, 2, 154, + 70.2, -528.82, 0.5578, 155, -135.37, -881.89, 0.4422, 2, 154, + 59.75, -521.17, 0.55962, 155, -124.92, -889.55, 0.44038, 2, 154, + 47.81, -515.89, 0.56226, 155, -112.98, -894.83, 0.43774, 2, 154, + 40.72, -515.74, 0.56433, 155, -105.89, -894.97, 0.43567, 2, 154, + 33.64, -515.6, 0.56639, 155, -98.81, -895.11, 0.43361, 2, 154, + 25.41, -518.89, 0.56944, 155, -90.58, -891.83, 0.43056, 2, 154, + 21.12, -526.68, 0.57221, 155, -86.3, -884.03, 0.42779, 2, 154, + 24.69, -599.77, 0.57923, 155, -89.86, -810.94, 0.42077, 2, 154, + 29.05, -609.13, 0.57709, 155, -94.22, -801.59, 0.42291, 2, 154, + 36.35, -615.37, 0.57465, 155, -101.52, -795.34, 0.42535, 2, 154, + 42.52, -618.52, 0.57282, 155, -107.7, -792.2, 0.42718, 2, 154, + 51.33, -618.1, 0.57059, 155, -116.5, -792.61, 0.42941, 2, 154, + 58.88, -615.45, 0.56887, 155, -124.05, -795.26, 0.43113, 2, 154, + 66.02, -611.59, 0.56653, 155, -131.19, -799.13, 0.43347, 2, 154, + 74.12, -605, 0.56368, 155, -139.29, -805.72, 0.43632, 2, 154, + 80.3, -596.27, 0.56123, 155, -145.47, -814.45, 0.43877, 2, 154, + 83.29, -587.67, 0.55971, 155, -148.46, -823.05, 0.44029, 2, 154, + 84.49, -580.11, 0.5588, 155, -149.66, -830.6, 0.4412, 2, 154, + 84.5, -563.74, 0.55771, 155, -149.67, -846.98, 0.44228, 2, 154, + 81.85, -552.67, 0.55738, 155, -147.02, -858.04, 0.44262, 2, 154, + 73.94, -540.58, 0.55863, 155, -139.11, -870.14, 0.44137, 2, 154, + 67.85, -534.14, 0.55939, 155, -133.02, -876.57, 0.44061, 2, 154, + 58.69, -527.84, 0.56107, 155, -123.86, -882.87, 0.43893, 2, 154, + 48.38, -522.83, 0.56326, 155, -113.55, -887.89, 0.43674, 2, 154, + 40.95, -521.3, 0.56523, 155, -106.12, -889.41, 0.43477, 2, 154, + 35.25, -520.7, 0.56683, 155, -100.42, -890.01, 0.43317, 2, 154, + 30.78, -523.22, 0.56865, 155, -95.96, -887.5, 0.43135, 2, 154, + 27.69, -527.64, 0.57043, 155, -92.86, -883.08, 0.42957, 2, 154, + 27.44, -536.75, 0.57227, 155, -92.61, -873.96, 0.42773, 2, 154, + 27.58, -551.38, 0.57494, 155, -92.75, -859.34, 0.42506, 2, 154, + 27.21, -568.4, 0.57729, 155, -92.39, -842.31, 0.42271, 2, 154, + 25.69, -583.64, 0.57841, 155, -90.86, -827.07, 0.42159 + ], + "hull": 25, + "edges": [ + 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 48, 46, 46, 44, 40, 38, 38, 36, 36, + 34, 34, 32, 32, 30, 30, 28, 24, 22, 22, 20, 20, 18, 18, 16, 16, + 14, 14, 12, 12, 10, 10, 8, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, + 60, 62, 62, 64, 64, 66, 66, 68, 28, 26, 26, 24, 68, 70, 70, 72, + 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 44, 42, 42, 40, + 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, 98, 98, 50 + ], + "width": 355, + "height": 314 + } + }, + "面部/X眼": { + "X眼": { + "type": "mesh", + "uvs": [ + 0.14689, 0.26255, 0.15202, 0.74077, 0.4133, 0.57751, 0.65664, + 0.57365, 0.85388, 0.74206, 0.8526, 0.25355, 0.65408, 0.47081, + 0.41137, 0.45795 + ], + "triangles": [4, 6, 5, 1, 7, 2, 1, 0, 7, 2, 6, 3, 2, 7, 6, 4, 3, 6], + "vertices": [ + 2, 154, -206.88, -869.67, 0.58667, 155, 141.71, -541.05, 0.41333, + 2, 154, -13.64, -870.9, 0.58667, 155, -51.53, -539.81, 0.41333, 2, + 154, -73.66, -657.25, 0.58381, 155, 8.49, -753.47, 0.41619, 2, + 154, -69.71, -459.92, 0.55524, 155, 4.54, -950.79, 0.44476, 2, + 154, 2.76, -301.92, 0.52857, 155, -67.93, -1108.79, 0.47143, 2, + 154, -194.55, -297.45, 0.52857, 155, 129.38, -1113.26, 0.47143, 2, + 154, -111.3, -460.84, 0.55524, 155, 46.13, -949.87, 0.44476, 2, + 154, -121.98, -657.46, 0.58381, 155, 56.81, -753.26, 0.41619 + ], + "hull": 8, + "edges": [0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 0, 14], + "width": 811, + "height": 404 + } + }, + "面部/发饰1": { + "发饰1": { + "type": "mesh", + "uvs": [ + 0.58651, 0.21581, 0.64511, 0.30984, 0.67, 0.38585, 0.67562, + 0.45863, 0.66598, 0.50371, 0.76552, 0.5591, 0.74465, 0.6248, + 0.693, 0.71927, 0.63681, 0.7753, 0.58302, 0.79914, 0.52844, 0.803, + 0.46743, 0.80107, 0.43371, 0.80686, 0.32903, 0.78755, 0.30093, + 0.75342, 0.28488, 0.6845, 0.25277, 0.62782, 0.23912, 0.55375, + 0.24715, 0.4887, 0.27043, 0.43717, 0.32742, 0.37663, 0.39867, + 0.32208, 0.48216, 0.25059, 0.52711, 0.1894, 0.40241, 0.73344, + 0.41204, 0.71218, 0.30849, 0.66195, 0.42809, 0.67805, 0.4586, + 0.70961, 0.49071, 0.77015, 0.63443, 0.57944, 0.71872, 0.58266 + ], + "triangles": [ + 25, 28, 24, 7, 8, 28, 8, 29, 28, 15, 26, 24, 24, 26, 25, 28, 30, + 7, 6, 30, 31, 6, 7, 30, 25, 27, 28, 25, 26, 27, 28, 27, 30, 15, + 16, 26, 27, 19, 30, 17, 27, 26, 26, 16, 17, 6, 31, 5, 5, 31, 4, + 27, 17, 18, 27, 18, 19, 19, 20, 30, 30, 20, 4, 31, 30, 4, 13, 24, + 12, 12, 24, 29, 11, 12, 29, 24, 28, 29, 11, 29, 10, 10, 29, 9, 9, + 29, 8, 13, 14, 24, 14, 15, 24, 4, 20, 21, 21, 22, 4, 22, 3, 4, 1, + 22, 0, 22, 23, 0, 3, 22, 2, 1, 2, 22 + ], + "vertices": [ + 1, 143, 146.24, 41.45, 1, 1, 143, 104.71, -4.91, 1, 1, 143, 67.21, + -32.45, 1, 3, 143, 28.13, -50.78, 0.8468, 75, 158.31, -133.45, + 0.00075, 142, 191.81, -48.61, 0.15244, 3, 143, 1.63, -56.34, + 0.39122, 75, 131.76, -128.13, 0.00937, 142, 165.78, -56.08, + 0.59941, 3, 143, -11.48, -112.37, 0.05962, 75, 97.66, -174.47, + 0.04111, 142, 156.77, -112.91, 0.89927, 3, 143, -51.29, -117.46, + 0.0211, 75, 59.06, -163.48, 0.07784, 142, 117.43, -120.87, + 0.90106, 2, 75, 3.84, -137.39, 0.24117, 142, 56.4, -123.05, + 0.75883, 2, 75, -28.57, -109.79, 0.41583, 142, 14.93, -113.41, + 0.58417, 2, 75, -41.96, -83.86, 0.54711, 142, -8.87, -96.52, + 0.45289, 2, 75, -43.53, -57.88, 0.69046, 142, -22.19, -74.16, + 0.30954, 2, 75, -41.58, -28.94, 0.90251, 142, -33.75, -47.56, + 0.09749, 2, 75, -44.56, -12.84, 0.98595, 142, -43.79, -34.62, + 0.01405, 2, 75, -31.74, 36.55, 0.9039, 142, -55.08, 15.14, 0.0961, + 2, 75, -11.17, 49.33, 0.68574, 142, -42.67, 35.94, 0.31426, 2, 75, + 29.83, 55.81, 0.13861, 142, -9.23, 60.52, 0.86139, 3, 143, + -138.89, 99.15, 0.00235, 75, 63.79, 70.12, 0.00498, 142, 14.37, + 88.83, 0.99267, 2, 143, -100.49, 121.31, 0.03352, 142, 51.06, + 113.71, 0.96648, 2, 143, -63.28, 131.93, 0.10834, 142, 87.4, + 126.99, 0.89166, 2, 143, -30.85, 132.86, 0.21506, 142, 119.68, + 130.28, 0.78494, 2, 143, 12.44, 120.87, 0.45645, 142, 163.73, + 121.45, 0.54355, 2, 143, 54.92, 101.28, 0.7735, 142, 207.51, + 104.99, 0.2265, 2, 143, 108.86, 79.97, 0.98188, 142, 262.85, + 87.64, 0.01812, 1, 143, 150.4, 73.43, 1, 1, 75, -0.69, 0.82, 1, 2, + 75, 11.76, -4.11, 0.00425, 142, 2.23, -1.01, 0.99575, 2, 75, + 42.86, 44.23, 0.05538, 142, 7.67, 56.21, 0.94462, 1, 142, 23.75, + 0.9, 1, 2, 75, 12.66, -26.26, 0.28141, 142, 13.21, -20.27, + 0.71859, 2, 75, -23.59, -40.5, 0.75587, 142, -12.46, -49.57, + 0.24413, 3, 143, -45.57, -58.89, 0.04783, 75, 87.37, -111.89, + 0.03806, 142, 118.89, -62.04, 0.91411, 3, 143, -32.62, -96.83, + 0.05031, 75, 84.34, -151.86, 0.04888, 142, 134.56, -98.93, 0.90081 + ], + "hull": 24, + "edges": [ + 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, + 42, 44, 44, 46, 46, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, + 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 30, 52, 52, + 54, 54, 56, 56, 58, 58, 22, 8, 60, 60, 62, 62, 10 + ], + "width": 475, + "height": 592 + } + }, + "面部/发饰2": { + "发饰2": { + "type": "mesh", + "uvs": [ + 0.47451, 0.25715, 0.50359, 0.25666, 0.55206, 0.29739, 0.62202, + 0.3823, 0.66712, 0.42942, 0.70548, 0.46721, 0.74467, 0.50746, + 0.77586, 0.54574, 0.76617, 0.6115, 0.65743, 0.72046, 0.62287, + 0.73665, 0.56344, 0.73224, 0.54953, 0.71113, 0.52761, 0.65273, + 0.51414, 0.60075, 0.50276, 0.53891, 0.48675, 0.43438, 0.47368, + 0.34849, 0.46989, 0.27143, 0.41509, 0.26358, 0.44544, 0.34505, + 0.46609, 0.41867, 0.47537, 0.48189, 0.47832, 0.54422, 0.48085, + 0.61244, 0.47742, 0.68997, 0.43921, 0.72557, 0.39683, 0.73528, + 0.34958, 0.70454, 0.25995, 0.61311, 0.22312, 0.55567, 0.2266, + 0.51764, 0.24536, 0.46101, 0.2801, 0.40599, 0.3329, 0.33318, + 0.38766, 0.26743, 0.39961, 0.25308 + ], + "triangles": [ + 23, 29, 32, 31, 32, 29, 30, 31, 29, 24, 28, 23, 22, 23, 32, 28, + 24, 26, 28, 29, 23, 25, 26, 24, 27, 28, 26, 8, 6, 7, 5, 13, 14, + 10, 12, 13, 5, 8, 13, 6, 8, 5, 8, 9, 13, 10, 11, 12, 13, 9, 10, + 18, 19, 0, 1, 17, 18, 1, 18, 0, 2, 17, 1, 16, 17, 2, 16, 2, 3, 15, + 16, 3, 15, 3, 4, 14, 15, 4, 5, 14, 4, 19, 36, 0, 35, 36, 19, 35, + 19, 20, 34, 35, 20, 21, 33, 34, 21, 34, 20, 33, 22, 32, 22, 33, 21 + ], + "vertices": [ + 2, 81, -13.05, 33.91, 0.04708, 79, -8.69, 0.76, 0.95292, 1, 79, + -0.92, 13.87, 1, 1, 79, 27.98, 25.95, 1, 2, 79, 79.71, 37.25, + 0.99088, 80, -60.94, 36.09, 0.00912, 2, 79, 110.14, 46.33, + 0.76346, 80, -30.64, 45.57, 0.23654, 2, 79, 135.14, 54.58, + 0.34957, 80, -5.75, 54.16, 0.65043, 2, 79, 161.31, 62.63, 0.08096, + 80, 20.31, 62.57, 0.91904, 2, 79, 184.54, 67.57, 0.01365, 80, + 43.47, 67.82, 0.98635, 1, 80, 66.32, 48.33, 1, 1, 80, 79.36, + -25.7, 1, 2, 79, 215.92, -45.67, 0.00027, 80, 76.38, -44.99, + 0.99973, 2, 79, 197.96, -71.18, 0.01746, 80, 58.76, -70.74, + 0.98254, 2, 79, 186.05, -72.44, 0.03368, 80, 46.87, -72.16, + 0.96632, 2, 79, 157.64, -68.5, 0.16427, 80, 18.41, -68.61, + 0.83573, 2, 79, 134.01, -62.3, 0.40917, 80, -5.3, -62.73, 0.59083, + 2, 79, 107.16, -52.85, 0.78478, 80, -32.27, -53.64, 0.21522, 2, + 79, 62.67, -35.43, 0.99999, 80, -77, -36.82, 0.00001, 1, 79, + 26.13, -21.08, 1, 2, 81, -6.2, 33.38, 0.05515, 79, -4.47, -4.66, + 0.94485, 2, 81, -1.55, 4.83, 0.95244, 79, -22.48, -27.3, 0.04756, + 2, 81, 29.19, 30.36, 0.99962, 82, -87.74, 33.14, 0.00038, 2, 81, + 57.96, 50.03, 0.92011, 82, -58.22, 51.68, 0.07989, 2, 81, 83.91, + 62.66, 0.6624, 82, -31.8, 63.29, 0.3376, 2, 81, 110.41, 71.99, + 0.32881, 82, -4.97, 71.59, 0.67119, 2, 81, 139.51, 81.86, 0.09463, + 82, 24.49, 80.32, 0.90537, 2, 81, 173.5, 89.91, 0.01114, 82, + 58.78, 87.05, 0.98886, 2, 81, 194.49, 75.17, 0.00054, 82, 79.18, + 71.5, 0.99946, 1, 82, 88.8, 51.02, 1, 1, 82, 81.38, 23.64, 1, 2, + 81, 172.21, -29.17, 0.00082, 82, 52.86, -31.9, 0.99918, 2, 81, + 152.8, -54.94, 0.05605, 82, 32.46, -56.89, 0.94395, 2, 81, 135.86, + -57.98, 0.133, 82, 15.42, -59.27, 0.867, 2, 81, 108.64, -55.68, + 0.41539, 82, -11.69, -55.92, 0.58461, 2, 81, 79.78, -45.13, + 0.83483, 82, -40.12, -44.26, 0.16517, 1, 81, 40.57, -27.75, 1, 1, + 81, 4.13, -8.49, 1, 1, 81, -3.82, -4.28, 1 + ], + "hull": 37, + "edges": [ + 68, 66, 66, 64, 64, 62, 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, + 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, + 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, + 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, + 2, 0, 0, 72, 72, 70, 70, 68 + ], + "width": 524, + "height": 450 + } + }, + "面部/发饰3": { + "发饰3": { + "type": "mesh", + "uvs": [ + 0.44686, 0.15923, 0.47248, 0.1753, 0.51801, 0.268, 0.5432, + 0.36331, 0.55483, 0.45709, 0.56548, 0.49656, 0.58195, 0.56626, + 0.59842, 0.63428, 0.6052, 0.67543, 0.60907, 0.70272, 0.61876, + 0.74261, 0.62361, 0.79174, 0.62845, 0.8375, 0.41532, 0.84002, + 0.41339, 0.78334, 0.41629, 0.74429, 0.42017, 0.7023, 0.42114, + 0.68131, 0.42017, 0.63386, 0.42017, 0.56206, 0.41974, 0.49965, + 0.41393, 0.4606, 0.39939, 0.36361, 0.37905, 0.2767, 0.36839, + 0.1966, 0.36646, 0.17686, 0.39358, 0.16007 + ], + "triangles": [ + 13, 11, 12, 10, 11, 14, 14, 15, 10, 15, 9, 10, 15, 16, 9, 11, 13, + 14, 16, 17, 9, 17, 8, 9, 17, 7, 8, 17, 18, 7, 18, 6, 7, 18, 19, 6, + 19, 5, 6, 19, 20, 5, 20, 4, 5, 20, 21, 4, 21, 3, 4, 21, 22, 3, 3, + 22, 2, 22, 23, 2, 2, 24, 1, 26, 1, 25, 26, 0, 1, 24, 2, 23, 1, 24, + 25 + ], + "vertices": [ + 1, 76, -18.6, 10.71, 1, 1, 76, -6.03, 17.68, 1, 1, 76, 63.29, + 25.44, 1, 1, 76, 133.9, 26.56, 1, 2, 76, 202.95, 23.47, 0.88075, + 77, -28.51, 23.47, 0.11925, 2, 76, 232.19, 24.01, 0.15199, 77, + 0.66, 25.67, 0.84801, 1, 77, 52.13, 28.79, 1, 1, 77, 102.37, + 31.97, 1, 2, 77, 132.72, 32.88, 0.82424, 78, -21.79, 33.06, + 0.17576, 2, 77, 152.84, 33.29, 0.36308, 78, -1.69, 33.89, 0.63692, + 2, 77, 182.3, 35.16, 0.01414, 78, 27.73, 36.39, 0.98586, 1, 78, + 63.91, 37.2, 1, 1, 78, 97.62, 38.07, 1, 1, 78, 98.1, -29.95, 1, 1, + 78, 56.37, -29.72, 1, 1, 78, 27.66, -28.21, 1, 2, 77, 150.04, + -26.91, 0.34875, 78, -3.21, -26.35, 0.65125, 2, 77, 134.61, + -25.96, 0.80934, 78, -18.66, -25.73, 0.19066, 1, 77, 99.71, + -24.83, 1, 1, 77, 46.91, -22.64, 1, 2, 76, 229.9, -22.48, 0.11904, + 77, 1.01, -20.88, 0.88096, 2, 76, 201.11, -21.51, 0.89647, 77, + -27.78, -21.54, 0.10353, 1, 76, 129.62, -19.12, 1, 1, 76, 65.32, + -19.3, 1, 1, 76, 6.32, -16.9, 1, 1, 76, -8.2, -16.09, 1, 1, 76, + -19.65, -6.26, 1 + ], + "hull": 27, + "edges": [ + 0, 52, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, + 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, + 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, + 2, 2, 0 + ], + "width": 319, + "height": 736 + } + }, + "面部/鼻子": { + "鼻子": { + "type": "mesh", + "uvs": [ + 0.49334, 0.47277, 0.48457, 0.50284, 0.48183, 0.527, 0.50429, + 0.52861, 0.51525, 0.50391, 0.52127, 0.4733 + ], + "triangles": [2, 1, 3, 3, 1, 4, 1, 0, 4, 4, 0, 5], + "vertices": [ + 2, 154, -26.87, -513.84, 0.57905, 155, -38.3, -896.88, 0.42095, 2, + 154, -19.3, -516.23, 0.58381, 155, -45.87, -894.48, 0.41619, 2, + 154, -13.18, -517.08, 0.57905, 155, -51.99, -893.63, 0.42095, 2, + 154, -12.61, -511.51, 0.57905, 155, -52.56, -899.21, 0.42095, 2, + 154, -18.81, -508.6, 0.58381, 155, -46.36, -902.11, 0.41619, 2, + 154, -26.54, -506.89, 0.57905, 155, -38.63, -903.83, 0.42095 + ], + "hull": 6, + "edges": [0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10], + "width": 249, + "height": 254 + } + } + } + } + ], + "animations": { + "emoji_0": { + "attachments": { + "default": { + "面部/E眼珠": { + "E眼珠": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 52.51465, -1.46021, -52.51465, 1.46558, 54.86951, -1.52295, + -54.86951, 1.53125, 56.29456, -1.56958, -56.29456, 1.57092, + -56.29028, 1.57092, -9.59094, 0.27393, 9.59094, -0.26758, + 9.59521, -0.26562, -8.89258, 0.25073, 8.89258, -0.24817, + -8.06958, 0.22729, 8.06958, -0.22522, 7.53223, -0.21033, + 7.53259, -0.21033, -51.14709, 1.42725, -51.14673, 1.42908 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼皮": { + "E眼皮": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 137.39856, -12.19043, -137.38977, 12.19995, 136.26636, + -14.0481, -136.2583, 14.05774, 130.17883, -9.82422, + -130.16809, 9.83911, 120.59741, -4.97461, -120.5885, + 4.98413, 110.92517, -3.35913, -110.91858, 3.36487, + 110.89526, -14.146, -110.88647, 14.15912, 125.36035, + -18.05859, -125.35144, 18.07147, 136.71655, -17.29346, + -136.70752, 17.30872, 142.22144, -13.40356, -142.2135, + 13.41406, 141.86304, -6.91724, -141.85461, 6.92682, + 135.27368, -1.33228, -135.26404, 1.34534, 135.27368, + -1.33228, -135.26404, 1.34534, 141.86304, -6.91724, + -141.85461, 6.92682, 142.22144, -13.40356, -142.2135, + 13.41406, 137.22522, -18.38892, -137.21655, 18.40234, + 125.55408, -20.76562, -125.54565, 20.77563, 110.89526, + -14.146, -110.88647, 14.15912, 110.15381, -1.98755, + -110.14746, 1.99402, 121.18909, -3.10352, -121.18079, + 3.11169, 130.26184, -6.85864, -130.2511, 6.8728, 137.0758, + -14.06982, -137.06726, 14.08026, 137.39856, -12.19043, + -137.38977, 12.19995, 133.72083, -8.57812, -133.71204, + 8.58875, 133.72083, -8.57812, -133.71204, 8.58875 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼角": { + "E眼角": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 45.84998, 17.95679, -45.84937, -17.94775, -1.01562, 2.57153, + 1.01672, -2.56812, -9.00964, 2.06909, 9.01233, -2.06543, + 2.25391, -14.1062, -2.25159, 14.11389, 0.39331, -15.75049, + -0.39185, 15.75653, 43.91858, -32.10913, -43.9176, 32.11072, + 45.85547, -6.12134, -45.85339, 6.12451, 42.25269, 6.08032, + -42.25244, -6.07642 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E睫毛": { + "E睫毛": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 39.875, -22.52319, -39.87207, 22.53229, 39.16797, 21.89453, + -39.16541, -21.88306, 39.50671, 47.97705, -39.50293, + -47.96594, 40.21143, 73.26733, -40.20923, -73.25946, + 42.45679, 56.06738, -42.45483, -56.06171, 53.16675, + 35.13135, -53.16479, -35.12262, 64.99072, 26.23169, + -64.98901, -26.2254, 83.67139, 39.73169, -83.66895, + -39.72369, 104.9447, 48.4834, -104.9425, -48.47632, + 101.58179, 39.61865, -101.57959, -39.61353, 101.24561, + 27.55786, -101.24353, -27.5498, 108.4436, 20.34717, + -108.44165, -20.33942, 123.67395, 21.8689, -123.67139, + -21.86182, 134.45032, 17.28516, -134.44788, -17.27692, + 145.42151, 19.7041, -145.42004, -19.6972, 150.41687, + 17.23193, -150.41345, -17.22076, 147.86353, 9.50903, + -147.86108, -9.50348, 136.4049, 3.5979, -136.40259, + -3.59241, 119.10071, 11.48071, -119.09729, -11.47418, + 101.94568, -3.22607, -101.94153, 3.23499, 85.47095, + -7.43945, -85.46777, 7.44849, 77.59192, 3.2937, -77.58875, + -3.28656, 88.03503, 0.6709, -88.0304, -0.6582, 102.24792, + 7.66748, -102.24548, -7.66107, 119.01355, 8.36792, + -119.01111, -8.36139, 133.5299, -1.77002, -133.52637, + 1.77966, 140.33826, -8.97314, -140.33496, 8.97931, + 141.88245, -23.42456, -141.87878, 23.43127, 135.69861, + -21.69434, -135.69641, 21.70135, 123.40784, -29.53027, + -123.4054, 29.5365, 116.69739, -18.82617, -116.69385, + 18.83484, 112.19922, -26.49072, -112.19617, 26.49762, + 109.86328, -40.44385, -109.8595, 40.45209, 96.4928, + -31.11279, -96.48975, 31.12219, 85.28613, -14.0542, + -85.28308, 14.06384, 69.16895, -19.44482, -69.16565, + 19.45575, 63.99097, -23.58521, -63.98718, 23.59467, + 60.52039, -22.3208, -60.51733, 22.32959, 59.70959, + -23.46606, -59.70691, 23.47534, 61.62463, -10.66821, + -61.62219, 10.67719, 67.28955, -3.03979, -67.28723, 3.04651, + 72.01575, 12.79492, -72.01294, -12.78833, 91.33167, 7.19629, + -91.32825, -7.18634, 106.07458, 5.22656, -106.07227, + -5.21753, 139.55261, 18.69873, -139.5503, -18.69244, + 140.98987, 14.37695, -140.98694, -14.36841, 147.21643, + 14.20361, -147.2135, -14.1947, 147.6261, 14.96826, + -147.62427, -14.96246, 138.10205, 8.61255, -138.10034, + -8.60767, 121.10925, -0.25757, -121.10706, 0.26471, + 103.20874, 0.24097, -103.20703, -0.23529, 83.7417, 0.39624, + -83.73901, -0.38855, 72.12183, 2.66699, -72.11987, -2.66016, + 82.04492, -4.61694, -82.04138, 4.62689, 104.96997, -6.42822, + -104.96777, 6.43451, 127.06348, -10.16064, -127.06152, + 10.16669, 143.11609, -7.10205, -143.11365, 7.10992, + 151.24438, -8.88647, -151.24158, 8.89435, 149.42712, + -18.18384, -149.42456, 18.19, 137.64612, -21.7439, + -137.64172, 21.75604, 136.28186, -28.71875, -136.27893, + 28.72754, 104.58411, -6.40698, -104.57825, 6.42468, + 80.34741, -9.63257, -80.34363, 9.64209, 49.46252, -27.84937, + -49.45935, 27.86285 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E脸1": { + "E脸1": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "offset": 316, + "vertices": [ + 64.0658, 3.42773, -64.06067, -3.42438, 14.77075, 2.90552, + -14.76904, -2.90454, -7.6272, -1.6792, 7.62866, 1.68274, + -20.02881, -4.64722, 20.03125, 4.65344, -20.43542, -2.26611, + 20.43896, 2.27307, -8.62683, -3.54541, 8.62842, 3.55029, + 16.68982, -13.25366, -16.68774, 13.25885, 86.77539, + -14.73633, -86.77258, 14.74091, 125.91724, -4.4563, + -125.91284, 4.46118, 147.70947, -4.5918, -147.70459, + 4.59528, 145.682, -9.27368, -145.68005, 9.27747, 123.79651, + -12.45337, -123.79541, 12.45728, 144.9342, -2.146, + -144.9303, 2.14911, 145.78857, -5.48413, -145.78491, + 5.48969, 127.85071, -3.08813, -127.84644, 3.09381, 74.70667, + 11.18604, -74.70203, -11.18268, 4.05273, 9.36548, -4.05115, + -9.36346, -17.04321, 0.47876, 17.04529, -0.47534, -11.84839, + -0.14014, 11.85022, 0.14349, -8.54797, -0.70654, 8.54932, + 0.70947, -2.36694, 0.06714, 2.36755, -0.06598, 7.57617, + -0.21069, -7.57495, 0.21124, 65.23389, -5.60791, -65.2312, + 5.6109, 116.88232, -5.62695, -116.87708, 5.63043 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333, "curve": "stepped" }, + { "time": 3.3333 } + ] + } + } + } + } + }, + "emoji_1": { + "slots": { + "附件/星星1": { "rgba": [{ "color": "ffffffff" }] }, + "附件/星星2": { "rgba": [{ "color": "ffffffff" }] }, + "附件/星星3": { "rgba": [{ "color": "ffffffff" }] }, + "附件/星星4": { "rgba": [{ "color": "ffffffff" }] } + }, + "bones": { + "星星1": { + "scale": [ + { "curve": [0.112, 1, 0.224, 0.707, 0.112, 1, 0.224, 0.707] }, + { + "time": 0.3333, + "x": 0.707, + "y": 0.707, + "curve": [0.446, 0.707, 0.556, 1, 0.446, 0.707, 0.556, 1] + }, + { + "time": 0.6667, + "curve": [0.779, 1, 0.89, 0.707, 0.779, 1, 0.89, 0.707] + }, + { + "time": 1, + "x": 0.707, + "y": 0.707, + "curve": [1.113, 0.707, 1.222, 1, 1.113, 0.707, 1.222, 1] + }, + { + "time": 1.3333, + "curve": [1.445, 1, 1.557, 0.707, 1.445, 1, 1.557, 0.707] + }, + { + "time": 1.6667, + "x": 0.707, + "y": 0.707, + "curve": [1.779, 0.707, 1.889, 1, 1.779, 0.707, 1.889, 1] + }, + { + "time": 2, + "curve": [2.112, 1, 2.224, 0.707, 2.112, 1, 2.224, 0.707] + }, + { + "time": 2.3333, + "x": 0.707, + "y": 0.707, + "curve": [2.446, 0.707, 2.556, 1, 2.446, 0.707, 2.556, 1] + }, + { + "time": 2.6667, + "curve": [2.779, 1, 2.89, 0.707, 2.779, 1, 2.89, 0.707] + }, + { + "time": 3, + "x": 0.707, + "y": 0.707, + "curve": [3.113, 0.707, 3.222, 1, 3.113, 0.707, 3.222, 1] + }, + { "time": 3.3333 } + ] + }, + "星星2": { + "scale": [ + { + "x": 0.751, + "y": 0.751, + "curve": [0.068, 0.834, 0.13, 1, 0.068, 0.834, 0.13, 1] + }, + { + "time": 0.2, + "curve": [0.294, 1, 0.375, 0.707, 0.294, 1, 0.375, 0.707] + }, + { + "time": 0.4667, + "x": 0.707, + "y": 0.707, + "curve": [0.561, 0.707, 0.674, 1, 0.561, 0.707, 0.674, 1] + }, + { + "time": 0.7667, + "curve": [0.86, 1, 0.942, 0.707, 0.86, 1, 0.942, 0.707] + }, + { + "time": 1.0333, + "x": 0.707, + "y": 0.707, + "curve": [1.128, 0.707, 1.207, 1, 1.128, 0.707, 1.207, 1] + }, + { + "time": 1.3, + "curve": [1.394, 1, 1.508, 0.707, 1.394, 1, 1.508, 0.707] + }, + { + "time": 1.6, + "x": 0.707, + "y": 0.707, + "curve": [1.694, 0.707, 1.774, 1, 1.694, 0.707, 1.774, 1] + }, + { + "time": 1.8667, + "curve": [1.96, 1, 2.075, 0.707, 1.96, 1, 2.075, 0.707] + }, + { + "time": 2.1667, + "x": 0.707, + "y": 0.707, + "curve": [2.261, 0.707, 2.34, 1, 2.261, 0.707, 2.34, 1] + }, + { + "time": 2.4333, + "curve": [2.527, 1, 2.608, 0.707, 2.527, 1, 2.608, 0.707] + }, + { + "time": 2.7, + "x": 0.707, + "y": 0.707, + "curve": [2.794, 0.707, 2.907, 1, 2.794, 0.707, 2.907, 1] + }, + { + "time": 3, + "curve": [3.094, 1, 3.175, 0.707, 3.094, 1, 3.175, 0.707] + }, + { + "time": 3.2667, + "x": 0.707, + "y": 0.707, + "curve": [3.29, 0.707, 3.312, 0.725, 3.29, 0.707, 3.312, 0.725] + }, + { "time": 3.3333, "x": 0.751, "y": 0.751 } + ] + }, + "星星3": { + "scale": [ + { + "x": 0.769, + "y": 0.769, + "curve": [0.079, 0.856, 0.156, 1, 0.079, 0.856, 0.156, 1] + }, + { + "time": 0.2333, + "curve": [0.345, 1, 0.457, 0.707, 0.345, 1, 0.457, 0.707] + }, + { + "time": 0.5667, + "x": 0.707, + "y": 0.707, + "curve": [0.679, 0.707, 0.789, 1, 0.679, 0.707, 0.789, 1] + }, + { + "time": 0.9, + "curve": [1.012, 1, 1.124, 0.707, 1.012, 1, 1.124, 0.707] + }, + { + "time": 1.2333, + "x": 0.707, + "y": 0.707, + "curve": [1.346, 0.707, 1.456, 1, 1.346, 0.707, 1.456, 1] + }, + { + "time": 1.5667, + "curve": [1.679, 1, 1.79, 0.707, 1.679, 1, 1.79, 0.707] + }, + { + "time": 1.9, + "x": 0.707, + "y": 0.707, + "curve": [2.013, 0.707, 2.122, 1, 2.013, 0.707, 2.122, 1] + }, + { + "time": 2.2333, + "curve": [2.345, 1, 2.457, 0.707, 2.345, 1, 2.457, 0.707] + }, + { + "time": 2.5667, + "x": 0.707, + "y": 0.707, + "curve": [2.679, 0.707, 2.789, 1, 2.679, 0.707, 2.789, 1] + }, + { + "time": 2.9, + "curve": [3.012, 1, 3.124, 0.707, 3.012, 1, 3.124, 0.707] + }, + { + "time": 3.2333, + "x": 0.707, + "y": 0.707, + "curve": [3.267, 0.707, 3.301, 0.732, 3.267, 0.707, 3.301, 0.732] + }, + { "time": 3.3333, "x": 0.769, "y": 0.769 } + ] + }, + "星星4": { + "scale": [ + { + "x": 0.752, + "y": 0.752, + "curve": [0.068, 0.834, 0.131, 1, 0.068, 0.834, 0.131, 1] + }, + { + "time": 0.2, + "curve": [0.293, 1, 0.375, 0.707, 0.293, 1, 0.375, 0.707] + }, + { + "time": 0.4667, + "x": 0.707, + "y": 0.707, + "curve": [0.561, 0.707, 0.674, 1, 0.561, 0.707, 0.674, 1] + }, + { + "time": 0.7667, + "curve": [0.86, 1, 0.942, 0.707, 0.86, 1, 0.942, 0.707] + }, + { + "time": 1.0333, + "x": 0.707, + "y": 0.707, + "curve": [1.127, 0.707, 1.207, 1, 1.127, 0.707, 1.207, 1] + }, + { + "time": 1.3, + "curve": [1.393, 1, 1.508, 0.707, 1.393, 1, 1.508, 0.707] + }, + { + "time": 1.6, + "x": 0.707, + "y": 0.707, + "curve": [1.694, 0.707, 1.774, 1, 1.694, 0.707, 1.774, 1] + }, + { + "time": 1.8667, + "curve": [1.96, 1, 2.042, 0.707, 1.96, 1, 2.042, 0.707] + }, + { + "time": 2.1333, + "x": 0.707, + "y": 0.707, + "curve": [2.227, 0.707, 2.341, 1, 2.227, 0.707, 2.341, 1] + }, + { + "time": 2.4333, + "curve": [2.527, 1, 2.608, 0.707, 2.527, 1, 2.608, 0.707] + }, + { + "time": 2.7, + "x": 0.707, + "y": 0.707, + "curve": [2.794, 0.707, 2.874, 1, 2.794, 0.707, 2.874, 1] + }, + { + "time": 2.9667, + "curve": [3.06, 1, 3.175, 0.707, 3.06, 1, 3.175, 0.707] + }, + { + "time": 3.2667, + "x": 0.707, + "y": 0.707, + "curve": [3.29, 0.707, 3.312, 0.725, 3.29, 0.707, 3.312, 0.725] + }, + { "time": 3.3333, "x": 0.752, "y": 0.752 } + ] + } + }, + "attachments": { + "default": { + "前发/E眉毛": { + "E眉毛": { + "deform": [ + { + "vertices": [ + -21.27917, -14.23437, 21.28027, 14.23914, -7.27673, + -15.99194, 7.27673, 15.99615, 8.93408, -8.63721, -8.93054, + 8.64191, 25.43542, -4.80298, -25.43274, 4.80859, 34.72498, + 0.38208, -34.72339, -0.37762, 45.19067, 3.93628, -45.18933, + -3.93213, 48.12427, 6.14185, -48.12134, -6.13367, 45.92236, + 0.01318, -45.92004, -0.00708, 41.5697, -4.1228, -41.56738, + 4.12811, 54.28381, 4.42871, -54.28223, -4.42041, 56.70154, + -1.95068, -56.70007, 1.95361, 57.75171, -4.20483, -57.75024, + 4.20844, 56.54626, -7.50879, -56.54517, 7.51373, 53.65344, + -4.83228, -53.65222, 4.83606, 49.51416, -6.94092, -49.51282, + 6.94635, 42.58496, -2.66992, -42.58423, 2.67236, 31.85742, + -1.62646, -31.85583, 1.63116, 17.80286, -0.12329, -17.802, + 0.12585, 1.11206, -0.03052, -1.11194, 0.03113, -14.052, + 1.50903, 14.05444, -1.50452, -30.98816, 6.06348, 30.99084, + -6.05762, -44.30127, 7.54663, 44.30347, -7.54205, -30.98816, + 6.06348, 30.99084, -6.05762, -14.052, 1.50903, 14.05444, + -1.50452, 1.11206, -0.03052, -1.11194, 0.03113, 17.80286, + -0.12329, -17.802, 0.12585, 31.85742, -1.62646, -31.85583, + 1.63116, 42.58496, -2.66992, -42.58423, 2.67236, 49.51416, + -6.94092, -49.51282, 6.94635, 53.65344, -4.83228, -53.65222, + 4.83606, 56.54626, -7.50879, -56.54517, 7.51373, 57.75171, + -4.20483, -57.75024, 4.20844, 56.70154, -1.95068, -56.70007, + 1.95361, 54.28381, 4.42871, -54.28223, -4.42041, 43.12439, + -4.36157, -43.1217, 4.36658, 47.48743, 0.16357, -47.48547, + -0.15863, 51.22803, 5.46875, -51.22534, -5.46149, 46.3717, + 4.29419, -46.37048, -4.28931, 35.64612, -1.59546, -35.64355, + 1.59998, 25.35486, -7.72681, -25.35095, 7.73383, 11.46948, + -8.70728, -11.46558, 8.71271, -5.11487, -15.4646, 5.11511, + 15.47095, -21.92444, -16.36475, 21.92566, 16.36823, + -42.27625, -12.91211, 42.27747, 12.9165 + ] + } + ] + } + }, + "面部/E眼珠": { + "E眼珠": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 52.51465, -1.46021, -52.51465, 1.46558, 54.86951, -1.52295, + -54.86951, 1.53125, 56.29456, -1.56958, -56.29456, 1.57092, + -56.29028, 1.57092, -9.59094, 0.27393, 9.59094, -0.26758, + 9.59521, -0.26562, -8.89258, 0.25073, 8.89258, -0.24817, + -8.06958, 0.22729, 8.06958, -0.22522, 7.53223, -0.21033, + 7.53259, -0.21033, -51.14709, 1.42725, -51.14673, 1.42908 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼皮": { + "E眼皮": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 137.39856, -12.19043, -137.38977, 12.19995, 136.26636, + -14.0481, -136.2583, 14.05774, 130.17883, -9.82422, + -130.16809, 9.83911, 120.59741, -4.97461, -120.5885, + 4.98413, 110.92517, -3.35913, -110.91858, 3.36487, + 110.89526, -14.146, -110.88647, 14.15912, 125.36035, + -18.05859, -125.35144, 18.07147, 136.71655, -17.29346, + -136.70752, 17.30872, 142.22144, -13.40356, -142.2135, + 13.41406, 141.86304, -6.91724, -141.85461, 6.92682, + 135.27368, -1.33228, -135.26404, 1.34534, 135.27368, + -1.33228, -135.26404, 1.34534, 141.86304, -6.91724, + -141.85461, 6.92682, 142.22144, -13.40356, -142.2135, + 13.41406, 137.22522, -18.38892, -137.21655, 18.40234, + 125.55408, -20.76562, -125.54565, 20.77563, 110.89526, + -14.146, -110.88647, 14.15912, 110.15381, -1.98755, + -110.14746, 1.99402, 121.18909, -3.10352, -121.18079, + 3.11169, 130.26184, -6.85864, -130.2511, 6.8728, 137.0758, + -14.06982, -137.06726, 14.08026, 137.39856, -12.19043, + -137.38977, 12.19995, 133.72083, -8.57812, -133.71204, + 8.58875, 133.72083, -8.57812, -133.71204, 8.58875 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼角": { + "E眼角": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 45.84998, 17.95679, -45.84937, -17.94775, -1.01562, 2.57153, + 1.01672, -2.56812, -9.00964, 2.06909, 9.01233, -2.06543, + 2.25391, -14.1062, -2.25159, 14.11389, 0.39331, -15.75049, + -0.39185, 15.75653, 43.91858, -32.10913, -43.9176, 32.11072, + 45.85547, -6.12134, -45.85339, 6.12451, 42.25269, 6.08032, + -42.25244, -6.07642 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E睫毛": { + "E睫毛": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 39.875, -22.52319, -39.87207, 22.53229, 39.16797, 21.89453, + -39.16541, -21.88306, 39.50671, 47.97705, -39.50293, + -47.96594, 40.21143, 73.26733, -40.20923, -73.25946, + 42.45679, 56.06738, -42.45483, -56.06171, 53.16675, + 35.13135, -53.16479, -35.12262, 64.99072, 26.23169, + -64.98901, -26.2254, 83.67139, 39.73169, -83.66895, + -39.72369, 104.9447, 48.4834, -104.9425, -48.47632, + 101.58179, 39.61865, -101.57959, -39.61353, 101.24561, + 27.55786, -101.24353, -27.5498, 108.4436, 20.34717, + -108.44165, -20.33942, 123.67395, 21.8689, -123.67139, + -21.86182, 134.45032, 17.28516, -134.44788, -17.27692, + 145.42151, 19.7041, -145.42004, -19.6972, 150.41687, + 17.23193, -150.41345, -17.22076, 147.86353, 9.50903, + -147.86108, -9.50348, 136.4049, 3.5979, -136.40259, + -3.59241, 119.10071, 11.48071, -119.09729, -11.47418, + 101.94568, -3.22607, -101.94153, 3.23499, 85.47095, + -7.43945, -85.46777, 7.44849, 77.59192, 3.2937, -77.58875, + -3.28656, 88.03503, 0.6709, -88.0304, -0.6582, 102.24792, + 7.66748, -102.24548, -7.66107, 119.01355, 8.36792, + -119.01111, -8.36139, 133.5299, -1.77002, -133.52637, + 1.77966, 140.33826, -8.97314, -140.33496, 8.97931, + 141.88245, -23.42456, -141.87878, 23.43127, 135.69861, + -21.69434, -135.69641, 21.70135, 123.40784, -29.53027, + -123.4054, 29.5365, 116.69739, -18.82617, -116.69385, + 18.83484, 112.19922, -26.49072, -112.19617, 26.49762, + 109.86328, -40.44385, -109.8595, 40.45209, 96.4928, + -31.11279, -96.48975, 31.12219, 85.28613, -14.0542, + -85.28308, 14.06384, 69.16895, -19.44482, -69.16565, + 19.45575, 63.99097, -23.58521, -63.98718, 23.59467, + 60.52039, -22.3208, -60.51733, 22.32959, 59.70959, + -23.46606, -59.70691, 23.47534, 61.62463, -10.66821, + -61.62219, 10.67719, 67.28955, -3.03979, -67.28723, 3.04651, + 72.01575, 12.79492, -72.01294, -12.78833, 91.33167, 7.19629, + -91.32825, -7.18634, 106.07458, 5.22656, -106.07227, + -5.21753, 139.55261, 18.69873, -139.5503, -18.69244, + 140.98987, 14.37695, -140.98694, -14.36841, 147.21643, + 14.20361, -147.2135, -14.1947, 147.6261, 14.96826, + -147.62427, -14.96246, 138.10205, 8.61255, -138.10034, + -8.60767, 121.10925, -0.25757, -121.10706, 0.26471, + 103.20874, 0.24097, -103.20703, -0.23529, 83.7417, 0.39624, + -83.73901, -0.38855, 72.12183, 2.66699, -72.11987, -2.66016, + 82.04492, -4.61694, -82.04138, 4.62689, 104.96997, -6.42822, + -104.96777, 6.43451, 127.06348, -10.16064, -127.06152, + 10.16669, 143.11609, -7.10205, -143.11365, 7.10992, + 151.24438, -8.88647, -151.24158, 8.89435, 149.42712, + -18.18384, -149.42456, 18.19, 137.64612, -21.7439, + -137.64172, 21.75604, 136.28186, -28.71875, -136.27893, + 28.72754, 104.58411, -6.40698, -104.57825, 6.42468, + 80.34741, -9.63257, -80.34363, 9.64209, 49.46252, -27.84937, + -49.45935, 27.86285 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E脸1": { + "E脸1": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "offset": 316, + "vertices": [ + 64.0658, 3.42773, -64.06067, -3.42438, 14.77075, 2.90552, + -14.76904, -2.90454, -7.6272, -1.6792, 7.62866, 1.68274, + -20.02881, -4.64722, 20.03125, 4.65344, -20.43542, -2.26611, + 20.43896, 2.27307, -8.62683, -3.54541, 8.62842, 3.55029, + 16.68982, -13.25366, -16.68774, 13.25885, 86.77539, + -14.73633, -86.77258, 14.74091, 125.91724, -4.4563, + -125.91284, 4.46118, 147.70947, -4.5918, -147.70459, + 4.59528, 145.682, -9.27368, -145.68005, 9.27747, 123.79651, + -12.45337, -123.79541, 12.45728, 144.9342, -2.146, + -144.9303, 2.14911, 145.78857, -5.48413, -145.78491, + 5.48969, 127.85071, -3.08813, -127.84644, 3.09381, 74.70667, + 11.18604, -74.70203, -11.18268, 4.05273, 9.36548, -4.05115, + -9.36346, -17.04321, 0.47876, 17.04529, -0.47534, -11.84839, + -0.14014, 11.85022, 0.14349, -8.54797, -0.70654, 8.54932, + 0.70947, -2.36694, 0.06714, 2.36755, -0.06598, 7.57617, + -0.21069, -7.57495, 0.21124, 65.23389, -5.60791, -65.2312, + 5.6109, 116.88232, -5.62695, -116.87708, 5.63043 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + } + } + } + }, + "emoji_2": { + "slots": { + "附件/可爱花朵": { "rgba": [{ "color": "ffffffff" }] }, + "附件/脸红": { "rgba": [{ "color": "ffffffff" }] }, + "面部/E眼珠": { "attachment": [{}] }, + "面部/E眼白": { "attachment": [{}] }, + "面部/E眼皮": { "attachment": [{}] }, + "面部/E眼角": { "attachment": [{}] }, + "面部/E睫毛": { "attachment": [{}] }, + "面部/E脸1": { "attachment": [{ "name": "E脸2" }] }, + "面部/M嘴巴": { "attachment": [{ "name": "M笑口" }] }, + "面部/X眼": { "attachment": [{ "name": "X眼" }] } + }, + "bones": { + "可爱花朵9": { + "scale": [ + { + "x": 0.601, + "y": 0.601, + "curve": [0.111, 0.601, 0.222, 1, 0.111, 0.601, 0.222, 1] + }, + { + "time": 0.3333, + "curve": [0.444, 1, 0.556, 0.601, 0.444, 1, 0.556, 0.601] + }, + { + "time": 0.6667, + "x": 0.601, + "y": 0.601, + "curve": [0.778, 0.601, 0.889, 1, 0.778, 0.601, 0.889, 1] + }, + { + "time": 1, + "curve": [1.111, 1, 1.222, 0.601, 1.111, 1, 1.222, 0.601] + }, + { + "time": 1.3333, + "x": 0.601, + "y": 0.601, + "curve": [1.444, 0.601, 1.556, 1, 1.444, 0.601, 1.556, 1] + }, + { + "time": 1.6667, + "curve": [1.778, 1, 1.889, 0.601, 1.778, 1, 1.889, 0.601] + }, + { + "time": 2, + "x": 0.601, + "y": 0.601, + "curve": [2.111, 0.601, 2.222, 1, 2.111, 0.601, 2.222, 1] + }, + { + "time": 2.3333, + "curve": [2.444, 1, 2.556, 0.601, 2.444, 1, 2.556, 0.601] + }, + { + "time": 2.6667, + "x": 0.601, + "y": 0.601, + "curve": [2.778, 0.601, 2.889, 1, 2.778, 0.601, 2.889, 1] + }, + { + "time": 3, + "curve": [3.111, 1, 3.222, 0.601, 3.111, 1, 3.222, 0.601] + }, + { "time": 3.3333, "x": 0.601, "y": 0.601 } + ] + }, + "可爱花朵3": { + "translate": [ + { + "x": 35.67, + "y": 38.46, + "curve": [0.111, 35.67, 0.222, 0, 0.111, 38.46, 0.222, 0] + }, + { + "time": 0.3333, + "curve": [0.444, 0, 0.556, 35.67, 0.444, 0, 0.556, 38.46] + }, + { + "time": 0.6667, + "x": 35.67, + "y": 38.46, + "curve": [0.778, 35.67, 0.889, 0, 0.778, 38.46, 0.889, 0] + }, + { + "time": 1, + "curve": [1.111, 0, 1.222, 35.67, 1.111, 0, 1.222, 38.46] + }, + { + "time": 1.3333, + "x": 35.67, + "y": 38.46, + "curve": [1.444, 35.67, 1.556, 0, 1.444, 38.46, 1.556, 0] + }, + { + "time": 1.6667, + "curve": [1.778, 0, 1.889, 35.67, 1.778, 0, 1.889, 38.46] + }, + { + "time": 2, + "x": 35.67, + "y": 38.46, + "curve": [2.111, 35.67, 2.222, 0, 2.111, 38.46, 2.222, 0] + }, + { + "time": 2.3333, + "curve": [2.444, 0, 2.556, 35.67, 2.444, 0, 2.556, 38.46] + }, + { + "time": 2.6667, + "x": 35.67, + "y": 38.46, + "curve": [2.778, 35.67, 2.889, 0, 2.778, 38.46, 2.889, 0] + }, + { + "time": 3, + "curve": [3.1, 0, 3.201, 29.05, 3.1, 0, 3.201, 31.32] + }, + { + "time": 3.3, + "x": 34.67, + "y": 37.38, + "curve": [3.312, 35.28, 3.322, 35.67, 3.312, 38.03, 3.322, 38.46] + }, + { "time": 3.3333, "x": 35.67, "y": 38.46 } + ] + }, + "可爱花朵8": { + "translate": [ + { + "x": 7.57, + "y": -35.8, + "curve": [0.023, 8.09, 0.045, 8.45, 0.023, -38.29, 0.045, -39.96] + }, + { + "time": 0.0667, + "x": 8.45, + "y": -39.96, + "curve": [0.178, 8.45, 0.289, 0, 0.178, -39.96, 0.289, 0] + }, + { + "time": 0.4, + "curve": [0.511, 0, 0.622, 8.45, 0.511, 0, 0.622, -39.96] + }, + { + "time": 0.7333, + "x": 8.45, + "y": -39.96, + "curve": [0.844, 8.45, 0.956, 0, 0.844, -39.96, 0.956, 0] + }, + { + "time": 1.0667, + "curve": [1.178, 0, 1.289, 8.45, 1.178, 0, 1.289, -39.96] + }, + { + "time": 1.4, + "x": 8.45, + "y": -39.96, + "curve": [1.511, 8.45, 1.622, 0, 1.511, -39.96, 1.622, 0] + }, + { + "time": 1.7333, + "curve": [1.844, 0, 1.956, 8.45, 1.844, 0, 1.956, -39.96] + }, + { + "time": 2.0667, + "x": 8.45, + "y": -39.96, + "curve": [2.178, 8.45, 2.289, 0, 2.178, -39.96, 2.289, 0] + }, + { + "time": 2.4, + "curve": [2.511, 0, 2.622, 8.45, 2.511, 0, 2.622, -39.96] + }, + { + "time": 2.7333, + "x": 8.45, + "y": -39.96, + "curve": [2.844, 8.45, 2.956, 0, 2.844, -39.96, 2.956, 0] + }, + { + "time": 3.0667, + "curve": [3.156, 0, 3.245, 5.42, 3.156, 0, 3.245, -25.66] + }, + { "time": 3.3333, "x": 7.57, "y": -35.8 } + ] + }, + "可爱花朵2": { + "scale": [ + { + "x": 0.687, + "y": 0.687, + "curve": [0.034, 0.638, 0.067, 0.601, 0.034, 0.638, 0.067, 0.601] + }, + { + "time": 0.1, + "x": 0.601, + "y": 0.601, + "curve": [0.211, 0.601, 0.322, 1, 0.211, 0.601, 0.322, 1] + }, + { + "time": 0.4333, + "curve": [0.544, 1, 0.656, 0.601, 0.544, 1, 0.656, 0.601] + }, + { + "time": 0.7667, + "x": 0.601, + "y": 0.601, + "curve": [0.878, 0.601, 0.989, 1, 0.878, 0.601, 0.989, 1] + }, + { + "time": 1.1, + "curve": [1.211, 1, 1.322, 0.601, 1.211, 1, 1.322, 0.601] + }, + { + "time": 1.4333, + "x": 0.601, + "y": 0.601, + "curve": [1.544, 0.601, 1.656, 1, 1.544, 0.601, 1.656, 1] + }, + { + "time": 1.7667, + "curve": [1.878, 1, 1.989, 0.601, 1.878, 1, 1.989, 0.601] + }, + { + "time": 2.1, + "x": 0.601, + "y": 0.601, + "curve": [2.211, 0.601, 2.322, 1, 2.211, 0.601, 2.322, 1] + }, + { + "time": 2.4333, + "curve": [2.544, 1, 2.656, 0.601, 2.544, 1, 2.656, 0.601] + }, + { + "time": 2.7667, + "x": 0.601, + "y": 0.601, + "curve": [2.878, 0.601, 2.989, 1, 2.878, 0.601, 2.989, 1] + }, + { + "time": 3.1, + "curve": [3.178, 1, 3.256, 0.804, 3.178, 1, 3.256, 0.804] + }, + { "time": 3.3333, "x": 0.687, "y": 0.687 } + ] + }, + "可爱花朵4": { + "scale": [ + { + "x": 0.741, + "y": 0.741, + "curve": [0.045, 0.665, 0.089, 0.601, 0.045, 0.665, 0.089, 0.601] + }, + { + "time": 0.1333, + "x": 0.601, + "y": 0.601, + "curve": [0.244, 0.601, 0.356, 1, 0.244, 0.601, 0.356, 1] + }, + { + "time": 0.4667, + "curve": [0.578, 1, 0.689, 0.601, 0.578, 1, 0.689, 0.601] + }, + { + "time": 0.8, + "x": 0.601, + "y": 0.601, + "curve": [0.911, 0.601, 1.022, 1, 0.911, 0.601, 1.022, 1] + }, + { + "time": 1.1333, + "curve": [1.244, 1, 1.356, 0.601, 1.244, 1, 1.356, 0.601] + }, + { + "time": 1.4667, + "x": 0.601, + "y": 0.601, + "curve": [1.578, 0.601, 1.689, 1, 1.578, 0.601, 1.689, 1] + }, + { + "time": 1.8, + "curve": [1.911, 1, 2.022, 0.601, 1.911, 1, 2.022, 0.601] + }, + { + "time": 2.1333, + "x": 0.601, + "y": 0.601, + "curve": [2.244, 0.601, 2.356, 1, 2.244, 0.601, 2.356, 1] + }, + { + "time": 2.4667, + "curve": [2.578, 1, 2.689, 0.601, 2.578, 1, 2.689, 0.601] + }, + { + "time": 2.8, + "x": 0.601, + "y": 0.601, + "curve": [2.911, 0.601, 3.022, 1, 2.911, 0.601, 3.022, 1] + }, + { + "time": 3.1333, + "curve": [3.2, 1, 3.267, 0.857, 3.2, 1, 3.267, 0.857] + }, + { "time": 3.3333, "x": 0.741, "y": 0.741 } + ] + }, + "可爱花朵5": { + "scale": [ + { + "x": 0.8, + "y": 0.8, + "curve": [0.056, 0.701, 0.111, 0.601, 0.056, 0.701, 0.111, 0.601] + }, + { + "time": 0.1667, + "x": 0.601, + "y": 0.601, + "curve": [0.278, 0.601, 0.389, 1, 0.278, 0.601, 0.389, 1] + }, + { + "time": 0.5, + "curve": [0.611, 1, 0.722, 0.601, 0.611, 1, 0.722, 0.601] + }, + { + "time": 0.8333, + "x": 0.601, + "y": 0.601, + "curve": [0.944, 0.601, 1.056, 1, 0.944, 0.601, 1.056, 1] + }, + { + "time": 1.1667, + "curve": [1.278, 1, 1.389, 0.601, 1.278, 1, 1.389, 0.601] + }, + { + "time": 1.5, + "x": 0.601, + "y": 0.601, + "curve": [1.611, 0.601, 1.722, 1, 1.611, 0.601, 1.722, 1] + }, + { + "time": 1.8333, + "curve": [1.944, 1, 2.056, 0.601, 1.944, 1, 2.056, 0.601] + }, + { + "time": 2.1667, + "x": 0.601, + "y": 0.601, + "curve": [2.278, 0.601, 2.389, 1, 2.278, 0.601, 2.389, 1] + }, + { + "time": 2.5, + "curve": [2.611, 1, 2.722, 0.601, 2.611, 1, 2.722, 0.601] + }, + { + "time": 2.8333, + "x": 0.601, + "y": 0.601, + "curve": [2.944, 0.601, 3.056, 1, 2.944, 0.601, 3.056, 1] + }, + { + "time": 3.1667, + "curve": [3.223, 1, 3.279, 0.901, 3.223, 1, 3.279, 0.901] + }, + { "time": 3.3333, "x": 0.8, "y": 0.8 } + ] + }, + "可爱花朵": { + "scale": [ + { + "x": 0.859, + "y": 0.859, + "curve": [0.067, 0.745, 0.134, 0.601, 0.067, 0.745, 0.134, 0.601] + }, + { + "time": 0.2, + "x": 0.601, + "y": 0.601, + "curve": [0.311, 0.601, 0.422, 1, 0.311, 0.601, 0.422, 1] + }, + { + "time": 0.5333, + "curve": [0.644, 1, 0.756, 0.601, 0.644, 1, 0.756, 0.601] + }, + { + "time": 0.8667, + "x": 0.601, + "y": 0.601, + "curve": [0.978, 0.601, 1.089, 1, 0.978, 0.601, 1.089, 1] + }, + { + "time": 1.2, + "curve": [1.311, 1, 1.422, 0.601, 1.311, 1, 1.422, 0.601] + }, + { + "time": 1.5333, + "x": 0.601, + "y": 0.601, + "curve": [1.644, 0.601, 1.756, 1, 1.644, 0.601, 1.756, 1] + }, + { + "time": 1.8667, + "curve": [1.978, 1, 2.089, 0.601, 1.978, 1, 2.089, 0.601] + }, + { + "time": 2.2, + "x": 0.601, + "y": 0.601, + "curve": [2.311, 0.601, 2.422, 1, 2.311, 0.601, 2.422, 1] + }, + { + "time": 2.5333, + "curve": [2.644, 1, 2.756, 0.601, 2.644, 1, 2.756, 0.601] + }, + { + "time": 2.8667, + "x": 0.601, + "y": 0.601, + "curve": [2.978, 0.601, 3.089, 1, 2.978, 0.601, 3.089, 1] + }, + { + "time": 3.2, + "curve": [3.245, 1, 3.29, 0.937, 3.245, 1, 3.29, 0.937] + }, + { "time": 3.3333, "x": 0.859, "y": 0.859 } + ] + }, + "可爱花朵7": { + "scale": [ + { + "x": 0.914, + "y": 0.914, + "curve": [0.079, 0.796, 0.156, 0.601, 0.079, 0.796, 0.156, 0.601] + }, + { + "time": 0.2333, + "x": 0.601, + "y": 0.601, + "curve": [0.344, 0.601, 0.456, 1, 0.344, 0.601, 0.456, 1] + }, + { + "time": 0.5667, + "curve": [0.678, 1, 0.789, 0.601, 0.678, 1, 0.789, 0.601] + }, + { + "time": 0.9, + "x": 0.601, + "y": 0.601, + "curve": [1.011, 0.601, 1.122, 1, 1.011, 0.601, 1.122, 1] + }, + { + "time": 1.2333, + "curve": [1.344, 1, 1.456, 0.601, 1.344, 1, 1.456, 0.601] + }, + { + "time": 1.5667, + "x": 0.601, + "y": 0.601, + "curve": [1.678, 0.601, 1.789, 1, 1.678, 0.601, 1.789, 1] + }, + { + "time": 1.9, + "curve": [2.011, 1, 2.122, 0.601, 2.011, 1, 2.122, 0.601] + }, + { + "time": 2.2333, + "x": 0.601, + "y": 0.601, + "curve": [2.344, 0.601, 2.456, 1, 2.344, 0.601, 2.456, 1] + }, + { + "time": 2.5667, + "curve": [2.678, 1, 2.789, 0.601, 2.678, 1, 2.789, 0.601] + }, + { + "time": 2.9, + "x": 0.601, + "y": 0.601, + "curve": [3.011, 0.601, 3.122, 1, 3.011, 0.601, 3.122, 1] + }, + { + "time": 3.2333, + "curve": [3.267, 1, 3.301, 0.965, 3.267, 1, 3.301, 0.965] + }, + { "time": 3.3333, "x": 0.914, "y": 0.914 } + ] + }, + "可爱花朵6": { + "scale": [ + { + "x": 0.958, + "y": 0.958, + "curve": [0.09, 0.855, 0.178, 0.601, 0.09, 0.855, 0.178, 0.601] + }, + { + "time": 0.2667, + "x": 0.601, + "y": 0.601, + "curve": [0.378, 0.601, 0.489, 1, 0.378, 0.601, 0.489, 1] + }, + { + "time": 0.6, + "curve": [0.711, 1, 0.822, 0.601, 0.711, 1, 0.822, 0.601] + }, + { + "time": 0.9333, + "x": 0.601, + "y": 0.601, + "curve": [1.044, 0.601, 1.156, 1, 1.044, 0.601, 1.156, 1] + }, + { + "time": 1.2667, + "curve": [1.378, 1, 1.489, 0.601, 1.378, 1, 1.489, 0.601] + }, + { + "time": 1.6, + "x": 0.601, + "y": 0.601, + "curve": [1.711, 0.601, 1.822, 1, 1.711, 0.601, 1.822, 1] + }, + { + "time": 1.9333, + "curve": [2.044, 1, 2.156, 0.601, 2.044, 1, 2.156, 0.601] + }, + { + "time": 2.2667, + "x": 0.601, + "y": 0.601, + "curve": [2.378, 0.601, 2.489, 1, 2.378, 0.601, 2.489, 1] + }, + { + "time": 2.6, + "curve": [2.711, 1, 2.822, 0.601, 2.711, 1, 2.822, 0.601] + }, + { + "time": 2.9333, + "x": 0.601, + "y": 0.601, + "curve": [3.044, 0.601, 3.156, 1, 3.044, 0.601, 3.156, 1] + }, + { + "time": 3.2667, + "curve": [3.289, 1, 3.312, 0.985, 3.289, 1, 3.312, 0.985] + }, + { "time": 3.3333, "x": 0.958, "y": 0.958 } + ] + } + } + }, + "emoji_3": { + "slots": { "附件/脸红": { "rgba": [{ "color": "ffffffff" }] } }, + "attachments": { + "default": { + "前发/E眉毛": { + "E眉毛": { + "deform": [ + { + "vertices": [ + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253, 52.74548, -1.47174, -52.7464, 1.47253, + 52.74548, -1.47174, -52.7464, 1.47253, 52.74548, -1.47174, + -52.7464, 1.47253 + ] + } + ] + } + }, + "面部/E眼珠": { + "E眼珠": { + "deform": [ + { + "vertices": [ + 37.55115, -1.04199, -37.54773, 1.04785, 39.38611, -1.09326, + -39.38611, 1.09912, 40.49854, -1.12427, -40.49854, 1.13025, + -40.49658, 1.13123, -10.93518, 0.31152, 10.93518, -0.30505, + 10.93713, -0.30408, -10.38989, 0.29785, 10.38989, -0.28979, + -9.74731, 0.27393, 9.74731, -0.27209, 9.32776, -0.26038, + 9.33313, -0.26038, -36.48022, 1.01807, -36.47998, 1.01807 + ] + } + ] + } + }, + "面部/E眼皮": { + "E眼皮": { + "deform": [ + { + "vertices": [ + 104.39648, -2.90601, -104.39099, 2.91248, 104.39648, + -2.90601, -104.39099, 2.91248, 104.39648, -2.90601, + -104.39099, 2.91248, 104.39648, -2.90601, -104.39099, + 2.91248, 104.39648, -2.90601, -104.39099, 2.91248, + 104.39648, -2.90601, -104.39099, 2.91248, 104.39648, + -2.90601, -104.39099, 2.91248, 104.39648, -2.90601, + -104.39099, 2.91248, 104.39648, -2.90601, -104.39099, + 2.91248, 104.39648, -2.90601, -104.39099, 2.91248, + 104.39648, -2.90601, -104.39099, 2.91248, 104.39648, + -2.90601, -104.39099, 2.91248, 104.39648, -2.90601, + -104.39099, 2.91248, 104.39648, -2.90601, -104.39099, + 2.91248, 104.39648, -2.90601, -104.39099, 2.91248, + 104.39648, -2.90601, -104.39099, 2.91248, 104.39648, + -2.90601, -104.39099, 2.91248, 104.39648, -2.90601, + -104.39099, 2.91248, 104.39648, -2.90601, -104.39099, + 2.91248, 104.39648, -2.90601, -104.39099, 2.91248, + 104.39648, -2.90601, -104.39099, 2.91248, 104.39648, + -2.90601, -104.39099, 2.91248, 104.39648, -2.90601, + -104.39099, 2.91248, 104.39648, -2.90601, -104.39099, + 2.91248 + ] + } + ] + } + }, + "面部/E眼角": { + "E眼角": { + "deform": [ + { + "vertices": [ + 47.31396, 22.68921, -47.31262, -22.68622, -19.58142, + -0.78345, 19.58362, 0.78754, -38.68201, -0.24976, 38.68555, + 0.25458, -28.72595, -9.86157, 28.72949, 9.86829, -8.06995, + -2.44043, 8.07068, 2.44226, 48.28381, -22.23145, -48.27942, + 22.24176, 30.82361, -10.63672, -30.82227, 10.64056, + 45.37549, 16.96265, -45.37512, -16.96106 + ] + } + ] + } + }, + "面部/E睫毛": { + "E睫毛": { + "deform": [ + { + "vertices": [ + 67.70129, 34.0918, -67.68188, -34.05426, 67.59827, 40.84302, + -67.57751, -40.80634, 65.52502, 39.75269, -65.50488, + -39.71283, 60.29089, 29.97803, -60.27051, -29.93597, + 62.03723, 29.82422, -62.01746, -29.78638, 63.12805, 27.1001, + -63.11023, -27.05981, 63.91125, 34.12231, -63.88928, + -34.07391, 69.32104, 39.79761, -69.3009, -39.75226, + 72.36108, 44.18872, -72.34119, -44.14752, 72.85767, + 41.06689, -72.83728, -41.02374, 74.86658, 39.82983, + -74.84595, -39.78381, 79.03442, 32.32544, -79.01416, + -32.28632, 85.68335, 30.02783, -85.66296, -29.98602, + 93.47034, 26.72534, -93.45117, -26.68585, 101.81958, + 22.57837, -101.79797, -22.53998, 107.79468, 17.052, + -107.7738, -17.00891, 110.77673, 8.87695, -110.75574, + -8.8335, 109.69421, 1.4917, -109.6731, -1.44934, 106.64575, + -3.25879, -106.62219, 3.29907, 105.58752, 0.61523, + -105.56372, -0.56952, 100.32483, 0.36694, -100.30347, + -0.32153, 86.34583, 5.25732, -86.33252, -5.23279, 92.46448, + 4.79565, -92.44666, -4.77014, 95.96277, 4.70532, -95.94666, + -4.67981, 97.10718, 3.9231, -97.09216, -3.89172, 97.98218, + 3.84766, -97.96545, -3.81531, 99.64099, 0.53467, -99.62463, + -0.50555, 98.45593, -10.58105, -98.43774, 10.61218, + 94.30103, -13.0332, -94.28418, 13.06213, 86.71716, + -23.32007, -86.7002, 23.34821, 85.60315, -21.40332, + -85.58655, 21.43219, 79.78735, -20.60889, -79.77307, + 20.63806, 74.01648, -28.73193, -74.00073, 28.76416, + 76.79395, -23.31689, -76.7782, 23.35004, 78.46338, + -15.80835, -78.44714, 15.83997, 70.55347, -16.77222, + -70.54236, 16.80133, 69.10791, -16.29395, -69.09619, + 16.32361, 61.45618, -18.63062, -61.44116, 18.65924, + 55.26563, -20.8584, -55.24939, 20.89038, 64.78979, + -24.63721, -64.77734, 24.66583, 69.25391, -21.54175, + -69.24121, 21.57239, 71.599, -10.76489, -71.58398, 10.79779, + 76.12646, -15.76294, -76.11548, 15.78522, 82.49377, + -17.75464, -82.47815, 17.78101, 92.70398, -17.92529, + -92.68799, 17.95276, 100.3042, -17.45044, -100.29114, + 17.47833, 104.56421, -11.27026, -104.54785, 11.29938, + 105.48633, -9.52954, -105.474, 9.55768, 100.68994, -3.6897, + -100.67383, 3.72034, 94.34363, -0.96777, -94.33044, 0.9986, + 88.1532, -3.20166, -88.1394, 3.229, 79.72974, -1.72339, + -79.71667, 1.74866, 76.93665, 2.78223, -76.92407, -2.75806, + 85.42334, -0.22144, -85.40222, 0.26221, 93.71826, 4.15869, + -93.69653, -4.11017, 100.8208, 7.65796, -100.79785, -7.6087, + 106.60986, 5.96655, -106.58752, -5.9209, 110.81897, + 10.35767, -110.7959, -10.31158, 108.91089, 15.23999, + -108.89124, -15.19751, 101.1936, 21.06494, -101.17358, + -21.02332, 93.46753, 26.59741, -93.44751, -26.55853, + 85.90234, 27.42432, -85.88147, -27.38397, 76.85803, + 27.54785, -76.83899, -27.5061, 68.68237, 27.4165, -68.66272, + -27.37762 + ] + } + ] + } + }, + "面部/E脸1": { + "E脸1": { + "deform": [ + { + "offset": 316, + "vertices": [ + 69.79541, -0.16138, -69.79126, 0.16919, 21.76831, -0.60474, + -21.76636, 0.60742, -31.29065, 9.7688, 31.29187, -9.76398, + -60.4624, -0.08691, 60.46497, 0.09113, -62.65833, 0.86353, + 62.66101, -0.85919, -37.22827, -11.84619, 37.2312, 11.85358, + 10.16663, -18.0625, -10.16492, 18.06653, 82.14465, + -19.61938, -82.13977, 19.62964, 99.21179, -13.42993, + -99.20776, 13.43787, 102.6178, -2.85937, -102.61475, 2.8634, + 103.06226, -2.87231, -103.05933, 2.87579, 97.00476, 3.0769, + -97.00171, -3.07269, 99.95129, -2.78589, -99.94958, 2.78906, + 101.19824, -5.93018, -101.19519, 5.93591, 102.27271, + 0.70996, -102.26904, -0.7027, 75.00293, 11.24902, -75.00085, + -11.24451, 6.08594, 10.94678, -6.08508, -10.94421, + -44.79053, 3.92041, 44.7926, -3.91718, -55.62561, -2, + 55.62769, 2.00421, -52.47791, -0.7522, 52.48022, 0.75848, + -28.83618, -13.85596, 28.84094, 13.86627, 8.53857, + -12.68042, -8.53601, 12.68622, 58.90759, -23.86499, + -58.90479, 23.87225, 90.16431, -18.96021, -90.16187, + 18.96509 + ] + } + ] + } + } + } + } + }, + "emoji_4": { + "attachments": { + "default": { + "面部/E眼珠": { + "E眼珠": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 52.51465, -1.46021, -52.51465, 1.46558, 54.86951, -1.52295, + -54.86951, 1.53125, 56.29456, -1.56958, -56.29456, 1.57092, + -56.29028, 1.57092, -9.59094, 0.27393, 9.59094, -0.26758, + 9.59521, -0.26562, -8.89258, 0.25073, 8.89258, -0.24817, + -8.06958, 0.22729, 8.06958, -0.22522, 7.53223, -0.21033, + 7.53259, -0.21033, -51.14709, 1.42725, -51.14673, 1.42908 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼皮": { + "E眼皮": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 137.39856, -12.19043, -137.38977, 12.19995, 136.26636, + -14.0481, -136.2583, 14.05774, 130.17883, -9.82422, + -130.16809, 9.83911, 120.59741, -4.97461, -120.5885, + 4.98413, 110.92517, -3.35913, -110.91858, 3.36487, + 110.89526, -14.146, -110.88647, 14.15912, 125.36035, + -18.05859, -125.35144, 18.07147, 136.71655, -17.29346, + -136.70752, 17.30872, 142.22144, -13.40356, -142.2135, + 13.41406, 141.86304, -6.91724, -141.85461, 6.92682, + 135.27368, -1.33228, -135.26404, 1.34534, 135.27368, + -1.33228, -135.26404, 1.34534, 141.86304, -6.91724, + -141.85461, 6.92682, 142.22144, -13.40356, -142.2135, + 13.41406, 137.22522, -18.38892, -137.21655, 18.40234, + 125.55408, -20.76562, -125.54565, 20.77563, 110.89526, + -14.146, -110.88647, 14.15912, 110.15381, -1.98755, + -110.14746, 1.99402, 121.18909, -3.10352, -121.18079, + 3.11169, 130.26184, -6.85864, -130.2511, 6.8728, 137.0758, + -14.06982, -137.06726, 14.08026, 137.39856, -12.19043, + -137.38977, 12.19995, 133.72083, -8.57812, -133.71204, + 8.58875, 133.72083, -8.57812, -133.71204, 8.58875 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼角": { + "E眼角": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 45.84998, 17.95679, -45.84937, -17.94775, -1.01562, 2.57153, + 1.01672, -2.56812, -9.00964, 2.06909, 9.01233, -2.06543, + 2.25391, -14.1062, -2.25159, 14.11389, 0.39331, -15.75049, + -0.39185, 15.75653, 43.91858, -32.10913, -43.9176, 32.11072, + 45.85547, -6.12134, -45.85339, 6.12451, 42.25269, 6.08032, + -42.25244, -6.07642 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E睫毛": { + "E睫毛": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 39.875, -22.52319, -39.87207, 22.53229, 39.16797, 21.89453, + -39.16541, -21.88306, 39.50671, 47.97705, -39.50293, + -47.96594, 40.21143, 73.26733, -40.20923, -73.25946, + 42.45679, 56.06738, -42.45483, -56.06171, 53.16675, + 35.13135, -53.16479, -35.12262, 64.99072, 26.23169, + -64.98901, -26.2254, 83.67139, 39.73169, -83.66895, + -39.72369, 104.9447, 48.4834, -104.9425, -48.47632, + 101.58179, 39.61865, -101.57959, -39.61353, 101.24561, + 27.55786, -101.24353, -27.5498, 108.4436, 20.34717, + -108.44165, -20.33942, 123.67395, 21.8689, -123.67139, + -21.86182, 134.45032, 17.28516, -134.44788, -17.27692, + 145.42151, 19.7041, -145.42004, -19.6972, 150.41687, + 17.23193, -150.41345, -17.22076, 147.86353, 9.50903, + -147.86108, -9.50348, 136.4049, 3.5979, -136.40259, + -3.59241, 119.10071, 11.48071, -119.09729, -11.47418, + 101.94568, -3.22607, -101.94153, 3.23499, 85.47095, + -7.43945, -85.46777, 7.44849, 77.59192, 3.2937, -77.58875, + -3.28656, 88.03503, 0.6709, -88.0304, -0.6582, 102.24792, + 7.66748, -102.24548, -7.66107, 119.01355, 8.36792, + -119.01111, -8.36139, 133.5299, -1.77002, -133.52637, + 1.77966, 140.33826, -8.97314, -140.33496, 8.97931, + 141.88245, -23.42456, -141.87878, 23.43127, 135.69861, + -21.69434, -135.69641, 21.70135, 123.40784, -29.53027, + -123.4054, 29.5365, 116.69739, -18.82617, -116.69385, + 18.83484, 112.19922, -26.49072, -112.19617, 26.49762, + 109.86328, -40.44385, -109.8595, 40.45209, 96.4928, + -31.11279, -96.48975, 31.12219, 85.28613, -14.0542, + -85.28308, 14.06384, 69.16895, -19.44482, -69.16565, + 19.45575, 63.99097, -23.58521, -63.98718, 23.59467, + 60.52039, -22.3208, -60.51733, 22.32959, 59.70959, + -23.46606, -59.70691, 23.47534, 61.62463, -10.66821, + -61.62219, 10.67719, 67.28955, -3.03979, -67.28723, 3.04651, + 72.01575, 12.79492, -72.01294, -12.78833, 91.33167, 7.19629, + -91.32825, -7.18634, 106.07458, 5.22656, -106.07227, + -5.21753, 139.55261, 18.69873, -139.5503, -18.69244, + 140.98987, 14.37695, -140.98694, -14.36841, 147.21643, + 14.20361, -147.2135, -14.1947, 147.6261, 14.96826, + -147.62427, -14.96246, 138.10205, 8.61255, -138.10034, + -8.60767, 121.10925, -0.25757, -121.10706, 0.26471, + 103.20874, 0.24097, -103.20703, -0.23529, 83.7417, 0.39624, + -83.73901, -0.38855, 72.12183, 2.66699, -72.11987, -2.66016, + 82.04492, -4.61694, -82.04138, 4.62689, 104.96997, -6.42822, + -104.96777, 6.43451, 127.06348, -10.16064, -127.06152, + 10.16669, 143.11609, -7.10205, -143.11365, 7.10992, + 151.24438, -8.88647, -151.24158, 8.89435, 149.42712, + -18.18384, -149.42456, 18.19, 137.64612, -21.7439, + -137.64172, 21.75604, 136.28186, -28.71875, -136.27893, + 28.72754, 104.58411, -6.40698, -104.57825, 6.42468, + 80.34741, -9.63257, -80.34363, 9.64209, 49.46252, -27.84937, + -49.45935, 27.86285 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E脸1": { + "E脸1": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "offset": 316, + "vertices": [ + 64.0658, 3.42773, -64.06067, -3.42438, 14.77075, 2.90552, + -14.76904, -2.90454, -7.6272, -1.6792, 7.62866, 1.68274, + -20.02881, -4.64722, 20.03125, 4.65344, -20.43542, -2.26611, + 20.43896, 2.27307, -8.62683, -3.54541, 8.62842, 3.55029, + 16.68982, -13.25366, -16.68774, 13.25885, 86.77539, + -14.73633, -86.77258, 14.74091, 125.91724, -4.4563, + -125.91284, 4.46118, 147.70947, -4.5918, -147.70459, + 4.59528, 145.682, -9.27368, -145.68005, 9.27747, 123.79651, + -12.45337, -123.79541, 12.45728, 144.9342, -2.146, + -144.9303, 2.14911, 145.78857, -5.48413, -145.78491, + 5.48969, 127.85071, -3.08813, -127.84644, 3.09381, 74.70667, + 11.18604, -74.70203, -11.18268, 4.05273, 9.36548, -4.05115, + -9.36346, -17.04321, 0.47876, 17.04529, -0.47534, -11.84839, + -0.14014, 11.85022, 0.14349, -8.54797, -0.70654, 8.54932, + 0.70947, -2.36694, 0.06714, 2.36755, -0.06598, 7.57617, + -0.21069, -7.57495, 0.21124, 65.23389, -5.60791, -65.2312, + 5.6109, 116.88232, -5.62695, -116.87708, 5.63043 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333, "curve": "stepped" }, + { "time": 3.3333 } + ] + } + } + } + } + }, + "emoji_5": { + "slots": { "面部/M嘴巴": { "attachment": [{ "name": "M说话" }] } }, + "attachments": { + "default": { + "面部/E眼珠": { + "E眼珠": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 52.51465, -1.46021, -52.51465, 1.46558, 54.86951, -1.52295, + -54.86951, 1.53125, 56.29456, -1.56958, -56.29456, 1.57092, + -56.29028, 1.57092, -9.59094, 0.27393, 9.59094, -0.26758, + 9.59521, -0.26562, -8.89258, 0.25073, 8.89258, -0.24817, + -8.06958, 0.22729, 8.06958, -0.22522, 7.53223, -0.21033, + 7.53259, -0.21033, -51.14709, 1.42725, -51.14673, 1.42908 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼皮": { + "E眼皮": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 137.39856, -12.19043, -137.38977, 12.19995, 136.26636, + -14.0481, -136.2583, 14.05774, 130.17883, -9.82422, + -130.16809, 9.83911, 120.59741, -4.97461, -120.5885, + 4.98413, 110.92517, -3.35913, -110.91858, 3.36487, + 110.89526, -14.146, -110.88647, 14.15912, 125.36035, + -18.05859, -125.35144, 18.07147, 136.71655, -17.29346, + -136.70752, 17.30872, 142.22144, -13.40356, -142.2135, + 13.41406, 141.86304, -6.91724, -141.85461, 6.92682, + 135.27368, -1.33228, -135.26404, 1.34534, 135.27368, + -1.33228, -135.26404, 1.34534, 141.86304, -6.91724, + -141.85461, 6.92682, 142.22144, -13.40356, -142.2135, + 13.41406, 137.22522, -18.38892, -137.21655, 18.40234, + 125.55408, -20.76562, -125.54565, 20.77563, 110.89526, + -14.146, -110.88647, 14.15912, 110.15381, -1.98755, + -110.14746, 1.99402, 121.18909, -3.10352, -121.18079, + 3.11169, 130.26184, -6.85864, -130.2511, 6.8728, 137.0758, + -14.06982, -137.06726, 14.08026, 137.39856, -12.19043, + -137.38977, 12.19995, 133.72083, -8.57812, -133.71204, + 8.58875, 133.72083, -8.57812, -133.71204, 8.58875 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E眼角": { + "E眼角": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 45.84998, 17.95679, -45.84937, -17.94775, -1.01562, 2.57153, + 1.01672, -2.56812, -9.00964, 2.06909, 9.01233, -2.06543, + 2.25391, -14.1062, -2.25159, 14.11389, 0.39331, -15.75049, + -0.39185, 15.75653, 43.91858, -32.10913, -43.9176, 32.11072, + 45.85547, -6.12134, -45.85339, 6.12451, 42.25269, 6.08032, + -42.25244, -6.07642 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E睫毛": { + "E睫毛": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "vertices": [ + 39.875, -22.52319, -39.87207, 22.53229, 39.16797, 21.89453, + -39.16541, -21.88306, 39.50671, 47.97705, -39.50293, + -47.96594, 40.21143, 73.26733, -40.20923, -73.25946, + 42.45679, 56.06738, -42.45483, -56.06171, 53.16675, + 35.13135, -53.16479, -35.12262, 64.99072, 26.23169, + -64.98901, -26.2254, 83.67139, 39.73169, -83.66895, + -39.72369, 104.9447, 48.4834, -104.9425, -48.47632, + 101.58179, 39.61865, -101.57959, -39.61353, 101.24561, + 27.55786, -101.24353, -27.5498, 108.4436, 20.34717, + -108.44165, -20.33942, 123.67395, 21.8689, -123.67139, + -21.86182, 134.45032, 17.28516, -134.44788, -17.27692, + 145.42151, 19.7041, -145.42004, -19.6972, 150.41687, + 17.23193, -150.41345, -17.22076, 147.86353, 9.50903, + -147.86108, -9.50348, 136.4049, 3.5979, -136.40259, + -3.59241, 119.10071, 11.48071, -119.09729, -11.47418, + 101.94568, -3.22607, -101.94153, 3.23499, 85.47095, + -7.43945, -85.46777, 7.44849, 77.59192, 3.2937, -77.58875, + -3.28656, 88.03503, 0.6709, -88.0304, -0.6582, 102.24792, + 7.66748, -102.24548, -7.66107, 119.01355, 8.36792, + -119.01111, -8.36139, 133.5299, -1.77002, -133.52637, + 1.77966, 140.33826, -8.97314, -140.33496, 8.97931, + 141.88245, -23.42456, -141.87878, 23.43127, 135.69861, + -21.69434, -135.69641, 21.70135, 123.40784, -29.53027, + -123.4054, 29.5365, 116.69739, -18.82617, -116.69385, + 18.83484, 112.19922, -26.49072, -112.19617, 26.49762, + 109.86328, -40.44385, -109.8595, 40.45209, 96.4928, + -31.11279, -96.48975, 31.12219, 85.28613, -14.0542, + -85.28308, 14.06384, 69.16895, -19.44482, -69.16565, + 19.45575, 63.99097, -23.58521, -63.98718, 23.59467, + 60.52039, -22.3208, -60.51733, 22.32959, 59.70959, + -23.46606, -59.70691, 23.47534, 61.62463, -10.66821, + -61.62219, 10.67719, 67.28955, -3.03979, -67.28723, 3.04651, + 72.01575, 12.79492, -72.01294, -12.78833, 91.33167, 7.19629, + -91.32825, -7.18634, 106.07458, 5.22656, -106.07227, + -5.21753, 139.55261, 18.69873, -139.5503, -18.69244, + 140.98987, 14.37695, -140.98694, -14.36841, 147.21643, + 14.20361, -147.2135, -14.1947, 147.6261, 14.96826, + -147.62427, -14.96246, 138.10205, 8.61255, -138.10034, + -8.60767, 121.10925, -0.25757, -121.10706, 0.26471, + 103.20874, 0.24097, -103.20703, -0.23529, 83.7417, 0.39624, + -83.73901, -0.38855, 72.12183, 2.66699, -72.11987, -2.66016, + 82.04492, -4.61694, -82.04138, 4.62689, 104.96997, -6.42822, + -104.96777, 6.43451, 127.06348, -10.16064, -127.06152, + 10.16669, 143.11609, -7.10205, -143.11365, 7.10992, + 151.24438, -8.88647, -151.24158, 8.89435, 149.42712, + -18.18384, -149.42456, 18.19, 137.64612, -21.7439, + -137.64172, 21.75604, 136.28186, -28.71875, -136.27893, + 28.72754, 104.58411, -6.40698, -104.57825, 6.42468, + 80.34741, -9.63257, -80.34363, 9.64209, 49.46252, -27.84937, + -49.45935, 27.86285 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/E脸1": { + "E脸1": { + "deform": [ + { "time": 1.3333, "curve": [1.383, 0, 1.417, 1] }, + { + "time": 1.4667, + "offset": 316, + "vertices": [ + 64.0658, 3.42773, -64.06067, -3.42438, 14.77075, 2.90552, + -14.76904, -2.90454, -7.6272, -1.6792, 7.62866, 1.68274, + -20.02881, -4.64722, 20.03125, 4.65344, -20.43542, -2.26611, + 20.43896, 2.27307, -8.62683, -3.54541, 8.62842, 3.55029, + 16.68982, -13.25366, -16.68774, 13.25885, 86.77539, + -14.73633, -86.77258, 14.74091, 125.91724, -4.4563, + -125.91284, 4.46118, 147.70947, -4.5918, -147.70459, + 4.59528, 145.682, -9.27368, -145.68005, 9.27747, 123.79651, + -12.45337, -123.79541, 12.45728, 144.9342, -2.146, + -144.9303, 2.14911, 145.78857, -5.48413, -145.78491, + 5.48969, 127.85071, -3.08813, -127.84644, 3.09381, 74.70667, + 11.18604, -74.70203, -11.18268, 4.05273, 9.36548, -4.05115, + -9.36346, -17.04321, 0.47876, 17.04529, -0.47534, -11.84839, + -0.14014, 11.85022, 0.14349, -8.54797, -0.70654, 8.54932, + 0.70947, -2.36694, 0.06714, 2.36755, -0.06598, 7.57617, + -0.21069, -7.57495, 0.21124, 65.23389, -5.60791, -65.2312, + 5.6109, 116.88232, -5.62695, -116.87708, 5.63043 + ], + "curve": [1.522, 0, 1.578, 1] + }, + { "time": 1.6333 } + ] + } + }, + "面部/M嘴巴": { + "M说话": { + "deform": [ + { + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [0.056, 0, 0.111, 1] + }, + { "time": 0.1667, "curve": [0.222, 0, 0.278, 1] }, + { + "time": 0.3333, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [0.389, 0, 0.444, 1] + }, + { + "time": 0.5, + "vertices": [ + 10.33459, -17.1958, -10.32349, 17.23254, 10.35437, -9.68848, + -10.3418, 9.71777, 10.51208, -1.28833, -10.5, 1.32416, + 10.95776, 6.48804, -10.94556, -6.45294, 11.29907, 15.99487, + -11.2876, -15.95618, 9.93921, 21.81909, -9.92383, -21.78217, + 7.18787, 25.67969, -7.17627, -25.64209, 3.30823, 27.28687, + -3.297, -27.25739, 0.33044, 27.03931, -0.31665, -27.00244, + -2.97803, 25.90845, 2.99109, -25.86963, -6.41565, 22.88672, + 6.42737, -22.85266, -9.51074, 18.41187, 9.52612, -18.37463, + -11.53967, 12.68066, 11.54993, -12.64569, -12.14136, + 8.83057, 12.1543, -8.79602, -12.74512, 4.979, 12.75549, + -4.94739, -12.95459, -3.91821, 12.96704, 3.94836, -11.95728, + -10.51074, 11.96985, 10.54266, -9.54126, -16.75415, 9.55237, + 16.78625, -6.88611, -21.33325, 6.901, 21.36932, -3.29712, + -25.16162, 3.31238, 25.19714, 0.81958, -27.78052, -0.80713, + 27.81555, 3.27393, -27.82202, -3.26599, 27.85614, 5.73242, + -27.86401, -5.71973, 27.89539, 8.60059, -26.16162, -8.58496, + 26.19727, 10.11975, -22.19897, -10.10669, 22.2326, 9.20667, + 14.77124, -9.19714, -14.73737, 7.73804, 19.48877, -7.72839, + -19.4491, 5.23425, 22.61694, -5.22546, -22.58173, 3.10706, + 24.18164, -3.09607, -24.1405, 0.05334, 23.93115, -0.03906, + -23.8941, -2.57556, 22.55566, 2.59009, -22.52356, -5.07007, + 20.56763, 5.08337, -20.53375, -7.90698, 17.19531, 7.92065, + -17.16547, -10.08899, 12.75146, 10.10181, -12.71692, + -11.16357, 8.38574, 11.17554, -8.35181, -11.6134, 4.55884, + 11.62512, -4.52582, -11.69189, -3.73071, 11.70361, 3.76099, + -10.81982, -9.31812, 10.83069, 9.35034, -8.13147, -15.40112, + 8.14368, 15.43604, -6.04858, -18.62939, 6.06384, 18.66724, + -2.89844, -21.78076, 2.9126, 21.81195, 0.65161, -24.27319, + -0.63794, 24.30261, 3.2196, -25.01074, -3.21033, 25.0451, + 5.19324, -25.28687, -5.18372, 25.32349, 6.75342, -23.99707, + -6.74365, 24.03003, 7.84546, -21.74341, -7.83423, 21.78271, + 7.97339, -17.12891, -7.96436, 17.16791, 7.98987, -9.73413, + -7.97949, 9.76245, 8.19263, -1.11499, -8.18152, 1.14471, + 8.78857, 6.60083, -8.77808, -6.5744 + ], + "curve": [0.556, 0, 0.611, 1] + }, + { + "time": 0.6667, + "vertices": [ + 14.22473, -7.39136, -14.21729, 7.40649, 18.39502, -4.38354, + -18.38586, 4.39838, 19.25854, -1.16895, -19.24719, 1.18719, + 17.55103, -4.30493, -17.54236, 4.32281, 12.93835, -0.01904, + -12.92896, 0.03772, 5.76379, 3.09985, -5.75684, -3.07825, + 0.00623, 8.64502, 0.00232, -8.62427, -8.82068, 13.29492, + 8.8302, -13.27533, -15.06494, 16.2583, 15.07312, -16.23816, + -22.63428, 19.5271, 22.64465, -19.5011, -30.69092, 19.42163, + 30.70203, -19.39832, -38.74902, 15.80225, 38.75952, + -15.78326, -44.13208, 6.53174, 44.14087, -6.51019, + -44.85083, 3.26807, 44.85925, -3.25201, -45.77356, 1.01563, + 45.78223, -0.99628, -45.51538, -7.23999, 45.52661, 7.25903, + -42.71423, -14.07129, 42.72522, 14.08765, -36.12927, + -18.02051, 36.13977, 18.04218, -28.84424, -21.55127, + 28.85449, 21.57043, -19.18579, -25.1897, 19.19543, 25.211, + -10.16907, -24.23364, 10.17859, 24.24963, -4.95581, + -20.36719, 4.96423, 20.38501, -0.59399, -17.85034, 0.60376, + 17.87408, 5.58301, -15.92578, -5.57593, 15.94354, 10.26294, + -10.11475, -10.25439, 10.12842, 13.20825, 5.13818, + -13.19971, -5.11987, 5.43127, 4.8479, -5.422, -4.82941, + -4.48474, 6.31348, 4.49207, -6.29474, -11.12524, 8.15308, + 11.13342, -8.12939, -16.86169, 14.10498, 16.87036, + -14.08191, -21.80469, 18.48291, 21.81201, -18.46765, + -27.91199, 19.73633, 27.92188, -19.71558, -35.4071, + 19.15308, 35.41626, -19.13214, -40.25842, 16.08496, + 40.26648, -16.06689, -42.61963, 13.22827, 42.62805, + -13.21429, -43.20984, 11.47339, 43.21875, -11.45703, + -43.59521, -1.23145, 43.60461, 1.24609, -40.87231, -7.79199, + 40.88062, 7.8078, -33.69031, -16.59521, 33.69958, 16.61438, + -27.58264, -20.86279, 27.59192, 20.8811, -18.77234, + -24.80225, 18.78015, 24.81848, -8.87524, -26.71655, 8.8822, + 26.73114, -3.83044, -23.27881, 3.83972, 23.29742, -1.31555, + -18.90552, 1.32495, 18.92206, 2.47766, -13.77783, -2.46863, + 13.7926, 6.37817, -11.52979, -6.37024, 11.54254, 10.08008, + -8.27686, -10.07056, 8.29108, 12.802, -2.88062, -12.79346, + 2.89575, 14.2373, -0.86987, -14.22339, 0.89349, 14.16235, + 1.43262, -14.15503, -1.41809 + ], + "curve": [0.722, 0, 0.778, 1] + }, + { + "time": 0.8333, + "vertices": [ + 0.23889, -0.00537, -0.23816, 0.00665, -0.81372, 0.02832, + 0.8158, -0.02307, -0.81372, 0.02832, 0.8158, -0.02307, + -0.81372, 0.02832, 0.8158, -0.02307, 0.09924, 3.46924, + -0.09558, -3.45673, 0.09924, 3.46924, -0.09558, -3.45673, + 0.09924, 3.46924, -0.09558, -3.45673, 0.09924, 3.46924, + -0.09558, -3.45673, -1.28418, 4.77319, 1.28918, -4.758, + -6.96924, 4.61865, 6.97583, -4.60107, -14.09229, 3.87158, + 14.09937, -3.8526, -21.1825, 4.07031, 21.19189, -4.0506, + -25.83435, 2.78589, 25.84229, -2.76642, -27.0365, 0.76025, + 27.04016, -0.75427, -27.91345, 3.26221, 27.91736, -3.25305, + -27.98328, 0.78613, 27.98621, -0.78064, -25.45898, 0.71729, + 25.4635, -0.71033, -19.46387, 0.55249, 19.47156, -0.54333, + -13.56165, 0.38257, 13.56396, -0.3783, -5.4231, 0.15845, + 5.427, -0.15106, 2.59412, -1.68433, -2.59058, 1.68848, + 1.89771, 0.10547, -1.89673, -0.10504, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0.09924, 3.46924, -0.09558, -3.45673, + 0.09924, 3.46924, -0.09558, -3.45673, -0.24634, 2.37598, + 0.25073, -2.36157, -0.2196, 3.323, 0.22437, -3.30774, + -3.36035, 3.88477, 3.36572, -3.86884, -8.65723, 4.07275, + 8.66382, -4.0545, -13.93323, 3.86816, 13.94177, -3.84851, + -20.46936, 4.05054, 20.479, -4.03076, -25.48108, 2.77563, + 25.48901, -2.75653, -27.98218, 0.78833, 27.98669, -0.78064, + -28.29163, 2.38721, 28.29504, -2.37988, -27.98328, 0.78613, + 27.98621, -0.78064, -25.45898, 0.71729, 25.4635, -0.71033, + -18.51709, 0.52661, 18.52539, -0.51697, -14.10144, 0.40283, + 14.10938, -0.39368, -6.23474, 0.70972, 6.23767, -0.70398, + 1.01465, 1.25732, -1.01245, -1.25311, 0.03625, 1.26392, + -0.03516, -1.26172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0.23889, -0.00537, -0.23816, 0.00665, -0.81372, 0.02832, + 0.8158, -0.02307, -0.81372, 0.02832, 0.8158, -0.02307, + -0.81372, 0.02832, 0.8158, -0.02307 + ], + "curve": [0.889, 0, 0.944, 1] + }, + { + "time": 1, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [1.056, 0, 1.111, 1] + }, + { "time": 1.1667, "curve": [1.222, 0, 1.278, 1] }, + { + "time": 1.3333, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [1.389, 0, 1.444, 1] + }, + { "time": 1.5, "curve": [1.556, 0, 1.611, 1] }, + { + "time": 1.6667, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [1.722, 0, 1.778, 1] + }, + { + "time": 1.8333, + "vertices": [ + 10.33459, -17.1958, -10.32349, 17.23254, 10.35437, -9.68848, + -10.3418, 9.71777, 10.51208, -1.28833, -10.5, 1.32416, + 10.95776, 6.48804, -10.94556, -6.45294, 11.29907, 15.99487, + -11.2876, -15.95618, 9.93921, 21.81909, -9.92383, -21.78217, + 7.18787, 25.67969, -7.17627, -25.64209, 3.30823, 27.28687, + -3.297, -27.25739, 0.33044, 27.03931, -0.31665, -27.00244, + -2.97803, 25.90845, 2.99109, -25.86963, -6.41565, 22.88672, + 6.42737, -22.85266, -9.51074, 18.41187, 9.52612, -18.37463, + -11.53967, 12.68066, 11.54993, -12.64569, -12.14136, + 8.83057, 12.1543, -8.79602, -12.74512, 4.979, 12.75549, + -4.94739, -12.95459, -3.91821, 12.96704, 3.94836, -11.95728, + -10.51074, 11.96985, 10.54266, -9.54126, -16.75415, 9.55237, + 16.78625, -6.88611, -21.33325, 6.901, 21.36932, -3.29712, + -25.16162, 3.31238, 25.19714, 0.81958, -27.78052, -0.80713, + 27.81555, 3.27393, -27.82202, -3.26599, 27.85614, 5.73242, + -27.86401, -5.71973, 27.89539, 8.60059, -26.16162, -8.58496, + 26.19727, 10.11975, -22.19897, -10.10669, 22.2326, 9.20667, + 14.77124, -9.19714, -14.73737, 7.73804, 19.48877, -7.72839, + -19.4491, 5.23425, 22.61694, -5.22546, -22.58173, 3.10706, + 24.18164, -3.09607, -24.1405, 0.05334, 23.93115, -0.03906, + -23.8941, -2.57556, 22.55566, 2.59009, -22.52356, -5.07007, + 20.56763, 5.08337, -20.53375, -7.90698, 17.19531, 7.92065, + -17.16547, -10.08899, 12.75146, 10.10181, -12.71692, + -11.16357, 8.38574, 11.17554, -8.35181, -11.6134, 4.55884, + 11.62512, -4.52582, -11.69189, -3.73071, 11.70361, 3.76099, + -10.81982, -9.31812, 10.83069, 9.35034, -8.13147, -15.40112, + 8.14368, 15.43604, -6.04858, -18.62939, 6.06384, 18.66724, + -2.89844, -21.78076, 2.9126, 21.81195, 0.65161, -24.27319, + -0.63794, 24.30261, 3.2196, -25.01074, -3.21033, 25.0451, + 5.19324, -25.28687, -5.18372, 25.32349, 6.75342, -23.99707, + -6.74365, 24.03003, 7.84546, -21.74341, -7.83423, 21.78271, + 7.97339, -17.12891, -7.96436, 17.16791, 7.98987, -9.73413, + -7.97949, 9.76245, 8.19263, -1.11499, -8.18152, 1.14471, + 8.78857, 6.60083, -8.77808, -6.5744 + ], + "curve": [1.889, 0, 1.944, 1] + }, + { + "time": 2, + "vertices": [ + 14.22473, -7.39136, -14.21729, 7.40649, 18.39502, -4.38354, + -18.38586, 4.39838, 19.25854, -1.16895, -19.24719, 1.18719, + 17.55103, -4.30493, -17.54236, 4.32281, 12.93835, -0.01904, + -12.92896, 0.03772, 5.76379, 3.09985, -5.75684, -3.07825, + 0.00623, 8.64502, 0.00232, -8.62427, -8.82068, 13.29492, + 8.8302, -13.27533, -15.06494, 16.2583, 15.07312, -16.23816, + -22.63428, 19.5271, 22.64465, -19.5011, -30.69092, 19.42163, + 30.70203, -19.39832, -38.74902, 15.80225, 38.75952, + -15.78326, -44.13208, 6.53174, 44.14087, -6.51019, + -44.85083, 3.26807, 44.85925, -3.25201, -45.77356, 1.01563, + 45.78223, -0.99628, -45.51538, -7.23999, 45.52661, 7.25903, + -42.71423, -14.07129, 42.72522, 14.08765, -36.12927, + -18.02051, 36.13977, 18.04218, -28.84424, -21.55127, + 28.85449, 21.57043, -19.18579, -25.1897, 19.19543, 25.211, + -10.16907, -24.23364, 10.17859, 24.24963, -4.95581, + -20.36719, 4.96423, 20.38501, -0.59399, -17.85034, 0.60376, + 17.87408, 5.58301, -15.92578, -5.57593, 15.94354, 10.26294, + -10.11475, -10.25439, 10.12842, 13.20825, 5.13818, + -13.19971, -5.11987, 5.43127, 4.8479, -5.422, -4.82941, + -4.48474, 6.31348, 4.49207, -6.29474, -11.12524, 8.15308, + 11.13342, -8.12939, -16.86169, 14.10498, 16.87036, + -14.08191, -21.80469, 18.48291, 21.81201, -18.46765, + -27.91199, 19.73633, 27.92188, -19.71558, -35.4071, + 19.15308, 35.41626, -19.13214, -40.25842, 16.08496, + 40.26648, -16.06689, -42.61963, 13.22827, 42.62805, + -13.21429, -43.20984, 11.47339, 43.21875, -11.45703, + -43.59521, -1.23145, 43.60461, 1.24609, -40.87231, -7.79199, + 40.88062, 7.8078, -33.69031, -16.59521, 33.69958, 16.61438, + -27.58264, -20.86279, 27.59192, 20.8811, -18.77234, + -24.80225, 18.78015, 24.81848, -8.87524, -26.71655, 8.8822, + 26.73114, -3.83044, -23.27881, 3.83972, 23.29742, -1.31555, + -18.90552, 1.32495, 18.92206, 2.47766, -13.77783, -2.46863, + 13.7926, 6.37817, -11.52979, -6.37024, 11.54254, 10.08008, + -8.27686, -10.07056, 8.29108, 12.802, -2.88062, -12.79346, + 2.89575, 14.2373, -0.86987, -14.22339, 0.89349, 14.16235, + 1.43262, -14.15503, -1.41809 + ], + "curve": [2.056, 0, 2.111, 1] + }, + { + "time": 2.1667, + "vertices": [ + 0.23889, -0.00537, -0.23816, 0.00665, -0.81372, 0.02832, + 0.8158, -0.02307, -0.81372, 0.02832, 0.8158, -0.02307, + -0.81372, 0.02832, 0.8158, -0.02307, 0.09924, 3.46924, + -0.09558, -3.45673, 0.09924, 3.46924, -0.09558, -3.45673, + 0.09924, 3.46924, -0.09558, -3.45673, 0.09924, 3.46924, + -0.09558, -3.45673, -1.28418, 4.77319, 1.28918, -4.758, + -6.96924, 4.61865, 6.97583, -4.60107, -14.09229, 3.87158, + 14.09937, -3.8526, -21.1825, 4.07031, 21.19189, -4.0506, + -25.83435, 2.78589, 25.84229, -2.76642, -27.0365, 0.76025, + 27.04016, -0.75427, -27.91345, 3.26221, 27.91736, -3.25305, + -27.98328, 0.78613, 27.98621, -0.78064, -25.45898, 0.71729, + 25.4635, -0.71033, -19.46387, 0.55249, 19.47156, -0.54333, + -13.56165, 0.38257, 13.56396, -0.3783, -5.4231, 0.15845, + 5.427, -0.15106, 2.59412, -1.68433, -2.59058, 1.68848, + 1.89771, 0.10547, -1.89673, -0.10504, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0.09924, 3.46924, -0.09558, -3.45673, + 0.09924, 3.46924, -0.09558, -3.45673, -0.24634, 2.37598, + 0.25073, -2.36157, -0.2196, 3.323, 0.22437, -3.30774, + -3.36035, 3.88477, 3.36572, -3.86884, -8.65723, 4.07275, + 8.66382, -4.0545, -13.93323, 3.86816, 13.94177, -3.84851, + -20.46936, 4.05054, 20.479, -4.03076, -25.48108, 2.77563, + 25.48901, -2.75653, -27.98218, 0.78833, 27.98669, -0.78064, + -28.29163, 2.38721, 28.29504, -2.37988, -27.98328, 0.78613, + 27.98621, -0.78064, -25.45898, 0.71729, 25.4635, -0.71033, + -18.51709, 0.52661, 18.52539, -0.51697, -14.10144, 0.40283, + 14.10938, -0.39368, -6.23474, 0.70972, 6.23767, -0.70398, + 1.01465, 1.25732, -1.01245, -1.25311, 0.03625, 1.26392, + -0.03516, -1.26172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0.23889, -0.00537, -0.23816, 0.00665, -0.81372, 0.02832, + 0.8158, -0.02307, -0.81372, 0.02832, 0.8158, -0.02307, + -0.81372, 0.02832, 0.8158, -0.02307 + ], + "curve": [2.222, 0, 2.278, 1] + }, + { + "time": 2.3333, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [2.389, 0, 2.444, 1] + }, + { "time": 2.5, "curve": [2.556, 0, 2.611, 1] }, + { + "time": 2.6667, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [2.722, 0, 2.778, 1] + }, + { "time": 2.8333, "curve": [2.889, 0, 2.944, 1] }, + { + "time": 3, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ], + "curve": [3.056, 0, 3.111, 1] + }, + { + "time": 3.1667, + "vertices": [ + 10.33459, -17.1958, -10.32349, 17.23254, 10.35437, -9.68848, + -10.3418, 9.71777, 10.51208, -1.28833, -10.5, 1.32416, + 10.95776, 6.48804, -10.94556, -6.45294, 11.29907, 15.99487, + -11.2876, -15.95618, 9.93921, 21.81909, -9.92383, -21.78217, + 7.18787, 25.67969, -7.17627, -25.64209, 3.30823, 27.28687, + -3.297, -27.25739, 0.33044, 27.03931, -0.31665, -27.00244, + -2.97803, 25.90845, 2.99109, -25.86963, -6.41565, 22.88672, + 6.42737, -22.85266, -9.51074, 18.41187, 9.52612, -18.37463, + -11.53967, 12.68066, 11.54993, -12.64569, -12.14136, + 8.83057, 12.1543, -8.79602, -12.74512, 4.979, 12.75549, + -4.94739, -12.95459, -3.91821, 12.96704, 3.94836, -11.95728, + -10.51074, 11.96985, 10.54266, -9.54126, -16.75415, 9.55237, + 16.78625, -6.88611, -21.33325, 6.901, 21.36932, -3.29712, + -25.16162, 3.31238, 25.19714, 0.81958, -27.78052, -0.80713, + 27.81555, 3.27393, -27.82202, -3.26599, 27.85614, 5.73242, + -27.86401, -5.71973, 27.89539, 8.60059, -26.16162, -8.58496, + 26.19727, 10.11975, -22.19897, -10.10669, 22.2326, 9.20667, + 14.77124, -9.19714, -14.73737, 7.73804, 19.48877, -7.72839, + -19.4491, 5.23425, 22.61694, -5.22546, -22.58173, 3.10706, + 24.18164, -3.09607, -24.1405, 0.05334, 23.93115, -0.03906, + -23.8941, -2.57556, 22.55566, 2.59009, -22.52356, -5.07007, + 20.56763, 5.08337, -20.53375, -7.90698, 17.19531, 7.92065, + -17.16547, -10.08899, 12.75146, 10.10181, -12.71692, + -11.16357, 8.38574, 11.17554, -8.35181, -11.6134, 4.55884, + 11.62512, -4.52582, -11.69189, -3.73071, 11.70361, 3.76099, + -10.81982, -9.31812, 10.83069, 9.35034, -8.13147, -15.40112, + 8.14368, 15.43604, -6.04858, -18.62939, 6.06384, 18.66724, + -2.89844, -21.78076, 2.9126, 21.81195, 0.65161, -24.27319, + -0.63794, 24.30261, 3.2196, -25.01074, -3.21033, 25.0451, + 5.19324, -25.28687, -5.18372, 25.32349, 6.75342, -23.99707, + -6.74365, 24.03003, 7.84546, -21.74341, -7.83423, 21.78271, + 7.97339, -17.12891, -7.96436, 17.16791, 7.98987, -9.73413, + -7.97949, 9.76245, 8.19263, -1.11499, -8.18152, 1.14471, + 8.78857, 6.60083, -8.77808, -6.5744 + ], + "curve": [3.222, 0, 3.278, 1] + }, + { + "time": 3.3333, + "vertices": [ + 14.09241, -2.84912, -14.08948, 2.85089, 19.32959, -1.6936, + -19.32666, 1.69604, 20.37488, -0.56323, -20.36902, 0.56836, + 18.03687, -6.57202, -18.03418, 6.57593, 12.16516, -4.53052, + -12.16296, 4.53241, 4.2644, -2.71631, -4.26123, 2.72131, + -0.94104, 2.48828, 0.94324, -2.48419, -9.19128, 7.34692, + 9.19409, -7.34094, -14.8783, 10.83032, 14.87988, -10.82538, + -21.99084, 14.93823, 21.99585, -14.92719, -29.63245, + 15.72852, 29.63672, -15.71887, -37.51941, 12.90991, + 37.52271, -12.90265, -42.82971, 3.94824, 42.83301, -3.94226, + -43.33582, 1.35864, 43.33936, -1.35388, -44.09839, -0.06543, + 44.10168, 0.07074, -43.70911, -6.87036, 43.71362, 6.8772, + -40.98132, -12.73145, 40.98511, 12.73669, -34.547, + -15.36475, 34.55225, 15.37451, -27.3927, -18.02319, + 27.39709, 18.03204, -17.93433, -21.03564, 17.93799, + 21.04327, -9.63965, -19.1001, 9.64246, 19.10583, -4.8877, + -14.60596, 4.89038, 14.61157, -1.18958, -11.67041, 1.19421, + 11.67828, 4.49695, -9.95142, -4.49329, 9.95697, 9.27576, + -4.44946, -9.27332, 4.45154, 13.93127, 1.78271, -13.92993, + -1.77997, 5.35156, -0.00024, -5.349, 0.00458, -5.18384, + 0.72559, 5.18542, -0.7229, -11.93274, 2.3623, 11.93567, + -2.35706, -16.94385, 9.29932, 16.94714, -9.29236, -21.27478, + 14.76709, 21.27637, -14.76306, -27.14465, 16.81396, + 27.14819, -16.80634, -34.5083, 17.16455, 34.51221, + -17.15643, -39.05286, 14.97437, 39.05518, -14.96997, + -41.27625, 13.01221, 41.27881, -13.008, -41.73376, 12.15698, + 41.73621, -12.15332, -42.21655, 0.02637, 42.21973, -0.0213, + -39.4884, -5.83325, 39.49133, 5.8382, -32.48975, -14.12427, + 32.49316, 14.13025, -26.38281, -18.05396, 26.38489, + 18.06006, -17.66357, -21.62402, 17.66467, 21.62921, + -7.87134, -23.05493, 7.8728, 23.05878, -3.41541, -18.8396, + 3.41748, 18.84558, -1.68127, -13.68408, 1.68359, 13.68884, + 1.94348, -8.14722, -1.9408, 8.15082, 6.0448, -6.23877, + -6.0426, 6.24097, 10.59229, -3.90747, -10.58997, 3.90985, + 14.02759, 0.04443, -14.026, -0.04242, 15.75769, -0.28613, + -15.74915, 0.29498, 15.32837, 0.0083, -15.32593 + ] + } + ] + } + } + } + } + }, + "idle": { + "bones": { + "身体28": { + "rotate": [ + { "value": -0.4, "curve": [0.662, -0.4, 1.338, 0.28] }, + { "time": 2, "value": 0.28, "curve": [2.662, 0.28, 3.338, -0.4] }, + { "time": 4, "value": -0.4 } + ], + "translate": [ + { + "y": -2.73, + "curve": [0.662, 0, 1.338, 0, 0.662, -2.73, 1.338, 12.81] + }, + { + "time": 2, + "y": 12.81, + "curve": [2.662, 0, 3.338, 0, 2.662, 12.81, 3.338, -2.73] + }, + { "time": 4, "y": -2.73 } + ] + }, + "身体31": { + "rotate": [ + { "value": -0.3, "curve": [0.115, -0.33, 0.225, -0.35] }, + { + "time": 0.3333, + "value": -0.35, + "curve": [0.996, -0.35, 1.638, 0.36] + }, + { + "time": 2.3, + "value": 0.36, + "curve": [2.854, 0.36, 3.452, -0.13] + }, + { "time": 4, "value": -0.3 } + ] + }, + "身体32": { + "rotate": [ + { "value": -0.41, "curve": [0.225, -0.66, 0.448, -0.86] }, + { + "time": 0.6667, + "value": -0.86, + "curve": [1.329, -0.86, 2.004, 0.88] + }, + { + "time": 2.6667, + "value": 0.88, + "curve": [3.11, 0.88, 3.563, 0.11] + }, + { "time": 4, "value": -0.41 } + ] + }, + "身体25": { + "translate": [ + { + "x": 14.89, + "curve": [0.336, -4.7, 0.671, -24.56, 0.336, 0, 0.671, 0] + }, + { + "time": 1, + "x": -24.56, + "curve": [1.662, -24.56, 2.304, 54.35, 1.662, 0, 2.304, 0] + }, + { + "time": 2.9667, + "x": 54.35, + "curve": [3.3, 54.35, 3.673, 34.75, 3.3, 0, 3.673, 0] + }, + { "time": 4, "x": 14.89 } + ] + }, + "身体29": { + "rotate": [ + { "value": -1.22, "curve": [0.115, -1.35, 0.225, -1.45] }, + { + "time": 0.3333, + "value": -1.45, + "curve": [0.996, -1.45, 1.638, 1.41] + }, + { + "time": 2.3, + "value": 1.41, + "curve": [2.854, 1.41, 3.452, -0.57] + }, + { "time": 4, "value": -1.22 } + ] + }, + "身体30": { + "rotate": [ + { "value": 0.86, "curve": [0.115, 0.99, 0.225, 1.09] }, + { + "time": 0.3333, + "value": 1.09, + "curve": [0.996, 1.09, 1.638, -1.86] + }, + { + "time": 2.3, + "value": -1.86, + "curve": [2.854, -1.86, 3.452, 0.18] + }, + { "time": 4, "value": 0.86 } + ] + }, + "发23": { + "rotate": [ + { "value": 1.52, "curve": [0.538, 0.53, 1.069, -1.92] }, + { + "time": 1.6, + "value": -1.92, + "curve": [2.267, -1.92, 2.933, 1.92] + }, + { "time": 3.6, "value": 1.92, "curve": [3.736, 1.92, 3.871, 1.77] }, + { "time": 4, "value": 1.52 } + ] + }, + "发24": { + "rotate": [ + { "value": 5.92, "curve": [0.071, 6.02, 0.136, 6.09] }, + { "time": 0.2, "value": 6.09, "curve": [0.669, 6.09, 1.138, 3.1] }, + { "time": 1.6, "value": 1.32, "curve": [1.804, 0.56, 2.002, 0] }, + { "time": 2.2, "curve": [2.802, 0, 3.404, 4.96] }, + { "time": 4, "value": 5.92 } + ] + }, + "发25": { + "rotate": [ + { "value": 6.56, "curve": [0.271, 8.49, 0.536, 10.13] }, + { + "time": 0.8, + "value": 10.13, + "curve": [1.069, 10.13, 1.338, 8.53] + }, + { "time": 1.6, "value": 6.56, "curve": [2.004, 3.65, 2.402, 0] }, + { "time": 2.8, "curve": [3.202, 0, 3.604, 3.64] }, + { "time": 4, "value": 6.56 } + ] + }, + "发饰4": { + "rotate": [ + { "value": 2.22, "curve": [0.471, -0.08, 0.936, -3.91] }, + { + "time": 1.4, + "value": -3.91, + "curve": [2.067, -3.91, 2.733, 3.91] + }, + { "time": 3.4, "value": 3.91, "curve": [3.602, 3.91, 3.804, 3.22] }, + { "time": 4, "value": 2.22 } + ] + }, + "发饰5": { + "rotate": [ + { "value": 9.04, "curve": [0.469, 9.04, 0.938, 4.61] }, + { "time": 1.4, "value": 1.95, "curve": [1.604, 0.83, 1.802, 0] }, + { "time": 2, "curve": [2.667, 0, 3.333, 9.04] }, + { "time": 4, "value": 9.04 } + ] + }, + "发饰6": { + "rotate": [ + { "value": 10.23, "curve": [0.204, 11.84, 0.402, 13.05] }, + { + "time": 0.6, + "value": 13.05, + "curve": [0.869, 13.05, 1.138, 10.99] + }, + { "time": 1.4, "value": 8.45, "curve": [1.804, 4.71, 2.202, 0] }, + { "time": 2.6, "curve": [3.069, 0, 3.538, 6.4] }, + { "time": 4, "value": 10.23 } + ] + }, + "发饰2": { + "rotate": [ + { "value": -4.73, "curve": [0.667, -4.73, 1.333, 4.73] }, + { "time": 2, "value": 4.73, "curve": [2.667, 4.73, 3.333, -4.73] }, + { "time": 4, "value": -4.73 } + ] + }, + "发饰7": { + "rotate": [ + { "value": -3.12, "curve": [0.271, -7.11, 0.536, -10.53] }, + { + "time": 0.8, + "value": -10.53, + "curve": [1.467, -10.53, 2.133, 10.53] + }, + { + "time": 2.8, + "value": 10.53, + "curve": [3.202, 10.53, 3.604, 2.96] + }, + { "time": 4, "value": -3.12 } + ] + }, + "发饰8": { + "rotate": [ + { "value": -4.73, "curve": [0.667, -4.73, 1.333, 4.73] }, + { "time": 2, "value": 4.73, "curve": [2.667, 4.73, 3.333, -4.73] }, + { "time": 4, "value": -4.73 } + ] + }, + "发饰9": { + "rotate": [ + { "value": -3.12, "curve": [0.271, -7.11, 0.536, -10.53] }, + { + "time": 0.8, + "value": -10.53, + "curve": [1.467, -10.53, 2.133, 10.53] + }, + { + "time": 2.8, + "value": 10.53, + "curve": [3.202, 10.53, 3.604, 2.96] + }, + { "time": 4, "value": -3.12 } + ] + }, + "发5": { + "rotate": [ + { "value": 0.86, "curve": [0.404, -0.81, 0.802, -2.92] }, + { + "time": 1.2, + "value": -2.92, + "curve": [1.867, -2.92, 2.533, 2.92] + }, + { "time": 3.2, "value": 2.92, "curve": [3.469, 2.92, 3.738, 2] }, + { "time": 4, "value": 0.86 } + ] + }, + "发15": { + "rotate": [ + { "value": 5.15, "curve": [0.403, 4.57, 0.804, 2.48] }, + { "time": 1.2, "value": 1.15, "curve": [1.404, 0.49, 1.602, 0] }, + { "time": 1.8, "curve": [2.467, 0, 3.133, 5.31] }, + { "time": 3.8, "value": 5.31, "curve": [3.867, 5.31, 3.934, 5.24] }, + { "time": 4, "value": 5.15 } + ] + }, + "发16": { + "rotate": [ + { "value": 8.63, "curve": [0.138, 9.23, 0.269, 9.63] }, + { "time": 0.4, "value": 9.63, "curve": [0.669, 9.63, 0.938, 8.11] }, + { "time": 1.2, "value": 6.24, "curve": [1.604, 3.47, 2.002, 0] }, + { "time": 2.4, "curve": [2.936, 0, 3.471, 6.18] }, + { "time": 4, "value": 8.63 } + ] + }, + "身体18": { + "rotate": [ + { "value": -0.88, "curve": [0.271, -2.02, 0.536, -2.98] }, + { + "time": 0.8, + "value": -2.98, + "curve": [1.467, -2.98, 2.133, 2.98] + }, + { "time": 2.8, "value": 2.98, "curve": [3.202, 2.98, 3.604, 0.84] }, + { "time": 4, "value": -0.88 } + ] + }, + "身体19": { + "rotate": [ + { "value": 6.08, "curve": [0.27, 5.21, 0.536, 3.69] }, + { "time": 0.8, "value": 2.39, "curve": [1.071, 1.1, 1.336, 0] }, + { "time": 1.6, "curve": [2.267, 0, 2.933, 6.79] }, + { "time": 3.6, "value": 6.79, "curve": [3.734, 6.79, 3.868, 6.51] }, + { "time": 4, "value": 6.08 } + ] + }, + "发7": { + "rotate": [ + { "value": -0.88, "curve": [0.271, -2.02, 0.536, -2.98] }, + { + "time": 0.8, + "value": -2.98, + "curve": [1.467, -2.98, 2.133, 2.98] + }, + { "time": 2.8, "value": 2.98, "curve": [3.202, 2.98, 3.604, 0.84] }, + { "time": 4, "value": -0.88 } + ] + }, + "发8": { + "rotate": [ + { "value": 6.08, "curve": [0.27, 5.21, 0.536, 3.69] }, + { "time": 0.8, "value": 2.39, "curve": [1.071, 1.1, 1.336, 0] }, + { "time": 1.6, "curve": [2.267, 0, 2.933, 6.79] }, + { "time": 3.6, "value": 6.79, "curve": [3.734, 6.79, 3.868, 6.51] }, + { "time": 4, "value": 6.08 } + ] + }, + "发10": { + "rotate": [ + { "value": -1.7, "curve": [0.204, -2.43, 0.402, -2.98] }, + { + "time": 0.6, + "value": -2.98, + "curve": [1.267, -2.98, 1.933, 2.98] + }, + { "time": 2.6, "value": 2.98, "curve": [3.069, 2.98, 3.538, 0.06] }, + { "time": 4, "value": -1.7 } + ] + }, + "发11": { + "rotate": [ + { "value": 5.33, "curve": [0.203, 4.48, 0.402, 3.37] }, + { "time": 0.6, "value": 2.39, "curve": [0.871, 1.1, 1.136, 0] }, + { "time": 1.4, "curve": [2.067, 0, 2.733, 6.79] }, + { "time": 3.4, "value": 6.79, "curve": [3.601, 6.79, 3.802, 6.19] }, + { "time": 4, "value": 5.33 } + ] + }, + "发13": { + "rotate": [ + { "curve": [0.338, -1.48, 0.669, -2.98] }, + { "time": 1, "value": -2.98, "curve": [1.667, -2.98, 2.333, 2.98] }, + { "time": 3, "value": 2.98, "curve": [3.336, 2.98, 3.671, 1.5] }, + { "time": 4 } + ] + }, + "发14": { + "rotate": [ + { "value": 6.38, "curve": [0.336, 5.16, 0.67, 1.26] }, + { + "time": 1, + "value": -2.01, + "curve": [1.271, -4.59, 1.536, -6.79] + }, + { + "time": 1.8, + "value": -6.79, + "curve": [2.467, -6.79, 3.133, 6.79] + }, + { "time": 3.8, "value": 6.79, "curve": [3.867, 6.79, 3.934, 6.63] }, + { "time": 4, "value": 6.38 } + ] + }, + "发2": { + "rotate": [ + { "value": -1.78, "curve": [0.138, -2.06, 0.269, -2.24] }, + { + "time": 0.4, + "value": -2.24, + "curve": [1.067, -2.24, 1.733, 2.24] + }, + { + "time": 2.4, + "value": 2.24, + "curve": [2.936, 2.24, 3.471, -0.64] + }, + { "time": 4, "value": -1.78 } + ] + }, + "发3": { + "rotate": [ + { "value": 0.01, "curve": [0.134, -0.86, 0.267, -1.74] }, + { + "time": 0.4, + "value": -2.48, + "curve": [0.604, -3.56, 0.802, -4.37] + }, + { "time": 1, "value": -4.37, "curve": [1.667, -4.37, 2.333, 4.37] }, + { "time": 3, "value": 4.37, "curve": [3.334, 4.37, 3.669, 2.19] }, + { "time": 4, "value": 0.01 } + ] + }, + "发17": { + "rotate": [ + { "value": 5.95, "curve": [0.136, 5, 0.269, 3.66] }, + { + "time": 0.4, + "value": 2.21, + "curve": [0.804, -2.08, 1.202, -7.47] + }, + { + "time": 1.6, + "value": -7.47, + "curve": [2.267, -7.47, 2.933, 7.47] + }, + { "time": 3.6, "value": 7.47, "curve": [3.734, 7.47, 3.869, 6.9] }, + { "time": 4, "value": 5.95 } + ] + }, + "发19": { + "rotate": [ + { "value": -2.12, "curve": [0.071, -2.19, 0.136, -2.24] }, + { + "time": 0.2, + "value": -2.24, + "curve": [0.867, -2.24, 1.533, 2.24] + }, + { + "time": 2.2, + "value": 2.24, + "curve": [2.802, 2.24, 3.404, -1.41] + }, + { "time": 4, "value": -2.12 } + ] + }, + "发20": { + "rotate": [ + { "value": -1.28, "curve": [0.067, -1.7, 0.134, -2.11] }, + { + "time": 0.2, + "value": -2.48, + "curve": [0.404, -3.56, 0.602, -4.37] + }, + { + "time": 0.8, + "value": -4.37, + "curve": [1.467, -4.37, 2.133, 4.37] + }, + { "time": 2.8, "value": 4.37, "curve": [3.202, 4.37, 3.603, 1.23] }, + { "time": 4, "value": -1.28 } + ] + }, + "发21": { + "rotate": [ + { "value": 4.27, "curve": [0.068, 3.64, 0.134, 2.94] }, + { + "time": 0.2, + "value": 2.21, + "curve": [0.604, -2.08, 1.002, -7.47] + }, + { + "time": 1.4, + "value": -7.47, + "curve": [2.067, -7.47, 2.733, 7.47] + }, + { "time": 3.4, "value": 7.47, "curve": [3.602, 7.47, 3.803, 6.16] }, + { "time": 4, "value": 4.27 } + ] + }, + "发27": { + "rotate": [ + { "value": -2.24, "curve": [0.667, -2.24, 1.333, 2.24] }, + { "time": 2, "value": 2.24, "curve": [2.667, 2.24, 3.333, -2.24] }, + { "time": 4, "value": -2.24 } + ] + }, + "发28": { + "rotate": [ + { "value": -2.48, "curve": [0.204, -3.56, 0.402, -4.37] }, + { + "time": 0.6, + "value": -4.37, + "curve": [1.267, -4.37, 1.933, 4.37] + }, + { "time": 2.6, "value": 4.37, "curve": [3.069, 4.37, 3.538, 0.08] }, + { "time": 4, "value": -2.48 } + ] + }, + "发29": { + "rotate": [ + { "value": 2.21, "curve": [0.404, -2.08, 0.802, -7.47] }, + { + "time": 1.2, + "value": -7.47, + "curve": [1.867, -7.47, 2.533, 7.47] + }, + { "time": 3.2, "value": 7.47, "curve": [3.469, 7.47, 3.738, 5.11] }, + { "time": 4, "value": 2.21 } + ] + }, + "发饰1": { + "rotate": [ + { "value": 3.08, "curve": [0.667, 3.08, 1.333, -3.08] }, + { "time": 2, "value": -3.08, "curve": [2.667, -3.08, 3.333, 3.08] }, + { "time": 4, "value": 3.08 } + ] + }, + "发饰10": { + "rotate": [ + { "value": 1.8, "curve": [0.271, 4.11, 0.536, 6.08] }, + { + "time": 0.8, + "value": 6.08, + "curve": [1.467, 6.08, 2.133, -6.08] + }, + { + "time": 2.8, + "value": -6.08, + "curve": [3.202, -6.08, 3.604, -1.71] + }, + { "time": 4, "value": 1.8 } + ] + }, + "后发3": { + "rotate": [ + { "value": -4.45, "curve": [0.049, -4.52, 0.091, -4.62] }, + { + "time": 0.1333, + "value": -4.62, + "curve": [0.8, -4.62, 1.467, 4.62] + }, + { + "time": 2.1333, + "value": 4.62, + "curve": [2.758, 4.62, 3.382, -3.42] + }, + { "time": 4, "value": -4.45 } + ] + }, + "后发5": { + "rotate": [ + { "value": 0.48, "curve": [0.138, 0.19, 0.269, 0] }, + { "time": 0.4, "curve": [1.067, 0, 1.733, 4.62] }, + { "time": 2.4, "value": 4.62, "curve": [2.936, 4.62, 3.471, 1.65] }, + { "time": 4, "value": 0.48 } + ] + }, + "后发7": { + "rotate": [ + { "value": -4.62, "curve": [0.667, -4.62, 1.333, 4.62] }, + { "time": 2, "value": 4.62, "curve": [2.667, 4.62, 3.333, -4.62] }, + { "time": 4, "value": -4.62 } + ] + }, + "后发9": { + "rotate": [ + { "value": 1, "curve": [0.204, 0.43, 0.402, 0] }, + { "time": 0.6, "curve": [1.267, 0, 1.933, 4.62] }, + { "time": 2.6, "value": 4.62, "curve": [3.069, 4.62, 3.538, 2.35] }, + { "time": 4, "value": 1 } + ] + }, + "后发10": { + "rotate": [ + { "value": -3.66, "curve": [0.138, -4.23, 0.269, -4.62] }, + { + "time": 0.4, + "value": -4.62, + "curve": [1.067, -4.62, 1.733, 4.62] + }, + { + "time": 2.4, + "value": 4.62, + "curve": [2.936, 4.62, 3.471, -1.31] + }, + { "time": 4, "value": -3.66 } + ] + }, + "后发12": { + "rotate": [ + { "curve": [0.667, 0, 1.333, 4.62] }, + { "time": 2, "value": 4.62, "curve": [2.667, 4.62, 3.333, 0] }, + { "time": 4 } + ] + }, + "后发14": { + "rotate": [ + { "value": -4.13, "curve": [0.093, -4.4, 0.18, -4.62] }, + { + "time": 0.2667, + "value": -4.62, + "curve": [0.933, -4.62, 1.6, 4.62] + }, + { + "time": 2.2667, + "value": 4.62, + "curve": [2.847, 4.62, 3.427, -2.31] + }, + { "time": 4, "value": -4.13 } + ] + }, + "后发16": { + "rotate": [ + { "value": 0.13, "curve": [0.071, 0.05, 0.136, 0] }, + { "time": 0.2, "curve": [0.867, 0, 1.533, 4.62] }, + { "time": 2.2, "value": 4.62, "curve": [2.802, 4.62, 3.404, 0.86] }, + { "time": 4, "value": 0.13 } + ] + }, + "后发16b": { + "rotate": [ + { "value": 2.37, "curve": [0.067, 2.05, 0.134, 1.73] }, + { "time": 0.2, "value": 1.45, "curve": [0.404, 0.62, 0.602, 0] }, + { "time": 0.8, "curve": [1.467, 0, 2.133, 6.7] }, + { "time": 2.8, "value": 6.7, "curve": [3.202, 6.7, 3.603, 4.3] }, + { "time": 4, "value": 2.37 } + ] + }, + "后发16c": { + "rotate": [ + { "value": 8.03, "curve": [0.068, 7.6, 0.134, 7.11] }, + { "time": 0.2, "value": 6.62, "curve": [0.604, 3.69, 1.002, 0] }, + { "time": 1.4, "curve": [2.067, 0, 2.733, 10.21] }, + { + "time": 3.4, + "value": 10.21, + "curve": [3.602, 10.21, 3.803, 9.31] + }, + { "time": 4, "value": 8.03 } + ] + }, + "后发7b": { + "rotate": [ + { "value": -3.8, "curve": [0.204, -5.46, 0.402, -6.7] }, + { "time": 0.6, "value": -6.7, "curve": [1.267, -6.7, 1.933, 6.7] }, + { "time": 2.6, "value": 6.7, "curve": [3.069, 6.7, 3.538, 0.13] }, + { "time": 4, "value": -3.8 } + ] + }, + "后发7c": { + "rotate": [ + { "value": 3.02, "curve": [0.404, -2.84, 0.802, -10.21] }, + { + "time": 1.2, + "value": -10.21, + "curve": [1.867, -10.21, 2.533, 10.21] + }, + { + "time": 3.2, + "value": 10.21, + "curve": [3.469, 10.21, 3.738, 6.99] + }, + { "time": 4, "value": 3.02 } + ] + }, + "后发3b": { + "rotate": [ + { "value": -2.6, "curve": [0.047, -3.01, 0.09, -3.44] }, + { + "time": 0.1333, + "value": -3.8, + "curve": [0.338, -5.46, 0.536, -6.7] + }, + { "time": 0.7333, "value": -6.7, "curve": [1.4, -6.7, 2.067, 6.7] }, + { + "time": 2.7333, + "value": 6.7, + "curve": [3.158, 6.7, 3.584, 1.33] + }, + { "time": 4, "value": -2.6 } + ] + }, + "后发3c": { + "rotate": [ + { "value": 4.95, "curve": [0.046, 4.34, 0.09, 3.68] }, + { + "time": 0.1333, + "value": 3.02, + "curve": [0.538, -2.84, 0.936, -10.21] + }, + { + "time": 1.3333, + "value": -10.21, + "curve": [2, -10.21, 2.667, 10.21] + }, + { + "time": 3.3333, + "value": 10.21, + "curve": [3.557, 10.21, 3.781, 7.99] + }, + { "time": 4, "value": 4.95 } + ] + }, + "后发14b": { + "rotate": [ + { "value": -1.31, "curve": [0.091, -2.19, 0.179, -3.06] }, + { + "time": 0.2667, + "value": -3.8, + "curve": [0.471, -5.46, 0.669, -6.7] + }, + { "time": 0.8667, "value": -6.7, "curve": [1.533, -6.7, 2.2, 6.7] }, + { + "time": 2.8667, + "value": 6.7, + "curve": [3.246, 6.7, 3.626, 2.41] + }, + { "time": 4, "value": -1.31 } + ] + }, + "后发14c": { + "rotate": [ + { "value": 6.67, "curve": [0.091, 5.6, 0.179, 4.34] }, + { + "time": 0.2667, + "value": 3.02, + "curve": [0.671, -2.84, 1.069, -10.21] + }, + { + "time": 1.4667, + "value": -10.21, + "curve": [2.133, -10.21, 2.8, 10.21] + }, + { + "time": 3.4667, + "value": 10.21, + "curve": [3.646, 10.21, 3.825, 8.8] + }, + { "time": 4, "value": 6.67 } + ] + }, + "后发10b": { + "rotate": [ + { "value": 0.02, "curve": [0.134, -1.32, 0.267, -2.68] }, + { + "time": 0.4, + "value": -3.8, + "curve": [0.604, -5.46, 0.802, -6.7] + }, + { "time": 1, "value": -6.7, "curve": [1.667, -6.7, 2.333, 6.7] }, + { "time": 3, "value": 6.7, "curve": [3.334, 6.7, 3.669, 3.37] }, + { "time": 4, "value": 0.02 } + ] + }, + "后发10c": { + "rotate": [ + { "value": 8.13, "curve": [0.136, 6.83, 0.269, 5.01] }, + { + "time": 0.4, + "value": 3.02, + "curve": [0.804, -2.84, 1.202, -10.21] + }, + { + "time": 1.6, + "value": -10.21, + "curve": [2.267, -10.21, 2.933, 10.21] + }, + { + "time": 3.6, + "value": 10.21, + "curve": [3.734, 10.21, 3.869, 9.43] + }, + { "time": 4, "value": 8.13 } + ] + }, + "后发12b": { + "rotate": [ + { "value": 1.45, "curve": [0.204, 0.62, 0.402, 0] }, + { "time": 0.6, "curve": [1.267, 0, 1.933, 6.7] }, + { "time": 2.6, "value": 6.7, "curve": [3.069, 6.7, 3.538, 3.41] }, + { "time": 4, "value": 1.45 } + ] + }, + "后发12c": { + "rotate": [ + { "value": 6.62, "curve": [0.404, 3.69, 0.802, 0] }, + { "time": 1.2, "curve": [1.867, 0, 2.533, 10.21] }, + { + "time": 3.2, + "value": 10.21, + "curve": [3.469, 10.21, 3.738, 8.6] + }, + { "time": 4, "value": 6.62 } + ] + }, + "后发5b": { + "rotate": [ + { "value": 3.36, "curve": [0.134, 2.69, 0.267, 2.01] }, + { "time": 0.4, "value": 1.45, "curve": [0.604, 0.62, 0.802, 0] }, + { "time": 1, "curve": [1.667, 0, 2.333, 6.7] }, + { "time": 3, "value": 6.7, "curve": [3.334, 6.7, 3.669, 5.03] }, + { "time": 4, "value": 3.36 } + ] + }, + "后发5c": { + "rotate": [ + { "value": 9.17, "curve": [0.136, 8.52, 0.269, 7.61] }, + { "time": 0.4, "value": 6.62, "curve": [0.804, 3.69, 1.202, 0] }, + { "time": 1.6, "curve": [2.267, 0, 2.933, 10.21] }, + { + "time": 3.6, + "value": 10.21, + "curve": [3.734, 10.21, 3.869, 9.82] + }, + { "time": 4, "value": 9.17 } + ] + }, + "后发9b": { + "rotate": [ + { "value": 4.35, "curve": [0.201, 3.38, 0.401, 2.29] }, + { "time": 0.6, "value": 1.45, "curve": [0.804, 0.62, 1.002, 0] }, + { "time": 1.2, "curve": [1.867, 0, 2.533, 6.7] }, + { "time": 3.2, "value": 6.7, "curve": [3.467, 6.7, 3.735, 5.63] }, + { "time": 4, "value": 4.35 } + ] + }, + "后发9c": { + "rotate": [ + { "value": 9.92, "curve": [0.203, 9.38, 0.403, 8.11] }, + { "time": 0.6, "value": 6.62, "curve": [1.004, 3.69, 1.402, 0] }, + { "time": 1.8, "curve": [2.467, 0, 3.133, 10.21] }, + { + "time": 3.8, + "value": 10.21, + "curve": [3.867, 10.21, 3.934, 10.11] + }, + { "time": 4, "value": 9.92 } + ] + }, + "领结": { + "shear": [ + { "curve": [0.667, 0, 1.333, 6.04, 0.667, 0, 1.333, 0] }, + { + "time": 2, + "x": 6.04, + "curve": [2.667, 6.04, 3.333, 0, 2.667, 0, 3.333, 0] + }, + { "time": 4 } + ] + }, + "领结2": { + "shear": [ + { "x": 5.26, "curve": [0.271, 2.42, 0.536, 0, 0.271, 0, 0.536, 0] }, + { + "time": 0.8, + "curve": [1.467, 0, 2.133, 14.93, 1.467, 0, 2.133, 0] + }, + { + "time": 2.8, + "x": 14.93, + "curve": [3.202, 14.93, 3.604, 9.57, 3.202, 0, 3.604, 0] + }, + { "time": 4, "x": 5.26 } + ] + }, + "身体13": { + "shear": [ + { "curve": [0.667, 0, 1.333, 6.04, 0.667, 0, 1.333, 0] }, + { + "time": 2, + "x": 6.04, + "curve": [2.667, 6.04, 3.333, 0, 2.667, 0, 3.333, 0] + }, + { "time": 4 } + ] + }, + "身体14": { + "shear": [ + { "x": 5.26, "curve": [0.271, 2.42, 0.536, 0, 0.271, 0, 0.536, 0] }, + { + "time": 0.8, + "curve": [1.467, 0, 2.133, 14.93, 1.467, 0, 2.133, 0] + }, + { + "time": 2.8, + "x": 14.93, + "curve": [3.202, 14.93, 3.604, 9.57, 3.202, 0, 3.604, 0] + }, + { "time": 4, "x": 5.26 } + ] + }, + "后摆2": { + "shear": [ + { + "x": -4.31, + "curve": [0.667, -4.31, 1.333, 4.31, 0.667, 0, 1.333, 0] + }, + { + "time": 2, + "x": 4.31, + "curve": [2.667, 4.31, 3.333, -4.31, 2.667, 0, 3.333, 0] + }, + { "time": 4, "x": -4.31 } + ] + }, + "后摆4": { + "shear": [ + { "curve": [0.667, 0, 1.333, 4.31, 0.667, 0, 1.333, 0] }, + { + "time": 2, + "x": 4.31, + "curve": [2.667, 4.31, 3.333, 0, 2.667, 0, 3.333, 0] + }, + { "time": 4 } + ] + }, + "后摆4b": { + "shear": [ + { "x": 2.25, "curve": [0.227, 0.99, 0.447, 0, 0.227, 0, 0.447, 0] }, + { "time": 0.6667, "curve": [1.333, 0, 2, 8.6, 1.333, 0, 2, 0] }, + { + "time": 2.6667, + "x": 8.6, + "curve": [3.113, 8.6, 3.56, 4.79, 3.113, 0, 3.56, 0] + }, + { "time": 4, "x": 2.25 } + ] + }, + "后摆4c": { + "shear": [ + { + "x": 4.77, + "curve": [0.404, -4.48, 0.802, -16.11, 0.404, 0, 0.802, 0] + }, + { + "time": 1.2, + "x": -16.11, + "curve": [1.867, -16.11, 2.533, 16.11, 1.867, 0, 2.533, 0] + }, + { + "time": 3.2, + "x": 16.11, + "curve": [3.469, 16.11, 3.738, 11.02, 3.469, 0, 3.738, 0] + }, + { "time": 4, "x": 4.77 } + ] + }, + "后摆2b": { + "shear": [ + { + "x": -4.1, + "curve": [0.227, -6.61, 0.447, -8.6, 0.227, 0, 0.447, 0] + }, + { + "time": 0.6667, + "x": -8.6, + "curve": [1.333, -8.6, 2, 8.6, 1.333, 0, 2, 0] + }, + { + "time": 2.6667, + "x": 8.6, + "curve": [3.113, 8.6, 3.56, 0.99, 3.113, 0, 3.56, 0] + }, + { "time": 4, "x": -4.1 } + ] + }, + "后摆2c": { + "shear": [ + { + "x": 4.77, + "curve": [0.404, -4.48, 0.802, -16.11, 0.404, 0, 0.802, 0] + }, + { + "time": 1.2, + "x": -16.11, + "curve": [1.867, -16.11, 2.533, 16.11, 1.867, 0, 2.533, 0] + }, + { + "time": 3.2, + "x": 16.11, + "curve": [3.469, 16.11, 3.738, 11.02, 3.469, 0, 3.738, 0] + }, + { "time": 4, "x": 4.77 } + ] + } + }, + "ik": { + "L": [{ "compress": true, "stretch": true }], + "R": [{ "compress": true, "stretch": true }] + } + } + } +} diff --git a/public/pio/models/spine/firefly/1310.png b/public/pio/models/spine/firefly/1310.png new file mode 100644 index 0000000..18a3888 Binary files /dev/null and b/public/pio/models/spine/firefly/1310.png differ diff --git a/public/pio/models/spine/firefly/1310.spine b/public/pio/models/spine/firefly/1310.spine new file mode 100644 index 0000000..fcf29af Binary files /dev/null and b/public/pio/models/spine/firefly/1310.spine differ diff --git a/public/pio/models/spine/firefly/audio/使一颗心免于哀伤-哼唱.wav b/public/pio/models/spine/firefly/audio/使一颗心免于哀伤-哼唱.wav new file mode 100644 index 0000000..b90044e Binary files /dev/null and b/public/pio/models/spine/firefly/audio/使一颗心免于哀伤-哼唱.wav differ diff --git a/public/pio/models/spine/firefly/images/E眉毛.png b/public/pio/models/spine/firefly/images/E眉毛.png new file mode 100644 index 0000000..c67f2ac Binary files /dev/null and b/public/pio/models/spine/firefly/images/E眉毛.png differ diff --git a/public/pio/models/spine/firefly/images/E眼珠.png b/public/pio/models/spine/firefly/images/E眼珠.png new file mode 100644 index 0000000..b0dfc60 Binary files /dev/null and b/public/pio/models/spine/firefly/images/E眼珠.png differ diff --git a/public/pio/models/spine/firefly/images/E眼白.png b/public/pio/models/spine/firefly/images/E眼白.png new file mode 100644 index 0000000..070a242 Binary files /dev/null and b/public/pio/models/spine/firefly/images/E眼白.png differ diff --git a/public/pio/models/spine/firefly/images/E眼皮.png b/public/pio/models/spine/firefly/images/E眼皮.png new file mode 100644 index 0000000..9c7d16a Binary files /dev/null and b/public/pio/models/spine/firefly/images/E眼皮.png differ diff --git a/public/pio/models/spine/firefly/images/E眼角.png b/public/pio/models/spine/firefly/images/E眼角.png new file mode 100644 index 0000000..8912d14 Binary files /dev/null and b/public/pio/models/spine/firefly/images/E眼角.png differ diff --git a/public/pio/models/spine/firefly/images/E睫毛.png b/public/pio/models/spine/firefly/images/E睫毛.png new file mode 100644 index 0000000..6e28d6c Binary files /dev/null and b/public/pio/models/spine/firefly/images/E睫毛.png differ diff --git a/public/pio/models/spine/firefly/images/E脸1.png b/public/pio/models/spine/firefly/images/E脸1.png new file mode 100644 index 0000000..9180ed2 Binary files /dev/null and b/public/pio/models/spine/firefly/images/E脸1.png differ diff --git a/public/pio/models/spine/firefly/images/E脸2.png b/public/pio/models/spine/firefly/images/E脸2.png new file mode 100644 index 0000000..89416b7 Binary files /dev/null and b/public/pio/models/spine/firefly/images/E脸2.png differ diff --git a/public/pio/models/spine/firefly/images/L大臂.png b/public/pio/models/spine/firefly/images/L大臂.png new file mode 100644 index 0000000..53e9d5f Binary files /dev/null and b/public/pio/models/spine/firefly/images/L大臂.png differ diff --git a/public/pio/models/spine/firefly/images/L大臂衣袖.png b/public/pio/models/spine/firefly/images/L大臂衣袖.png new file mode 100644 index 0000000..0928221 Binary files /dev/null and b/public/pio/models/spine/firefly/images/L大臂衣袖.png differ diff --git a/public/pio/models/spine/firefly/images/L大臂衣袖后.png b/public/pio/models/spine/firefly/images/L大臂衣袖后.png new file mode 100644 index 0000000..0320a03 Binary files /dev/null and b/public/pio/models/spine/firefly/images/L大臂衣袖后.png differ diff --git a/public/pio/models/spine/firefly/images/L正常左小臂.png b/public/pio/models/spine/firefly/images/L正常左小臂.png new file mode 100644 index 0000000..f4f05ea Binary files /dev/null and b/public/pio/models/spine/firefly/images/L正常左小臂.png differ diff --git a/public/pio/models/spine/firefly/images/L正常左手.png b/public/pio/models/spine/firefly/images/L正常左手.png new file mode 100644 index 0000000..48612bf Binary files /dev/null and b/public/pio/models/spine/firefly/images/L正常左手.png differ diff --git a/public/pio/models/spine/firefly/images/L正常左袖口.png b/public/pio/models/spine/firefly/images/L正常左袖口.png new file mode 100644 index 0000000..e259f3c Binary files /dev/null and b/public/pio/models/spine/firefly/images/L正常左袖口.png differ diff --git a/public/pio/models/spine/firefly/images/M嘴巴.png b/public/pio/models/spine/firefly/images/M嘴巴.png new file mode 100644 index 0000000..6a73230 Binary files /dev/null and b/public/pio/models/spine/firefly/images/M嘴巴.png differ diff --git a/public/pio/models/spine/firefly/images/M笑口.png b/public/pio/models/spine/firefly/images/M笑口.png new file mode 100644 index 0000000..0c0436b Binary files /dev/null and b/public/pio/models/spine/firefly/images/M笑口.png differ diff --git a/public/pio/models/spine/firefly/images/M说话.png b/public/pio/models/spine/firefly/images/M说话.png new file mode 100644 index 0000000..5389983 Binary files /dev/null and b/public/pio/models/spine/firefly/images/M说话.png differ diff --git a/public/pio/models/spine/firefly/images/R大臂.png b/public/pio/models/spine/firefly/images/R大臂.png new file mode 100644 index 0000000..9e6f78d Binary files /dev/null and b/public/pio/models/spine/firefly/images/R大臂.png differ diff --git a/public/pio/models/spine/firefly/images/R大臂衣袖.png b/public/pio/models/spine/firefly/images/R大臂衣袖.png new file mode 100644 index 0000000..80785dc Binary files /dev/null and b/public/pio/models/spine/firefly/images/R大臂衣袖.png differ diff --git a/public/pio/models/spine/firefly/images/R大臂衣袖后.png b/public/pio/models/spine/firefly/images/R大臂衣袖后.png new file mode 100644 index 0000000..7aba4d2 Binary files /dev/null and b/public/pio/models/spine/firefly/images/R大臂衣袖后.png differ diff --git a/public/pio/models/spine/firefly/images/R正常右小臂.png b/public/pio/models/spine/firefly/images/R正常右小臂.png new file mode 100644 index 0000000..9ea3602 Binary files /dev/null and b/public/pio/models/spine/firefly/images/R正常右小臂.png differ diff --git a/public/pio/models/spine/firefly/images/R正常右手.png b/public/pio/models/spine/firefly/images/R正常右手.png new file mode 100644 index 0000000..7bbc5a0 Binary files /dev/null and b/public/pio/models/spine/firefly/images/R正常右手.png differ diff --git a/public/pio/models/spine/firefly/images/X眼.png b/public/pio/models/spine/firefly/images/X眼.png new file mode 100644 index 0000000..f2d1375 Binary files /dev/null and b/public/pio/models/spine/firefly/images/X眼.png differ diff --git a/public/pio/models/spine/firefly/images/发1.png b/public/pio/models/spine/firefly/images/发1.png new file mode 100644 index 0000000..c40aa81 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发1.png differ diff --git a/public/pio/models/spine/firefly/images/发10.png b/public/pio/models/spine/firefly/images/发10.png new file mode 100644 index 0000000..b87557c Binary files /dev/null and b/public/pio/models/spine/firefly/images/发10.png differ diff --git a/public/pio/models/spine/firefly/images/发11内阴影.png b/public/pio/models/spine/firefly/images/发11内阴影.png new file mode 100644 index 0000000..95ba3f9 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发11内阴影.png differ diff --git a/public/pio/models/spine/firefly/images/发2.png b/public/pio/models/spine/firefly/images/发2.png new file mode 100644 index 0000000..200cece Binary files /dev/null and b/public/pio/models/spine/firefly/images/发2.png differ diff --git a/public/pio/models/spine/firefly/images/发3.png b/public/pio/models/spine/firefly/images/发3.png new file mode 100644 index 0000000..996ea80 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发3.png differ diff --git a/public/pio/models/spine/firefly/images/发4.png b/public/pio/models/spine/firefly/images/发4.png new file mode 100644 index 0000000..457d99c Binary files /dev/null and b/public/pio/models/spine/firefly/images/发4.png differ diff --git a/public/pio/models/spine/firefly/images/发5.png b/public/pio/models/spine/firefly/images/发5.png new file mode 100644 index 0000000..a24018d Binary files /dev/null and b/public/pio/models/spine/firefly/images/发5.png differ diff --git a/public/pio/models/spine/firefly/images/发6.png b/public/pio/models/spine/firefly/images/发6.png new file mode 100644 index 0000000..99341fd Binary files /dev/null and b/public/pio/models/spine/firefly/images/发6.png differ diff --git a/public/pio/models/spine/firefly/images/发7.png b/public/pio/models/spine/firefly/images/发7.png new file mode 100644 index 0000000..e83496b Binary files /dev/null and b/public/pio/models/spine/firefly/images/发7.png differ diff --git a/public/pio/models/spine/firefly/images/发8.png b/public/pio/models/spine/firefly/images/发8.png new file mode 100644 index 0000000..8518b7d Binary files /dev/null and b/public/pio/models/spine/firefly/images/发8.png differ diff --git a/public/pio/models/spine/firefly/images/发9.png b/public/pio/models/spine/firefly/images/发9.png new file mode 100644 index 0000000..fa73967 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发9.png differ diff --git a/public/pio/models/spine/firefly/images/发带.png b/public/pio/models/spine/firefly/images/发带.png new file mode 100644 index 0000000..cb3e9c7 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发带.png differ diff --git a/public/pio/models/spine/firefly/images/发影子.png b/public/pio/models/spine/firefly/images/发影子.png new file mode 100644 index 0000000..ba69696 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发影子.png differ diff --git a/public/pio/models/spine/firefly/images/发饰1.png b/public/pio/models/spine/firefly/images/发饰1.png new file mode 100644 index 0000000..4432179 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发饰1.png differ diff --git a/public/pio/models/spine/firefly/images/发饰2.png b/public/pio/models/spine/firefly/images/发饰2.png new file mode 100644 index 0000000..58b2cd8 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发饰2.png differ diff --git a/public/pio/models/spine/firefly/images/发饰3.png b/public/pio/models/spine/firefly/images/发饰3.png new file mode 100644 index 0000000..c99e541 Binary files /dev/null and b/public/pio/models/spine/firefly/images/发饰3.png differ diff --git a/public/pio/models/spine/firefly/images/可爱花朵.png b/public/pio/models/spine/firefly/images/可爱花朵.png new file mode 100644 index 0000000..8049c58 Binary files /dev/null and b/public/pio/models/spine/firefly/images/可爱花朵.png differ diff --git a/public/pio/models/spine/firefly/images/右大腿.png b/public/pio/models/spine/firefly/images/右大腿.png new file mode 100644 index 0000000..5adc76c Binary files /dev/null and b/public/pio/models/spine/firefly/images/右大腿.png differ diff --git a/public/pio/models/spine/firefly/images/右小腿.png b/public/pio/models/spine/firefly/images/右小腿.png new file mode 100644 index 0000000..8c831b9 Binary files /dev/null and b/public/pio/models/spine/firefly/images/右小腿.png differ diff --git a/public/pio/models/spine/firefly/images/后发1.png b/public/pio/models/spine/firefly/images/后发1.png new file mode 100644 index 0000000..056cdbe Binary files /dev/null and b/public/pio/models/spine/firefly/images/后发1.png differ diff --git a/public/pio/models/spine/firefly/images/后发2.png b/public/pio/models/spine/firefly/images/后发2.png new file mode 100644 index 0000000..b462eff Binary files /dev/null and b/public/pio/models/spine/firefly/images/后发2.png differ diff --git a/public/pio/models/spine/firefly/images/后发3.png b/public/pio/models/spine/firefly/images/后发3.png new file mode 100644 index 0000000..c132dcf Binary files /dev/null and b/public/pio/models/spine/firefly/images/后发3.png differ diff --git a/public/pio/models/spine/firefly/images/后发4.png b/public/pio/models/spine/firefly/images/后发4.png new file mode 100644 index 0000000..d42dbb8 Binary files /dev/null and b/public/pio/models/spine/firefly/images/后发4.png differ diff --git a/public/pio/models/spine/firefly/images/后摆.png b/public/pio/models/spine/firefly/images/后摆.png new file mode 100644 index 0000000..9a260b4 Binary files /dev/null and b/public/pio/models/spine/firefly/images/后摆.png differ diff --git a/public/pio/models/spine/firefly/images/后脑勺.png b/public/pio/models/spine/firefly/images/后脑勺.png new file mode 100644 index 0000000..5aa7e74 Binary files /dev/null and b/public/pio/models/spine/firefly/images/后脑勺.png differ diff --git a/public/pio/models/spine/firefly/images/左大腿.png b/public/pio/models/spine/firefly/images/左大腿.png new file mode 100644 index 0000000..f44486b Binary files /dev/null and b/public/pio/models/spine/firefly/images/左大腿.png differ diff --git a/public/pio/models/spine/firefly/images/左小腿.png b/public/pio/models/spine/firefly/images/左小腿.png new file mode 100644 index 0000000..2afdb29 Binary files /dev/null and b/public/pio/models/spine/firefly/images/左小腿.png differ diff --git a/public/pio/models/spine/firefly/images/星星1.png b/public/pio/models/spine/firefly/images/星星1.png new file mode 100644 index 0000000..5a00799 Binary files /dev/null and b/public/pio/models/spine/firefly/images/星星1.png differ diff --git a/public/pio/models/spine/firefly/images/星星2.png b/public/pio/models/spine/firefly/images/星星2.png new file mode 100644 index 0000000..86287ff Binary files /dev/null and b/public/pio/models/spine/firefly/images/星星2.png differ diff --git a/public/pio/models/spine/firefly/images/星星3.png b/public/pio/models/spine/firefly/images/星星3.png new file mode 100644 index 0000000..06e1db2 Binary files /dev/null and b/public/pio/models/spine/firefly/images/星星3.png differ diff --git a/public/pio/models/spine/firefly/images/星星4.png b/public/pio/models/spine/firefly/images/星星4.png new file mode 100644 index 0000000..7de3add Binary files /dev/null and b/public/pio/models/spine/firefly/images/星星4.png differ diff --git a/public/pio/models/spine/firefly/images/生气符号1.png b/public/pio/models/spine/firefly/images/生气符号1.png new file mode 100644 index 0000000..ed6779d Binary files /dev/null and b/public/pio/models/spine/firefly/images/生气符号1.png differ diff --git a/public/pio/models/spine/firefly/images/生气符号2.png b/public/pio/models/spine/firefly/images/生气符号2.png new file mode 100644 index 0000000..cc99052 Binary files /dev/null and b/public/pio/models/spine/firefly/images/生气符号2.png differ diff --git a/public/pio/models/spine/firefly/images/胸饰.png b/public/pio/models/spine/firefly/images/胸饰.png new file mode 100644 index 0000000..eb7e026 Binary files /dev/null and b/public/pio/models/spine/firefly/images/胸饰.png differ diff --git a/public/pio/models/spine/firefly/images/脸红.png b/public/pio/models/spine/firefly/images/脸红.png new file mode 100644 index 0000000..b2068fe Binary files /dev/null and b/public/pio/models/spine/firefly/images/脸红.png differ diff --git a/public/pio/models/spine/firefly/images/裙边.png b/public/pio/models/spine/firefly/images/裙边.png new file mode 100644 index 0000000..23c8876 Binary files /dev/null and b/public/pio/models/spine/firefly/images/裙边.png differ diff --git a/public/pio/models/spine/firefly/images/身体.png b/public/pio/models/spine/firefly/images/身体.png new file mode 100644 index 0000000..38d0afc Binary files /dev/null and b/public/pio/models/spine/firefly/images/身体.png differ diff --git a/public/pio/models/spine/firefly/images/问号.png b/public/pio/models/spine/firefly/images/问号.png new file mode 100644 index 0000000..3514fc3 Binary files /dev/null and b/public/pio/models/spine/firefly/images/问号.png differ diff --git a/public/pio/models/spine/firefly/images/领子.png b/public/pio/models/spine/firefly/images/领子.png new file mode 100644 index 0000000..eb591ea Binary files /dev/null and b/public/pio/models/spine/firefly/images/领子.png differ diff --git a/public/pio/models/spine/firefly/images/领结.png b/public/pio/models/spine/firefly/images/领结.png new file mode 100644 index 0000000..a79a6a8 Binary files /dev/null and b/public/pio/models/spine/firefly/images/领结.png differ diff --git a/public/pio/models/spine/firefly/images/鼻子.png b/public/pio/models/spine/firefly/images/鼻子.png new file mode 100644 index 0000000..fe18ddb Binary files /dev/null and b/public/pio/models/spine/firefly/images/鼻子.png differ diff --git a/public/pio/static/live2d-sdk/live2d-wrapper.js b/public/pio/static/live2d-sdk/live2d-wrapper.js new file mode 100644 index 0000000..98f4dcb --- /dev/null +++ b/public/pio/static/live2d-sdk/live2d-wrapper.js @@ -0,0 +1,317 @@ +/** + * Simplified Live2D SDK Wrapper + * Based on the working implementation from live2d-master + */ + +class Live2DModel { + constructor() { + this.model = null; + this.motionManager = null; + this.eyeBlink = null; + this.pose = null; + this.physics = null; + this.modelMatrix = null; + this.dragManager = null; + this.isInitialized = false; + this.isVisible = true; + this.alpha = 1.0; + } + + // Load model from .moc file + loadModel(mocPath, callback) { + const request = new XMLHttpRequest(); + request.open('GET', mocPath, true); + request.responseType = 'arraybuffer'; + + request.onload = () => { + if (request.status === 200) { + try { + this.model = window.Live2DModelWebGL.loadModel(request.response); + if (this.model) { + this.initializeModel(); + callback(this); + } else { + console.error('Failed to load Live2D model from:', mocPath); + } + } catch (error) { + console.error('Error loading Live2D model:', error); + } + } else { + console.error('Failed to fetch model file:', mocPath); + } + }; + + request.onerror = () => { + console.error('Network error loading model:', mocPath); + }; + + request.send(); + } + + // Initialize model components + initializeModel() { + if (!this.model) return; + + // Initialize model matrix + this.modelMatrix = new window.L2DModelMatrix( + this.model.getCanvasWidth(), + this.model.getCanvasHeight() + ); + this.modelMatrix.setWidth(2); + this.modelMatrix.setCenterPosition(0, 0); + + // Initialize motion manager + this.motionManager = new window.L2DMotionManager(); + + // Initialize eye blink + this.eyeBlink = new window.L2DEyeBlink(); + + // Initialize pose + this.pose = window.L2DPose.load(); + + // Initialize physics + this.physics = window.L2DPhysics.load(); + + // Initialize drag manager + this.dragManager = new window.L2DTargetPoint(); + + this.isInitialized = true; + } + + // Load texture + loadTexture(textureIndex, texturePath, callback) { + if (!this.model) return; + + const img = new Image(); + img.crossOrigin = 'Anonymous'; + img.onload = () => { + const gl = window.Live2D.getGL(); + if (gl) { + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST); + gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); + + this.model.setTexture(textureIndex, texture); + + if (callback) callback(); + } + }; + img.onerror = () => { + console.error('Failed to load texture:', texturePath); + }; + img.src = texturePath; + } + + // Load motion + loadMotion(motionPath, callback) { + const request = new XMLHttpRequest(); + request.open('GET', motionPath, true); + request.responseType = 'arraybuffer'; + + request.onload = () => { + if (request.status === 200) { + try { + const motion = window.Live2DMotion.loadMotion(request.response); + if (motion && callback) { + callback(motion); + } + } catch (error) { + console.error('Error loading motion:', error); + } + } + }; + + request.send(); + } + + // Start motion + startMotion(motion, priority = 3) { + if (!this.motionManager || !motion) return; + + this.motionManager.startMotionPrio(motion, priority); + } + + // Set parameter value + setParamFloat(paramId, value, weight = 1.0) { + if (!this.model) return; + this.model.setParamFloat(paramId, value, weight); + } + + // Get parameter value + getParamFloat(paramId) { + if (!this.model) return 0; + return this.model.getParamFloat(paramId); + } + + // Update model + update() { + if (!this.isInitialized || !this.model) return; + + // Update drag + if (this.dragManager) { + this.dragManager.update(); + this.model.setDrag(this.dragManager.getX(), this.dragManager.getY()); + } + + // Update eye blink + if (this.eyeBlink) { + this.eyeBlink.updateParam(this.model); + } + + // Update motion + if (this.motionManager) { + this.motionManager.updateParam(this.model); + } + + // Update pose + if (this.pose) { + this.pose.updateParam(this.model); + } + + // Update physics + if (this.physics) { + this.physics.updateParam(this.model); + } + + // Update model + this.model.update(); + } + + // Draw model + draw() { + if (!this.isInitialized || !this.model || !this.isVisible) return; + + const gl = window.Live2D.getGL(); + if (!gl) return; + + // Apply model matrix + if (this.modelMatrix) { + this.model.setMatrix(this.modelMatrix.getArray()); + } + + // Set alpha + this.model.setAlpha(this.alpha); + + // Draw + this.model.draw(); + } + + // Set drag position + setDrag(x, y) { + if (this.dragManager) { + this.dragManager.setPoint(x, y); + } + } + + // Hit test + hitTest(x, y, hitAreaName) { + if (!this.model) return false; + return this.model.hitTestSimple(hitAreaName, x, y); + } + + // Release resources + release() { + if (this.model) { + this.model.release(); + this.model = null; + } + this.isInitialized = false; + } +} + +// Live2D Manager +class Live2DManager { + constructor() { + this.gl = null; + this.models = []; + this.currentModelIndex = 0; + this.isInitialized = false; + } + + // Initialize WebGL context + setGL(gl) { + this.gl = gl; + window.Live2D.setGL(gl); + this.isInitialized = true; + } + + // Get WebGL context + getGL() { + return this.gl; + } + + // Create new model + createModel() { + return new Live2DModel(); + } + + // Add model + addModel(model) { + this.models.push(model); + return this.models.length - 1; + } + + // Get model + getModel(index) { + if (index >= 0 && index < this.models.length) { + return this.models[index]; + } + return null; + } + + // Get current model + getCurrentModel() { + return this.getModel(this.currentModelIndex); + } + + // Set current model + setCurrentModel(index) { + if (index >= 0 && index < this.models.length) { + this.currentModelIndex = index; + } + } + + // Update all models + updateModels() { + this.models.forEach(model => { + if (model) { + model.update(); + } + }); + } + + // Draw all models + drawModels() { + if (!this.gl) return; + + this.gl.clearColor(0, 0, 0, 0); + this.gl.clear(this.gl.COLOR_BUFFER_BIT); + + this.models.forEach(model => { + if (model) { + model.draw(); + } + }); + } + + // Release all models + releaseModels() { + this.models.forEach(model => { + if (model) { + model.release(); + } + }); + this.models = []; + } +} + +// Export to global scope +window.Live2DManager = Live2DManager; +window.Live2DModel = Live2DModel; + +// Global Live2D manager instance +window.live2dManager = new Live2DManager(); \ No newline at end of file diff --git a/public/pio/static/live2d-sdk/live2d.min.js b/public/pio/static/live2d-sdk/live2d.min.js new file mode 100644 index 0000000..93c21af --- /dev/null +++ b/public/pio/static/live2d-sdk/live2d.min.js @@ -0,0 +1,5 @@ +"use strict";!function(t){function i(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,i),o.l=!0,o.exports}var e={};i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},i.p="",i(i.s=4)}([function(t,i,e){function r(){this.live2DModel=null,this.modelMatrix=null,this.eyeBlink=null,this.physics=null,this.pose=null,this.debugMode=!1,this.initialized=!1,this.updating=!1,this.alpha=1,this.accAlpha=0,this.lipSync=!1,this.lipSyncValue=0,this.accelX=0,this.accelY=0,this.accelZ=0,this.dragX=0,this.dragY=0,this.startTimeMSec=null,this.mainMotionManager=new h,this.expressionManager=new h,this.motions={},this.expressions={},this.isTexLoaded=!1}function o(){AMotion.prototype.constructor.call(this),this.paramList=new Array}function n(){this.id="",this.type=-1,this.value=null}function s(){this.nextBlinkTime=null,this.stateStartTime=null,this.blinkIntervalMsec=null,this.eyeState=g.STATE_FIRST,this.blinkIntervalMsec=4e3,this.closingMotionMsec=100,this.closedMotionMsec=50,this.openingMotionMsec=150,this.closeIfZero=!0,this.eyeID_L="PARAM_EYE_L_OPEN",this.eyeID_R="PARAM_EYE_R_OPEN"}function _(){this.tr=new Float32Array(16),this.identity()}function a(t,i){_.prototype.constructor.call(this),this.width=t,this.height=i}function h(){MotionQueueManager.prototype.constructor.call(this),this.currentPriority=null,this.reservePriority=null,this.super=MotionQueueManager.prototype}function l(){this.physicsList=new Array,this.startTimeMSec=UtSystem.getUserTimeMSec()}function $(){this.lastTime=0,this.lastModel=null,this.partsGroups=new Array}function u(t){this.paramIndex=-1,this.partsIndex=-1,this.link=null,this.id=t}function p(){this.EPSILON=.01,this.faceTargetX=0,this.faceTargetY=0,this.faceX=0,this.faceY=0,this.faceVX=0,this.faceVY=0,this.lastTimeSec=0}function f(){_.prototype.constructor.call(this),this.screenLeft=null,this.screenRight=null,this.screenTop=null,this.screenBottom=null,this.maxLeft=null,this.maxRight=null,this.maxTop=null,this.maxBottom=null,this.max=Number.MAX_VALUE,this.min=0}function c(){}var d=0;r.prototype.getModelMatrix=function(){return this.modelMatrix},r.prototype.setAlpha=function(t){t>.999&&(t=1),t<.001&&(t=0),this.alpha=t},r.prototype.getAlpha=function(){return this.alpha},r.prototype.isInitialized=function(){return this.initialized},r.prototype.setInitialized=function(t){this.initialized=t},r.prototype.isUpdating=function(){return this.updating},r.prototype.setUpdating=function(t){this.updating=t},r.prototype.getLive2DModel=function(){return this.live2DModel},r.prototype.setLipSync=function(t){this.lipSync=t},r.prototype.setLipSyncValue=function(t){this.lipSyncValue=t},r.prototype.setAccel=function(t,i,e){this.accelX=t,this.accelY=i,this.accelZ=e},r.prototype.setDrag=function(t,i){this.dragX=t,this.dragY=i},r.prototype.getMainMotionManager=function(){return this.mainMotionManager},r.prototype.getExpressionManager=function(){return this.expressionManager},r.prototype.loadModelData=function(t,i){var e=c.getPlatformManager();this.debugMode&&e.log("Load model : "+t);var r=this;e.loadLive2DModel(t,function(t){if(r.live2DModel=t,r.live2DModel.saveParam(),0!=Live2D.getError())return void console.error("Error : Failed to loadModelData().");r.modelMatrix=new a(r.live2DModel.getCanvasWidth(),r.live2DModel.getCanvasHeight()),r.modelMatrix.setWidth(2),r.modelMatrix.setCenterPosition(0,0),i(r.live2DModel)})},r.prototype.loadTexture=function(t,i,e){d++;var r=c.getPlatformManager();this.debugMode&&r.log("Load Texture : "+i);var o=this;r.loadTexture(this.live2DModel,t,i,function(){d--,0==d&&(o.isTexLoaded=!0),"function"==typeof e&&e()})},r.prototype.loadMotion=function(t,i,e){var r=c.getPlatformManager();this.debugMode&&r.log("Load Motion : "+i);var o=null,n=this;r.loadBytes(i,function(i){o=Live2DMotion.loadMotion(i),null!=t&&(n.motions[t]=o),e(o)})},r.prototype.loadExpression=function(t,i,e){var r=c.getPlatformManager();this.debugMode&&r.log("Load Expression : "+i);var n=this;r.loadBytes(i,function(i){null!=t&&(n.expressions[t]=o.loadJson(i)),"function"==typeof e&&e()})},r.prototype.loadPose=function(t,i){var e=c.getPlatformManager();this.debugMode&&e.log("Load Pose : "+t);var r=this;try{e.loadBytes(t,function(t){r.pose=$.load(t),"function"==typeof i&&i()})}catch(t){console.warn(t)}},r.prototype.loadPhysics=function(t){var i=c.getPlatformManager();this.debugMode&&i.log("Load Physics : "+t);var e=this;try{i.loadBytes(t,function(t){e.physics=l.load(t)})}catch(t){console.warn(t)}},r.prototype.hitTestSimple=function(t,i,e){if(null===this.live2DModel)return!1;var r=this.live2DModel.getDrawDataIndex(t);if(r<0)return!1;for(var o=this.live2DModel.getTransformedPoints(r),n=this.live2DModel.getCanvasWidth(),s=0,_=this.live2DModel.getCanvasHeight(),a=0,h=0;hs&&(s=l),$<_&&(_=$),$>a&&(a=$)}var u=this.modelMatrix.invertTransformX(i),p=this.modelMatrix.invertTransformY(e);return n<=u&&u<=s&&_<=p&&p<=a},r.prototype.hitTestSimpleCustom=function(t,i,e,r){return null!==this.live2DModel&&e>=t[0]&&e<=i[0]&&r<=t[1]&&r>=i[1]},o.prototype=new AMotion,o.EXPRESSION_DEFAULT="DEFAULT",o.TYPE_SET=0,o.TYPE_ADD=1,o.TYPE_MULT=2,o.loadJson=function(t){var i=new o,e=c.getPlatformManager(),r=e.jsonParseFromBytes(t);if(i.setFadeIn(parseInt(r.fade_in)>0?parseInt(r.fade_in):1e3),i.setFadeOut(parseInt(r.fade_out)>0?parseInt(r.fade_out):1e3),null==r.params)return i;var s=r.params,_=s.length;i.paramList=[];for(var a=0;a<_;a++){var h=s[a],l=h.id.toString(),$=parseFloat(h.val),u=o.TYPE_ADD,p=null!=h.calc?h.calc.toString():"add";if((u="add"===p?o.TYPE_ADD:"mult"===p?o.TYPE_MULT:"set"===p?o.TYPE_SET:o.TYPE_ADD)==o.TYPE_ADD){var f=null==h.def?0:parseFloat(h.def);$-=f}else if(u==o.TYPE_MULT){var f=null==h.def?1:parseFloat(h.def);0==f&&(f=1),$/=f}var d=new n;d.id=l,d.type=u,d.value=$,i.paramList.push(d)}return i},o.prototype.updateParamExe=function(t,i,e,r){for(var n=this.paramList.length-1;n>=0;--n){var s=this.paramList[n];s.type==o.TYPE_ADD?t.addToParamFloat(s.id,s.value,e):s.type==o.TYPE_MULT?t.multParamFloat(s.id,s.value,e):s.type==o.TYPE_SET&&t.setParamFloat(s.id,s.value,e)}},s.prototype.calcNextBlink=function(){return UtSystem.getUserTimeMSec()+Math.random()*(2*this.blinkIntervalMsec-1)},s.prototype.setInterval=function(t){this.blinkIntervalMsec=t},s.prototype.setEyeMotion=function(t,i,e){this.closingMotionMsec=t,this.closedMotionMsec=i,this.openingMotionMsec=e},s.prototype.updateParam=function(t){var i,e=UtSystem.getUserTimeMSec(),r=0;switch(this.eyeState){case g.STATE_CLOSING:r=(e-this.stateStartTime)/this.closingMotionMsec,r>=1&&(r=1,this.eyeState=g.STATE_CLOSED,this.stateStartTime=e),i=1-r;break;case g.STATE_CLOSED:r=(e-this.stateStartTime)/this.closedMotionMsec,r>=1&&(this.eyeState=g.STATE_OPENING,this.stateStartTime=e),i=0;break;case g.STATE_OPENING:r=(e-this.stateStartTime)/this.openingMotionMsec,r>=1&&(r=1,this.eyeState=g.STATE_INTERVAL,this.nextBlinkTime=this.calcNextBlink()),i=r;break;case g.STATE_INTERVAL:this.nextBlinkTime=t||this.currentPriority>=t||(this.reservePriority=t,0))},h.prototype.setReservePriority=function(t){this.reservePriority=t},h.prototype.updateParam=function(t){var i=MotionQueueManager.prototype.updateParam.call(this,t);return this.isFinished()&&(this.currentPriority=0),i},h.prototype.startMotionPrio=function(t,i){return i==this.reservePriority&&(this.reservePriority=0),this.currentPriority=i,this.startMotion(t,!1)},l.load=function(t){for(var i=new l,e=c.getPlatformManager(),r=e.jsonParseFromBytes(t),o=r.physics_hair,n=o.length,s=0;s=0)break;r=n,o=t.getPartsOpacity(s),(o+=e/.5)>1&&(o=1)}}r<0&&(r=0,o=1);for(var n=0;n.15&&(a=1-.15/(1-o)),h>a&&(h=a),t.setPartsOpacity(s,h)}}},$.prototype.copyOpacityOtherParts=function(t,i){for(var e=0;eo)&&(l*=o/u,$*=o/u,u=o),this.faceVX+=l,this.faceVY+=$;var f=.5*(Math.sqrt(o*o+16*o*_-8*o*_)-o),c=Math.sqrt(this.faceVX*this.faceVX+this.faceVY*this.faceVY);c>f&&(this.faceVX*=f/c,this.faceVY*=f/c),this.faceX+=this.faceVX,this.faceY+=this.faceVY}},f.prototype=new _,f.prototype.getMaxScale=function(){return this.max},f.prototype.getMinScale=function(){return this.min},f.prototype.setMaxScale=function(t){this.max=t},f.prototype.setMinScale=function(t){this.min=t},f.prototype.isMaxScale=function(){return this.getScaleX()==this.max},f.prototype.isMinScale=function(){return this.getScaleX()==this.min},f.prototype.adjustTranslate=function(t,i){this.tr[0]*this.maxLeft+(this.tr[12]+t)>this.screenLeft&&(t=this.screenLeft-this.tr[0]*this.maxLeft-this.tr[12]),this.tr[0]*this.maxRight+(this.tr[12]+t)this.screenBottom&&(i=this.screenBottom-this.tr[5]*this.maxBottom-this.tr[13]);var e=[1,0,0,0,0,1,0,0,0,0,1,0,t,i,0,1];_.mul(e,this.tr,this.tr)},f.prototype.adjustScale=function(t,i,e){var r=e*this.tr[0];r0&&(e=this.min/this.tr[0]):r>this.max&&this.tr[0]>0&&(e=this.max/this.tr[0]);var o=[1,0,0,0,0,1,0,0,0,0,1,0,t,i,0,1],n=[e,0,0,0,0,e,0,0,0,0,1,0,0,0,0,1],s=[1,0,0,0,0,1,0,0,0,0,1,0,-t,-i,0,1];_.mul(s,this.tr,this.tr),_.mul(n,this.tr,this.tr),_.mul(o,this.tr,this.tr)},f.prototype.setScreenRect=function(t,i,e,r){this.screenLeft=t,this.screenRight=i,this.screenTop=r,this.screenBottom=e},f.prototype.setMaxScreenRect=function(t,i,e,r){this.maxLeft=t,this.maxRight=i,this.maxTop=r,this.maxBottom=e},f.prototype.getScreenLeft=function(){return this.screenLeft},f.prototype.getScreenRight=function(){return this.screenRight},f.prototype.getScreenBottom=function(){return this.screenBottom},f.prototype.getScreenTop=function(){return this.screenTop},f.prototype.getMaxLeft=function(){return this.maxLeft},f.prototype.getMaxRight=function(){return this.maxRight},f.prototype.getMaxBottom=function(){return this.maxBottom},f.prototype.getMaxTop=function(){return this.maxTop},c.platformManager=null,c.getPlatformManager=function(){return c.platformManager},c.setPlatformManager=function(t){c.platformManager=t},t.exports={L2DTargetPoint:p,Live2DFramework:c,L2DViewMatrix:f,L2DPose:$,L2DPartsParam:u,L2DPhysics:l,L2DMotionManager:h,L2DModelMatrix:a,L2DMatrix44:_,EYE_STATE:g,L2DEyeBlink:s,L2DExpressionParam:n,L2DExpressionMotion:o,L2DBaseModel:r}},function(t,i,e){var r={DEBUG_LOG:!1,DEBUG_MOUSE_LOG:!1,DEBUG_DRAW_HIT_AREA:!1,DEBUG_DRAW_ALPHA_MODEL:!1,VIEW_MAX_SCALE:2,VIEW_MIN_SCALE:.8,VIEW_LOGICAL_LEFT:-1,VIEW_LOGICAL_RIGHT:1,VIEW_LOGICAL_MAX_LEFT:-2,VIEW_LOGICAL_MAX_RIGHT:2,VIEW_LOGICAL_MAX_BOTTOM:-2,VIEW_LOGICAL_MAX_TOP:2,PRIORITY_NONE:0,PRIORITY_IDLE:1,PRIORITY_SLEEPY:2,PRIORITY_NORMAL:3,PRIORITY_FORCE:4,MOTION_GROUP_IDLE:"idle",MOTION_GROUP_SLEEPY:"sleepy",MOTION_GROUP_TAP_BODY:"tap_body",MOTION_GROUP_FLICK_HEAD:"flick_head",MOTION_GROUP_PINCH_IN:"pinch_in",MOTION_GROUP_PINCH_OUT:"pinch_out",MOTION_GROUP_SHAKE:"shake",HIT_AREA_HEAD:"head",HIT_AREA_BODY:"body"};t.exports=r},function(t,i,e){function r(t){n=t}function o(){return n}Object.defineProperty(i,"__esModule",{value:!0}),i.setContext=r,i.getContext=o;var n=void 0},function(t,i,e){function r(){}r.matrixStack=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],r.depth=0,r.currentMatrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],r.tmp=new Array(16),r.reset=function(){this.depth=0},r.loadIdentity=function(){for(var t=0;t<16;t++)this.currentMatrix[t]=t%5==0?1:0},r.push=function(){var t=(this.depth,16*(this.depth+1));this.matrixStack.lengthe.left&&i.y>e.top)return i;var o=t.x-i.x,n=t.y-i.y,s=r(o,n);i.xat.frameBuffers.length&&(this.curFrameNo=this.getMaskRenderTexture()),this.tmpModelToViewMatrix=new R,this.tmpMatrix2=new R,this.tmpMatrixForMask=new R,this.tmpMatrixForDraw=new R,this.CHANNEL_COLORS=new Array;var i=new A;i=new A,i.r=0,i.g=0,i.b=0,i.a=1,this.CHANNEL_COLORS.push(i),i=new A,i.r=1,i.g=0,i.b=0,i.a=0,this.CHANNEL_COLORS.push(i),i=new A,i.r=0,i.g=1,i.b=0,i.a=0,this.CHANNEL_COLORS.push(i),i=new A,i.r=0,i.g=0,i.b=1,i.a=0,this.CHANNEL_COLORS.push(i);for(var e=0;eG._$T7)throw t._$NP|=i._$4s,new lt("_$gi _$C _$li , _$n0 _$_ version _$li ( SDK : "+G._$T7+" < _$f0 : "+r+" )@_$SS#loadModel()\n");var h=o._$nP();if(r>=G._$s7){var l=o._$9T(),$=o._$9T();if(-30584!=l||-30584!=$)throw t._$NP|=i._$0s,new lt("_$gi _$C _$li , _$0 _$6 _$Ui.")}t._$KS(h);var u=t.getModelContext();u.setDrawParam(t.getDrawParam()),u.init()}catch(t){_._$Rb(t)}},i.prototype._$KS=function(t){this._$MT=t},i.prototype.getModelImpl=function(){return null==this._$MT&&(this._$MT=new p,this._$MT._$zP()),this._$MT},i.prototype.getCanvasWidth=function(){return null==this._$MT?0:this._$MT.getCanvasWidth()},i.prototype.getCanvasHeight=function(){return null==this._$MT?0:this._$MT.getCanvasHeight()},i.prototype.getParamFloat=function(t){return"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),this._$5S.getParamFloat(t)},i.prototype.setParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)*(1-e)+i*e)},i.prototype.addToParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)+i*e)},i.prototype.multParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)*(1+(i-1)*e))},i.prototype.getParamIndex=function(t){return this._$5S.getParamIndex(u.getID(t))},i.prototype.loadParam=function(){this._$5S.loadParam()},i.prototype.saveParam=function(){this._$5S.saveParam()},i.prototype.init=function(){this._$5S.init()},i.prototype.update=function(){this._$5S.update()},i.prototype._$Rs=function(){return _._$li("_$60 _$PT _$Rs()"),-1},i.prototype._$Ds=function(t){_._$li("_$60 _$PT _$SS#_$Ds() \n")},i.prototype._$K2=function(){},i.prototype.draw=function(){},i.prototype.getModelContext=function(){return this._$5S},i.prototype._$s2=function(){return this._$NP},i.prototype._$P7=function(t,i,e,r){var o=-1,n=0,s=this;if(0!=e)if(1==t.length){var _=t[0],a=0!=s.getParamFloat(_),h=i[0],l=s.getPartsOpacity(h),$=e/r;a?(l+=$)>1&&(l=1):(l-=$)<0&&(l=0),s.setPartsOpacity(h,l)}else{for(var u=0;u=0)break;o=u;var h=i[u];n=s.getPartsOpacity(h),(n+=e/r)>1&&(n=1)}}o<0&&(console.log("No _$wi _$q0/ _$U default[%s]",t[0]),o=0,n=1,s.loadParam(),s.setParamFloat(t[o],n),s.saveParam());for(var u=0;u.15&&(f=1-.15/(1-n)),c>f&&(c=f),s.setPartsOpacity(h,c)}}}else for(var u=0;u=this._$5S._$aS.length)return null;var i=this._$5S._$aS[t];return null!=i&&i.getType()==W._$wb&&i instanceof $t?i.getIndexArray():null},e.CHANNEL_COUNT=4,e.RENDER_TEXTURE_USE_MIPMAP=!1,e.NOT_USED_FRAME=-100,e.prototype._$L7=function(){if(this.tmpModelToViewMatrix&&(this.tmpModelToViewMatrix=null),this.tmpMatrix2&&(this.tmpMatrix2=null),this.tmpMatrixForMask&&(this.tmpMatrixForMask=null),this.tmpMatrixForDraw&&(this.tmpMatrixForDraw=null),this.tmpBoundsOnModel&&(this.tmpBoundsOnModel=null),this.CHANNEL_COLORS){for(var t=this.CHANNEL_COLORS.length-1;t>=0;--t)this.CHANNEL_COLORS.splice(t,1);this.CHANNEL_COLORS=[]}this.releaseShader()},e.prototype.releaseShader=function(){for(var t=at.frameBuffers.length,i=0;i0){var n=i.gl.getParameter(i.gl.FRAMEBUFFER_BINDING),s=new Array(4);s[0]=0,s[1]=0,s[2]=i.gl.canvas.width,s[3]=i.gl.canvas.height,i.gl.viewport(0,0,at.clippingMaskBufferSize,at.clippingMaskBufferSize),this.setupLayoutBounds(e),i.gl.bindFramebuffer(i.gl.FRAMEBUFFER,at.frameBuffers[this.curFrameNo].framebuffer),i.gl.clearColor(0,0,0,0),i.gl.clear(i.gl.COLOR_BUFFER_BIT);for(var r=0;rr?e:r,n=o,s=o,_=0,a=0,h=i.clippedDrawContextList.length,l=0;l_&&(_=S),v>a&&(a=v)}}if(n==o)i.allClippedDrawRect.x=0,i.allClippedDrawRect.y=0,i.allClippedDrawRect.width=0,i.allClippedDrawRect.height=0,i.isUsing=!1;else{var L=_-n,M=a-s;i.allClippedDrawRect.x=n,i.allClippedDrawRect.y=s,i.allClippedDrawRect.width=L,i.allClippedDrawRect.height=M,i.isUsing=!0}},e.prototype.setupLayoutBounds=function(t){var i=t/e.CHANNEL_COUNT,r=t%e.CHANNEL_COUNT;i=~~i,r=~~r;for(var o=0,n=0;n=1)return 1;var p=r,f=p*p;return l*(p*f)+$*f+u*p+0},s.prototype._$a0=function(){},s.prototype.setFadeIn=function(t){this._$dP=t},s.prototype.setFadeOut=function(t){this._$eo=t},s.prototype._$pT=function(t){this._$V0=t},s.prototype.getFadeOut=function(){return this._$eo},s.prototype._$4T=function(){return this._$eo},s.prototype._$mT=function(){return this._$V0},s.prototype.getDurationMSec=function(){return-1},s.prototype.getLoopDurationMSec=function(){return-1},s.prototype.updateParam=function(t,i){if(i._$AT&&!i._$9L){var e=w.getUserTimeMSec();if(i._$z2<0){i._$z2=e,i._$bs=e;var r=this.getDurationMSec();i._$Do<0&&(i._$Do=r<=0?-1:i._$z2+r)}var o=this._$V0;o=o*(0==this._$dP?1:ht._$r2((e-i._$bs)/this._$dP))*(0==this._$eo||i._$Do<0?1:ht._$r2((i._$Do-e)/this._$eo)),0<=o&&o<=1||console.log("### assert!! ### "),this.updateParamExe(t,e,o,i),i._$Do>0&&i._$Do0?console.log("\n"):e%8==0&&e>0&&console.log(" "),console.log("%02X ",255&t[e]);console.log("\n")},_._$nr=function(t,i,e){console.log("%s\n",t);for(var r=i.length,o=0;o=0;--r)this._$lL[r]._$oP(t,this);this._$oo(t,e),this._$M2=this._$Yb(),this._$9b=(this._$M2-this._$ks)/e,this._$ks=this._$M2}for(var r=this._$qP.length-1;r>=0;--r)this._$qP[r]._$YS(t,this);this._$iT=i},f.prototype._$oo=function(t,i){i<.033&&(i=.033);var e=1/i;this.p1.vx=(this.p1.x-this.p1._$s0)*e,this.p1.vy=(this.p1.y-this.p1._$70)*e,this.p1.ax=(this.p1.vx-this.p1._$7L)*e,this.p1.ay=(this.p1.vy-this.p1._$HL)*e,this.p1.fx=this.p1.ax*this.p1._$p,this.p1.fy=this.p1.ay*this.p1._$p,this.p1._$xT();var r,o,n=-Math.atan2(this.p1.y-this.p2.y,this.p1.x-this.p2.x),s=Math.cos(n),_=Math.sin(n),a=9.8*this.p2._$p,h=this._$Db*Lt._$bS,l=a*Math.cos(n-h);r=l*_,o=l*s;var $=-this.p1.fx*_*_,u=-this.p1.fy*_*s,p=-this.p2.vx*this._$L2,f=-this.p2.vy*this._$L2;this.p2.fx=r+$+p,this.p2.fy=o+u+f,this.p2.ax=this.p2.fx/this.p2._$p,this.p2.ay=this.p2.fy/this.p2._$p,this.p2.vx+=this.p2.ax*i,this.p2.vy+=this.p2.ay*i,this.p2.x+=this.p2.vx*i,this.p2.y+=this.p2.vy*i;var c=Math.sqrt((this.p1.x-this.p2.x)*(this.p1.x-this.p2.x)+(this.p1.y-this.p2.y)*(this.p1.y-this.p2.y));this.p2.x=this.p1.x+this._$Fo*(this.p2.x-this.p1.x)/c,this.p2.y=this.p1.y+this._$Fo*(this.p2.y-this.p1.y)/c,this.p2.vx=(this.p2.x-this.p2._$s0)*e,this.p2.vy=(this.p2.y-this.p2._$70)*e,this.p2._$xT()},c.prototype._$xT=function(){this._$s0=this.x,this._$70=this.y,this._$7L=this.vx,this._$HL=this.vy},d.prototype._$oP=function(t,i){},g.prototype=new d,g.prototype._$oP=function(t,i){var e=this.scale*t.getParamFloat(this._$wL),r=i.getPhysicsPoint1();switch(this._$tL){default:case f.Src.SRC_TO_X:r.x=r.x+(e-r.x)*this._$V0;break;case f.Src.SRC_TO_Y:r.y=r.y+(e-r.y)*this._$V0;break;case f.Src.SRC_TO_G_ANGLE:var o=i._$qr();o+=(e-o)*this._$V0,i._$pr(o)}},y.prototype._$YS=function(t,i){},T.prototype=new y,T.prototype._$YS=function(t,i){switch(this._$YP){default:case f.Target.TARGET_FROM_ANGLE:t.setParamFloat(this._$wL,this.scale*i._$5r(),this._$V0);break;case f.Target.TARGET_FROM_ANGLE_V:t.setParamFloat(this._$wL,this.scale*i._$Cs(),this._$V0)}},f.Src=function(){},f.Src.SRC_TO_X="SRC_TO_X",f.Src.SRC_TO_Y="SRC_TO_Y",f.Src.SRC_TO_G_ANGLE="SRC_TO_G_ANGLE",f.Target=function(){},f.Target.TARGET_FROM_ANGLE="TARGET_FROM_ANGLE",f.Target.TARGET_FROM_ANGLE_V="TARGET_FROM_ANGLE_V",P.prototype.init=function(t){this._$fL=t._$fL,this._$gL=t._$gL,this._$B0=t._$B0,this._$z0=t._$z0,this._$qT=t._$qT,this.reflectX=t.reflectX,this.reflectY=t.reflectY},P.prototype._$F0=function(t){this._$fL=t._$_T(),this._$gL=t._$_T(),this._$B0=t._$_T(),this._$z0=t._$_T(),this._$qT=t._$_T(),t.getFormatVersion()>=G.LIVE2D_FORMAT_VERSION_V2_10_SDK2&&(this.reflectX=t._$po(),this.reflectY=t._$po())},P.prototype._$e=function(){};var It=function(){};It._$ni=function(t,i,e,r,o,n,s,_,a){var h=s*n-_*o;if(0==h)return null;var l,$=((t-e)*n-(i-r)*o)/h;return l=0!=o?(t-e-$*s)/o:(i-r-$*_)/n,isNaN(l)&&(l=(t-e-$*s)/o,isNaN(l)&&(l=(i-r-$*_)/n),isNaN(l)&&(console.log("a is NaN @UtVector#_$ni() "),console.log("v1x : "+o),console.log("v1x != 0 ? "+(0!=o)))),null==a?new Array(l,$):(a[0]=l,a[1]=$,a)},S.prototype._$8P=function(){return this.x+.5*this.width},S.prototype._$6P=function(){return this.y+.5*this.height},S.prototype._$EL=function(){return this.x+this.width},S.prototype._$5T=function(){return this.y+this.height},S.prototype._$jL=function(t,i,e,r){this.x=t,this.y=i,this.width=e,this.height=r},S.prototype._$jL=function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},S.prototype.contains=function(t,i){return this.x<=this.x&&this.y<=this.y&&this.x<=this.x+this.width&&this.y<=this.y+this.height},S.prototype.expand=function(t,i){this.x-=t,this.y-=i,this.width+=2*t,this.height+=2*i},v._$Z2=function(t,i,e,r){var o=i._$Q2(t,e),n=t._$vs(),s=t._$Tr();if(i._$zr(n,s,o),o<=0)return r[n[0]];if(1==o){var _=r[n[0]],a=r[n[1]],h=s[0];return _+(a-_)*h|0}if(2==o){var _=r[n[0]],a=r[n[1]],l=r[n[2]],$=r[n[3]],h=s[0],u=s[1],p=_+(a-_)*h|0,f=l+($-l)*h|0;return p+(f-p)*u|0}if(3==o){var c=r[n[0]],d=r[n[1]],g=r[n[2]],y=r[n[3]],m=r[n[4]],T=r[n[5]],P=r[n[6]],S=r[n[7]],h=s[0],u=s[1],v=s[2],_=c+(d-c)*h|0,a=g+(y-g)*h|0,l=m+(T-m)*h|0,$=P+(S-P)*h|0,p=_+(a-_)*u|0,f=l+($-l)*u|0;return p+(f-p)*v|0}if(4==o){var L=r[n[0]],M=r[n[1]],E=r[n[2]],A=r[n[3]],I=r[n[4]],w=r[n[5]],x=r[n[6]],O=r[n[7]],D=r[n[8]],R=r[n[9]],b=r[n[10]],F=r[n[11]],C=r[n[12]],N=r[n[13]],B=r[n[14]],U=r[n[15]],h=s[0],u=s[1],v=s[2],G=s[3],c=L+(M-L)*h|0,d=E+(A-E)*h|0,g=I+(w-I)*h|0,y=x+(O-x)*h|0,m=D+(R-D)*h|0,T=b+(F-b)*h|0,P=C+(N-C)*h|0,S=B+(U-B)*h|0,_=c+(d-c)*u|0,a=g+(y-g)*u|0,l=m+(T-m)*u|0,$=P+(S-P)*u|0,p=_+(a-_)*v|0,f=l+($-l)*v|0;return p+(f-p)*G|0}for(var Y=1<=G._$T7?(this.clipID=t._$nP(),this.clipIDList=this.convertClipIDForV2_11(this.clipID)):this.clipIDList=[],this._$MS(this._$Lb)},M.prototype.getClipIDList=function(){return this.clipIDList},M.prototype.init=function(t){},M.prototype._$Nr=function(t,i){if(i._$IS[0]=!1,i._$Us=v._$Z2(t,this._$GS,i._$IS,this._$Lb),at._$Zs);else if(i._$IS[0])return;i._$7s=v._$br(t,this._$GS,i._$IS,this._$mS)},M.prototype._$2b=function(t,i){},M.prototype.getDrawDataID=function(){return this._$gP},M.prototype._$j2=function(t){this._$gP=t},M.prototype.getOpacity=function(t,i){return i._$7s},M.prototype._$zS=function(t,i){return i._$Us},M.prototype._$MS=function(t){for(var i=t.length-1;i>=0;--i){var e=t[i];eM._$R2&&(M._$R2=e)}},M.prototype.getTargetBaseDataID=function(){return this._$dr},M.prototype._$gs=function(t){this._$dr=t},M.prototype._$32=function(){return null!=this._$dr&&this._$dr!=yt._$2o()},M.prototype.preDraw=function(t,i,e){},M.prototype.draw=function(t,i,e){},M.prototype.getType=function(){},M.prototype._$B2=function(t,i,e){},E._$ps=32,E.CLIPPING_PROCESS_NONE=0,E.CLIPPING_PROCESS_OVERWRITE_ALPHA=1,E.CLIPPING_PROCESS_MULTIPLY_ALPHA=2,E.CLIPPING_PROCESS_DRAW=3,E.CLIPPING_PROCESS_CLEAR_ALPHA=4,E.prototype.setChannelFlagAsColor=function(t,i){this.CHANNEL_COLORS[t]=i},E.prototype.getChannelFlagAsColor=function(t){return this.CHANNEL_COLORS[t]},E.prototype._$ZT=function(){},E.prototype._$Uo=function(t,i,e,r,o,n,s){},E.prototype._$Rs=function(){return-1},E.prototype._$Ds=function(t){},E.prototype.setBaseColor=function(t,i,e,r){t<0?t=0:t>1&&(t=1),i<0?i=0:i>1&&(i=1),e<0?e=0:e>1&&(e=1),r<0?r=0:r>1&&(r=1),this._$lT=t,this._$C0=i,this._$tT=e,this._$WL=r},E.prototype._$WP=function(t){this.culling=t},E.prototype.setMatrix=function(t){for(var i=0;i<16;i++)this.matrix4x4[i]=t[i]},E.prototype._$IT=function(){return this.matrix4x4},E.prototype.setPremultipliedAlpha=function(t){this.premultipliedAlpha=t},E.prototype.isPremultipliedAlpha=function(){return this.premultipliedAlpha},E.prototype.setAnisotropy=function(t){this.anisotropy=t},E.prototype.getAnisotropy=function(){return this.anisotropy},E.prototype.getClippingProcess=function(){return this.clippingProcess},E.prototype.setClippingProcess=function(t){this.clippingProcess=t},E.prototype.setClipBufPre_clipContextForMask=function(t){this.clipBufPre_clipContextMask=t},E.prototype.getClipBufPre_clipContextMask=function(){return this.clipBufPre_clipContextMask},E.prototype.setClipBufPre_clipContextForDraw=function(t){this.clipBufPre_clipContextDraw=t},E.prototype.getClipBufPre_clipContextDraw=function(){return this.clipBufPre_clipContextDraw},I._$ur=-2,I._$c2=1,I._$_b=2,I.prototype._$F0=function(t){this._$kP=t._$nP(),this._$dr=t._$nP()},I.prototype.readV2_opacity=function(t){t.getFormatVersion()>=G.LIVE2D_FORMAT_VERSION_V2_10_SDK2&&(this._$mS=t._$Tb())},I.prototype.init=function(t){},I.prototype._$Nr=function(t,i){},I.prototype.interpolateOpacity=function(t,i,e,r){null==this._$mS?e.setInterpolatedOpacity(1):e.setInterpolatedOpacity(v._$br(t,i,r,this._$mS))},I.prototype._$2b=function(t,i){},I.prototype._$nb=function(t,i,e,r,o,n,s){},I.prototype.getType=function(){},I.prototype._$gs=function(t){this._$dr=t},I.prototype._$a2=function(t){this._$kP=t},I.prototype.getTargetBaseDataID=function(){return this._$dr},I.prototype.getBaseDataID=function(){return this._$kP},I.prototype._$32=function(){return null!=this._$dr&&this._$dr!=yt._$2o()},w._$W2=0,w._$CS=w._$W2,w._$Mo=function(){return!0},w._$XP=function(t){try{for(var i=getTimeMSec();getTimeMSec()-i=t.length)return!1;for(var o=i;o=0;--e){var r=this._$Ob[e].getParamIndex(i);if(r==x._$ds&&(r=t.getParamIndex(this._$Ob[e].getParamID())),t._$Xb(r))return!0}return!1},D.prototype._$Q2=function(t,i){for(var e,r,o=this._$Ob.length,n=t._$v2(),s=0,_=0;_U._$Qb&&console.log("err 23245\n");for(var o=this._$Ob.length,n=1,s=1,_=0,a=0;a=0;--n)e[n]=o[n]}else this.mult_fast(t,i,e,r)},R.prototype.mult_fast=function(t,i,e,r){r?(e[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2],e[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6],e[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10],e[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12],e[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2],e[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6],e[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10],e[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13],e[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2],e[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6],e[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10],e[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14],e[3]=e[7]=e[11]=0,e[15]=1):(e[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2]+t[12]*i[3],e[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6]+t[12]*i[7],e[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10]+t[12]*i[11],e[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12]*i[15],e[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2]+t[13]*i[3],e[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6]+t[13]*i[7],e[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10]+t[13]*i[11],e[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13]*i[15],e[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2]+t[14]*i[3], +e[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6]+t[14]*i[7],e[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10]+t[14]*i[11],e[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14]*i[15],e[3]=t[3]*i[0]+t[7]*i[1]+t[11]*i[2]+t[15]*i[3],e[7]=t[3]*i[4]+t[7]*i[5]+t[11]*i[6]+t[15]*i[7],e[11]=t[3]*i[8]+t[7]*i[9]+t[11]*i[10]+t[15]*i[11],e[15]=t[3]*i[12]+t[7]*i[13]+t[11]*i[14]+t[15]*i[15])},R.prototype.translate=function(t,i,e){this.m[12]=this.m[0]*t+this.m[4]*i+this.m[8]*e+this.m[12],this.m[13]=this.m[1]*t+this.m[5]*i+this.m[9]*e+this.m[13],this.m[14]=this.m[2]*t+this.m[6]*i+this.m[10]*e+this.m[14],this.m[15]=this.m[3]*t+this.m[7]*i+this.m[11]*e+this.m[15]},R.prototype.scale=function(t,i,e){this.m[0]*=t,this.m[4]*=i,this.m[8]*=e,this.m[1]*=t,this.m[5]*=i,this.m[9]*=e,this.m[2]*=t,this.m[6]*=i,this.m[10]*=e,this.m[3]*=t,this.m[7]*=i,this.m[11]*=e},R.prototype.rotateX=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[4];this.m[4]=r*i+this.m[8]*e,this.m[8]=r*-e+this.m[8]*i,r=this.m[5],this.m[5]=r*i+this.m[9]*e,this.m[9]=r*-e+this.m[9]*i,r=this.m[6],this.m[6]=r*i+this.m[10]*e,this.m[10]=r*-e+this.m[10]*i,r=this.m[7],this.m[7]=r*i+this.m[11]*e,this.m[11]=r*-e+this.m[11]*i},R.prototype.rotateY=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[0];this.m[0]=r*i+this.m[8]*-e,this.m[8]=r*e+this.m[8]*i,r=this.m[1],this.m[1]=r*i+this.m[9]*-e,this.m[9]=r*e+this.m[9]*i,r=m[2],this.m[2]=r*i+this.m[10]*-e,this.m[10]=r*e+this.m[10]*i,r=m[3],this.m[3]=r*i+this.m[11]*-e,this.m[11]=r*e+this.m[11]*i},R.prototype.rotateZ=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[0];this.m[0]=r*i+this.m[4]*e,this.m[4]=r*-e+this.m[4]*i,r=this.m[1],this.m[1]=r*i+this.m[5]*e,this.m[5]=r*-e+this.m[5]*i,r=this.m[2],this.m[2]=r*i+this.m[6]*e,this.m[6]=r*-e+this.m[6]*i,r=this.m[3],this.m[3]=r*i+this.m[7]*e,this.m[7]=r*-e+this.m[7]*i},b.prototype=new et,b._$tP=new Object,b._$27=function(){b._$tP.clear()},b.getID=function(t){var i=b._$tP[t];return null==i&&(i=new b(t),b._$tP[t]=i),i},b.prototype._$3s=function(){return new b},F._$kS=-1,F._$pS=0,F._$hb=1,F.STATE_IDENTITY=0,F._$gb=1,F._$fo=2,F._$go=4,F.prototype.transform=function(t,i,e){var r,o,n,s,_,a,h=0,l=0;switch(this._$hi){default:return;case F._$go|F._$fo|F._$gb:for(r=this._$7,o=this._$H,n=this._$k,s=this._$f,_=this._$g,a=this._$w;--e>=0;){var $=t[h++],u=t[h++];i[l++]=r*$+o*u+n,i[l++]=s*$+_*u+a}return;case F._$go|F._$fo:for(r=this._$7,o=this._$H,s=this._$f,_=this._$g;--e>=0;){var $=t[h++],u=t[h++];i[l++]=r*$+o*u,i[l++]=s*$+_*u}return;case F._$go|F._$gb:for(o=this._$H,n=this._$k,s=this._$f,a=this._$w;--e>=0;){var $=t[h++];i[l++]=o*t[h++]+n,i[l++]=s*$+a}return;case F._$go:for(o=this._$H,s=this._$f;--e>=0;){var $=t[h++];i[l++]=o*t[h++],i[l++]=s*$}return;case F._$fo|F._$gb:for(r=this._$7,n=this._$k,_=this._$g,a=this._$w;--e>=0;)i[l++]=r*t[h++]+n,i[l++]=_*t[h++]+a;return;case F._$fo:for(r=this._$7,_=this._$g;--e>=0;)i[l++]=r*t[h++],i[l++]=_*t[h++];return;case F._$gb:for(n=this._$k,a=this._$w;--e>=0;)i[l++]=t[h++]+n,i[l++]=t[h++]+a;return;case F.STATE_IDENTITY:return void(t==i&&h==l||w._$jT(t,h,i,l,2*e))}},F.prototype.update=function(){0==this._$H&&0==this._$f?1==this._$7&&1==this._$g?0==this._$k&&0==this._$w?(this._$hi=F.STATE_IDENTITY,this._$Z=F._$pS):(this._$hi=F._$gb,this._$Z=F._$hb):0==this._$k&&0==this._$w?(this._$hi=F._$fo,this._$Z=F._$kS):(this._$hi=F._$fo|F._$gb,this._$Z=F._$kS):0==this._$7&&0==this._$g?0==this._$k&&0==this._$w?(this._$hi=F._$go,this._$Z=F._$kS):(this._$hi=F._$go|F._$gb,this._$Z=F._$kS):0==this._$k&&0==this._$w?(this._$hi=F._$go|F._$fo,this._$Z=F._$kS):(this._$hi=F._$go|F._$fo|F._$gb,this._$Z=F._$kS)},F.prototype._$RT=function(t){this._$IT(t);var i=t[0],e=t[2],r=t[1],o=t[3],n=Math.sqrt(i*i+r*r),s=i*o-e*r;0==n?at._$so&&console.log("affine._$RT() / rt==0"):(t[0]=n,t[1]=s/n,t[2]=(r*o+i*e)/s,t[3]=Math.atan2(r,i))},F.prototype._$ho=function(t,i,e,r){var o=new Float32Array(6),n=new Float32Array(6);t._$RT(o),i._$RT(n);var s=new Float32Array(6);s[0]=o[0]+(n[0]-o[0])*e,s[1]=o[1]+(n[1]-o[1])*e,s[2]=o[2]+(n[2]-o[2])*e,s[3]=o[3]+(n[3]-o[3])*e,s[4]=o[4]+(n[4]-o[4])*e,s[5]=o[5]+(n[5]-o[5])*e,r._$CT(s)},F.prototype._$CT=function(t){var i=Math.cos(t[3]),e=Math.sin(t[3]);this._$7=t[0]*i,this._$f=t[0]*e,this._$H=t[1]*(t[2]*i-e),this._$g=t[1]*(t[2]*e+i),this._$k=t[4],this._$w=t[5],this.update()},F.prototype._$IT=function(t){t[0]=this._$7,t[1]=this._$f,t[2]=this._$H,t[3]=this._$g,t[4]=this._$k,t[5]=this._$w},C.prototype=new s,C._$cs="VISIBLE:",C._$ar="LAYOUT:",C._$Co=0,C._$D2=[],C._$1T=1,C.loadMotion=function(t){var i=new C,e=[0],r=t.length;i._$yT=0;for(var o=0;o=0){var a=new B;O.startsWith(t,s,C._$cs)?(a._$RP=B._$hs,a._$4P=new String(t,s,_-s)):O.startsWith(t,s,C._$ar)?(a._$4P=new String(t,s+7,_-s-7),O.startsWith(t,s+7,"ANCHOR_X")?a._$RP=B._$xs:O.startsWith(t,s+7,"ANCHOR_Y")?a._$RP=B._$us:O.startsWith(t,s+7,"SCALE_X")?a._$RP=B._$qs:O.startsWith(t,s+7,"SCALE_Y")?a._$RP=B._$Ys:O.startsWith(t,s+7,"X")?a._$RP=B._$ws:O.startsWith(t,s+7,"Y")&&(a._$RP=B._$Ns)):(a._$RP=B._$Fr,a._$4P=new String(t,s,_-s)),i.motions.push(a);var h=0;for(C._$D2.clear(),o=_+1;o0){C._$D2.push(l),h++;var $=e[0];if($i._$yT&&(i._$yT=h)}}}else{for(var s=o,_=-1;o=0)for(_==s+4&&"f"==t[s+1]&&"p"==t[s+2]&&"s"==t[s+3]&&(u=!0),o=_+1;o0&&u&&5=l?l-1:s];t.setParamFloat($,u)}else if(B._$ws<=h._$RP&&h._$RP<=B._$Ys);else{var p=t.getParamFloat($),f=h._$I0[s>=l?l-1:s],c=h._$I0[s+1>=l?l-1:s+1],d=f+(c-f)*_,g=p+(d-p)*e;t.setParamFloat($,g)}}s>=this._$yT&&(this._$E?(r._$z2=i,this.loopFadeIn&&(r._$bs=i)):r._$9L=!0)},C.prototype._$r0=function(){return this._$E},C.prototype._$aL=function(t){this._$E=t},C.prototype.isLoopFadeIn=function(){return this.loopFadeIn},C.prototype.setLoopFadeIn=function(t){this.loopFadeIn=t},N.prototype.clear=function(){this.size=0},N.prototype.add=function(t){if(this._$P.length<=this.size){var i=new Float32Array(2*this.size);w._$jT(this._$P,0,i,0,this.size),this._$P=i}this._$P[this.size++]=t},N.prototype._$BL=function(){var t=new Float32Array(this.size);return w._$jT(this._$P,0,t,0,this.size),t},B._$Fr=0,B._$hs=1,B._$ws=100,B._$Ns=101,B._$xs=102,B._$us=103,B._$qs=104,B._$Ys=105,U._$Ms=1,U._$Qs=2,U._$i2=0,U._$No=2,U._$do=U._$Ms,U._$Ls=!0,U._$1r=5,U._$Qb=65,U._$J=1e-4,U._$FT=.001,U._$Ss=3,G._$o7=6,G._$S7=7,G._$s7=8,G._$77=9,G.LIVE2D_FORMAT_VERSION_V2_10_SDK2=10,G.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1=11,G._$T7=G.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1,G._$Is=-2004318072,G._$h0=0,G._$4L=23,G._$7P=33,G._$uT=function(t){console.log("_$bo :: _$6 _$mo _$E0 : %d\n",t)},G._$9o=function(t){if(t<40)return G._$uT(t),null;if(t<50)return G._$uT(t),null;if(t<60)return G._$uT(t),null;if(t<100)switch(t){case 65:return new Z;case 66:return new D;case 67:return new x;case 68:return new z;case 69:return new P;case 70:return new $t;default:return G._$uT(t),null}else if(t<150)switch(t){case 131:return new st;case 133:return new tt;case 136:return new p;case 137:return new ot;case 142:return new j}return G._$uT(t),null},Y._$HP=0,Y._$_0=!0;Y._$V2=-1,Y._$W0=-1,Y._$jr=!1,Y._$ZS=!0,Y._$tr=-1e6,Y._$lr=1e6,Y._$is=32,Y._$e=!1,Y.prototype.getDrawDataIndex=function(t){for(var i=this._$aS.length-1;i>=0;--i)if(null!=this._$aS[i]&&this._$aS[i].getDrawDataID()==t)return i;return-1},Y.prototype.getDrawData=function(t){if(t instanceof b){if(null==this._$Bo){this._$Bo=new Object;for(var i=this._$aS.length,e=0;e0&&this.release();for(var t=this._$Ri.getModelImpl(),i=t._$Xr(),r=i.length,o=new Array,n=new Array,s=0;s=0)&&(this._$3S.push(m),this._$db.push(n[s]),o[s]=null,y=!0)}}if(!y)break}var P=t._$E2();if(null!=P){var S=P._$1s();if(null!=S)for(var v=S.length,s=0;s=0;i--)this._$Js[i]=Y._$jr;return this._$QT=!1,Y._$e&&_.dump("_$eL"),!1},Y.prototype.preDraw=function(t){null!=this.clipManager&&(t._$ZT(),this.clipManager.setupClip(this,t))},Y.prototype.draw=function(t){if(null==this._$Ws)return void _._$li("call _$Ri.update() before _$Ri.draw() ");var i=this._$Ws.length;t._$ZT();for(var e=0;e=0;--i)if(this._$pb[i]==t)return i;return this._$02(t,0,Y._$tr,Y._$lr)},Y.prototype._$BS=function(t){return this.getBaseDataIndex(t)},Y.prototype.getBaseDataIndex=function(t){for(var i=this._$3S.length-1;i>=0;--i)if(null!=this._$3S[i]&&this._$3S[i].getBaseDataID()==t)return i;return-1},Y.prototype._$UT=function(t,i){var e=new Float32Array(i);return w._$jT(t,0,e,0,t.length),e},Y.prototype._$02=function(t,i,e,r){if(this._$qo>=this._$pb.length){var o=this._$pb.length,n=new Array(2*o);w._$jT(this._$pb,0,n,0,o),this._$pb=n,this._$_2=this._$UT(this._$_2,2*o),this._$vr=this._$UT(this._$vr,2*o),this._$Rr=this._$UT(this._$Rr,2*o),this._$Or=this._$UT(this._$Or,2*o);var s=new Array;w._$jT(this._$Js,0,s,0,o),this._$Js=s}return this._$pb[this._$qo]=t,this._$_2[this._$qo]=i,this._$vr[this._$qo]=i,this._$Rr[this._$qo]=e,this._$Or[this._$qo]=r,this._$Js[this._$qo]=Y._$ZS,this._$qo++},Y.prototype._$Zo=function(t,i){this._$3S[t]=i},Y.prototype.setParamFloat=function(t,i){ithis._$Or[t]&&(i=this._$Or[t]),this._$_2[t]=i},Y.prototype.loadParam=function(){var t=this._$_2.length;t>this._$fs.length&&(t=this._$fs.length),w._$jT(this._$fs,0,this._$_2,0,t)},Y.prototype.saveParam=function(){var t=this._$_2.length;t>this._$fs.length&&(this._$fs=new Float32Array(t)),w._$jT(this._$_2,0,this._$fs,0,t)},Y.prototype._$v2=function(){return this._$co},Y.prototype._$WS=function(){return this._$QT},Y.prototype._$Xb=function(t){return this._$Js[t]==Y._$ZS},Y.prototype._$vs=function(){return this._$Es},Y.prototype._$Tr=function(){return this._$ZP},Y.prototype.getBaseData=function(t){return this._$3S[t]},Y.prototype.getParamFloat=function(t){return this._$_2[t]},Y.prototype.getParamMax=function(t){return this._$Or[t]},Y.prototype.getParamMin=function(t){return this._$Rr[t]},Y.prototype.setPartsOpacity=function(t,i){this._$Hr[t].setPartsOpacity(i)},Y.prototype.getPartsOpacity=function(t){return this._$Hr[t].getPartsOpacity()},Y.prototype.getPartsDataIndex=function(t){for(var i=this._$F2.length-1;i>=0;--i)if(null!=this._$F2[i]&&this._$F2[i]._$p2()==t)return i;return-1},Y.prototype._$q2=function(t){return this._$db[t]},Y.prototype._$C2=function(t){return this._$8b[t]},Y.prototype._$Bb=function(t){return this._$Hr[t]},Y.prototype._$5s=function(t,i){for(var e=this._$Ws.length,r=t,o=0;o0;)n+=i;return r},k._$C=function(t){var i=null,e=null;try{i=t instanceof Array?t:new _$Xs(t,8192),e=new _$js;for(var r,o=new Int8Array(1e3);(r=i.read(o))>0;)e.write(o,0,r);return e._$TS()}finally{null!=t&&t.close(),null!=e&&(e.flush(),e.close())}},V.prototype._$T2=function(){return w.getUserTimeMSec()+Math._$10()*(2*this._$Br-1)},V.prototype._$uo=function(t){this._$Br=t},V.prototype._$QS=function(t,i,e){this._$Dr=t,this._$Cb=i,this._$mr=e},V.prototype._$7T=function(t){var i,e=w.getUserTimeMSec(),r=0;switch(this._$_L){case STATE_CLOSING:r=(e-this._$bb)/this._$Dr,r>=1&&(r=1,this._$_L=wt.STATE_CLOSED,this._$bb=e),i=1-r;break;case STATE_CLOSED:r=(e-this._$bb)/this._$Cb,r>=1&&(this._$_L=wt.STATE_OPENING,this._$bb=e),i=0;break;case STATE_OPENING:r=(e-this._$bb)/this._$mr,r>=1&&(r=1,this._$_L=wt.STATE_INTERVAL,this._$12=this._$T2()),i=r;break;case STATE_INTERVAL:this._$12.9?at.EXPAND_W:0;this.gl.drawElements(a,e,r,o,n,h,this.transform,_)}},X.prototype._$Rs=function(){throw new Error("_$Rs")},X.prototype._$Ds=function(t){throw new Error("_$Ds")},X.prototype._$K2=function(){for(var t=0;t=0;--i){var e=t[i];eW._$R2&&(W._$R2=e)}},W._$or=function(){return W._$52},W._$Pr=function(){return W._$R2},W.prototype._$F0=function(t){this._$gP=t._$nP(),this._$dr=t._$nP(),this._$GS=t._$nP(),this._$qb=t._$6L(),this._$Lb=t._$cS(),this._$mS=t._$Tb(),t.getFormatVersion()>=G._$T7?(this.clipID=t._$nP(),this.clipIDList=this.convertClipIDForV2_11(this.clipID)):this.clipIDList=null,W._$Sb(this._$Lb)},W.prototype.getClipIDList=function(){return this.clipIDList},W.prototype._$Nr=function(t,i){if(i._$IS[0]=!1,i._$Us=v._$Z2(t,this._$GS,i._$IS,this._$Lb),at._$Zs);else if(i._$IS[0])return;i._$7s=v._$br(t,this._$GS,i._$IS,this._$mS)},W.prototype._$2b=function(t){},W.prototype.getDrawDataID=function(){return this._$gP},W.prototype._$j2=function(t){this._$gP=t},W.prototype.getOpacity=function(t,i){return i._$7s},W.prototype._$zS=function(t,i){return i._$Us},W.prototype.getTargetBaseDataID=function(){return this._$dr},W.prototype._$gs=function(t){this._$dr=t},W.prototype._$32=function(){return null!=this._$dr&&this._$dr!=yt._$2o()},W.prototype.getType=function(){},j._$42=0,j.prototype._$1b=function(){return this._$3S},j.prototype.getDrawDataList=function(){return this._$aS},j.prototype._$F0=function(t){this._$NL=t._$nP(),this._$aS=t._$nP(),this._$3S=t._$nP()},j.prototype._$kr=function(t){t._$Zo(this._$3S),t._$xo(this._$aS),this._$3S=null,this._$aS=null},q.prototype=new i,q.loadModel=function(t){var e=new q;return i._$62(e,t),e},q.loadModel=function(t){var e=new q;return i._$62(e,t),e},q._$to=function(){return new q},q._$er=function(t){var i=new _$5("../_$_r/_$t0/_$Ri/_$_P._$d");if(0==i.exists())throw new _$ls("_$t0 _$_ _$6 _$Ui :: "+i._$PL());for(var e=["../_$_r/_$t0/_$Ri/_$_P.512/_$CP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$vP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$EP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$pP._$1"],r=q.loadModel(i._$3b()),o=0;o=0){var h=new B;O.startsWith(t,_,J._$cs)?(h._$RP=B._$hs,h._$4P=O.createString(t,_,a-_)):O.startsWith(t,_,J._$ar)?(h._$4P=O.createString(t,_+7,a-_-7),O.startsWith(t,_+7,"ANCHOR_X")?h._$RP=B._$xs:O.startsWith(t,_+7,"ANCHOR_Y")?h._$RP=B._$us:O.startsWith(t,_+7,"SCALE_X")?h._$RP=B._$qs:O.startsWith(t,_+7,"SCALE_Y")?h._$RP=B._$Ys:O.startsWith(t,_+7,"X")?h._$RP=B._$ws:O.startsWith(t,_+7,"Y")&&(h._$RP=B._$Ns)):(h._$RP=B._$Fr,h._$4P=O.createString(t,_,a-_)),i.motions.push(h);var l=0,$=[];for(o=a+1;o0){$.push(u),l++;var p=e[0];if(pi._$yT&&(i._$yT=l)}}}else{for(var _=o,a=-1;o=0)for(a==_+4&&"f"==Q(t,_+1)&&"p"==Q(t,_+2)&&"s"==Q(t,_+3)&&(f=!0),o=a+1;o0&&f&&5=l?l-1:s];t.setParamFloat($,u)}else if(B._$ws<=h._$RP&&h._$RP<=B._$Ys);else{var p,f=t.getParamIndex($),c=t.getModelContext(),d=c.getParamMax(f),g=c.getParamMin(f),y=.4*(d-g),m=c.getParamFloat(f),T=h._$I0[s>=l?l-1:s],P=h._$I0[s+1>=l?l-1:s+1];p=Ty||T>P&&T-P>y?T:T+(P-T)*_;var S=m+(p-m)*e;t.setParamFloat($,S)}}s>=this._$yT&&(this._$E?(r._$z2=i,this.loopFadeIn&&(r._$bs=i)):r._$9L=!0),this._$eP=e},J.prototype._$r0=function(){return this._$E},J.prototype._$aL=function(t){this._$E=t},J.prototype._$S0=function(){return this._$D0},J.prototype._$U0=function(t){this._$D0=t},J.prototype.isLoopFadeIn=function(){return this.loopFadeIn},J.prototype.setLoopFadeIn=function(t){this.loopFadeIn=t},N.prototype.clear=function(){this.size=0},N.prototype.add=function(t){if(this._$P.length<=this.size){var i=new Float32Array(2*this.size);w._$jT(this._$P,0,i,0,this.size),this._$P=i}this._$P[this.size++]=t},N.prototype._$BL=function(){var t=new Float32Array(this.size);return w._$jT(this._$P,0,t,0,this.size),t},B._$Fr=0,B._$hs=1,B._$ws=100,B._$Ns=101,B._$xs=102,B._$us=103,B._$qs=104,B._$Ys=105,Z.prototype=new I,Z._$gT=new Array,Z.prototype._$zP=function(){this._$GS=new D,this._$GS._$zP()},Z.prototype._$F0=function(t){I.prototype._$F0.call(this,t),this._$A=t._$6L(),this._$o=t._$6L(),this._$GS=t._$nP(),this._$Eo=t._$nP(),I.prototype.readV2_opacity.call(this,t)},Z.prototype.init=function(t){var i=new K(this),e=(this._$o+1)*(this._$A+1);return null!=i._$Cr&&(i._$Cr=null),i._$Cr=new Float32Array(2*e),null!=i._$hr&&(i._$hr=null),this._$32()?i._$hr=new Float32Array(2*e):i._$hr=null,i},Z.prototype._$Nr=function(t,i){var e=i;if(this._$GS._$Ur(t)){var r=this._$VT(),o=Z._$gT;o[0]=!1,v._$Vr(t,this._$GS,o,r,this._$Eo,e._$Cr,0,2),i._$Ib(o[0]),this.interpolateOpacity(t,this._$GS,i,o)}},Z.prototype._$2b=function(t,i){var e=i;if(e._$hS(!0),this._$32()){var r=this.getTargetBaseDataID();if(e._$8r==I._$ur&&(e._$8r=t.getBaseDataIndex(r)),e._$8r<0)at._$so&&_._$li("_$L _$0P _$G :: %s",r),e._$hS(!1);else{var o=t.getBaseData(e._$8r),n=t._$q2(e._$8r);if(null!=o&&n._$yo()){var s=n.getTotalScale();e.setTotalScale_notForClient(s);var a=n.getTotalOpacity();e.setTotalOpacity(a*e.getInterpolatedOpacity()),o._$nb(t,n,e._$Cr,e._$hr,this._$VT(),0,2),e._$hS(!0)}else e._$hS(!1)}}else e.setTotalOpacity(e.getInterpolatedOpacity())},Z.prototype._$nb=function(t,i,e,r,o,n,s){var _=i,a=null!=_._$hr?_._$hr:_._$Cr;Z.transformPoints_sdk2(e,r,o,n,s,a,this._$o,this._$A)},Z.transformPoints_sdk2=function(i,e,r,o,n,s,_,a){for(var h,l,$,u=r*n,p=0,f=0,c=0,d=0,g=0,y=0,m=!1,T=o;T=1){var b=s[2*(0+a*M)],F=s[2*(0+a*M)+1],C=p-2*c+1*g,N=f-2*d+1*y,x=p+3*g,O=f+3*y,D=p-2*c+3*g,R=f-2*d+3*y,B=.5*(v- -2),U=.5*(L-1);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else{var G=0|S;G==a&&(G=a-1);var B=.5*(v- -2),U=S-G,Y=G/a,k=(G+1)/a,b=s[2*(0+G*M)],F=s[2*(0+G*M)+1],x=s[2*(0+(G+1)*M)],O=s[2*(0+(G+1)*M)+1],C=p-2*c+Y*g,N=f-2*d+Y*y,D=p-2*c+k*g,R=f-2*d+k*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(1<=v)if(L<=0){var D=s[2*(_+0*M)],R=s[2*(_+0*M)+1],x=p+3*c,O=f+3*d,C=p+1*c-2*g,N=f+1*d-2*y,b=p+3*c-2*g,F=f+3*d-2*y,B=.5*(v-1),U=.5*(L- -2);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L>=1){var C=s[2*(_+a*M)],N=s[2*(_+a*M)+1],b=p+3*c+1*g,F=f+3*d+1*y,D=p+1*c+3*g,R=f+1*d+3*y,x=p+3*c+3*g,O=f+3*d+3*y,B=.5*(v-1),U=.5*(L-1);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else{var G=0|S;G==a&&(G=a-1);var B=.5*(v-1),U=S-G,Y=G/a,k=(G+1)/a,C=s[2*(_+G*M)],N=s[2*(_+G*M)+1],D=s[2*(_+(G+1)*M)],R=s[2*(_+(G+1)*M)+1],b=p+3*c+Y*g,F=f+3*d+Y*y,x=p+3*c+k*g,O=f+3*d+k*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L<=0){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L- -2),X=V/_,z=(V+1)/_,D=s[2*(V+0*M)],R=s[2*(V+0*M)+1],x=s[2*(V+1+0*M)],O=s[2*(V+1+0*M)+1],C=p+X*c-2*g,N=f+X*d-2*y,b=p+z*c-2*g,F=f+z*d-2*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L>=1){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L-1),X=V/_,z=(V+1)/_,C=s[2*(V+a*M)],N=s[2*(V+a*M)+1],b=s[2*(V+1+a*M)],F=s[2*(V+1+a*M)+1],D=p+X*c+3*g,R=f+X*d+3*y,x=p+z*c+3*g,O=f+z*d+3*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else t.err.printf("_$li calc : %.4f , %.4f\t\t\t\t\t@@BDBoxGrid\n",v,L);else e[T]=p+v*c+L*g,e[T+1]=f+v*d+L*y}else l=P-(0|P),$=S-(0|S),h=2*((0|P)+(0|S)*(_+1)),l+$<1?(e[T]=s[h]*(1-l-$)+s[h+2]*l+s[h+2*(_+1)]*$,e[T+1]=s[h+1]*(1-l-$)+s[h+3]*l+s[h+2*(_+1)+1]*$):(e[T]=s[h+2*(_+1)+2]*(l-1+$)+s[h+2*(_+1)]*(1-l)+s[h+2]*(1-$),e[T+1]=s[h+2*(_+1)+3]*(l-1+$)+s[h+2*(_+1)+1]*(1-l)+s[h+3]*(1-$))}},Z.prototype.transformPoints_sdk1=function(t,i,e,r,o,n,s){for(var _,a,h,l,$,u,p,f=i,c=this._$o,d=this._$A,g=o*s,y=null!=f._$hr?f._$hr:f._$Cr,m=n;m1&&(_=1),a<0?a=0:a>1&&(a=1),_*=c,a*=d,h=0|_,l=0|a,h>c-1&&(h=c-1),l>d-1&&(l=d-1),u=_-h,p=a-l,$=2*(h+l*(c+1))):(_=e[m]*c,a=e[m+1]*d,u=_-(0|_),p=a-(0|a),$=2*((0|_)+(0|a)*(c+1))),u+p<1?(r[m]=y[$]*(1-u-p)+y[$+2]*u+y[$+2*(c+1)]*p,r[m+1]=y[$+1]*(1-u-p)+y[$+3]*u+y[$+2*(c+1)+1]*p):(r[m]=y[$+2*(c+1)+2]*(u-1+p)+y[$+2*(c+1)]*(1-u)+y[$+2]*(1-p),r[m+1]=y[$+2*(c+1)+3]*(u-1+p)+y[$+2*(c+1)+1]*(1-u)+y[$+3]*(1-p))},Z.prototype._$VT=function(){return(this._$o+1)*(this._$A+1)},Z.prototype.getType=function(){return I._$_b},K.prototype=new _t,tt._$42=0,tt.prototype._$zP=function(){this._$3S=new Array,this._$aS=new Array},tt.prototype._$F0=function(t){this._$g0=t._$8L(),this.visible=t._$8L(),this._$NL=t._$nP(),this._$3S=t._$nP(),this._$aS=t._$nP()},tt.prototype.init=function(t){var i=new it(this);return i.setPartsOpacity(this.isVisible()?1:0),i},tt.prototype._$6o=function(t){if(null==this._$3S)throw new Error("_$3S _$6 _$Wo@_$6o");this._$3S.push(t)},tt.prototype._$3o=function(t){if(null==this._$aS)throw new Error("_$aS _$6 _$Wo@_$3o");this._$aS.push(t)},tt.prototype._$Zo=function(t){this._$3S=t},tt.prototype._$xo=function(t){this._$aS=t},tt.prototype.isVisible=function(){return this.visible},tt.prototype._$uL=function(){return this._$g0},tt.prototype._$KP=function(t){this.visible=t},tt.prototype._$ET=function(t){this._$g0=t},tt.prototype.getBaseData=function(){return this._$3S},tt.prototype.getDrawData=function(){return this._$aS},tt.prototype._$p2=function(){return this._$NL},tt.prototype._$ob=function(t){this._$NL=t},tt.prototype.getPartsID=function(){return this._$NL},tt.prototype._$MP=function(t){this._$NL=t},it.prototype=new $,it.prototype.getPartsOpacity=function(){return this._$VS},it.prototype.setPartsOpacity=function(t){this._$VS=t},et._$L7=function(){u._$27(),yt._$27(),b._$27(),l._$27()},et.prototype.toString=function(){return this.id},rt.prototype._$F0=function(t){},ot.prototype._$1s=function(){return this._$4S},ot.prototype._$zP=function(){this._$4S=new Array},ot.prototype._$F0=function(t){this._$4S=t._$nP()},ot.prototype._$Ks=function(t){this._$4S.push(t)},nt.tr=new gt,nt._$50=new gt,nt._$Ti=new Array(0,0),nt._$Pi=new Array(0,0),nt._$B=new Array(0,0),nt.prototype._$lP=function(t,i,e,r){this.viewport=new Array(t,i,e,r)},nt.prototype._$bL=function(){this.context.save();var t=this.viewport;null!=t&&(this.context.beginPath(),this.context._$Li(t[0],t[1],t[2],t[3]),this.context.clip())},nt.prototype._$ei=function(){this.context.restore()},nt.prototype.drawElements=function(t,i,e,r,o,n,s,a){try{o!=this._$Qo&&(this._$Qo=o,this.context.globalAlpha=o);for(var h=i.length,l=t.width,$=t.height,u=this.context,p=this._$xP,f=this._$uP,c=this._$6r,d=this._$3r,g=nt.tr,y=nt._$Ti,m=nt._$Pi,T=nt._$B,P=0;P.02?nt.expandClip(t,i,e,r,l,$,u,p,f,c):nt.clipWithTransform(t,null,o,n,s,_,a,h)},nt.expandClip=function(t,i,e,r,o,n,s,_,a,h){var l=s-o,$=_-n,u=a-o,p=h-n,f=l*p-$*u>0?e:-e,c=-$,d=l,g=a-s,y=h-_,m=-y,T=g,P=Math.sqrt(g*g+y*y),S=-p,v=u,L=Math.sqrt(u*u+p*p),M=o-f*c/r,E=n-f*d/r,A=s-f*c/r,I=_-f*d/r,w=s-f*m/P,x=_-f*T/P,O=a-f*m/P,D=h-f*T/P,R=o+f*S/L,b=n+f*v/L,F=a+f*S/L,C=h+f*v/L,N=nt._$50;return null!=i._$P2(N)&&(nt.clipWithTransform(t,N,M,E,A,I,w,x,O,D,F,C,R,b),!0)},nt.clipWithTransform=function(t,i,e,r,o,n,s,a){if(arguments.length<7)return void _._$li("err : @LDGL.clip()");if(!(arguments[1]instanceof gt))return void _._$li("err : a[0] is _$6 LDTransform @LDGL.clip()");var h=nt._$B,l=i,$=arguments;if(t.beginPath(),l){l._$PS($[2],$[3],h),t.moveTo(h[0],h[1]);for(var u=4;u<$.length;u+=2)l._$PS($[u],$[u+1],h),t.lineTo(h[0],h[1])}else{t.moveTo($[2],$[3]);for(var u=4;u<$.length;u+=2)t.lineTo($[u],$[u+1])}t.clip()},nt.createCanvas=function(t,i){var e=document.createElement("canvas");return e.setAttribute("width",t),e.setAttribute("height",i),e||_._$li("err : "+e),e},nt.dumpValues=function(){for(var t="",i=0;i1?1:.5-.5*Math.cos(t*Lt.PI_F)},lt._$fr=-1,lt.prototype.toString=function(){return this._$ib},$t.prototype=new W,$t._$42=0,$t._$Os=30,$t._$ms=0,$t._$ns=1,$t._$_s=2,$t._$gT=new Array,$t.prototype._$_S=function(t){this._$LP=t},$t.prototype.getTextureNo=function(){return this._$LP},$t.prototype._$ZL=function(){return this._$Qi},$t.prototype._$H2=function(){return this._$JP},$t.prototype.getNumPoints=function(){return this._$d0},$t.prototype.getType=function(){return W._$wb},$t.prototype._$B2=function(t,i,e){var r=i,o=null!=r._$hr?r._$hr:r._$Cr;switch(U._$do){default:case U._$Ms:throw new Error("_$L _$ro ");case U._$Qs:for(var n=this._$d0-1;n>=0;--n)o[n*U._$No+4]=e}},$t.prototype._$zP=function(){this._$GS=new D,this._$GS._$zP()},$t.prototype._$F0=function(t){W.prototype._$F0.call(this,t),this._$LP=t._$6L(),this._$d0=t._$6L(),this._$Yo=t._$6L();var i=t._$nP();this._$BP=new Int16Array(3*this._$Yo);for(var e=3*this._$Yo-1;e>=0;--e)this._$BP[e]=i[e];if(this._$Eo=t._$nP(),this._$Qi=t._$nP(),t.getFormatVersion()>=G._$s7){if(this._$JP=t._$6L(),0!=this._$JP){if(0!=(1&this._$JP)){var r=t._$6L();null==this._$5P&&(this._$5P=new Object),this._$5P._$Hb=parseInt(r)}0!=(this._$JP&$t._$Os)?this._$6s=(this._$JP&$t._$Os)>>1:this._$6s=$t._$ms,0!=(32&this._$JP)&&(this.culling=!1)}}else this._$JP=0},$t.prototype.init=function(t){var i=new ut(this),e=this._$d0*U._$No,r=this._$32();switch(null!=i._$Cr&&(i._$Cr=null),i._$Cr=new Float32Array(e),null!=i._$hr&&(i._$hr=null),i._$hr=r?new Float32Array(e):null,U._$do){default:case U._$Ms:if(U._$Ls)for(var o=this._$d0-1;o>=0;--o){var n=o<<1;this._$Qi[n+1]=1-this._$Qi[n+1]}break;case U._$Qs:for(var o=this._$d0-1;o>=0;--o){var n=o<<1,s=o*U._$No,_=this._$Qi[n],a=this._$Qi[n+1];i._$Cr[s]=_,i._$Cr[s+1]=a,i._$Cr[s+4]=0,r&&(i._$hr[s]=_,i._$hr[s+1]=a,i._$hr[s+4]=0)}}return i},$t.prototype._$Nr=function(t,i){var e=i;if(this!=e._$GT()&&console.log("### assert!! ### "),this._$GS._$Ur(t)&&(W.prototype._$Nr.call(this,t,e),!e._$IS[0])){var r=$t._$gT;r[0]=!1,v._$Vr(t,this._$GS,r,this._$d0,this._$Eo,e._$Cr,U._$i2,U._$No)}},$t.prototype._$2b=function(t,i){try{this!=i._$GT()&&console.log("### assert!! ### ");var e=!1;i._$IS[0]&&(e=!0);var r=i;if(!e&&(W.prototype._$2b.call(this,t),this._$32())){var o=this.getTargetBaseDataID();if(r._$8r==W._$ur&&(r._$8r=t.getBaseDataIndex(o)),r._$8r<0)at._$so&&_._$li("_$L _$0P _$G :: %s",o);else{var n=t.getBaseData(r._$8r),s=t._$q2(r._$8r);null==n||s._$x2()?r._$AT=!1:(n._$nb(t,s,r._$Cr,r._$hr,this._$d0,U._$i2,U._$No),r._$AT=!0),r.baseOpacity=s.getTotalOpacity()}}}catch(t){throw t}},$t.prototype.draw=function(t,i,e){if(this!=e._$GT()&&console.log("### assert!! ### "),!e._$IS[0]){var r=e,o=this._$LP;o<0&&(o=1);var n=this.getOpacity(i,r)*e._$VS*e.baseOpacity,s=null!=r._$hr?r._$hr:r._$Cr;t.setClipBufPre_clipContextForDraw(e.clipBufPre_clipContext),t._$WP(this.culling),t._$Uo(o,3*this._$Yo,this._$BP,s,this._$Qi,n,this._$6s,r)}},$t.prototype.dump=function(){console.log(" _$yi( %d ) , _$d0( %d ) , _$Yo( %d ) \n",this._$LP,this._$d0,this._$Yo),console.log(" _$Oi _$di = { ");for(var t=0;tstartMotion() / start _$K _$3 (m%d)\n",r,e._$sr));if(null==t)return-1;e=new dt,e._$w0=t,this.motions.push(e);var n=e._$sr;return this._$eb&&_._$Ji("MotionQueueManager[size:%2d]->startMotion() / new _$w0 (m%d)\n",r,n),n},ct.prototype.updateParam=function(t){try{for(var i=!1,e=0;eupdateParam() / _$T0 _$w0 (m%d)\n",this.motions.length-1,r._$sr),this.motions.splice(e,1),e--)):(this.motions=this.motions.splice(e,1),e--)}else this.motions.splice(e,1),e--}return i}catch(t){return _._$li(t),!0}},ct.prototype.isFinished=function(t){if(arguments.length>=1){for(var i=0;i.9&&at.EXPAND_W,this.gl);if(null==this.gl)throw new Error("gl is null");var h=1*this._$C0*n,l=1*this._$tT*n,$=1*this._$WL*n,u=this._$lT*n;if(null!=this.clipBufPre_clipContextMask){a.frontFace(a.CCW),a.useProgram(this.shaderProgram),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc),a.vertexAttribPointer(this.a_position_Loc,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc,1),a.enableVertexAttribArray(this.a_texCoord_Loc),a.vertexAttribPointer(this.a_texCoord_Loc,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_matrix_Loc,!1,this.getClipBufPre_clipContextMask().matrixForMask);var p=this.getClipBufPre_clipContextMask().layoutChannelNo,f=this.getChannelFlagAsColor(p);a.uniform4f(this.u_channelFlag,f.r,f.g,f.b,f.a);var c=this.getClipBufPre_clipContextMask().layoutBounds;a.uniform4f(this.u_baseColor_Loc,2*c.x-1,2*c.y-1,2*c._$EL()-1,2*c._$5T()-1),a.uniform1i(this.u_maskFlag_Loc,!0)}else if(null!=this.getClipBufPre_clipContextDraw()){a.useProgram(this.shaderProgramOff),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc_Off),a.vertexAttribPointer(this.a_position_Loc_Off,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc_Off,1),a.enableVertexAttribArray(this.a_texCoord_Loc_Off),a.vertexAttribPointer(this.a_texCoord_Loc_Off,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_clipMatrix_Loc_Off,!1,this.getClipBufPre_clipContextDraw().matrixForDraw),a.uniformMatrix4fv(this.u_matrix_Loc_Off,!1,this.matrix4x4),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,at.fTexture[this.glno]),a.uniform1i(this.s_texture1_Loc_Off,2);var p=this.getClipBufPre_clipContextDraw().layoutChannelNo,f=this.getChannelFlagAsColor(p);a.uniform4f(this.u_channelFlag_Loc_Off,f.r,f.g,f.b,f.a),a.uniform4f(this.u_baseColor_Loc_Off,h,l,$,u)}else a.useProgram(this.shaderProgram),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc),a.vertexAttribPointer(this.a_position_Loc,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc,1),a.enableVertexAttribArray(this.a_texCoord_Loc),a.vertexAttribPointer(this.a_texCoord_Loc,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_matrix_Loc,!1,this.matrix4x4),a.uniform4f(this.u_baseColor_Loc,h,l,$,u),a.uniform1i(this.u_maskFlag_Loc,!1);this.culling?this.gl.enable(a.CULL_FACE):this.gl.disable(a.CULL_FACE),this.gl.enable(a.BLEND);var d,g,y,m;if(null!=this.clipBufPre_clipContextMask)d=a.ONE,g=a.ONE_MINUS_SRC_ALPHA,y=a.ONE,m=a.ONE_MINUS_SRC_ALPHA;else switch(s){case $t._$ms:d=a.ONE,g=a.ONE_MINUS_SRC_ALPHA,y=a.ONE,m=a.ONE_MINUS_SRC_ALPHA;break;case $t._$ns:d=a.ONE,g=a.ONE,y=a.ZERO,m=a.ONE;break;case $t._$_s:d=a.DST_COLOR,g=a.ONE_MINUS_SRC_ALPHA,y=a.ZERO,m=a.ONE}a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(d,g,y,m),this.anisotropyExt&&a.texParameteri(a.TEXTURE_2D,this.anisotropyExt.TEXTURE_MAX_ANISOTROPY_EXT,this.maxAnisotropy);var T=e.length;a.drawElements(a.TRIANGLES,T,a.UNSIGNED_SHORT,0),a.bindTexture(a.TEXTURE_2D,null)}},mt.prototype._$Rs=function(){throw new Error("_$Rs")},mt.prototype._$Ds=function(t){throw new Error("_$Ds")},mt.prototype._$K2=function(){for(var t=0;t=48){var r=G._$9o(t);return null!=r?(r._$F0(this),r):null}switch(t){case 1:return this._$bT();case 10:return new n(this._$6L(),!0);case 11:return new S(this._$mP(),this._$mP(),this._$mP(),this._$mP());case 12:return new S(this._$_T(),this._$_T(),this._$_T(),this._$_T());case 13:return new L(this._$mP(),this._$mP());case 14:return new L(this._$_T(),this._$_T());case 15:for(var o=this._$3L(),e=new Array(o),s=0;s>7-this._$hL++&1)},St.prototype._$zT=function(){0!=this._$hL&&(this._$hL=0)},vt.prototype._$wP=function(t,i,e){for(var r=0;rMath.PI;)e-=2*Math.PI;return e},Lt._$9=function(t){return Math.sin(t)},Lt.fcos=function(t){return Math.cos(t)},Mt.prototype._$u2=function(){return this._$IS[0]},Mt.prototype._$yo=function(){return this._$AT&&!this._$IS[0]},Mt.prototype._$GT=function(){return this._$e0},Et._$W2=0,Et.SYSTEM_INFO=null,Et.USER_AGENT=navigator.userAgent,Et.isIPhone=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone},Et.isIOS=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone||Et.SYSTEM_INFO._isIPad},Et.isAndroid=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isAndroid},Et.getOSVersion=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO.version},Et.getOS=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone||Et.SYSTEM_INFO._isIPad?"iOS":Et.SYSTEM_INFO._isAndroid?"Android":"_$Q0 OS"},Et.setup=function(){function t(t,i){for(var e=t.substring(i).split(/[ _,;\.]/),r=0,o=0;o<=2&&!isNaN(e[o]);o++){var n=parseInt(e[o]);if(n<0||n>999){_._$li("err : "+n+" @UtHtml5.setup()"),r=0;break}r+=n*Math.pow(1e3,2-o)}return r}var i,e=Et.USER_AGENT,r=Et.SYSTEM_INFO={userAgent:e};if((i=e.indexOf("iPhone OS "))>=0)r.os="iPhone",r._isIPhone=!0,r.version=t(e,i+"iPhone OS ".length);else if((i=e.indexOf("iPad"))>=0){if((i=e.indexOf("CPU OS"))<0)return void _._$li(" err : "+e+" @UtHtml5.setup()");r.os="iPad",r._isIPad=!0,r.version=t(e,i+"CPU OS ".length)}else(i=e.indexOf("Android"))>=0?(r.os="Android",r._isAndroid=!0,r.version=t(e,i+"Android ".length)):(r.os="-",r.version=-1)},window.UtSystem=w,window.UtDebug=_,window.LDTransform=gt,window.LDGL=nt,window.Live2D=at,window.Live2DModelWebGL=ft,window.Live2DModelJS=q,window.Live2DMotion=J,window.MotionQueueManager=ct,window.PhysicsHair=f,window.AMotion=s,window.PartsDataID=l,window.DrawDataID=b,window.BaseDataID=yt,window.ParamID=u,at.init();var At=!1}()}).call(i,e(7))},function(t,i){t.exports={import:function(){throw new Error("System.import cannot be used indirectly")}}},function(t,i,e){function r(t){return t&&t.__esModule?t:{default:t}}function o(){this.models=[],this.count=-1,this.reloadFlg=!1,Live2D.init(),n.Live2DFramework.setPlatformManager(new _.default)}Object.defineProperty(i,"__esModule",{value:!0}),i.default=o;var n=e(0),s=e(9),_=r(s),a=e(10),h=r(a),l=e(1),$=r(l);o.prototype.createModel=function(){var t=new h.default;return this.models.push(t),t},o.prototype.changeModel=function(t,i){this.reloadFlg&&(this.reloadFlg=!1,this.releaseModel(0,t),this.createModel(),this.models[0].load(t,i))},o.prototype.getModel=function(t){return t>=this.models.length?null:this.models[t]},o.prototype.releaseModel=function(t,i){this.models.length<=t||(this.models[t].release(i),delete this.models[t],this.models.splice(t,1))},o.prototype.numModels=function(){return this.models.length},o.prototype.setDrag=function(t,i){for(var e=0;e0){r.expressions={};for(var t=0;t{var Yt=Object.defineProperty,nr=Object.getOwnPropertyDescriptor,ar=Object.getOwnPropertyNames,lr=Object.prototype.hasOwnProperty,or=(t,e)=>{for(var i in e)Yt(t,i,{get:e[i],enumerable:!0})},hr=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ar(e))!lr.call(t,r)&&r!==i&&Yt(t,r,{get:()=>e[r],enumerable:!(s=nr(e,r))||s.enumerable});return t},cr=t=>hr(Yt({},"__esModule",{value:!0}),t),Ji={};or(Ji,{AlphaTimeline:()=>Ht,Animation:()=>ht,AnimationState:()=>rs,AnimationStateAdapter:()=>gr,AnimationStateData:()=>cs,AssetCache:()=>ws,AssetManager:()=>Xi,AssetManagerBase:()=>ps,AtlasAttachmentLoader:()=>gs,Attachment:()=>Lt,AttachmentTimeline:()=>Ne,BinaryInput:()=>Ts,BlendMode:()=>Yi,Bone:()=>xi,BoneData:()=>wi,BoundingBoxAttachment:()=>fi,CURRENT:()=>hs,CameraController:()=>Qr,ClippingAttachment:()=>tt,Color:()=>V,Color2Attribute:()=>Fs,ColorAttribute:()=>xt,ConstraintData:()=>st,CurveTimeline:()=>Se,CurveTimeline1:()=>Ae,CurveTimeline2:()=>ct,DebugUtils:()=>fr,DeformTimeline:()=>Zt,Downloader:()=>bi,DrawOrderTimeline:()=>qe,Event:()=>vi,EventData:()=>yi,EventQueue:()=>as,EventTimeline:()=>dt,EventType:()=>ls,FIRST:()=>ci,FakeTexture:()=>pr,GLTexture:()=>_e,HOLD_FIRST:()=>ft,HOLD_MIX:()=>os,HOLD_SUBSEQUENT:()=>di,IkConstraint:()=>xs,IkConstraintData:()=>Ai,IkConstraintTimeline:()=>Jt,Inherit:()=>gt,InheritTimeline:()=>zt,Input:()=>nt,IntSet:()=>dr,Interpolation:()=>Ki,LoadingScreen:()=>Us,M00:()=>O,M01:()=>q,M02:()=>G,M03:()=>D,M10:()=>H,M11:()=>N,M12:()=>_,M13:()=>U,M20:()=>j,M21:()=>Z,M22:()=>W,M23:()=>z,M30:()=>Q,M31:()=>$,M32:()=>ee,M33:()=>K,ManagedWebGLRenderingContext:()=>ge,MathUtils:()=>P,Matrix4:()=>rt,Mesh:()=>Bi,MeshAttachment:()=>Ge,MixBlend:()=>is,MixDirection:()=>ss,OrthoCamera:()=>Rs,PathAttachment:()=>He,PathConstraint:()=>bs,PathConstraintData:()=>Ci,PathConstraintMixTimeline:()=>ei,PathConstraintPositionTimeline:()=>Qt,PathConstraintSpacingTimeline:()=>$t,Physics:()=>As,PhysicsConstraintDampingTimeline:()=>si,PhysicsConstraintGravityTimeline:()=>ai,PhysicsConstraintInertiaTimeline:()=>ti,PhysicsConstraintMassTimeline:()=>ri,PhysicsConstraintMixTimeline:()=>li,PhysicsConstraintResetTimeline:()=>oi,PhysicsConstraintStrengthTimeline:()=>ii,PhysicsConstraintTimeline:()=>Be,PhysicsConstraintWindTimeline:()=>ni,PointAttachment:()=>ms,PolygonBatcher:()=>Oi,Pool:()=>$e,Position2Attribute:()=>wt,Position3Attribute:()=>$r,PositionMode:()=>Si,Pow:()=>Qi,PowOut:()=>ur,RGB2Timeline:()=>jt,RGBA2Timeline:()=>_t,RGBATimeline:()=>qt,RGBTimeline:()=>Gt,RegionAttachment:()=>it,ResizeMode:()=>Ns,RotateMode:()=>ki,RotateTimeline:()=>et,SETUP:()=>ui,SUBSEQUENT:()=>ut,ScaleTimeline:()=>Vt,ScaleXTimeline:()=>Ot,ScaleYTimeline:()=>Dt,SceneRenderer:()=>Ni,SequenceTimeline:()=>hi,Shader:()=>ke,ShapeRenderer:()=>Di,ShapeType:()=>Vs,ShearTimeline:()=>Nt,ShearXTimeline:()=>Ut,ShearYTimeline:()=>Wt,Skeleton:()=>Ei,SkeletonBinary:()=>Ss,SkeletonBounds:()=>ks,SkeletonClipping:()=>Is,SkeletonData:()=>Ii,SkeletonDebugRenderer:()=>Os,SkeletonJson:()=>Ms,SkeletonRenderer:()=>Ds,Skin:()=>pt,SkinEntry:()=>Mi,Slot:()=>vs,SlotData:()=>Ri,SpacingMode:()=>Ti,SpineCanvas:()=>an,SpinePlayer:()=>ln,SpinePlayerEditor:()=>gn,StringSet:()=>Ft,TexCoordAttribute:()=>Vi,Texture:()=>mi,TextureAtlas:()=>gi,TextureAtlasPage:()=>fs,TextureAtlasRegion:()=>pi,TextureFilter:()=>mt,TextureRegion:()=>us,TextureWrap:()=>ds,TimeKeeper:()=>ot,Timeline:()=>ue,Touch:()=>Ys,TrackEntry:()=>ns,TransformConstraint:()=>ys,TransformConstraintData:()=>Fi,TransformConstraintTimeline:()=>Kt,TranslateTimeline:()=>Pt,TranslateXTimeline:()=>Xt,TranslateYTimeline:()=>Bt,Triangulator:()=>Es,Utils:()=>X,Vector2:()=>Ce,Vector3:()=>ve,VertexAttachment:()=>Ye,VertexAttribute:()=>je,VertexAttributeType:()=>Ls,WindowedMean:()=>mr});var dr=class{array=new Array;add(t){let e=this.contains(t);return this.array[t|0]=t|0,!e}contains(t){return this.array[t|0]!=null}remove(t){this.array[t|0]=void 0}clear(){this.array.length=0}},Ft=class{entries={};size=0;add(t){let e=this.entries[t];return this.entries[t]=!0,e?!1:(this.size++,!0)}addAll(t){let e=this.size;for(var i=0,s=t.length;i1&&(this.r=1),this.g<0?this.g=0:this.g>1&&(this.g=1),this.b<0?this.b=0:this.b>1&&(this.b=1),this.a<0?this.a=0:this.a>1&&(this.a=1),this}static rgba8888ToColor(e,i){e.r=((i&4278190080)>>>24)/255,e.g=((i&16711680)>>>16)/255,e.b=((i&65280)>>>8)/255,e.a=(i&255)/255}static rgb888ToColor(e,i){e.r=((i&16711680)>>>16)/255,e.g=((i&65280)>>>8)/255,e.b=(i&255)/255}toRgb888(){const e=i=>("0"+(i*255).toString(16)).slice(-2);return+("0x"+e(this.r)+e(this.g)+e(this.b))}static fromString(e,i=new We){return i.setFromString(e)}},P=class Me{static PI=3.1415927;static PI2=Me.PI*2;static invPI2=1/Me.PI2;static radiansToDegrees=180/Me.PI;static radDeg=Me.radiansToDegrees;static degreesToRadians=Me.PI/180;static degRad=Me.degreesToRadians;static clamp(e,i,s){return es?s:e}static cosDeg(e){return Math.cos(e*Me.degRad)}static sinDeg(e){return Math.sin(e*Me.degRad)}static atan2Deg(e,i){return Math.atan2(e,i)*Me.degRad}static signum(e){return e>0?1:e<0?-1:0}static toInt(e){return e>0?Math.floor(e):Math.ceil(e)}static cbrt(e){let i=Math.pow(Math.abs(e),.3333333333333333);return e<0?-i:i}static randomTriangular(e,i){return Me.randomTriangularWith(e,i,(e+i)*.5)}static randomTriangularWith(e,i,s){let r=Math.random(),h=i-e;return r<=(s-e)/h?e+Math.sqrt(r*h*(s-e)):i-Math.sqrt((1-r)*h*(i-s))}static isPowerOfTwo(e){return e&&(e&e-1)===0}},Ki=class{apply(t,e,i){return t+(e-t)*this.applyInternal(i)}},Qi=class extends Ki{power=2;constructor(t){super(),this.power=t}applyInternal(t){return t<=.5?Math.pow(t*2,this.power)/2:Math.pow((t-1)*2,this.power)/(this.power%2==0?-2:2)+1}},ur=class extends Qi{constructor(t){super(t)}applyInternal(t){return Math.pow(t-1,this.power)*(this.power%2==0?-1:1)+1}},X=class Qe{static SUPPORTS_TYPED_ARRAYS=typeof Float32Array<"u";static arrayCopy(e,i,s,r,h){for(let l=i,n=r;l=i?e:Qe.setArraySize(e,i,s)}static newArray(e,i){let s=new Array(e);for(let r=0;r0?this.items.pop():this.instantiator()}free(t){t.reset&&t.reset(),this.items.push(t)}freeAll(t){for(let e=0;ethis.maxDelta&&(this.delta=this.maxDelta),this.lastTime=t,this.frameCount++,this.frameTime>1&&(this.framesPerSecond=this.frameCount/this.frameTime,this.frameTime=0,this.frameCount=0)}},mr=class{values;addedValues=0;lastValue=0;mean=0;dirty=!0;constructor(t=32){this.values=new Array(t)}hasEnoughData(){return this.addedValues>=this.values.length}addValue(t){this.addedValuesthis.values.length-1&&(this.lastValue=0),this.dirty=!0}getMean(){if(this.hasEnoughData()){if(this.dirty){let t=0;for(let e=0;e>1)*l;let n=e.bone.skeleton,a=e.deform,o=this.vertices,c=this.bones;if(!c){a.length>0&&(o=a);let f=e.bone,g=f.worldX,w=f.worldY,b=f.a,p=f.b,x=f.c,v=f.d;for(let y=i,A=h;A=this.regions.length&&(s=this.regions.length-1);let r=this.regions[s];i.region!=r&&(i.region=r,i.updateRegion())}getPath(e,i){let s=e,r=(this.start+i).toString();for(let h=this.digits-r.length;h>0;h--)s+="0";return s+=r,s}static nextID(){return Et._nextID++}},es=(t=>(t[t.hold=0]="hold",t[t.once=1]="once",t[t.loop=2]="loop",t[t.pingpong=3]="pingpong",t[t.onceReverse=4]="onceReverse",t[t.loopReverse=5]="loopReverse",t[t.pingpongReverse=6]="pingpongReverse",t))(es||{}),ts=[0,1,2,3,4,5,6],ht=class{name;timelines=[];timelineIds=new Ft;duration;constructor(t,e,i){if(!t)throw new Error("name cannot be null.");this.name=t,this.setTimelines(e),this.duration=i}setTimelines(t){if(!t)throw new Error("timelines cannot be null.");this.timelines=t,this.timelineIds.clear();for(var e=0;e0&&(e%=this.duration));let a=this.timelines;for(let o=0,c=a.length;o(t[t.setup=0]="setup",t[t.first=1]="first",t[t.replace=2]="replace",t[t.add=3]="add",t))(is||{}),ss=(t=>(t[t.mixIn=0]="mixIn",t[t.mixOut=1]="mixOut",t))(ss||{}),se={rotate:0,x:1,y:2,scaleX:3,scaleY:4,shearX:5,shearY:6,inherit:7,rgb:8,alpha:9,rgb2:10,attachment:11,deform:12,event:13,drawOrder:14,ikConstraint:15,transformConstraint:16,pathConstraintPosition:17,pathConstraintSpacing:18,pathConstraintMix:19,physicsConstraintInertia:20,physicsConstraintStrength:21,physicsConstraintDamping:22,physicsConstraintMass:23,physicsConstraintWind:24,physicsConstraintGravity:25,physicsConstraintMix:26,physicsConstraintReset:27,sequence:28},ue=class{propertyIds;frames;constructor(t,e){this.propertyIds=e,this.frames=X.newFloatArray(t*this.getFrameEntries())}getPropertyIds(){return this.propertyIds}getFrameEntries(){return 1}getFrameCount(){return this.frames.length/this.getFrameEntries()}getDuration(){return this.frames[this.frames.length-this.getFrameEntries()]}static search1(t,e){let i=t.length;for(let s=1;se)return s-1;return i-1}static search(t,e,i){let s=t.length;for(let r=i;re)return r-i;return s-i}},Se=class extends ue{curves;constructor(t,e,i){super(t,i),this.curves=X.newFloatArray(t+e*18),this.curves[t-1]=1}setLinear(t){this.curves[t]=0}setStepped(t){this.curves[t]=1}shrink(t){let e=this.getFrameCount()+t*18;if(this.curves.length>e){let i=X.newFloatArray(e);X.arrayCopy(this.curves,0,i,0,e),this.curves=i}}setBezier(t,e,i,s,r,h,l,n,a,o,c){let u=this.curves,d=this.getFrameCount()+t*18;i==0&&(u[e]=2+d);let m=(s-h*2+n)*.03,f=(r-l*2+a)*.03,g=((h-n)*3-s+o)*.006,w=((l-a)*3-r+c)*.006,b=m*2+g,p=f*2+w,x=(h-s)*.3+m+g*.16666667,v=(l-r)*.3+f+w*.16666667,y=s+x,A=r+v;for(let C=d+18;dt){let a=this.frames[e],o=this.frames[e+i];return o+(t-a)/(r[s]-a)*(r[s+1]-o)}let h=s+18;for(s+=2;s=t){let a=r[s-2],o=r[s-1];return o+(t-a)/(r[s]-a)*(r[s+1]-o)}e+=this.getFrameEntries();let l=r[h-2],n=r[h-1];return n+(t-l)/(this.frames[e]-l)*(this.frames[e+i]-n)}},Ae=class extends Se{constructor(t,e,i){super(t,e,[i])}getFrameEntries(){return 2}setFrame(t,e,i){t<<=1,this.frames[t]=e,this.frames[t+1]=i}getCurveValue(t){let e=this.frames,i=e.length-2;for(let r=2;r<=i;r+=2)if(e[r]>t){i=r-2;break}let s=this.curves[i>>1];switch(s){case 0:let r=e[i],h=e[i+1];return h+(t-r)/(e[i+2]-r)*(e[i+2+1]-h);case 1:return e[i+1]}return this.getBezierValue(t,i,1,s-2)}getRelativeValue(t,e,i,s,r){if(t>2];switch(f){case 0:let g=a[m];c=a[m+1],u=a[m+2],d=a[m+3];let w=(i-g)/(a[m+4]-g);c+=(a[m+4+1]-c)*w,u+=(a[m+4+2]-u)*w,d+=(a[m+4+3]-d)*w;break;case 1:c=a[m+1],u=a[m+2],d=a[m+3];break;default:c=this.getBezierValue(i,m,1,f-2),u=this.getBezierValue(i,m,2,f+18-2),d=this.getBezierValue(i,m,3,f+18*2-2)}if(r==1)o.r=c,o.g=u,o.b=d;else{if(h==0){let g=n.data.color;o.r=g.r,o.g=g.g,o.b=g.b}o.r+=(c-o.r)*r,o.g+=(u-o.g)*r,o.b+=(d-o.b)*r}}},Ht=class extends Ae{slotIndex=0;constructor(t,e,i){super(t,e,se.alpha+"|"+i),this.slotIndex=i}apply(t,e,i,s,r,h,l){let n=t.slots[this.slotIndex];if(!n.bone.active)return;let a=n.color;if(i>3];switch(x){case 0:let v=a[p];u=a[p+1],d=a[p+2],m=a[p+3],f=a[p+4],g=a[p+5],w=a[p+6],b=a[p+7];let y=(i-v)/(a[p+8]-v);u+=(a[p+8+1]-u)*y,d+=(a[p+8+2]-d)*y,m+=(a[p+8+3]-m)*y,f+=(a[p+8+4]-f)*y,g+=(a[p+8+5]-g)*y,w+=(a[p+8+6]-w)*y,b+=(a[p+8+7]-b)*y;break;case 1:u=a[p+1],d=a[p+2],m=a[p+3],f=a[p+4],g=a[p+5],w=a[p+6],b=a[p+7];break;default:u=this.getBezierValue(i,p,1,x-2),d=this.getBezierValue(i,p,2,x+18-2),m=this.getBezierValue(i,p,3,x+18*2-2),f=this.getBezierValue(i,p,4,x+18*3-2),g=this.getBezierValue(i,p,5,x+18*4-2),w=this.getBezierValue(i,p,6,x+18*5-2),b=this.getBezierValue(i,p,7,x+18*6-2)}if(r==1)o.set(u,d,m,f),c.r=g,c.g=w,c.b=b;else{if(h==0){o.setFromColor(n.data.color);let v=n.data.darkColor;c.r=v.r,c.g=v.g,c.b=v.b}o.add((u-o.r)*r,(d-o.g)*r,(m-o.b)*r,(f-o.a)*r),c.r+=(g-c.r)*r,c.g+=(w-c.g)*r,c.b+=(b-c.b)*r}}},jt=class extends Se{slotIndex=0;constructor(t,e,i){super(t,e,[se.rgb+"|"+i,se.rgb2+"|"+i]),this.slotIndex=i}getFrameEntries(){return 7}setFrame(t,e,i,s,r,h,l,n){t*=7,this.frames[t]=e,this.frames[t+1]=i,this.frames[t+2]=s,this.frames[t+3]=r,this.frames[t+4]=h,this.frames[t+5]=l,this.frames[t+6]=n}apply(t,e,i,s,r,h,l){let n=t.slots[this.slotIndex];if(!n.bone.active)return;let a=this.frames,o=n.color,c=n.darkColor;if(it){let n=this.frames[e];return i[s+1]*(t-n)/(i[s]-n)}let r=s+18;for(s+=2;s=t){let n=i[s-2],a=i[s-1];return a+(t-n)/(i[s]-n)*(i[s+1]-a)}let h=i[r-2],l=i[r-1];return l+(1-l)*(t-h)/(this.frames[e+this.getFrameEntries()]-h)}apply(t,e,i,s,r,h,l){let n=t.slots[this.slotIndex];if(!n.bone.active)return;let a=n.getAttachment();if(!a||!(a instanceof Ye)||a.timelineAttachment!=this.attachment)return;let o=n.deform;o.length==0&&(h=0);let c=this.vertices,u=c[0].length,d=this.frames;if(i=d[d.length-1]){let p=c[d.length-1];if(r==1)if(h==3){let x=a;if(x.bones)for(let v=0;vs)this.apply(e,i,Number.MAX_VALUE,r,h,l,n),i=-1;else if(i>=a[o-1])return;if(s0&&a[c-1]==u;)c--}for(;c=a[c];c++)r.push(this.events[c])}},qe=class Js extends ue{static propertyIds=[""+se.drawOrder];drawOrders;constructor(e){super(e,Js.propertyIds),this.drawOrders=new Array(e)}getFrameCount(){return this.frames.length}setFrame(e,i,s){this.frames[e]=i,this.drawOrders[e]=s}apply(e,i,s,r,h,l,n){if(n==1){l==0&&X.arrayCopy(e.slots,0,e.drawOrder,0,e.slots.length);return}if(s>2];switch(m){case 0:let f=a[d];o=a[d+1],c=a[d+2],u=a[d+3];let g=(i-f)/(a[d+4]-f);o+=(a[d+4+1]-o)*g,c+=(a[d+4+2]-c)*g,u+=(a[d+4+3]-u)*g;break;case 1:o=a[d+1],c=a[d+2],u=a[d+3];break;default:o=this.getBezierValue(i,d,1,m-2),c=this.getBezierValue(i,d,2,m+18-2),u=this.getBezierValue(i,d,3,m+18*2-2)}if(h==0){let f=n.data;n.mixRotate=f.mixRotate+(o-f.mixRotate)*r,n.mixX=f.mixX+(c-f.mixX)*r,n.mixY=f.mixY+(u-f.mixY)*r}else n.mixRotate+=(o-n.mixRotate)*r,n.mixX+=(c-n.mixX)*r,n.mixY+=(u-n.mixY)*r}},Be=class extends Ae{constraintIndex=0;constructor(t,e,i,s){super(t,e,s+"|"+i),this.constraintIndex=i}apply(t,e,i,s,r,h,l){let n;if(this.constraintIndex==-1){const a=i>=this.frames[0]?this.getCurveValue(i):0;for(const o of t.physicsConstraints)o.active&&this.global(o.data)&&this.set(o,this.getAbsoluteValue2(i,r,h,this.get(o),this.setup(o),a))}else n=t.physicsConstraints[this.constraintIndex],n.active&&this.set(n,this.getAbsoluteValue(i,r,h,this.get(n),this.setup(n)))}},ti=class extends Be{constructor(t,e,i){super(t,e,i,se.physicsConstraintInertia)}setup(t){return t.data.inertia}get(t){return t.inertia}set(t,e){t.inertia=e}global(t){return t.inertiaGlobal}},ii=class extends Be{constructor(t,e,i){super(t,e,i,se.physicsConstraintStrength)}setup(t){return t.data.strength}get(t){return t.strength}set(t,e){t.strength=e}global(t){return t.strengthGlobal}},si=class extends Be{constructor(t,e,i){super(t,e,i,se.physicsConstraintDamping)}setup(t){return t.data.damping}get(t){return t.damping}set(t,e){t.damping=e}global(t){return t.dampingGlobal}},ri=class extends Be{constructor(t,e,i){super(t,e,i,se.physicsConstraintMass)}setup(t){return 1/t.data.massInverse}get(t){return 1/t.massInverse}set(t,e){t.massInverse=1/e}global(t){return t.massGlobal}},ni=class extends Be{constructor(t,e,i){super(t,e,i,se.physicsConstraintWind)}setup(t){return t.data.wind}get(t){return t.wind}set(t,e){t.wind=e}global(t){return t.windGlobal}},ai=class extends Be{constructor(t,e,i){super(t,e,i,se.physicsConstraintGravity)}setup(t){return t.data.gravity}get(t){return t.gravity}set(t,e){t.gravity=e}global(t){return t.gravityGlobal}},li=class extends Be{constructor(t,e,i){super(t,e,i,se.physicsConstraintMix)}setup(t){return t.data.mix}get(t){return t.mix}set(t,e){t.mix=e}global(t){return t.mixGlobal}},oi=class Ks extends ue{static propertyIds=[se.physicsConstraintReset.toString()];constraintIndex;constructor(e,i){super(e,Ks.propertyIds),this.constraintIndex=i}getFrameCount(){return this.frames.length}setFrame(e,i){this.frames[e]=i}apply(e,i,s,r,h,l,n){let a;if(this.constraintIndex!=-1&&(a=e.physicsConstraints[this.constraintIndex],!a.active))return;const o=this.frames;if(i>s)this.apply(e,i,Number.MAX_VALUE,[],h,l,n),i=-1;else if(i>=o[o.length-1])return;if(!(s=o[ue.search1(o,i)+1]))if(a!=null)a.reset();else for(const c of e.physicsConstraints)c.active&&c.reset()}},hi=class Oe extends ue{static ENTRIES=3;static MODE=1;static DELAY=2;slotIndex;attachment;constructor(e,i,s){super(e,[se.sequence+"|"+i+"|"+s.sequence.id]),this.slotIndex=i,this.attachment=s}getFrameEntries(){return Oe.ENTRIES}getSlotIndex(){return this.slotIndex}getAttachment(){return this.attachment}setFrame(e,i,s,r,h){let l=this.frames;e*=Oe.ENTRIES,l[e]=i,l[e+Oe.MODE]=s|r<<4,l[e+Oe.DELAY]=h}apply(e,i,s,r,h,l,n){let a=e.slots[this.slotIndex];if(!a.bone.active)return;let o=a.attachment,c=this.attachment;if(o!=c&&(!(o instanceof Ye)||o.timelineAttachment!=c))return;if(n==1){l==0&&(a.sequenceIndex=-1);return}let u=this.frames;if(s>4,b=this.attachment.sequence.regions.length,p=ts[f&15];if(p!=0)switch(w+=(s-m)/g+1e-5|0,p){case 1:w=Math.min(b-1,w);break;case 2:w%=b;break;case 3:{let x=(b<<1)-2;w=x==0?0:w%x,w>=b&&(w=x-w);break}case 4:w=Math.max(b-1-w,0);break;case 5:w=b-1-w%b;break;case 6:{let x=(b<<1)-2;w=x==0?0:(w+b-1)%x,w>=b&&(w=x-w)}}a.sequenceIndex=w}},rs=class It{static _emptyAnimation=new ht("",[],0);static emptyAnimation(){return It._emptyAnimation}data;tracks=new Array;timeScale=1;unkeyedState=0;events=new Array;listeners=new Array;queue=new as(this);propertyIDs=new Ft;animationsChanged=!1;trackEntryPool=new $e(()=>new ns);constructor(e){this.data=e}update(e){e*=this.timeScale;let i=this.tracks;for(let s=0,r=i.length;s0){if(h.delay-=l,h.delay>0)continue;l=-h.delay,h.delay=0}let n=h.next;if(n){let a=h.trackLast-n.delay;if(a>=0){for(n.delay=0,n.trackTime+=h.timeScale==0?0:(a/h.timeScale+e)*n.timeScale,h.trackTime+=l,this.setCurrent(s,n,!0);n.mixingFrom;)n.mixTime+=e,n=n.mixingFrom;continue}}else if(h.trackLast>=h.trackEnd&&!h.mixingFrom){i[s]=null,this.queue.end(h),this.clearNext(h);continue}if(h.mixingFrom&&this.updateMixingFrom(h,e)){let a=h.mixingFrom;for(h.mixingFrom=null,a&&(a.mixingTo=null);a;)this.queue.end(a),a=a.mixingFrom}h.trackTime+=l}this.queue.drain()}updateMixingFrom(e,i){let s=e.mixingFrom;if(!s)return!0;let r=this.updateMixingFrom(s,i);return s.animationLast=s.nextAnimationLast,s.trackLast=s.nextTrackLast,e.nextTrackLast!=-1&&e.mixTime>=e.mixDuration?((s.totalAlpha==0||e.mixDuration==0)&&(e.mixingFrom=s.mixingFrom,s.mixingFrom!=null&&(s.mixingFrom.mixingTo=e),e.interruptAlpha=s.interruptAlpha,this.queue.end(s)),r):(s.trackTime+=i*s.timeScale,e.mixTime+=i,!1)}apply(e){if(!e)throw new Error("skeleton cannot be null.");this.animationsChanged&&this._animationsChanged();let i=this.events,s=this.tracks,r=!1;for(let d=0,m=s.length;d0)continue;r=!0;let g=d==0?1:f.mixBlend,w=f.alpha;f.mixingFrom?w*=this.applyMixingFrom(f,e,g):f.trackTime>=f.trackEnd&&!f.next&&(w=0);let b=w>=f.alphaAttachmentThreshold,p=f.animationLast,x=f.getAnimationTime(),v=x,y=i;f.reverse&&(v=f.animation.duration-v,y=null);let A=f.animation.timelines,C=A.length;if(d==0&&w==1||g==3){d==0&&(b=!0);for(let S=0;S1&&(h=1),s!=1&&(s=r.mixBlend));let l=h=r.alphaAttachmentThreshold):(X.webkit602BugfixHelper(S,s),n&&y instanceof qe&&C==0&&(A=0),y.apply(i,d,f,g,S,C,A))}}return e.mixDuration>0&&this.queueEvents(r,m),this.events.length=0,r.nextAnimationLast=m,r.nextTrackLast=r.trackTime,h}applyAttachmentTimeline(e,i,s,r,h){var l=i.slots[e.slotIndex];l.bone.active&&(s=0,x=g>=0;Math.abs(w)<=90&&P.signum(w)!=P.signum(f)&&(Math.abs(g-b)>180?(m+=360*P.signum(g),x=p):b!=0?m-=360*P.signum(g):x=p),x!=p&&(m+=360*P.signum(g)),l[n]=m}l[n+1]=f,o.rotation=u+m*r}queueEvents(e,i){let s=e.animationStart,r=e.animationEnd,h=r-s,l=e.trackLast%h,n=this.events,a=0,o=n.length;for(;ar||this.queue.event(e,u)}let c=!1;if(e.loop)if(h==0)c=!0;else{const u=Math.floor(e.trackTime/h);c=u>0&&u>Math.floor(e.trackLast/h)}else c=i>=r&&e.animationLast=this.tracks.length)return;let i=this.tracks[e];if(!i)return;this.queue.end(i),this.clearNext(i);let s=i;for(;;){let r=s.mixingFrom;if(!r)break;this.queue.end(r),s.mixingFrom=null,s.mixingTo=null,s=r}this.tracks[i.trackIndex]=null,this.queue.drain()}setCurrent(e,i,s){let r=this.expandToIndex(e);this.tracks[e]=i,i.previous=null,r&&(s&&this.queue.interrupt(r),i.mixingFrom=r,r.mixingTo=i,i.mixTime=0,r.mixingFrom&&r.mixDuration>0&&(i.interruptAlpha*=Math.min(1,r.mixTime/r.mixDuration)),r.timelinesRotation.length=0),this.queue.start(i)}setAnimation(e,i,s=!1){let r=this.data.skeletonData.findAnimation(i);if(!r)throw new Error("Animation not found: "+i);return this.setAnimationWith(e,r,s)}setAnimationWith(e,i,s=!1){if(!i)throw new Error("animation cannot be null.");let r=!0,h=this.expandToIndex(e);h&&(h.nextTrackLast==-1?(this.tracks[e]=h.mixingFrom,this.queue.interrupt(h),this.queue.end(h),this.clearNext(h),h=h.mixingFrom,r=!1):this.clearNext(h));let l=this.trackEntry(e,i,s,h);return this.setCurrent(e,l,r),this.queue.drain(),l}addAnimation(e,i,s=!1,r=0){let h=this.data.skeletonData.findAnimation(i);if(!h)throw new Error("Animation not found: "+i);return this.addAnimationWith(e,h,s,r)}addAnimationWith(e,i,s=!1,r=0){if(!i)throw new Error("animation cannot be null.");let h=this.expandToIndex(e);if(h)for(;h.next;)h=h.next;let l=this.trackEntry(e,i,s,h);return h?(h.next=l,l.previous=h,r<=0&&(r=Math.max(r+h.getTrackComplete()-l.mixDuration,0))):(this.setCurrent(e,l,!0),this.queue.drain(),r<0&&(r=0)),l.delay=r,l}setEmptyAnimation(e,i=0){let s=this.setAnimationWith(e,It.emptyAnimation(),!1);return s.mixDuration=i,s.trackEnd=i,s}addEmptyAnimation(e,i=0,s=0){let r=this.addAnimationWith(e,It.emptyAnimation(),!1,s);return s<=0&&(r.delay=Math.max(r.delay+r.mixDuration-i,0)),r.mixDuration=i,r.trackEnd=i,r}setEmptyAnimations(e=0){let i=this.queue.drainDisabled;this.queue.drainDisabled=!0;for(let s=0,r=this.tracks.length;s0){h[a]=os,l[a]=u;continue e}break}h[a]=ft}}}getCurrent(e){return e>=this.tracks.length?null:this.tracks[e]}addListener(e){if(!e)throw new Error("listener cannot be null.");this.listeners.push(e)}removeListener(e){let i=this.listeners.indexOf(e);i>=0&&this.listeners.splice(i,1)}clearListeners(){this.listeners.length=0}clearListenerNotifications(){this.queue.clear()}},ns=class{animation=null;previous=null;next=null;mixingFrom=null;mixingTo=null;listener=null;trackIndex=0;loop=!1;holdPrevious=!1;reverse=!1;shortestRotation=!1;eventThreshold=0;mixAttachmentThreshold=0;alphaAttachmentThreshold=0;mixDrawOrderThreshold=0;animationStart=0;animationEnd=0;animationLast=0;nextAnimationLast=0;delay=0;trackTime=0;trackLast=0;nextTrackLast=0;trackEnd=0;timeScale=0;alpha=0;mixTime=0;_mixDuration=0;interruptAlpha=0;totalAlpha=0;get mixDuration(){return this._mixDuration}set mixDuration(t){this._mixDuration=t}setMixDurationWithDelay(t,e){this._mixDuration=t,e<=0&&(this.previous!=null?e=Math.max(e+this.previous.getTrackComplete()-t,0):e=0),this.delay=e}mixBlend=2;timelineMode=new Array;timelineHoldMix=new Array;timelinesRotation=new Array;reset(){this.next=null,this.previous=null,this.mixingFrom=null,this.mixingTo=null,this.animation=null,this.listener=null,this.timelineMode.length=0,this.timelineHoldMix.length=0,this.timelinesRotation.length=0}getAnimationTime(){if(this.loop){let t=this.animationEnd-this.animationStart;return t==0?this.animationStart:this.trackTime%t+this.animationStart}return Math.min(this.trackTime+this.animationStart,this.animationEnd)}setAnimationLast(t){this.animationLast=t,this.nextAnimationLast=t}isComplete(){return this.trackTime>=this.animationEnd-this.animationStart}resetRotationDirections(){this.timelinesRotation.length=0}getTrackComplete(){let t=this.animationEnd-this.animationStart;if(t!=0){if(this.loop)return t*(1+(this.trackTime/t|0));if(this.trackTime=0}},as=class{objects=[];drainDisabled=!1;animState;constructor(t){this.animState=t}start(t){this.objects.push(0),this.objects.push(t),this.animState.animationsChanged=!0}interrupt(t){this.objects.push(1),this.objects.push(t)}end(t){this.objects.push(2),this.objects.push(t),this.animState.animationsChanged=!0}dispose(t){this.objects.push(3),this.objects.push(t)}complete(t){this.objects.push(4),this.objects.push(t)}event(t,e){this.objects.push(5),this.objects.push(t),this.objects.push(e)}drain(){if(this.drainDisabled)return;this.drainDisabled=!0;let t=this.objects,e=this.animState.listeners;for(let i=0;i(t[t.start=0]="start",t[t.interrupt=1]="interrupt",t[t.end=2]="end",t[t.dispose=3]="dispose",t[t.complete=4]="complete",t[t.event=5]="event",t))(ls||{}),gr=class{start(t){}interrupt(t){}end(t){}dispose(t){}complete(t){}event(t,e){}},ut=0,ci=1,di=2,ft=3,os=4,ui=1,hs=2,cs=class{skeletonData;animationToMixTime={};defaultMix=0;constructor(t){if(!t)throw new Error("skeletonData cannot be null.");this.skeletonData=t}setMix(t,e,i){let s=this.skeletonData.findAnimation(t);if(!s)throw new Error("Animation not found: "+t);let r=this.skeletonData.findAnimation(e);if(!r)throw new Error("Animation not found: "+e);this.setMixWith(s,r,i)}setMixWith(t,e,i){if(!t)throw new Error("from cannot be null.");if(!e)throw new Error("to cannot be null.");let s=t.name+"."+e.name;this.animationToMixTime[s]=i}getMix(t,e){let i=t.name+"."+e.name,s=this.animationToMixTime[i];return s===void 0?this.defaultMix:s}},fi=class Qs extends Ye{color=new V(1,1,1,1);constructor(e){super(e)}copy(){let e=new Qs(this.name);return this.copyTo(e),e.color.setFromColor(this.color),e}},tt=class $s extends Ye{endSlot=null;color=new V(.2275,.2275,.8078,1);constructor(e){super(e)}copy(){let e=new $s(this.name);return this.copyTo(e),e.endSlot=this.endSlot,e.color.setFromColor(this.color),e}},mi=class{_image;constructor(t){this._image=t}getImage(){return this._image}},mt=(t=>(t[t.Nearest=9728]="Nearest",t[t.Linear=9729]="Linear",t[t.MipMap=9987]="MipMap",t[t.MipMapNearestNearest=9984]="MipMapNearestNearest",t[t.MipMapLinearNearest=9985]="MipMapLinearNearest",t[t.MipMapNearestLinear=9986]="MipMapNearestLinear",t[t.MipMapLinearLinear=9987]="MipMapLinearLinear",t))(mt||{}),ds=(t=>(t[t.MirroredRepeat=33648]="MirroredRepeat",t[t.ClampToEdge=33071]="ClampToEdge",t[t.Repeat=10497]="Repeat",t))(ds||{}),us=class{texture;u=0;v=0;u2=0;v2=0;width=0;height=0;degrees=0;offsetX=0;offsetY=0;originalWidth=0;originalHeight=0},pr=class extends mi{setFilters(t,e){}setWraps(t,e){}dispose(){}},gi=class{pages=new Array;regions=new Array;constructor(t){let e=new wr(t),i=new Array(4),s={};s.size=o=>{o.width=parseInt(i[1]),o.height=parseInt(i[2])},s.format=()=>{},s.filter=o=>{o.minFilter=X.enumValue(mt,i[1]),o.magFilter=X.enumValue(mt,i[2])},s.repeat=o=>{i[1].indexOf("x")!=-1&&(o.uWrap=10497),i[1].indexOf("y")!=-1&&(o.vWrap=10497)},s.pma=o=>{o.pma=i[1]=="true"};var r={};r.xy=o=>{o.x=parseInt(i[1]),o.y=parseInt(i[2])},r.size=o=>{o.width=parseInt(i[1]),o.height=parseInt(i[2])},r.bounds=o=>{o.x=parseInt(i[1]),o.y=parseInt(i[2]),o.width=parseInt(i[3]),o.height=parseInt(i[4])},r.offset=o=>{o.offsetX=parseInt(i[1]),o.offsetY=parseInt(i[2])},r.orig=o=>{o.originalWidth=parseInt(i[1]),o.originalHeight=parseInt(i[2])},r.offsets=o=>{o.offsetX=parseInt(i[1]),o.offsetY=parseInt(i[2]),o.originalWidth=parseInt(i[3]),o.originalHeight=parseInt(i[4])},r.rotate=o=>{let c=i[1];c=="true"?o.degrees=90:c!="false"&&(o.degrees=parseInt(c))},r.index=o=>{o.index=parseInt(i[1])};let h=e.readLine();for(;h&&h.trim().length==0;)h=e.readLine();for(;!(!h||h.trim().length==0||e.readEntry(i,h)==0);)h=e.readLine();let l=null,n=null,a=null;for(;h!==null;)if(h.trim().length==0)l=null,h=e.readLine();else if(l){let o=new pi(l,h);for(;;){let c=e.readEntry(i,h=e.readLine());if(c==0)break;let u=r[i[0]];if(u)u(o);else{n||(n=[]),a||(a=[]),n.push(i[0]);let d=[];for(let m=0;m0&&a&&a.length>0&&(o.names=n,o.values=a,n=null,a=null),o.u=o.x/l.width,o.v=o.y/l.height,o.degrees==90?(o.u2=(o.x+o.height)/l.width,o.v2=(o.y+o.width)/l.height):(o.u2=(o.x+o.width)/l.width,o.v2=(o.y+o.height)/l.height),this.regions.push(o)}else{for(l=new fs(h.trim());e.readEntry(i,h=e.readLine())!=0;){let o=s[i[0]];o&&o(l)}this.pages.push(l)}}findRegion(t){for(let e=0;e=this.lines.length?null:this.lines[this.index++]}readEntry(t,e){if(!e||(e=e.trim(),e.length==0))return 0;let i=e.indexOf(":");if(i==-1)return 0;t[0]=e.substr(0,i).trim();for(let s=1,r=i+1;;s++){let h=e.indexOf(",",r);if(h==-1)return t[s]=e.substr(r).trim(),s;if(t[s]=e.substr(r,h-r).trim(),r=h+1,s==4)return 4}}},fs=class{name;minFilter=9728;magFilter=9728;uWrap=33071;vWrap=33071;texture=null;width=0;height=0;pma=!1;regions=new Array;constructor(t){this.name=t}setTexture(t){this.texture=t,t.setFilters(this.minFilter,this.magFilter),t.setWraps(this.uWrap,this.vWrap);for(let e of this.regions)e.texture=t}},pi=class extends us{page;name;x=0;y=0;offsetX=0;offsetY=0;originalWidth=0;originalHeight=0;index=0;degrees=0;names=null;values=null;constructor(t,e){super(),this.page=t,this.name=e,t.regions.push(this)}},Ge=class Hi extends Ye{region=null;path;regionUVs=[];uvs=[];triangles=[];color=new V(1,1,1,1);width=0;height=0;hullLength=0;edges=[];parentMesh=null;sequence=null;tempColor=new V(0,0,0,0);constructor(e,i){super(e),this.path=i}updateRegion(){if(!this.region)throw new Error("Region not set.");let e=this.regionUVs;(!this.uvs||this.uvs.length!=e.length)&&(this.uvs=X.newFloatArray(e.length));let i=this.uvs,s=this.uvs.length,r=this.region.u,h=this.region.v,l=0,n=0;if(this.region instanceof pi){let a=this.region,o=a.page,c=o.width,u=o.height;switch(a.degrees){case 90:r-=(a.originalHeight-a.offsetY-a.height)/c,h-=(a.originalWidth-a.offsetX-a.width)/u,l=a.originalHeight/c,n=a.originalWidth/u;for(let d=0;d= 0.");if(!e)throw new Error("name cannot be null.");this.index=t,this.name=e,this.parent=i}},gt=(t=>(t[t.Normal=0]="Normal",t[t.OnlyTranslation=1]="OnlyTranslation",t[t.NoRotationOrReflection=2]="NoRotationOrReflection",t[t.NoScale=3]="NoScale",t[t.NoScaleOrReflection=4]="NoScaleOrReflection",t))(gt||{}),xi=class{data;skeleton;parent=null;children=new Array;x=0;y=0;rotation=0;scaleX=0;scaleY=0;shearX=0;shearY=0;ax=0;ay=0;arotation=0;ascaleX=0;ascaleY=0;ashearX=0;ashearY=0;a=0;b=0;c=0;d=0;worldY=0;worldX=0;inherit=0;sorted=!1;active=!1;constructor(t,e,i){if(!t)throw new Error("data cannot be null.");if(!e)throw new Error("skeleton cannot be null.");this.data=t,this.skeleton=e,this.parent=i,this.setToSetupPose()}isActive(){return this.active}update(t){this.updateWorldTransformWith(this.ax,this.ay,this.arotation,this.ascaleX,this.ascaleY,this.ashearX,this.ashearY)}updateWorldTransform(){this.updateWorldTransformWith(this.x,this.y,this.rotation,this.scaleX,this.scaleY,this.shearX,this.shearY)}updateWorldTransformWith(t,e,i,s,r,h,l){this.ax=t,this.ay=e,this.arotation=i,this.ascaleX=s,this.ascaleY=r,this.ashearX=h,this.ashearY=l;let n=this.parent;if(!n){let d=this.skeleton;const m=d.scaleX,f=d.scaleY,g=(i+h)*P.degRad,w=(i+90+l)*P.degRad;this.a=Math.cos(g)*s*m,this.b=Math.cos(w)*r*m,this.c=Math.sin(g)*s*f,this.d=Math.sin(w)*r*f,this.worldX=t*m+d.x,this.worldY=e*f+d.y;return}let a=n.a,o=n.b,c=n.c,u=n.d;switch(this.worldX=a*t+o*e+n.worldX,this.worldY=c*t+u*e+n.worldY,this.inherit){case 0:{const d=(i+h)*P.degRad,m=(i+90+l)*P.degRad,f=Math.cos(d)*s,g=Math.cos(m)*r,w=Math.sin(d)*s,b=Math.sin(m)*r;this.a=a*f+o*w,this.b=a*g+o*b,this.c=c*f+u*w,this.d=c*g+u*b;return}case 1:{const d=(i+h)*P.degRad,m=(i+90+l)*P.degRad;this.a=Math.cos(d)*s,this.b=Math.cos(m)*r,this.c=Math.sin(d)*s,this.d=Math.sin(m)*r;break}case 2:{let d=1/this.skeleton.scaleX,m=1/this.skeleton.scaleY;a*=d,c*=m;let f=a*a+c*c,g=0;f>1e-4?(f=Math.abs(a*u*m-o*d*c)/f,o=c*f,u=a*f,g=Math.atan2(c,a)*P.radDeg):(a=0,c=0,g=90-Math.atan2(u,o)*P.radDeg);const w=(i+h-g)*P.degRad,b=(i+l-g+90)*P.degRad,p=Math.cos(w)*s,x=Math.cos(b)*r,v=Math.sin(w)*s,y=Math.sin(b)*r;this.a=a*p-o*v,this.b=a*x-o*y,this.c=c*p+u*v,this.d=c*x+u*y;break}case 3:case 4:{i*=P.degRad;const d=Math.cos(i),m=Math.sin(i);let f=(a*d+o*m)/this.skeleton.scaleX,g=(c*d+u*m)/this.skeleton.scaleY,w=Math.sqrt(f*f+g*g);w>1e-5&&(w=1/w),f*=w,g*=w,w=Math.sqrt(f*f+g*g),this.inherit==3&&a*u-o*c<0!=(this.skeleton.scaleX<0!=this.skeleton.scaleY<0)&&(w=-w),i=Math.PI/2+Math.atan2(g,f);const b=Math.cos(i)*w,p=Math.sin(i)*w;h*=P.degRad,l=(90+l)*P.degRad;const x=Math.cos(h)*s,v=Math.cos(l)*r,y=Math.sin(h)*s,A=Math.sin(l)*r;this.a=f*x+b*y,this.b=f*v+b*A,this.c=g*x+p*y,this.d=g*v+p*A;break}}this.a*=this.skeleton.scaleX,this.b*=this.skeleton.scaleX,this.c*=this.skeleton.scaleY,this.d*=this.skeleton.scaleY}setToSetupPose(){let t=this.data;this.x=t.x,this.y=t.y,this.rotation=t.rotation,this.scaleX=t.scaleX,this.scaleY=t.scaleY,this.shearX=t.shearX,this.shearY=t.shearY,this.inherit=t.inherit}updateAppliedTransform(){let t=this.parent;if(!t){this.ax=this.worldX-this.skeleton.x,this.ay=this.worldY-this.skeleton.y,this.arotation=Math.atan2(this.c,this.a)*P.radDeg,this.ascaleX=Math.sqrt(this.a*this.a+this.c*this.c),this.ascaleY=Math.sqrt(this.b*this.b+this.d*this.d),this.ashearX=0,this.ashearY=Math.atan2(this.a*this.b+this.c*this.d,this.a*this.d-this.b*this.c)*P.radDeg;return}let e=t.a,i=t.b,s=t.c,r=t.d,h=1/(e*r-i*s),l=r*h,n=i*h,a=s*h,o=e*h,c=this.worldX-t.worldX,u=this.worldY-t.worldY;this.ax=c*l-u*n,this.ay=u*o-c*a;let d,m,f,g;if(this.inherit==1)d=this.a,m=this.b,f=this.c,g=this.d;else{switch(this.inherit){case 2:{let v=Math.abs(e*r-i*s)/(e*e+s*s);i=-s*this.skeleton.scaleX*v/this.skeleton.scaleY,r=e*this.skeleton.scaleY*v/this.skeleton.scaleX,h=1/(e*r-i*s),l=r*h,n=i*h;break}case 3:case 4:let w=P.cosDeg(this.rotation),b=P.sinDeg(this.rotation);e=(e*w+i*b)/this.skeleton.scaleX,s=(s*w+r*b)/this.skeleton.scaleY;let p=Math.sqrt(e*e+s*s);p>1e-5&&(p=1/p),e*=p,s*=p,p=Math.sqrt(e*e+s*s),this.inherit==3&&h<0!=(this.skeleton.scaleX<0!=this.skeleton.scaleY<0)&&(p=-p);let x=P.PI/2+Math.atan2(s,e);i=Math.cos(x)*p,r=Math.sin(x)*p,h=1/(e*r-i*s),l=r*h,n=i*h,a=s*h,o=e*h}d=l*this.a-n*this.c,m=l*this.b-n*this.d,f=o*this.c-a*this.a,g=o*this.d-a*this.b}if(this.ashearX=0,this.ascaleX=Math.sqrt(d*d+f*f),this.ascaleX>1e-4){let w=d*g-m*f;this.ascaleY=w/this.ascaleX,this.ashearY=-Math.atan2(d*m+f*g,w)*P.radDeg,this.arotation=Math.atan2(f,d)*P.radDeg}else this.ascaleX=0,this.ascaleY=Math.sqrt(m*m+g*g),this.ashearY=0,this.arotation=90-Math.atan2(g,m)*P.radDeg}getWorldRotationX(){return Math.atan2(this.c,this.a)*P.radDeg}getWorldRotationY(){return Math.atan2(this.d,this.b)*P.radDeg}getWorldScaleX(){return Math.sqrt(this.a*this.a+this.c*this.c)}getWorldScaleY(){return Math.sqrt(this.b*this.b+this.d*this.d)}worldToLocal(t){let e=1/(this.a*this.d-this.b*this.c),i=t.x-this.worldX,s=t.y-this.worldY;return t.x=i*this.d*e-s*this.b*e,t.y=s*this.a*e-i*this.c*e,t}localToWorld(t){let e=t.x,i=t.y;return t.x=e*this.a+i*this.b+this.worldX,t.y=e*this.c+i*this.d+this.worldY,t}worldToParent(t){if(t==null)throw new Error("world cannot be null.");return this.parent==null?t:this.parent.worldToLocal(t)}parentToWorld(t){if(t==null)throw new Error("world cannot be null.");return this.parent==null?t:this.parent.localToWorld(t)}worldToLocalRotation(t){let e=P.sinDeg(t),i=P.cosDeg(t);return Math.atan2(this.a*e-this.c*i,this.d*i-this.b*e)*P.radDeg+this.rotation-this.shearX}localToWorldRotation(t){t-=this.rotation-this.shearX;let e=P.sinDeg(t),i=P.cosDeg(t);return Math.atan2(i*this.c+e*this.d,i*this.a+e*this.b)*P.radDeg}rotateWorld(t){t*=P.degRad;const e=Math.sin(t),i=Math.cos(t),s=this.a,r=this.b;this.a=i*s-e*this.c,this.b=i*r-e*this.d,this.c=e*s+i*this.c,this.d=e*r+i*this.d}},st=class{constructor(t,e,i){this.name=t,this.order=e,this.skinRequired=i}},ps=class{pathPrefix="";textureLoader;downloader;cache;errors={};toLoad=0;loaded=0;constructor(t,e="",i=new bi,s=new ws){this.textureLoader=t,this.pathPrefix=e,this.downloader=i,this.cache=s}start(t){return this.toLoad++,this.pathPrefix+t}success(t,e,i){this.toLoad--,this.loaded++,this.cache.assets[e]=i,this.cache.assetsRefCount[e]=(this.cache.assetsRefCount[e]||0)+1,t&&t(e,i)}error(t,e,i){this.toLoad--,this.loaded++,this.errors[e]=i,t&&t(e,i)}loadAll(){return new Promise((e,i)=>{let s=()=>{if(this.isLoadingComplete()){this.hasErrors()?i(this.errors):e(this);return}requestAnimationFrame(s)};requestAnimationFrame(s)})}setRawDataURI(t,e){this.downloader.rawDataUris[this.pathPrefix+t]=e}loadBinary(t,e=()=>{},i=()=>{}){t=this.start(t),!this.reuseAssets(t,e,i)&&(this.cache.assetsLoaded[t]=new Promise((s,r)=>{this.downloader.downloadBinary(t,h=>{this.success(e,t,h),s(h)},(h,l)=>{const n=`Couldn't load binary ${t}: status ${h}, ${l}`;this.error(i,t,n),r(n)})}))}loadText(t,e=()=>{},i=()=>{}){t=this.start(t),this.downloader.downloadText(t,s=>{this.success(e,t,s)},(s,r)=>{this.error(i,t,`Couldn't load text ${t}: status ${s}, ${r}`)})}loadJson(t,e=()=>{},i=()=>{}){t=this.start(t),!this.reuseAssets(t,e,i)&&(this.cache.assetsLoaded[t]=new Promise((s,r)=>{this.downloader.downloadJson(t,h=>{this.success(e,t,h),s(h)},(h,l)=>{const n=`Couldn't load JSON ${t}: status ${h}, ${l}`;this.error(i,t,n),r(n)})}))}reuseAssets(t,e=()=>{},i=()=>{}){const s=this.cache.assetsLoaded[t],r=s!==void 0;return r&&(this.cache.assetsLoaded[t]=s.then(h=>(h=h instanceof Image||h instanceof ImageBitmap?this.textureLoader(h):h,this.success(e,t,h),h)).catch(h=>this.error(i,t,h))),r}loadTexture(t,e=()=>{},i=()=>{}){t=this.start(t),!this.reuseAssets(t,e,i)&&(this.cache.assetsLoaded[t]=new Promise((s,r)=>{if(!!!(typeof window<"u"&&typeof navigator<"u"&&window.document))fetch(t,{mode:"cors"}).then(n=>{if(n.ok)return n.blob();const a=`Couldn't load image: ${t}`;this.error(i,t,`Couldn't load image: ${t}`),r(a)}).then(n=>n?createImageBitmap(n,{premultiplyAlpha:"none",colorSpaceConversion:"none"}):null).then(n=>{if(n){const a=this.textureLoader(n);this.success(e,t,a),s(a)}});else{let n=new Image;n.crossOrigin="anonymous",n.onload=()=>{const a=this.textureLoader(n);this.success(e,t,a),s(a)},n.onerror=()=>{const a=`Couldn't load image: ${t}`;this.error(i,t,a),r(a)},this.downloader.rawDataUris[t]&&(t=this.downloader.rawDataUris[t]),n.src=t}}))}loadTextureAtlas(t,e=()=>{},i=()=>{},s){let r=t.lastIndexOf("/"),h=r>=0?t.substring(0,r+1):"";t=this.start(t),!this.reuseAssets(t,e,i)&&(this.cache.assetsLoaded[t]=new Promise((l,n)=>{this.downloader.downloadText(t,a=>{try{let o=new gi(a),c=o.pages.length,u=!1;for(let d of o.pages)this.loadTexture(s?s[d.name]:h+d.name,(m,f)=>{u||(d.setTexture(f),--c==0&&(this.success(e,t,o),l(o)))},(m,f)=>{if(!u){const g=`Couldn't load texture ${t} page image: ${m}`;this.error(i,t,g),n(g)}u=!0})}catch(o){const c=`Couldn't parse texture atlas ${t}: ${o.message}`;this.error(i,t,c),n(c)}},(a,o)=>{const c=`Couldn't load texture atlas ${t}: status ${a}, ${o}`;this.error(i,t,c),n(c)})}))}loadTextureAtlasButNoTextures(t,e=()=>{},i=()=>{},s){t=this.start(t),!this.reuseAssets(t,e,i)&&(this.cache.assetsLoaded[t]=new Promise((r,h)=>{this.downloader.downloadText(t,l=>{try{const n=new gi(l);this.success(e,t,n),r(n)}catch(n){const a=`Couldn't parse texture atlas ${t}: ${n.message}`;this.error(i,t,a),h(a)}},(l,n)=>{const a=`Couldn't load texture atlas ${t}: status ${l}, ${n}`;this.error(i,t,a),h(a)})}))}async loadBinaryAsync(t){return new Promise((e,i)=>{this.loadBinary(t,(s,r)=>e(r),(s,r)=>i(r))})}async loadJsonAsync(t){return new Promise((e,i)=>{this.loadJson(t,(s,r)=>e(r),(s,r)=>i(r))})}async loadTextureAsync(t){return new Promise((e,i)=>{this.loadTexture(t,(s,r)=>e(r),(s,r)=>i(r))})}async loadTextureAtlasAsync(t){return new Promise((e,i)=>{this.loadTextureAtlas(t,(s,r)=>e(r),(s,r)=>i(r))})}async loadTextureAtlasButNoTexturesAsync(t){return new Promise((e,i)=>{this.loadTextureAtlasButNoTextures(t,(s,r)=>e(r),(s,r)=>i(r))})}setCache(t){this.cache=t}get(t){return this.cache.assets[this.pathPrefix+t]}require(t){t=this.pathPrefix+t;let e=this.cache.assets[t];if(e)return e;let i=this.errors[t];throw Error("Asset not found: "+t+(i?` +`+i:""))}remove(t){t=this.pathPrefix+t;let e=this.cache.assets[t];return e.dispose&&e.dispose(),delete this.cache.assets[t],delete this.cache.assetsRefCount[t],delete this.cache.assetsLoaded[t],e}removeAll(){for(let t in this.cache.assets){let e=this.cache.assets[t];e.dispose&&e.dispose()}this.cache.assets={},this.cache.assetsLoaded={},this.cache.assetsRefCount={}}isLoadingComplete(){return this.toLoad==0}getToLoad(){return this.toLoad}getLoaded(){return this.loaded}dispose(){this.removeAll()}disposeAsset(t){--this.cache.assetsRefCount[t]===0&&this.remove(t)}hasErrors(){return Object.keys(this.errors).length>0}getErrors(){return this.errors}},ws=class Mt{assets={};assetsRefCount={};assetsLoaded={};static AVAILABLE_CACHES=new Map;static getCache(e){const i=Mt.AVAILABLE_CACHES.get(e);if(i)return i;const s=new Mt;return Mt.AVAILABLE_CACHES.set(e,s),s}async addAsset(e,i){this.assetsLoaded[e]=Promise.resolve(i),this.assets[e]=await i}},bi=class{callbacks={};rawDataUris={};dataUriToString(t){if(!t.startsWith("data:"))throw new Error("Not a data URI.");let e=t.indexOf("base64,");return e!=-1?(e+=7,atob(t.substr(e))):t.substr(t.indexOf(",")+1)}base64ToUint8Array(t){for(var e=window.atob(t),i=e.length,s=new Uint8Array(i),r=0;r{this.finish(t,r.status,r.responseText)};r.onload=h,r.onerror=h,r.send()}downloadJson(t,e,i){this.downloadText(t,s=>{e(JSON.parse(s))},i)}downloadBinary(t,e,i){if(this.start(t,e,i))return;const s=this.rawDataUris[t];if(s&&!s.includes(".")){try{this.finish(t,200,this.dataUriToUint8Array(s))}catch(l){this.finish(t,400,JSON.stringify(l))}return}let r=new XMLHttpRequest;r.open("GET",s||t,!0),r.responseType="arraybuffer";let h=()=>{this.finish(t,r.status,r.response)};r.onload=()=>{r.status==200||r.status==0?this.finish(t,200,new Uint8Array(r.response)):h()},r.onerror=h,r.send()}start(t,e,i){let s=this.callbacks[t];try{if(s)return!0;this.callbacks[t]=s=[]}finally{s.push(e,i)}}finish(t,e,i){let s=this.callbacks[t];delete this.callbacks[t];let r=e==200||e==0?[i]:[e,i];for(let h=r.length-1,l=s.length;h180?d-=360:d<-180&&(d+=360);let g=t.ascaleX,w=t.ascaleY;if(s||r){switch(t.inherit){case 3:case 4:m=e-t.worldX,f=i-t.worldY}const b=t.data.length*g;if(b>1e-4){const p=m*m+f*f;if(s&&pb*b){const x=(Math.sqrt(p)/b-1)*l+1;g*=x,h&&(w*=x)}}}t.updateWorldTransformWith(t.ax,t.ay,t.arotation+d*l,g,w,t.ashearX,t.ashearY)}apply2(t,e,i,s,r,h,l,n,a){if(t.inherit!=0||e.inherit!=0)return;let o=t.ax,c=t.ay,u=t.ascaleX,d=t.ascaleY,m=u,f=d,g=e.ascaleX,w=0,b=0,p=0;u<0?(u=-u,w=180,p=-1):(w=0,p=1),d<0&&(d=-d,p=-p),g<0?(g=-g,b=180):b=0;let x=e.ax,v=0,y=0,A=0,C=t.a,S=t.b,k=t.c,R=t.d,Y=Math.abs(u-d)<=1e-4;!Y||h?(v=0,y=C*x+t.worldX,A=k*x+t.worldY):(v=e.ay,y=C*x+S*v+t.worldX,A=k*x+R*v+t.worldY);let F=t.parent;if(!F)throw new Error("IK parent must itself have a parent.");C=F.a,S=F.b,k=F.c,R=F.d;let L=C*R-S*k,I=y-F.worldX,M=A-F.worldY;L=Math.abs(L)<=1e-4?0:1/L;let B=(I*R-M*S)*L-o,ie=(M*C-I*k)*L-c,te=Math.sqrt(B*B+ie*ie),re=e.data.length*g,ce,oe;if(te<1e-4){this.apply1(t,i,s,!1,h,!1,a),e.updateWorldTransformWith(x,v,0,e.ascaleX,e.ascaleY,e.ashearX,e.ashearY);return}I=i-F.worldX,M=s-F.worldY;let fe=(I*R-M*S)*L-o,J=(M*C-I*k)*L-c,ne=fe*fe+J*J;if(n!=0){n*=u*(g+1)*.5;let me=Math.sqrt(ne),we=me-te-re*u+n;if(we>0){let xe=Math.min(1,we/(n*2))-1;xe=(we-n*(1-xe*xe))/me,fe-=xe*fe,J-=xe*J,ne=fe*fe+J*J}}e:if(Y){re*=u;let me=(ne-te*te-re*re)/(2*te*re);me<-1?(me=-1,oe=Math.PI*r):me>1?(me=1,oe=0,h&&(C=(Math.sqrt(ne)/(te+re)-1)*a+1,m*=C,l&&(f*=C))):oe=Math.acos(me)*r,C=te+re*me,S=re*Math.sin(oe),ce=Math.atan2(J*C-fe*S,fe*C+J*S)}else{C=u*re,S=d*re;let me=C*C,we=S*S,xe=Math.atan2(J,fe);k=we*te*te+me*ne-me*we;let Ie=-2*we*te,Je=we-me;if(R=Ie*Ie-4*Je*k,R>=0){let Ke=Math.sqrt(R);Ie<0&&(Ke=-Ke),Ke=-(Ie+Ke)*.5;let lt=Ke/Je,_s=k/Ke,kt=Math.abs(lt)=0){M=Math.sqrt(lt)*r,ce=xe-Math.atan2(M,kt),oe=Math.atan2(M/d,(kt-te)/u);break e}}let at=P.PI,St=te-C,qi=St*St,qs=0,Gs=0,Tt=te+C,Gi=Tt*Tt,Hs=0;k=-C*te/(me-we),k>=-1&&k<=1&&(k=Math.acos(k),I=C*Math.cos(k)+te,M=S*Math.sin(k),R=I*I+M*M,RGi&&(Gs=k,Gi=R,Tt=I,Hs=M)),ne<=(qi+Gi)*.5?(ce=xe-Math.atan2(qs*r,St),oe=at*r):(ce=xe-Math.atan2(Hs*r,Tt),oe=Gs*r)}let he=Math.atan2(v,x)*p,be=t.arotation;ce=(ce-he)*P.radDeg+w-be,ce>180?ce-=360:ce<-180&&(ce+=360),t.updateWorldTransformWith(o,c,be+ce*a,m,f,0,0),be=e.arotation,oe=((oe+he)*P.radDeg-e.ashearX)*p+b-be,oe>180?oe-=360:oe<-180&&(oe+=360),e.updateWorldTransformWith(x,v,be+oe*a,e.ascaleX,e.ascaleY,e.ashearX,e.ashearY)}},Ai=class extends st{bones=new Array;_target=null;set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("BoneData not set.")}bendDirection=0;compress=!1;stretch=!1;uniform=!1;mix=0;softness=0;constructor(t){super(t,0,!1)}},Ci=class extends st{bones=new Array;_target=null;set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("SlotData not set.")}positionMode=0;spacingMode=1;rotateMode=1;offsetRotation=0;position=0;spacing=0;mixRotate=0;mixX=0;mixY=0;constructor(t){super(t,0,!1)}},Si=(t=>(t[t.Fixed=0]="Fixed",t[t.Percent=1]="Percent",t))(Si||{}),Ti=(t=>(t[t.Length=0]="Length",t[t.Fixed=1]="Fixed",t[t.Percent=2]="Percent",t[t.Proportional=3]="Proportional",t))(Ti||{}),ki=(t=>(t[t.Tangent=0]="Tangent",t[t.Chain=1]="Chain",t[t.ChainScale=2]="ChainScale",t))(ki||{}),bs=class De{static NONE=-1;static BEFORE=-2;static AFTER=-3;static epsilon=1e-5;data;bones;target;position=0;spacing=0;mixRotate=0;mixX=0;mixY=0;spaces=new Array;positions=new Array;world=new Array;curves=new Array;lengths=new Array;segments=new Array;active=!1;constructor(e,i){if(!e)throw new Error("data cannot be null.");if(!i)throw new Error("skeleton cannot be null.");this.data=e,this.bones=new Array;for(let r=0,h=e.bones.length;r0){v=u/v*f;for(let A=1;A0?P.degRad:-P.degRad}for(let v=0,y=3;v0){let Y=A.a,F=A.b,L=A.c,I=A.d,M=0,B=0,ie=0;if(n?M=g[y-1]:d[v+1]==0?M=g[y+2]:M=Math.atan2(R,k),M-=Math.atan2(L,Y),x){B=Math.cos(M),ie=Math.sin(M);let te=A.data.length;w+=(te*(B*Y-ie*L)-k)*s,b+=(te*(ie*Y+B*L)-R)*s}else M+=p;M>P.PI?M-=P.PI2:M<-P.PI&&(M+=P.PI2),M*=s,B=Math.cos(M),ie=Math.sin(M),A.a=B*Y-ie*L,A.b=B*F-ie*I,A.c=ie*Y+B*L,A.d=ie*F+B*I}A.updateAppliedTransform()}}computeWorldPositions(e,i,s){let r=this.target,h=this.position,l=this.spaces,n=X.setArraySize(this.positions,i*3+2),a=this.world,o=e.closed,c=e.worldVerticesLength,u=c/6,d=De.NONE;if(!e.constantSpeed){let te=e.lengths;u-=o?1:2;let re=te[u];this.data.positionMode==1&&(h*=re);let ce;switch(this.data.spacingMode){case 2:ce=re;break;case 3:ce=re/i;break;default:ce=1}a=X.setArraySize(this.world,8);for(let oe=0,fe=0,J=0;oere){d!=De.AFTER&&(d=De.AFTER,e.computeWorldVertices(r,c-6,4,a,0,2)),this.addAfterPosition(he-re,a,0,n,fe);continue}for(;;J++){let be=te[J];if(!(he>be)){if(J==0)he/=be;else{let me=te[J-1];he=(he-me)/(be-me)}break}}J!=d&&(d=J,o&&J==u?(e.computeWorldVertices(r,c-4,4,a,0,2),e.computeWorldVertices(r,0,4,a,4,2)):e.computeWorldVertices(r,J*6+2,8,a,0,2)),this.addCurvePosition(he,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],n,fe,s||oe>0&&ne==0)}return n}o?(c+=2,a=X.setArraySize(this.world,c),e.computeWorldVertices(r,2,c-4,a,0,2),e.computeWorldVertices(r,0,2,a,c-4,2),a[c-2]=a[0],a[c-1]=a[1]):(u--,c-=4,a=X.setArraySize(this.world,c),e.computeWorldVertices(r,2,c,a,0,2));let m=X.setArraySize(this.curves,u),f=0,g=a[0],w=a[1],b=0,p=0,x=0,v=0,y=0,A=0,C=0,S=0,k=0,R=0,Y=0,F=0,L=0,I=0;for(let te=0,re=2;tef){this.addAfterPosition(J-f,a,c-4,n,re);continue}for(;;ce++){let ne=m[ce];if(!(J>ne)){if(ce==0)J/=ne;else{let he=m[ce-1];J=(J-he)/(ne-he)}break}}if(ce!=d){d=ce;let ne=ce*6;for(g=a[ne],w=a[ne+1],b=a[ne+2],p=a[ne+3],x=a[ne+4],v=a[ne+5],y=a[ne+6],A=a[ne+7],C=(g-b*2+x)*.03,S=(w-p*2+v)*.03,k=((b-x)*3-g+y)*.006,R=((p-v)*3-w+A)*.006,Y=C*2+k,F=S*2+R,L=(b-g)*.3+C+k*.16666667,I=(p-w)*.3+S+R*.16666667,ie=Math.sqrt(L*L+I*I),B[0]=ie,ne=1;ne<8;ne++)L+=Y,I+=F,Y+=k,F+=R,ie+=Math.sqrt(L*L+I*I),B[ne]=ie;L+=Y,I+=F,ie+=Math.sqrt(L*L+I*I),B[8]=ie,L+=Y+k,I+=F+R,ie+=Math.sqrt(L*L+I*I),B[9]=ie,oe=0}for(J*=ie;;oe++){let ne=B[oe];if(!(J>ne)){if(oe==0)J/=ne;else{let he=B[oe-1];J=oe+(J-he)/(ne-he)}break}}this.addCurvePosition(J*.1,g,w,b,p,x,v,y,A,n,re,s||te>0&&fe==0)}return n}addBeforePosition(e,i,s,r,h){let l=i[s],n=i[s+1],a=i[s+2]-l,o=i[s+3]-n,c=Math.atan2(o,a);r[h]=l+e*Math.cos(c),r[h+1]=n+e*Math.sin(c),r[h+2]=c}addAfterPosition(e,i,s,r,h){let l=i[s+2],n=i[s+3],a=l-i[s],o=n-i[s+1],c=Math.atan2(o,a);r[h]=l+e*Math.cos(c),r[h+1]=n+e*Math.sin(c),r[h+2]=c}addCurvePosition(e,i,s,r,h,l,n,a,o,c,u,d){if(e==0||isNaN(e)){c[u]=i,c[u+1]=s,c[u+2]=Math.atan2(h-s,r-i);return}let m=e*e,f=m*e,g=1-e,w=g*g,b=w*g,p=g*e,x=p*3,v=g*x,y=x*e,A=i*b+r*v+l*y+a*f,C=s*b+h*v+n*y+o*f;c[u]=A,c[u+1]=C,d&&(e<.001?c[u+2]=Math.atan2(h-s,r-i):c[u+2]=Math.atan2(C-(s*w+h*p*2+n*m),A-(i*w+r*p*2+l*m)))}},xr=class{data;_bone=null;set bone(t){this._bone=t}get bone(){if(this._bone)return this._bone;throw new Error("Bone not set.")}inertia=0;strength=0;damping=0;massInverse=0;wind=0;gravity=0;mix=0;_reset=!0;ux=0;uy=0;cx=0;cy=0;tx=0;ty=0;xOffset=0;xVelocity=0;yOffset=0;yVelocity=0;rotateOffset=0;rotateVelocity=0;scaleOffset=0;scaleVelocity=0;active=!1;skeleton;remaining=0;lastTime=0;constructor(t,e){this.data=t,this.skeleton=e,this.bone=e.bones[t.bone.index],this.inertia=t.inertia,this.strength=t.strength,this.damping=t.damping,this.massInverse=t.massInverse,this.wind=t.wind,this.gravity=t.gravity,this.mix=t.mix}reset(){this.remaining=0,this.lastTime=this.skeleton.time,this._reset=!0,this.xOffset=0,this.xVelocity=0,this.yOffset=0,this.yVelocity=0,this.rotateOffset=0,this.rotateVelocity=0,this.scaleOffset=0,this.scaleVelocity=0}setToSetupPose(){const t=this.data;this.inertia=t.inertia,this.strength=t.strength,this.damping=t.damping,this.massInverse=t.massInverse,this.wind=t.wind,this.gravity=t.gravity,this.mix=t.mix}isActive(){return this.active}update(t){const e=this.mix;if(e==0)return;const i=this.data.x>0,s=this.data.y>0,r=this.data.rotate>0||this.data.shearX>0,h=this.data.scaleX>0,l=this.bone,n=l.data.length;switch(t){case 0:return;case 1:this.reset();case 2:const a=this.skeleton,o=Math.max(this.skeleton.time-this.lastTime,0);this.remaining+=o,this.lastTime=a.time;const c=l.worldX,u=l.worldY;if(this._reset)this._reset=!1,this.ux=c,this.uy=u;else{let d=this.remaining,m=this.inertia,f=this.data.step,g=this.skeleton.data.referenceScale,w=-1,b=this.data.limit*o,p=b*Math.abs(a.scaleY);if(b*=Math.abs(a.scaleX),i||s){if(i){const x=(this.ux-c)*m;this.xOffset+=x>b?b:x<-b?-b:x,this.ux=c}if(s){const x=(this.uy-u)*m;this.yOffset+=x>p?p:x<-p?-p:x,this.uy=u}if(d>=f){w=Math.pow(this.damping,60*f);const x=this.massInverse*f,v=this.strength,y=this.wind*g*a.scaleX,A=this.gravity*g*a.scaleY;do i&&(this.xVelocity+=(y-this.xOffset*v)*x,this.xOffset+=this.xVelocity*f,this.xVelocity*=w),s&&(this.yVelocity-=(A+this.yOffset*v)*x,this.yOffset+=this.yVelocity*f,this.yVelocity*=w),d-=f;while(d>=f)}i&&(l.worldX+=this.xOffset*e*this.data.x),s&&(l.worldY+=this.yOffset*e*this.data.y)}if(r||h){let x=Math.atan2(l.c,l.a),v=0,y=0,A=0,C=this.cx-l.worldX,S=this.cy-l.worldY;if(C>b?C=b:C<-b&&(C=-b),S>p?S=p:S<-p&&(S=-p),r){A=(this.data.rotate+this.data.shearX)*e;let k=Math.atan2(S+this.ty,C+this.tx)-x-this.rotateOffset*A;this.rotateOffset+=(k-Math.ceil(k*P.invPI2-.5)*P.PI2)*m,k=this.rotateOffset*A+x,v=Math.cos(k),y=Math.sin(k),h&&(k=n*l.getWorldScaleX(),k>0&&(this.scaleOffset+=(C*v+S*y)*m/k))}else{v=Math.cos(x),y=Math.sin(x);const k=n*l.getWorldScaleX();k>0&&(this.scaleOffset+=(C*v+S*y)*m/k)}if(d=this.remaining,d>=f){w==-1&&(w=Math.pow(this.damping,60*f));const k=this.massInverse*f,R=this.strength,Y=this.wind,F=Ei.yDown?-this.gravity:this.gravity,L=n/g;for(;;)if(d-=f,h&&(this.scaleVelocity+=(Y*v-F*y-this.scaleOffset*R)*k,this.scaleOffset+=this.scaleVelocity*f,this.scaleVelocity*=w),r){if(this.rotateVelocity-=((Y*y+F*v)*L+this.rotateOffset*R)*k,this.rotateOffset+=this.rotateVelocity*f,this.rotateVelocity*=w,d0){let d=0;this.data.rotate>0&&(d=a*this.data.rotate,o=Math.sin(d),c=Math.cos(d),u=l.b,l.b=c*u-o*l.d,l.d=o*u+c*l.d),d+=a*this.data.shearX,o=Math.sin(d),c=Math.cos(d),u=l.a,l.a=c*u-o*l.c,l.c=o*u+c*l.c}else a*=this.data.rotate,o=Math.sin(a),c=Math.cos(a),u=l.a,l.a=c*u-o*l.c,l.c=o*u+c*l.c,u=l.b,l.b=c*u-o*l.d,l.d=o*u+c*l.d}if(h){const a=1+this.scaleOffset*e*this.data.scaleX;l.a*=a,l.c*=a}t!=3&&(this.tx=n*l.a,this.ty=n*l.c),l.updateAppliedTransform()}translate(t,e){this.ux-=t,this.uy-=e,this.cx-=t,this.cy-=e}rotate(t,e,i){const s=i*P.degRad,r=Math.cos(s),h=Math.sin(s),l=this.cx-t,n=this.cy-e;this.translate(l*r-n*h-l,l*h+n*r-n)}},vs=class{data;bone;color;darkColor=null;attachment=null;attachmentState=0;sequenceIndex=-1;deform=new Array;constructor(t,e){if(!t)throw new Error("data cannot be null.");if(!e)throw new Error("bone cannot be null.");this.data=t,this.bone=e,this.color=new V,this.darkColor=t.darkColor?new V:null,this.setToSetupPose()}getSkeleton(){return this.bone.skeleton}getAttachment(){return this.attachment}setAttachment(t){this.attachment!=t&&((!(t instanceof Ye)||!(this.attachment instanceof Ye)||t.timelineAttachment!=this.attachment.timelineAttachment)&&(this.deform.length=0),this.attachment=t,this.sequenceIndex=-1)}setToSetupPose(){this.color.setFromColor(this.data.color),this.darkColor&&this.darkColor.setFromColor(this.data.darkColor),this.data.attachmentName?(this.attachment=null,this.setAttachment(this.bone.skeleton.getAttachment(this.data.index,this.data.attachmentName))):this.attachment=null}},ys=class{data;bones;target;mixRotate=0;mixX=0;mixY=0;mixScaleX=0;mixScaleY=0;mixShearY=0;temp=new Ce;active=!1;constructor(t,e){if(!t)throw new Error("data cannot be null.");if(!e)throw new Error("skeleton cannot be null.");this.data=t,this.bones=new Array;for(let s=0;s0?P.degRad:-P.degRad,m=this.data.offsetRotation*d,f=this.data.offsetShearY*d,g=this.bones;for(let w=0,b=g.length;wP.PI?C-=P.PI2:C<-P.PI&&(C+=P.PI2),C*=t;let S=Math.cos(C),k=Math.sin(C);p.a=S*x-k*y,p.b=S*v-k*A,p.c=k*x+S*y,p.d=k*v+S*A}if(l){let x=this.temp;n.localToWorld(x.set(this.data.offsetX,this.data.offsetY)),p.worldX+=(x.x-p.worldX)*e,p.worldY+=(x.y-p.worldY)*i}if(s!=0){let x=Math.sqrt(p.a*p.a+p.c*p.c);x!=0&&(x=(x+(Math.sqrt(a*a+c*c)-x+this.data.offsetScaleX)*s)/x),p.a*=x,p.c*=x}if(r!=0){let x=Math.sqrt(p.b*p.b+p.d*p.d);x!=0&&(x=(x+(Math.sqrt(o*o+u*u)-x+this.data.offsetScaleY)*r)/x),p.b*=x,p.d*=x}if(h>0){let x=p.b,v=p.d,y=Math.atan2(v,x),A=Math.atan2(u,o)-Math.atan2(c,a)-(y-Math.atan2(p.c,p.a));A>P.PI?A-=P.PI2:A<-P.PI&&(A+=P.PI2),A=y+(A+f)*h;let C=Math.sqrt(x*x+v*v);p.b=Math.cos(A)*C,p.d=Math.sin(A)*C}p.updateAppliedTransform()}}applyRelativeWorld(){let t=this.mixRotate,e=this.mixX,i=this.mixY,s=this.mixScaleX,r=this.mixScaleY,h=this.mixShearY,l=e!=0||i!=0,n=this.target,a=n.a,o=n.b,c=n.c,u=n.d,d=a*u-o*c>0?P.degRad:-P.degRad,m=this.data.offsetRotation*d,f=this.data.offsetShearY*d,g=this.bones;for(let w=0,b=g.length;wP.PI?C-=P.PI2:C<-P.PI&&(C+=P.PI2),C*=t;let S=Math.cos(C),k=Math.sin(C);p.a=S*x-k*y,p.b=S*v-k*A,p.c=k*x+S*y,p.d=k*v+S*A}if(l){let x=this.temp;n.localToWorld(x.set(this.data.offsetX,this.data.offsetY)),p.worldX+=x.x*e,p.worldY+=x.y*i}if(s!=0){let x=(Math.sqrt(a*a+c*c)-1+this.data.offsetScaleX)*s+1;p.a*=x,p.c*=x}if(r!=0){let x=(Math.sqrt(o*o+u*u)-1+this.data.offsetScaleY)*r+1;p.b*=x,p.d*=x}if(h>0){let x=Math.atan2(u,o)-Math.atan2(c,a);x>P.PI?x-=P.PI2:x<-P.PI&&(x+=P.PI2);let v=p.b,y=p.d;x=Math.atan2(y,v)+(x-P.PI/2+f)*h;let A=Math.sqrt(v*v+y*y);p.b=Math.cos(x)*A,p.d=Math.sin(x)*A}p.updateAppliedTransform()}}applyAbsoluteLocal(){let t=this.mixRotate,e=this.mixX,i=this.mixY,s=this.mixScaleX,r=this.mixScaleY,h=this.mixShearY,l=this.target,n=this.bones;for(let a=0,o=n.length;ai.data.name==e)??null}findTransformConstraint(e){if(!e)throw new Error("constraintName cannot be null.");return this.transformConstraints.find(i=>i.data.name==e)??null}findPathConstraint(e){if(!e)throw new Error("constraintName cannot be null.");return this.pathConstraints.find(i=>i.data.name==e)??null}findPhysicsConstraint(e){if(e==null)throw new Error("constraintName cannot be null.");return this.physicsConstraints.find(i=>i.data.name==e)??null}getBoundsRect(e){let i=new Ce,s=new Ce;return this.getBounds(i,s,void 0,e),{x:i.x,y:i.y,width:s.x,height:s.y}}getBounds(e,i,s=new Array(2),r=null){if(!e)throw new Error("offset cannot be null.");if(!i)throw new Error("size cannot be null.");let h=this.drawOrder,l=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY;for(let c=0,u=h.length;c(t[t.none=0]="none",t[t.reset=1]="reset",t[t.update=2]="update",t[t.pose=3]="pose",t))(As||{}),Cs=class extends st{_bone=null;set bone(t){this._bone=t}get bone(){if(this._bone)return this._bone;throw new Error("BoneData not set.")}x=0;y=0;rotate=0;scaleX=0;shearX=0;limit=0;step=0;inertia=0;strength=0;damping=0;massInverse=0;wind=0;gravity=0;mix=0;inertiaGlobal=!1;strengthGlobal=!1;dampingGlobal=!1;massGlobal=!1;windGlobal=!1;gravityGlobal=!1;mixGlobal=!1;constructor(t){super(t,0,!1)}},Ii=class{name=null;bones=new Array;slots=new Array;skins=new Array;defaultSkin=null;events=new Array;animations=new Array;ikConstraints=new Array;transformConstraints=new Array;pathConstraints=new Array;physicsConstraints=new Array;x=0;y=0;width=0;height=0;referenceScale=100;version=null;hash=null;fps=0;imagesPath=null;audioPath=null;findBone(t){if(!t)throw new Error("boneName cannot be null.");let e=this.bones;for(let i=0,s=e.length;i=s.length&&(s.length=t+1),s[t]||(s[t]={}),s[t][e]=i}addSkin(t){for(let s=0;s= 0.");if(!e)throw new Error("name cannot be null.");if(!i)throw new Error("boneData cannot be null.");this.index=t,this.name=e,this.boneData=i}},Yi=(t=>(t[t.Normal=0]="Normal",t[t.Additive=1]="Additive",t[t.Multiply=2]="Multiply",t[t.Screen=3]="Screen",t))(Yi||{}),Fi=class extends st{bones=new Array;_target=null;set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("BoneData not set.")}mixRotate=0;mixX=0;mixY=0;mixScaleX=0;mixScaleY=0;mixShearY=0;offsetRotation=0;offsetX=0;offsetY=0;offsetScaleX=0;offsetScaleY=0;offsetShearY=0;relative=!1;local=!1;constructor(t){super(t,0,!1)}},Ss=class{scale=1;attachmentLoader;linkedMeshes=new Array;constructor(t){this.attachmentLoader=t}readSkeletonData(t){let e=this.scale,i=new Ii;i.name="";let s=new Ts(t),r=s.readInt32(),h=s.readInt32();i.hash=h==0&&r==0?null:h.toString(16)+r.toString(16),i.version=s.readString(),i.x=s.readFloat(),i.y=s.readFloat(),i.width=s.readFloat(),i.height=s.readFloat(),i.referenceScale=s.readFloat()*e;let l=s.readBoolean();l&&(i.fps=s.readFloat(),i.imagesPath=s.readString(),i.audioPath=s.readString());let n=0;n=s.readInt(!0);for(let o=0;o>1&3,d.rotateMode=m>>3&3,(m&128)!=0&&(d.offsetRotation=s.readFloat()),d.position=s.readFloat(),d.positionMode==0&&(d.position*=e),d.spacing=s.readFloat(),(d.spacingMode==0||d.spacingMode==1)&&(d.spacing*=e),d.mixRotate=s.readFloat(),d.mixX=s.readFloat(),d.mixY=s.readFloat(),i.pathConstraints.push(d)}n=s.readInt(!0);for(let o=0,c;o>4,t.readFloat())}s.push(y);break}}}}}let h=t.readInt(!0);if(h>0){let a=new qe(h),o=i.slots.length;for(let c=0;c=0;b--)m[b]=-1;let f=X.newArray(o-d,0),g=0,w=0;for(let b=0;b=0;b--)m[b]==-1&&(m[b]=f[--w]);a.setFrame(c,u,m)}s.push(a)}let l=t.readInt(!0);if(l>0){let a=new dt(l);for(let o=0;o>>1^-(i&1)}readStringRef(){let t=this.readInt(!0);return t==0?null:this.strings[t-1]}readString(){let t=this.readInt(!0);switch(t){case 0:return null;case 1:return""}t--;let e="",i=0;for(let s=0;s>4){case 12:case 13:e+=String.fromCharCode((r&31)<<6|this.readByte()&63),s+=2;break;case 14:e+=String.fromCharCode((r&15)<<12|(this.readByte()&63)<<6|this.readByte()&63),s+=3;break;default:e+=String.fromCharCode(r),s++}}return e}readFloat(){let t=this.buffer.getFloat32(this.index);return this.index+=4,t}readBoolean(){return this.readByte()!=0}},br=class{parent;skinIndex;slotIndex;mesh;inheritTimeline;constructor(t,e,i,s,r){this.mesh=t,this.skinIndex=e,this.slotIndex=i,this.parent=s,this.inheritTimeline=r}},vr=class{constructor(t=null,e=null,i=0){this.bones=t,this.vertices=e,this.length=i}};function pe(t,e,i){let s=t.readFloat(),r=t.readFloat()*i;for(let h=0,l=0,n=e.getFrameCount()-1;e.setFrame(h,s,r),h!=n;h++){let a=t.readFloat(),o=t.readFloat()*i;switch(t.readByte()){case Fe:e.setStepped(h);break;case Le:ae(t,e,l++,h,0,s,a,r,o,i)}s=a,r=o}return e}function Li(t,e,i){let s=t.readFloat(),r=t.readFloat()*i,h=t.readFloat()*i;for(let l=0,n=0,a=e.getFrameCount()-1;e.setFrame(l,s,r,h),l!=a;l++){let o=t.readFloat(),c=t.readFloat()*i,u=t.readFloat()*i;switch(t.readByte()){case Fe:e.setStepped(l);break;case Le:ae(t,e,n++,l,0,s,o,r,c,i),ae(t,e,n++,l,1,s,o,h,u,i)}s=o,r=c,h=u}return e}function ae(t,e,i,s,r,h,l,n,a,o){e.setBezier(i,s,r,h,n,t.readFloat(),t.readFloat()*o,t.readFloat(),t.readFloat()*o,l,a)}var yr=0,Ar=1,Cr=2,Sr=3,Tr=4,kr=5,Er=6,Ir=7,Mr=8,Rr=9,Yr=10,Fr=0,Lr=1,Pr=2,Xr=3,Br=4,Vr=5,Or=0,Dr=1,Nr=0,Ur=1,Wr=2,zr=0,qr=1,Gr=2,Hr=4,_r=5,jr=6,Zr=7,Jr=8,Fe=1,Le=2,ks=class{minX=0;minY=0;maxX=0;maxY=0;boundingBoxes=new Array;polygons=new Array;polygonPool=new $e(()=>X.newFloatArray(16));update(t,e){if(!t)throw new Error("skeleton cannot be null.");let i=this.boundingBoxes,s=this.polygons,r=this.polygonPool,h=t.slots,l=h.length;i.length=0,r.freeAll(s),s.length=0;for(let n=0;n=this.minX&&t<=this.maxX&&e>=this.minY&&e<=this.maxY}aabbIntersectsSegment(t,e,i,s){let r=this.minX,h=this.minY,l=this.maxX,n=this.maxY;if(t<=r&&i<=r||e<=h&&s<=h||t>=l&&i>=l||e>=n&&s>=n)return!1;let a=(s-e)/(i-t),o=a*(r-t)+e;if(o>h&&oh&&or&&cr&&ct.minX&&this.minYt.minY}containsPoint(t,e){let i=this.polygons;for(let s=0,r=i.length;s=i||o=i){let c=s[n];c+(i-a)/(o-a)*(s[h]-c)=c&&x<=m||x>=m&&x<=c)&&(x>=e&&x<=s||x>=s&&x<=e)){let v=(o*b-a*g)/p;if((v>=u&&v<=f||v>=f&&v<=u)&&(v>=i&&v<=r||v>=r&&v<=i))return!0}c=m,u=f}return!1}getPolygon(t){if(!t)throw new Error("boundingBox cannot be null.");let e=this.boundingBoxes.indexOf(t);return e==-1?null:this.polygons[e]}getWidth(){return this.maxX-this.minX}getHeight(){return this.maxY-this.minY}},Es=class ye{convexPolygons=new Array;convexPolygonsIndices=new Array;indicesArray=new Array;isConcaveArray=new Array;triangles=new Array;polygonPool=new $e(()=>new Array);polygonIndicesPool=new $e(()=>new Array);triangulate(e){let i=e,s=e.length>>1,r=this.indicesArray;r.length=0;for(let n=0;n3;){let n=s-1,a=0,o=1;for(;;){e:if(!h[a]){let d=r[n]<<1,m=r[a]<<1,f=r[o]<<1,g=i[d],w=i[d+1],b=i[m],p=i[m+1],x=i[f],v=i[f+1];for(let y=(o+1)%s;y!=n;y=(y+1)%s){if(!h[y])continue;let A=r[y]<<1,C=i[A],S=i[A+1];if(ye.positiveArea(x,v,g,w,C,S)&&ye.positiveArea(g,w,b,p,C,S)&&ye.positiveArea(b,p,x,v,C,S))break e}break}if(o==0){do{if(!h[a])break;a--}while(a>0);break}n=a,a=o,o=(o+1)%s}l.push(r[(s+a-1)%s]),l.push(r[a]),l.push(r[(a+1)%s]),r.splice(a,1),h.splice(a,1),s--;let c=(s+a-1)%s,u=a==s?0:a;h[c]=ye.isConcave(c,s,i,r),h[u]=ye.isConcave(u,s,i,r)}return s==3&&(l.push(r[2]),l.push(r[0]),l.push(r[1])),l}decompose(e,i){let s=e,r=this.convexPolygons;this.polygonPool.freeAll(r),r.length=0;let h=this.convexPolygonsIndices;this.polygonIndicesPool.freeAll(h),h.length=0;let l=this.polygonIndicesPool.obtain();l.length=0;let n=this.polygonPool.obtain();n.length=0;let a=-1,o=0;for(let c=0,u=i.length;c0?(r.push(n),h.push(l)):(this.polygonPool.free(n),this.polygonIndicesPool.free(l)),n=this.polygonPool.obtain(),n.length=0,n.push(g),n.push(w),n.push(b),n.push(p),n.push(x),n.push(v),l=this.polygonIndicesPool.obtain(),l.length=0,l.push(d),l.push(m),l.push(f),o=ye.winding(g,w,b,p,x,v),a=d)}n.length>0&&(r.push(n),h.push(l));for(let c=0,u=r.length;c=0;c--)n=r[c],n.length==0&&(r.splice(c,1),this.polygonPool.free(n),l=h[c],h.splice(c,1),this.polygonIndicesPool.free(l));return r}static isConcave(e,i,s,r){let h=r[(i+e-1)%i]<<1,l=r[e]<<1,n=r[(e+1)%i]<<1;return!this.positiveArea(s[h],s[h+1],s[l],s[l+1],s[n],s[n+1])}static positiveArea(e,i,s,r,h,l){return e*(l-r)+s*(i-l)+h*(r-i)>=0}static winding(e,i,s,r,h,l){let n=s-e,a=r-i;return h*a-l*n+n*i-e*a>=0?1:-1}},Is=class ji{triangulator=new Es;clippingPolygon=new Array;clipOutput=new Array;clippedVertices=new Array;clippedUVs=new Array;clippedTriangles=new Array;scratch=new Array;clipAttachment=null;clippingPolygons=null;clipStart(e,i){if(this.clipAttachment)return 0;this.clipAttachment=i;let s=i.worldVerticesLength,r=X.setArraySize(this.clippingPolygon,s);i.computeWorldVertices(e,0,s,r,0,2);let h=this.clippingPolygon;ji.makeClockwise(h);let l=this.clippingPolygons=this.triangulator.decompose(h,this.triangulator.triangulate(h));for(let n=0,a=l.length;n>1,A=this.clipOutput,C=X.setArraySize(h,x+y*2);for(let k=0;k>1,fe=this.clipOutput,J=X.setArraySize(o,I+oe*m);for(let he=0;he>1,re=this.clipOutput,ce=X.setArraySize(l,Y+te*2),oe=X.setArraySize(n,Y+te*2);for(let J=0;J=2?(u=a,a=this.scratch):u=this.scratch,u.length=0,u.push(e),u.push(i),u.push(s),u.push(r),u.push(h),u.push(l),u.push(e),u.push(i),a.length=0;let d=n.length-4,m=n;for(let f=0;;f+=2){let g=m[f],w=m[f+1],b=g-m[f+2],p=w-m[f+3],x=a.length,v=u;for(let A=0,C=u.length-2;Ab*(w-Y),L=p*(g-S)-b*(w-k);if(L>0){if(F){a.push(R),a.push(Y);continue}let I=R-S,M=Y-k,B=L/(I*p-M*b);if(B>=0&&B<=1)a.push(S+I*B),a.push(k+M*B);else{a.push(R),a.push(Y);continue}}else if(F){let I=R-S,M=Y-k,B=L/(I*p-M*b);if(B>=0&&B<=1)a.push(S+I*B),a.push(k+M*B),a.push(R),a.push(Y);else{a.push(R),a.push(Y);continue}}c=!0}if(x==a.length)return o.length=0,!0;if(a.push(a[0]),a.push(a[1]),f==d)break;let y=a;a=u,a.length=0,u=y}if(o!=a){o.length=0;for(let f=0,g=a.length-2;f>1;o0){let o=i.findPhysicsConstraint(l);if(!o)throw new Error("Physics constraint not found: "+l);a=i.physicsConstraints.indexOf(o)}for(let o in n){let c=n[o],u=c[0];if(!u)continue;let d=c.length;if(o=="reset"){const f=new oi(d,a);for(let g=0;u!=null;u=c[g+1],g++)f.setFrame(g,E(u,"time",0));r.push(f);continue}let m;if(o=="inertia")m=new ti(d,d,a);else if(o=="strength")m=new ii(d,d,a);else if(o=="damping")m=new si(d,d,a);else if(o=="mass")m=new ri(d,d,a);else if(o=="wind")m=new ni(d,d,a);else if(o=="gravity")m=new ai(d,d,a);else if(o=="mix")m=new li(d,d,a);else continue;r.push(Te(c,m,0,1))}}if(t.attachments)for(let l in t.attachments){let n=t.attachments[l],a=i.findSkin(l);if(!a)throw new Error("Skin not found: "+l);for(let o in n){let c=n[o],u=i.findSlot(o);if(!u)throw new Error("Slot not found: "+o);let d=u.index;for(let m in c){let f=c[m],g=a.getAttachment(d,m);for(let w in f){let b=f[w],p=b[0];if(p){if(w=="deform"){let x=g.bones,v=g.vertices,y=x?v.length/3*2:v.length,A=new Zt(b.length,b.length,d,g),C=E(p,"time",0);for(let S=0,k=0;;S++){let R,Y=E(p,"vertices",null);if(!Y)R=x?X.newFloatArray(y):v;else{R=X.newFloatArray(y);let M=E(p,"offset",0);if(X.arrayCopy(Y,0,R,M,Y.length),s!=1)for(let B=M,ie=B+Y.length;B=0;w--)u[w]==-1&&(u[w]=m[--g])}l.setFrame(a,E(c,"time",0),u)}r.push(l)}if(t.events){let l=new dt(t.events.length),n=0;for(let a=0;a"u"&&(Math.fround=function(t){return function(e){return t[0]=e,t[0]}}(new Float32Array(1)));var ge=class{canvas;gl;restorables=[];constructor(t,e={alpha:!0}){if(t instanceof WebGLRenderingContext||typeof WebGL2RenderingContext<"u"&&t instanceof WebGL2RenderingContext)this.gl=t,this.canvas=this.gl.canvas;else{const i=t;this.gl=i.getContext("webgl2",e)||i.getContext("webgl",e),this.canvas=i,i.addEventListener("webglcontextlost",this.contextLostHandler),i.addEventListener("webglcontextrestored",this.contextRestoredHandler)}}contextLostHandler=t=>{t&&t.preventDefault()};contextRestoredHandler=()=>{for(let t=0,e=this.restorables.length;t-1&&this.restorables.splice(e,1)}},_e=class Rt extends mi{context;texture=null;boundUnit=0;useMipMaps=!1;static DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL=!1;constructor(e,i,s=!1){super(i),this.context=e instanceof ge?e:new ge(e),this.useMipMaps=s,this.restore(),this.context.addRestorable(this)}setFilters(e,i){let s=this.context.gl;this.bind(),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,Rt.validateMagFilter(i)),this.useMipMaps=Rt.usesMipMaps(e),this.useMipMaps&&s.generateMipmap(s.TEXTURE_2D)}static validateMagFilter(e){switch(e){case 9987:case 9985:case 9986:case 9984:return 9729;default:return e}}static usesMipMaps(e){switch(e){case 9987:case 9985:case 9986:case 9984:return!0;default:return!1}}setWraps(e,i){let s=this.context.gl;this.bind(),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i)}update(e){let i=this.context.gl;this.texture||(this.texture=this.context.gl.createTexture()),this.bind(),Rt.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL&&i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,this._image),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,e?i.LINEAR_MIPMAP_LINEAR:i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),e&&i.generateMipmap(i.TEXTURE_2D)}restore(){this.texture=null,this.update(this.useMipMaps)}bind(e=0){let i=this.context.gl;this.boundUnit=e,i.activeTexture(i.TEXTURE0+e),i.bindTexture(i.TEXTURE_2D,this.texture)}unbind(){let e=this.context.gl;e.activeTexture(e.TEXTURE0+this.boundUnit),e.bindTexture(e.TEXTURE_2D,null)}dispose(){this.context.removeRestorable(this),this.context.gl.deleteTexture(this.texture)}},Xi=class extends ps{constructor(t,e="",i=new bi){super(s=>new _e(t,s),e,i)}},ve=class{x=0;y=0;z=0;constructor(t=0,e=0,i=0){this.x=t,this.y=e,this.z=i}setFrom(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}set(t,e,i){return this.x=t,this.y=e,this.z=i,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}scale(t){return this.x*=t,this.y*=t,this.z*=t,this}normalize(){let t=this.length();return t==0?this:(t=1/t,this.x*=t,this.y*=t,this.z*=t,this)}cross(t){return this.set(this.y*t.z-this.z*t.y,this.z*t.x-this.x*t.z,this.x*t.y-this.y*t.x)}multiply(t){let e=t.values;return this.set(this.x*e[O]+this.y*e[q]+this.z*e[G]+e[D],this.x*e[H]+this.y*e[N]+this.z*e[_]+e[U],this.x*e[j]+this.y*e[Z]+this.z*e[W]+e[z])}project(t){let e=t.values,i=1/(this.x*e[Q]+this.y*e[$]+this.z*e[ee]+e[K]);return this.set((this.x*e[O]+this.y*e[q]+this.z*e[G]+e[D])*i,(this.x*e[H]+this.y*e[N]+this.z*e[_]+e[U])*i,(this.x*e[j]+this.y*e[Z]+this.z*e[W]+e[z])*i)}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}distance(t){let e=t.x-this.x,i=t.y-this.y,s=t.z-this.z;return Math.sqrt(e*e+i*i+s*s)}},O=0,q=4,G=8,D=12,H=1,N=5,_=9,U=13,j=2,Z=6,W=10,z=14,Q=3,$=7,ee=11,K=15,rt=class Re{temp=new Float32Array(16);values=new Float32Array(16);static xAxis=new ve;static yAxis=new ve;static zAxis=new ve;static tmpMatrix=new Re;constructor(){let e=this.values;e[O]=1,e[N]=1,e[W]=1,e[K]=1}set(e){return this.values.set(e),this}transpose(){let e=this.temp,i=this.values;return e[O]=i[O],e[q]=i[H],e[G]=i[j],e[D]=i[Q],e[H]=i[q],e[N]=i[N],e[_]=i[Z],e[U]=i[$],e[j]=i[G],e[Z]=i[_],e[W]=i[W],e[z]=i[ee],e[Q]=i[D],e[$]=i[U],e[ee]=i[z],e[K]=i[K],this.set(e)}identity(){let e=this.values;return e[O]=1,e[q]=0,e[G]=0,e[D]=0,e[H]=0,e[N]=1,e[_]=0,e[U]=0,e[j]=0,e[Z]=0,e[W]=1,e[z]=0,e[Q]=0,e[$]=0,e[ee]=0,e[K]=1,this}invert(){let e=this.values,i=this.temp,s=e[Q]*e[Z]*e[_]*e[D]-e[j]*e[$]*e[_]*e[D]-e[Q]*e[N]*e[W]*e[D]+e[H]*e[$]*e[W]*e[D]+e[j]*e[N]*e[ee]*e[D]-e[H]*e[Z]*e[ee]*e[D]-e[Q]*e[Z]*e[G]*e[U]+e[j]*e[$]*e[G]*e[U]+e[Q]*e[q]*e[W]*e[U]-e[O]*e[$]*e[W]*e[U]-e[j]*e[q]*e[ee]*e[U]+e[O]*e[Z]*e[ee]*e[U]+e[Q]*e[N]*e[G]*e[z]-e[H]*e[$]*e[G]*e[z]-e[Q]*e[q]*e[_]*e[z]+e[O]*e[$]*e[_]*e[z]+e[H]*e[q]*e[ee]*e[z]-e[O]*e[N]*e[ee]*e[z]-e[j]*e[N]*e[G]*e[K]+e[H]*e[Z]*e[G]*e[K]+e[j]*e[q]*e[_]*e[K]-e[O]*e[Z]*e[_]*e[K]-e[H]*e[q]*e[W]*e[K]+e[O]*e[N]*e[W]*e[K];if(s==0)throw new Error("non-invertible matrix");let r=1/s;return i[O]=e[_]*e[z]*e[$]-e[U]*e[W]*e[$]+e[U]*e[Z]*e[ee]-e[N]*e[z]*e[ee]-e[_]*e[Z]*e[K]+e[N]*e[W]*e[K],i[q]=e[D]*e[W]*e[$]-e[G]*e[z]*e[$]-e[D]*e[Z]*e[ee]+e[q]*e[z]*e[ee]+e[G]*e[Z]*e[K]-e[q]*e[W]*e[K],i[G]=e[G]*e[U]*e[$]-e[D]*e[_]*e[$]+e[D]*e[N]*e[ee]-e[q]*e[U]*e[ee]-e[G]*e[N]*e[K]+e[q]*e[_]*e[K],i[D]=e[D]*e[_]*e[Z]-e[G]*e[U]*e[Z]-e[D]*e[N]*e[W]+e[q]*e[U]*e[W]+e[G]*e[N]*e[z]-e[q]*e[_]*e[z],i[H]=e[U]*e[W]*e[Q]-e[_]*e[z]*e[Q]-e[U]*e[j]*e[ee]+e[H]*e[z]*e[ee]+e[_]*e[j]*e[K]-e[H]*e[W]*e[K],i[N]=e[G]*e[z]*e[Q]-e[D]*e[W]*e[Q]+e[D]*e[j]*e[ee]-e[O]*e[z]*e[ee]-e[G]*e[j]*e[K]+e[O]*e[W]*e[K],i[_]=e[D]*e[_]*e[Q]-e[G]*e[U]*e[Q]-e[D]*e[H]*e[ee]+e[O]*e[U]*e[ee]+e[G]*e[H]*e[K]-e[O]*e[_]*e[K],i[U]=e[G]*e[U]*e[j]-e[D]*e[_]*e[j]+e[D]*e[H]*e[W]-e[O]*e[U]*e[W]-e[G]*e[H]*e[z]+e[O]*e[_]*e[z],i[j]=e[N]*e[z]*e[Q]-e[U]*e[Z]*e[Q]+e[U]*e[j]*e[$]-e[H]*e[z]*e[$]-e[N]*e[j]*e[K]+e[H]*e[Z]*e[K],i[Z]=e[D]*e[Z]*e[Q]-e[q]*e[z]*e[Q]-e[D]*e[j]*e[$]+e[O]*e[z]*e[$]+e[q]*e[j]*e[K]-e[O]*e[Z]*e[K],i[W]=e[q]*e[U]*e[Q]-e[D]*e[N]*e[Q]+e[D]*e[H]*e[$]-e[O]*e[U]*e[$]-e[q]*e[H]*e[K]+e[O]*e[N]*e[K],i[z]=e[D]*e[N]*e[j]-e[q]*e[U]*e[j]-e[D]*e[H]*e[Z]+e[O]*e[U]*e[Z]+e[q]*e[H]*e[z]-e[O]*e[N]*e[z],i[Q]=e[_]*e[Z]*e[Q]-e[N]*e[W]*e[Q]-e[_]*e[j]*e[$]+e[H]*e[W]*e[$]+e[N]*e[j]*e[ee]-e[H]*e[Z]*e[ee],i[$]=e[q]*e[W]*e[Q]-e[G]*e[Z]*e[Q]+e[G]*e[j]*e[$]-e[O]*e[W]*e[$]-e[q]*e[j]*e[ee]+e[O]*e[Z]*e[ee],i[ee]=e[G]*e[N]*e[Q]-e[q]*e[_]*e[Q]-e[G]*e[H]*e[$]+e[O]*e[_]*e[$]+e[q]*e[H]*e[ee]-e[O]*e[N]*e[ee],i[K]=e[q]*e[_]*e[j]-e[G]*e[N]*e[j]+e[G]*e[H]*e[Z]-e[O]*e[_]*e[Z]-e[q]*e[H]*e[W]+e[O]*e[N]*e[W],e[O]=i[O]*r,e[q]=i[q]*r,e[G]=i[G]*r,e[D]=i[D]*r,e[H]=i[H]*r,e[N]=i[N]*r,e[_]=i[_]*r,e[U]=i[U]*r,e[j]=i[j]*r,e[Z]=i[Z]*r,e[W]=i[W]*r,e[z]=i[z]*r,e[Q]=i[Q]*r,e[$]=i[$]*r,e[ee]=i[ee]*r,e[K]=i[K]*r,this}determinant(){let e=this.values;return e[Q]*e[Z]*e[_]*e[D]-e[j]*e[$]*e[_]*e[D]-e[Q]*e[N]*e[W]*e[D]+e[H]*e[$]*e[W]*e[D]+e[j]*e[N]*e[ee]*e[D]-e[H]*e[Z]*e[ee]*e[D]-e[Q]*e[Z]*e[G]*e[U]+e[j]*e[$]*e[G]*e[U]+e[Q]*e[q]*e[W]*e[U]-e[O]*e[$]*e[W]*e[U]-e[j]*e[q]*e[ee]*e[U]+e[O]*e[Z]*e[ee]*e[U]+e[Q]*e[N]*e[G]*e[z]-e[H]*e[$]*e[G]*e[z]-e[Q]*e[q]*e[_]*e[z]+e[O]*e[$]*e[_]*e[z]+e[H]*e[q]*e[ee]*e[z]-e[O]*e[N]*e[ee]*e[z]-e[j]*e[N]*e[G]*e[K]+e[H]*e[Z]*e[G]*e[K]+e[j]*e[q]*e[_]*e[K]-e[O]*e[Z]*e[_]*e[K]-e[H]*e[q]*e[W]*e[K]+e[O]*e[N]*e[W]*e[K]}translate(e,i,s){let r=this.values;return r[D]+=e,r[U]+=i,r[z]+=s,this}copy(){return new Re().set(this.values)}projection(e,i,s,r){this.identity();let h=1/Math.tan(s*(Math.PI/180)/2),l=(i+e)/(e-i),n=2*i*e/(e-i),a=this.values;return a[O]=h/r,a[H]=0,a[j]=0,a[Q]=0,a[q]=0,a[N]=h,a[Z]=0,a[$]=0,a[G]=0,a[_]=0,a[W]=l,a[ee]=-1,a[D]=0,a[U]=0,a[z]=n,a[K]=0,this}ortho2d(e,i,s,r){return this.ortho(e,e+s,i,i+r,0,1)}ortho(e,i,s,r,h,l){this.identity();let n=2/(i-e),a=2/(r-s),o=-2/(l-h),c=-(i+e)/(i-e),u=-(r+s)/(r-s),d=-(l+h)/(l-h),m=this.values;return m[O]=n,m[H]=0,m[j]=0,m[Q]=0,m[q]=0,m[N]=a,m[Z]=0,m[$]=0,m[G]=0,m[_]=0,m[W]=o,m[ee]=0,m[D]=c,m[U]=u,m[z]=d,m[K]=1,this}multiply(e){let i=this.temp,s=this.values,r=e.values;return i[O]=s[O]*r[O]+s[q]*r[H]+s[G]*r[j]+s[D]*r[Q],i[q]=s[O]*r[q]+s[q]*r[N]+s[G]*r[Z]+s[D]*r[$],i[G]=s[O]*r[G]+s[q]*r[_]+s[G]*r[W]+s[D]*r[ee],i[D]=s[O]*r[D]+s[q]*r[U]+s[G]*r[z]+s[D]*r[K],i[H]=s[H]*r[O]+s[N]*r[H]+s[_]*r[j]+s[U]*r[Q],i[N]=s[H]*r[q]+s[N]*r[N]+s[_]*r[Z]+s[U]*r[$],i[_]=s[H]*r[G]+s[N]*r[_]+s[_]*r[W]+s[U]*r[ee],i[U]=s[H]*r[D]+s[N]*r[U]+s[_]*r[z]+s[U]*r[K],i[j]=s[j]*r[O]+s[Z]*r[H]+s[W]*r[j]+s[z]*r[Q],i[Z]=s[j]*r[q]+s[Z]*r[N]+s[W]*r[Z]+s[z]*r[$],i[W]=s[j]*r[G]+s[Z]*r[_]+s[W]*r[W]+s[z]*r[ee],i[z]=s[j]*r[D]+s[Z]*r[U]+s[W]*r[z]+s[z]*r[K],i[Q]=s[Q]*r[O]+s[$]*r[H]+s[ee]*r[j]+s[K]*r[Q],i[$]=s[Q]*r[q]+s[$]*r[N]+s[ee]*r[Z]+s[K]*r[$],i[ee]=s[Q]*r[G]+s[$]*r[_]+s[ee]*r[W]+s[K]*r[ee],i[K]=s[Q]*r[D]+s[$]*r[U]+s[ee]*r[z]+s[K]*r[K],this.set(this.temp)}multiplyLeft(e){let i=this.temp,s=this.values,r=e.values;return i[O]=r[O]*s[O]+r[q]*s[H]+r[G]*s[j]+r[D]*s[Q],i[q]=r[O]*s[q]+r[q]*s[N]+r[G]*s[Z]+r[D]*s[$],i[G]=r[O]*s[G]+r[q]*s[_]+r[G]*s[W]+r[D]*s[ee],i[D]=r[O]*s[D]+r[q]*s[U]+r[G]*s[z]+r[D]*s[K],i[H]=r[H]*s[O]+r[N]*s[H]+r[_]*s[j]+r[U]*s[Q],i[N]=r[H]*s[q]+r[N]*s[N]+r[_]*s[Z]+r[U]*s[$],i[_]=r[H]*s[G]+r[N]*s[_]+r[_]*s[W]+r[U]*s[ee],i[U]=r[H]*s[D]+r[N]*s[U]+r[_]*s[z]+r[U]*s[K],i[j]=r[j]*s[O]+r[Z]*s[H]+r[W]*s[j]+r[z]*s[Q],i[Z]=r[j]*s[q]+r[Z]*s[N]+r[W]*s[Z]+r[z]*s[$],i[W]=r[j]*s[G]+r[Z]*s[_]+r[W]*s[W]+r[z]*s[ee],i[z]=r[j]*s[D]+r[Z]*s[U]+r[W]*s[z]+r[z]*s[K],i[Q]=r[Q]*s[O]+r[$]*s[H]+r[ee]*s[j]+r[K]*s[Q],i[$]=r[Q]*s[q]+r[$]*s[N]+r[ee]*s[Z]+r[K]*s[$],i[ee]=r[Q]*s[G]+r[$]*s[_]+r[ee]*s[W]+r[K]*s[ee],i[K]=r[Q]*s[D]+r[$]*s[U]+r[ee]*s[z]+r[K]*s[K],this.set(this.temp)}lookAt(e,i,s){let r=Re.xAxis,h=Re.yAxis,l=Re.zAxis;l.setFrom(i).normalize(),r.setFrom(i).normalize(),r.cross(s).normalize(),h.setFrom(r).cross(l).normalize(),this.identity();let n=this.values;return n[O]=r.x,n[q]=r.y,n[G]=r.z,n[H]=h.x,n[N]=h.y,n[_]=h.z,n[j]=-l.x,n[Z]=-l.y,n[W]=-l.z,Re.tmpMatrix.identity(),Re.tmpMatrix.values[D]=-e.x,Re.tmpMatrix.values[U]=-e.y,Re.tmpMatrix.values[z]=-e.z,this.multiply(Re.tmpMatrix),this}},Rs=class{position=new ve(0,0,0);direction=new ve(0,0,-1);up=new ve(0,1,0);near=0;far=100;zoom=1;viewportWidth=0;viewportHeight=0;projectionView=new rt;inverseProjectionView=new rt;projection=new rt;view=new rt;constructor(t,e){this.viewportWidth=t,this.viewportHeight=e,this.update()}update(){let t=this.projection,e=this.view,i=this.projectionView,s=this.inverseProjectionView,r=this.zoom,h=this.viewportWidth,l=this.viewportHeight;t.ortho(r*(-h/2),r*(h/2),r*(-l/2),r*(l/2),this.near,this.far),e.lookAt(this.position,this.direction,this.up),i.set(t.values),i.multiply(e),s.set(i.values).invert()}screenToWorld(t,e,i){let s=t.x,r=i-t.y-1;return t.x=2*s/e-1,t.y=2*r/i-1,t.z=2*t.z-1,t.project(this.inverseProjectionView),t}worldToScreen(t,e,i){return t.project(this.projectionView),t.x=e*(t.x+1)/2,t.y=i*(t.y+1)/2,t.z=(t.z+1)/2,t}setViewport(t,e){this.viewportWidth=t,this.viewportHeight=e}},nt=class{element;mouseX=0;mouseY=0;buttonDown=!1;touch0=null;touch1=null;initialPinchDistance=0;listeners=new Array;autoPreventDefault;isTouch=!1;callbacks;constructor(t,e=!0){this.element=t,this.autoPreventDefault=e,this.callbacks=this.setupCallbacks(t)}setupCallbacks(t){const e=a=>{if(a instanceof MouseEvent&&!this.isTouch){let o=t.getBoundingClientRect();this.mouseX=a.clientX-o.left,this.mouseY=a.clientY-o.top,this.buttonDown=!0,this.listeners.map(c=>{c.down&&c.down(this.mouseX,this.mouseY,a)})}},i=a=>{if(a instanceof MouseEvent&&!this.isTouch){let o=t.getBoundingClientRect();this.mouseX=a.clientX-o.left,this.mouseY=a.clientY-o.top,this.listeners.map(c=>{this.buttonDown?c.dragged&&c.dragged(this.mouseX,this.mouseY,a):c.moved&&c.moved(this.mouseX,this.mouseY,a)})}},s=a=>{if(a instanceof MouseEvent&&!this.isTouch){let o=t.getBoundingClientRect();this.mouseX=a.clientX-o.left,this.mouseY=a.clientY-o.top,this.buttonDown=!1,this.listeners.map(c=>{c.up&&c.up(this.mouseX,this.mouseY,a)})}},r=a=>{this.autoPreventDefault&&a.preventDefault();let o=a.deltaY;a.deltaMode==WheelEvent.DOM_DELTA_LINE&&(o*=8),a.deltaMode==WheelEvent.DOM_DELTA_PAGE&&(o*=24),this.listeners.map(c=>{c.wheel&&c.wheel(a.deltaY,a)})},h=a=>{if(this.isTouch=!0,!this.touch0||!this.touch1){var o=a.changedTouches;let c=o.item(0);if(!c)return;let u=t.getBoundingClientRect(),d=c.clientX-u.left,m=c.clientY-u.top,f=new Ys(c.identifier,d,m);if(this.mouseX=d,this.mouseY=m,this.buttonDown=!0,!this.touch0)this.touch0=f,this.listeners.map(g=>{g.down&&g.down(f.x,f.y,a)});else if(!this.touch1){this.touch1=f;let g=this.touch1.x-this.touch0.x,w=this.touch1.x-this.touch0.x;this.initialPinchDistance=Math.sqrt(g*g+w*w),this.listeners.map(b=>{b.zoom&&b.zoom(this.initialPinchDistance,this.initialPinchDistance,a)})}}this.autoPreventDefault&&a.preventDefault()},l=a=>{if(this.isTouch=!0,this.touch0){var o=a.changedTouches;let d=t.getBoundingClientRect();for(var c=0;c{g.dragged&&g.dragged(m,f,a)})),this.touch1&&this.touch1.identifier===u.identifier&&(this.touch1.x=this.mouseX=m,this.touch1.y=this.mouseY=f)}if(this.touch0&&this.touch1){let m=this.touch1.x-this.touch0.x,f=this.touch1.x-this.touch0.x,g=Math.sqrt(m*m+f*f);this.listeners.map(w=>{w.zoom&&w.zoom(this.initialPinchDistance,g,a)})}}this.autoPreventDefault&&a.preventDefault()},n=a=>{if(this.isTouch=!0,this.touch0){var o=a.changedTouches;let d=t.getBoundingClientRect();for(var c=0;c{g.up&&g.up(m,f,a)}),this.touch1)this.touch0=this.touch1,this.touch1=null,this.mouseX=this.touch0.x,this.mouseX=this.touch0.x,this.buttonDown=!0,this.listeners.map(g=>{g.down&&g.down(this.touch0.x,this.touch0.y,a)});else{this.buttonDown=!1;break}this.touch1&&this.touch1.identifier&&(this.touch1=null)}}this.autoPreventDefault&&a.preventDefault()};return t.addEventListener("mousedown",e,!0),t.addEventListener("mousemove",i,!0),t.addEventListener("mouseup",s,!0),t.addEventListener("wheel",r,!0),t.addEventListener("touchstart",h,{passive:!1,capture:!1}),t.addEventListener("touchmove",l,{passive:!1,capture:!1}),t.addEventListener("touchend",n,{passive:!1,capture:!1}),t.addEventListener("touchcancel",n),{mouseDown:e,mouseMove:i,mouseUp:s,mouseWheel:r,touchStart:h,touchMove:l,touchEnd:n}}dispose(){const t=this.element;t.removeEventListener("mousedown",this.callbacks.mouseDown,!0),t.removeEventListener("mousemove",this.callbacks.mouseMove,!0),t.removeEventListener("mouseup",this.callbacks.mouseUp,!0),t.removeEventListener("wheel",this.callbacks.mouseWheel,!0),t.removeEventListener("touchstart",this.callbacks.touchStart,{capture:!1}),t.removeEventListener("touchmove",this.callbacks.touchMove,{capture:!1}),t.removeEventListener("touchend",this.callbacks.touchEnd,{capture:!1}),t.removeEventListener("touchcancel",this.callbacks.touchEnd),this.listeners.length=0}addListener(t){this.listeners.push(t)}removeListener(t){let e=this.listeners.indexOf(t);e>-1&&this.listeners.splice(e,1)}},Ys=class{constructor(t,e,i){this.identifier=t,this.x=e,this.y=i}},Qr=class{constructor(t,e){this.canvas=t,this.camera=e;let i=0,s=0,r=0,h=0,l=0,n=0,a=0,o=0;new nt(t).addListener({down:(c,u)=>{i=e.position.x,s=e.position.y,h=n=c,l=a=u,o=e.zoom},dragged:(c,u)=>{let d=c-h,m=u-l,f=e.screenToWorld(new ve(0,0),t.clientWidth,t.clientHeight),g=e.screenToWorld(new ve(d,m),t.clientWidth,t.clientHeight).sub(f);e.position.set(i-g.x,s-g.y,0),e.update(),n=c,a=u},wheel:c=>{let u=c/200*e.zoom,d=e.zoom+u;if(d>0){let m=0,f=0;if(c<0)m=n,f=a;else{let b=new ve(t.clientWidth/2+15,t.clientHeight/2),p=n-b.x,x=t.clientHeight-1-a-b.y;m=b.x-p,f=t.clientHeight-1-b.y+x}let g=e.screenToWorld(new ve(m,f),t.clientWidth,t.clientHeight);e.zoom=d,e.update();let w=e.screenToWorld(new ve(m,f),t.clientWidth,t.clientHeight);e.position.add(g.sub(w)),e.update()}},zoom:(c,u)=>{let d=c/u;e.zoom=o*d},up:(c,u)=>{n=c,a=u},moved:(c,u)=>{n=c,a=u}})}},ke=class de{constructor(e,i,s){this.vertexShader=i,this.fragmentShader=s,this.vsSource=i,this.fsSource=s,this.context=e instanceof ge?e:new ge(e),this.context.addRestorable(this),this.compile()}static MVP_MATRIX="u_projTrans";static POSITION="a_position";static COLOR="a_color";static COLOR2="a_color2";static TEXCOORDS="a_texCoords";static SAMPLER="u_texture";context;vs=null;vsSource;fs=null;fsSource;program=null;tmp2x2=new Float32Array(2*2);tmp3x3=new Float32Array(3*3);tmp4x4=new Float32Array(4*4);getProgram(){return this.program}getVertexShader(){return this.vertexShader}getFragmentShader(){return this.fragmentShader}getVertexShaderSource(){return this.vsSource}getFragmentSource(){return this.fsSource}compile(){let e=this.context.gl;try{if(this.vs=this.compileShader(e.VERTEX_SHADER,this.vertexShader),!this.vs)throw new Error("Couldn't compile vertex shader.");if(this.fs=this.compileShader(e.FRAGMENT_SHADER,this.fragmentShader),!this.fs)throw new Error("Couldn#t compile fragment shader.");this.program=this.compileProgram(this.vs,this.fs)}catch(i){throw this.dispose(),i}}compileShader(e,i){let s=this.context.gl,r=s.createShader(e);if(!r)throw new Error("Couldn't create shader.");if(s.shaderSource(r,i),s.compileShader(r),!s.getShaderParameter(r,s.COMPILE_STATUS)){let h="Couldn't compile shader: "+s.getShaderInfoLog(r);if(s.deleteShader(r),!s.isContextLost())throw new Error(h)}return r}compileProgram(e,i){let s=this.context.gl,r=s.createProgram();if(!r)throw new Error("Couldn't compile program.");if(s.attachShader(r,e),s.attachShader(r,i),s.linkProgram(r),!s.getProgramParameter(r,s.LINK_STATUS)){let h="Couldn't compile shader program: "+s.getProgramInfoLog(r);if(s.deleteProgram(r),!s.isContextLost())throw new Error(h)}return r}restore(){this.compile()}bind(){this.context.gl.useProgram(this.program)}unbind(){this.context.gl.useProgram(null)}setUniformi(e,i){this.context.gl.uniform1i(this.getUniformLocation(e),i)}setUniformf(e,i){this.context.gl.uniform1f(this.getUniformLocation(e),i)}setUniform2f(e,i,s){this.context.gl.uniform2f(this.getUniformLocation(e),i,s)}setUniform3f(e,i,s,r){this.context.gl.uniform3f(this.getUniformLocation(e),i,s,r)}setUniform4f(e,i,s,r,h){this.context.gl.uniform4f(this.getUniformLocation(e),i,s,r,h)}setUniform2x2f(e,i){let s=this.context.gl;this.tmp2x2.set(i),s.uniformMatrix2fv(this.getUniformLocation(e),!1,this.tmp2x2)}setUniform3x3f(e,i){let s=this.context.gl;this.tmp3x3.set(i),s.uniformMatrix3fv(this.getUniformLocation(e),!1,this.tmp3x3)}setUniform4x4f(e,i){let s=this.context.gl;this.tmp4x4.set(i),s.uniformMatrix4fv(this.getUniformLocation(e),!1,this.tmp4x4)}getUniformLocation(e){let i=this.context.gl;if(!this.program)throw new Error("Shader not compiled.");let s=i.getUniformLocation(this.program,e);if(!s&&!i.isContextLost())throw new Error(`Couldn't find location for uniform ${e}`);return s}getAttributeLocation(e){let i=this.context.gl;if(!this.program)throw new Error("Shader not compiled.");let s=i.getAttribLocation(this.program,e);if(s==-1&&!i.isContextLost())throw new Error(`Couldn't find location for attribute ${e}`);return s}dispose(){this.context.removeRestorable(this);let e=this.context.gl;this.vs&&(e.deleteShader(this.vs),this.vs=null),this.fs&&(e.deleteShader(this.fs),this.fs=null),this.program&&(e.deleteProgram(this.program),this.program=null)}static newColoredTextured(e){let i=` +attribute vec4 ${de.POSITION}; +attribute vec4 ${de.COLOR}; +attribute vec2 ${de.TEXCOORDS}; +uniform mat4 ${de.MVP_MATRIX}; +varying vec4 v_color; +varying vec2 v_texCoords; + +void main () { + v_color = ${de.COLOR}; + v_texCoords = ${de.TEXCOORDS}; + gl_Position = ${de.MVP_MATRIX} * ${de.POSITION}; +} +`,s=` +#ifdef GL_ES + #define LOWP lowp + precision mediump float; +#else + #define LOWP +#endif +varying LOWP vec4 v_color; +varying vec2 v_texCoords; +uniform sampler2D u_texture; + +void main () { + gl_FragColor = v_color * texture2D(u_texture, v_texCoords); +} +`;return new de(e,i,s)}static newTwoColoredTextured(e){let i=` +attribute vec4 ${de.POSITION}; +attribute vec4 ${de.COLOR}; +attribute vec4 ${de.COLOR2}; +attribute vec2 ${de.TEXCOORDS}; +uniform mat4 ${de.MVP_MATRIX}; +varying vec4 v_light; +varying vec4 v_dark; +varying vec2 v_texCoords; + +void main () { + v_light = ${de.COLOR}; + v_dark = ${de.COLOR2}; + v_texCoords = ${de.TEXCOORDS}; + gl_Position = ${de.MVP_MATRIX} * ${de.POSITION}; +} +`,s=` +#ifdef GL_ES + #define LOWP lowp + precision mediump float; +#else + #define LOWP +#endif +varying LOWP vec4 v_light; +varying LOWP vec4 v_dark; +varying vec2 v_texCoords; +uniform sampler2D u_texture; + +void main () { + vec4 texColor = texture2D(u_texture, v_texCoords); + gl_FragColor.a = texColor.a * v_light.a; + gl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb; +} +`;return new de(e,i,s)}static newColored(e){let i=` +attribute vec4 ${de.POSITION}; +attribute vec4 ${de.COLOR}; +uniform mat4 ${de.MVP_MATRIX}; +varying vec4 v_color; + +void main () { + v_color = ${de.COLOR}; + gl_Position = ${de.MVP_MATRIX} * ${de.POSITION}; +} +`,s=` +#ifdef GL_ES + #define LOWP lowp + precision mediump float; +#else + #define LOWP +#endif +varying LOWP vec4 v_color; + +void main () { + gl_FragColor = v_color; +} +`;return new de(e,i,s)}},Bi=class{constructor(t,e,i,s){this.attributes=e,this.context=t instanceof ge?t:new ge(t),this.elementsPerVertex=0;for(let r=0;rthis.vertices.length)throw Error("Mesh can't store more than "+this.maxVertices()+" vertices");this.vertices.set(t,0),this.verticesLength=t.length}setIndices(t){if(this.dirtyIndices=!0,t.length>this.indices.length)throw Error("Mesh can't store more than "+this.maxIndices()+" indices");this.indices.set(t,0),this.indicesLength=t.length}draw(t,e){this.drawWithOffset(t,e,0,this.indicesLength>0?this.indicesLength:this.verticesLength/this.elementsPerVertex)}drawWithOffset(t,e,i,s){let r=this.context.gl;(this.dirtyVertices||this.dirtyIndices)&&this.update(),this.bind(t),this.indicesLength>0?r.drawElements(e,s,r.UNSIGNED_SHORT,i*2):r.drawArrays(e,i,s),this.unbind(t)}bind(t){let e=this.context.gl;e.bindBuffer(e.ARRAY_BUFFER,this.verticesBuffer);let i=0;for(let s=0;s0&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indicesBuffer)}unbind(t){let e=this.context.gl;for(let i=0;i0&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}update(){let t=this.context.gl;this.dirtyVertices&&(this.verticesBuffer||(this.verticesBuffer=t.createBuffer()),t.bindBuffer(t.ARRAY_BUFFER,this.verticesBuffer),t.bufferData(t.ARRAY_BUFFER,this.vertices.subarray(0,this.verticesLength),t.DYNAMIC_DRAW),this.dirtyVertices=!1),this.dirtyIndices&&(this.indicesBuffer||(this.indicesBuffer=t.createBuffer()),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indicesBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices.subarray(0,this.indicesLength),t.DYNAMIC_DRAW),this.dirtyIndices=!1)}restore(){this.verticesBuffer=null,this.indicesBuffer=null,this.update()}dispose(){this.context.removeRestorable(this);let t=this.context.gl;t.deleteBuffer(this.verticesBuffer),t.deleteBuffer(this.indicesBuffer)}},je=class{constructor(t,e,i){this.name=t,this.type=e,this.numElements=i}},wt=class extends je{constructor(){super(ke.POSITION,0,2)}},$r=class extends je{constructor(){super(ke.POSITION,0,3)}},Vi=class extends je{constructor(t=0){super(ke.TEXCOORDS+(t==0?"":t),0,2)}},xt=class extends je{constructor(){super(ke.COLOR,0,4)}},Fs=class extends je{constructor(){super(ke.COLOR2,0,4)}},Ls=(t=>(t[t.Float=0]="Float",t))(Ls||{}),Pe=1,en=769,Ps=770,Xs=771,Bs=774,Oi=class ze{static disableCulling=!1;context;drawCalls=0;static globalDrawCalls=0;isDrawing=!1;mesh;shader=null;lastTexture=null;verticesLength=0;indicesLength=0;srcColorBlend;srcAlphaBlend;dstBlend;cullWasEnabled=!1;constructor(e,i=!0,s=10920){if(s>10920)throw new Error("Can't have more than 10920 triangles per batch: "+s);this.context=e instanceof ge?e:new ge(e);let r=i?[new wt,new xt,new Vi,new Fs]:[new wt,new xt,new Vi];this.mesh=new Bi(e,r,s,s*3);let h=this.context.gl;this.srcColorBlend=h.SRC_ALPHA,this.srcAlphaBlend=h.ONE,this.dstBlend=h.ONE_MINUS_SRC_ALPHA}begin(e){if(this.isDrawing)throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()");this.drawCalls=0,this.shader=e,this.lastTexture=null,this.isDrawing=!0;let i=this.context.gl;i.enable(i.BLEND),i.blendFuncSeparate(this.srcColorBlend,this.dstBlend,this.srcAlphaBlend,this.dstBlend),ze.disableCulling&&(this.cullWasEnabled=i.isEnabled(i.CULL_FACE),this.cullWasEnabled&&i.disable(i.CULL_FACE))}static blendModesGL=[{srcRgb:Ps,srcRgbPma:Pe,dstRgb:Xs,srcAlpha:Pe},{srcRgb:Ps,srcRgbPma:Pe,dstRgb:Pe,srcAlpha:Pe},{srcRgb:Bs,srcRgbPma:Bs,dstRgb:Xs,srcAlpha:Pe},{srcRgb:Pe,srcRgbPma:Pe,dstRgb:en,srcAlpha:Pe}];setBlendMode(e,i){const s=ze.blendModesGL[e],r=i?s.srcRgbPma:s.srcRgb,h=s.srcAlpha,l=s.dstRgb;if(this.srcColorBlend==r&&this.srcAlphaBlend==h&&this.dstBlend==l)return;this.srcColorBlend=r,this.srcAlphaBlend=h,this.dstBlend=l,this.isDrawing&&this.flush(),this.context.gl.blendFuncSeparate(r,l,h,l)}draw(e,i,s){e!=this.lastTexture?(this.flush(),this.lastTexture=e):(this.verticesLength+i.length>this.mesh.getVertices().length||this.indicesLength+s.length>this.mesh.getIndices().length)&&this.flush();let r=this.mesh.numVertices();this.mesh.getVertices().set(i,this.verticesLength),this.verticesLength+=i.length,this.mesh.setVerticesLength(this.verticesLength);let h=this.mesh.getIndices();for(let l=this.indicesLength,n=0;n0||this.indicesLength>0)&&this.flush(),this.shader=null,this.lastTexture=null,this.isDrawing=!1;let e=this.context.gl;e.disable(e.BLEND),ze.disableCulling&&this.cullWasEnabled&&e.enable(e.CULL_FACE)}getDrawCalls(){return this.drawCalls}static getAndResetGlobalDrawCalls(){let e=ze.globalDrawCalls;return ze.globalDrawCalls=0,e}dispose(){this.mesh.dispose()}},Di=class{context;isDrawing=!1;mesh;shapeType=4;color=new V(1,1,1,1);shader=null;vertexIndex=0;tmp=new Ce;srcColorBlend;srcAlphaBlend;dstBlend;constructor(t,e=10920){if(e>10920)throw new Error("Can't have more than 10920 triangles per batch: "+e);this.context=t instanceof ge?t:new ge(t),this.mesh=new Bi(t,[new wt,new xt],e,0);let i=this.context.gl;this.srcColorBlend=i.SRC_ALPHA,this.srcAlphaBlend=i.ONE,this.dstBlend=i.ONE_MINUS_SRC_ALPHA}begin(t){if(this.isDrawing)throw new Error("ShapeRenderer.begin() has already been called");this.shader=t,this.vertexIndex=0,this.isDrawing=!0;let e=this.context.gl;e.enable(e.BLEND),e.blendFuncSeparate(this.srcColorBlend,this.dstBlend,this.srcAlphaBlend,this.dstBlend)}setBlendMode(t,e,i){this.srcColorBlend=t,this.srcAlphaBlend=e,this.dstBlend=i,this.isDrawing&&(this.flush(),this.context.gl.blendFuncSeparate(t,i,e,i))}setColor(t){this.color.setFromColor(t)}setColorWith(t,e,i,s){this.color.set(t,e,i,s)}point(t,e,i){this.check(0,1),i||(i=this.color),this.vertex(t,e,i)}line(t,e,i,s,r){this.check(1,2);let h=this.mesh.getVertices(),l=this.vertexIndex;r||(r=this.color),this.vertex(t,e,r),this.vertex(i,s,r)}triangle(t,e,i,s,r,h,l,n,a,o){this.check(t?4:1,3);let c=this.mesh.getVertices(),u=this.vertexIndex;n||(n=this.color),a||(a=this.color),o||(o=this.color),t?(this.vertex(e,i,n),this.vertex(s,r,a),this.vertex(h,l,o)):(this.vertex(e,i,n),this.vertex(s,r,a),this.vertex(s,r,n),this.vertex(h,l,a),this.vertex(h,l,n),this.vertex(e,i,a))}quad(t,e,i,s,r,h,l,n,a,o,c,u,d){this.check(t?4:1,3);let m=this.mesh.getVertices(),f=this.vertexIndex;o||(o=this.color),c||(c=this.color),u||(u=this.color),d||(d=this.color),t?(this.vertex(e,i,o),this.vertex(s,r,c),this.vertex(h,l,u),this.vertex(h,l,u),this.vertex(n,a,d),this.vertex(e,i,o)):(this.vertex(e,i,o),this.vertex(s,r,c),this.vertex(s,r,c),this.vertex(h,l,u),this.vertex(h,l,u),this.vertex(n,a,d),this.vertex(n,a,d),this.vertex(e,i,o))}rect(t,e,i,s,r,h){this.quad(t,e,i,e+s,i,e+s,i+r,e,i+r,h,h,h,h)}rectLine(t,e,i,s,r,h,l){this.check(t?4:1,8),l||(l=this.color);let n=this.tmp.set(r-i,e-s);n.normalize(),h*=.5;let a=n.x*h,o=n.y*h;t?(this.vertex(e+a,i+o,l),this.vertex(e-a,i-o,l),this.vertex(s+a,r+o,l),this.vertex(s-a,r-o,l),this.vertex(s+a,r+o,l),this.vertex(e-a,i-o,l)):(this.vertex(e+a,i+o,l),this.vertex(e-a,i-o,l),this.vertex(s+a,r+o,l),this.vertex(s-a,r-o,l),this.vertex(s+a,r+o,l),this.vertex(e+a,i+o,l),this.vertex(s-a,r-o,l),this.vertex(e-a,i-o,l))}x(t,e,i){this.line(t-i,e-i,t+i,e+i),this.line(t-i,e+i,t+i,e-i)}polygon(t,e,i,s){if(i<3)throw new Error("Polygon must contain at least 3 vertices");this.check(1,i*2),s||(s=this.color);let r=this.mesh.getVertices(),h=this.vertexIndex;e<<=1,i<<=1;let l=t[e],n=t[e+1],a=e+i;for(let o=e,c=e+i-2;o=a?(m=l,f=n):(m=t[o+2],f=t[o+3]),this.vertex(u,d,s),this.vertex(m,f,s)}}circle(t,e,i,s,r,h=0){if(h==0&&(h=Math.max(1,6*P.cbrt(s)|0)),h<=0)throw new Error("segments must be > 0.");r||(r=this.color);let l=2*P.PI/h,n=Math.cos(l),a=Math.sin(l),o=s,c=0;if(t){this.check(4,h*3+3),h--;for(let d=0;d0;)this.vertex(y,A,o),y+=C,A+=S,C+=k,S+=R,k+=Y,R+=F,this.vertex(y,A,o);this.vertex(y,A,o),this.vertex(l,n,o)}vertex(t,e,i){let s=this.vertexIndex,r=this.mesh.getVertices();r[s++]=t,r[s++]=e,r[s++]=i.r,r[s++]=i.g,r[s++]=i.b,r[s++]=i.a,this.vertexIndex=s}end(){if(!this.isDrawing)throw new Error("ShapeRenderer.begin() has not been called");this.flush();let t=this.context.gl;t.disable(t.BLEND),this.isDrawing=!1}flush(){if(this.vertexIndex!=0){if(!this.shader)throw new Error("No shader set.");this.mesh.setVerticesLength(this.vertexIndex),this.mesh.draw(this.shader,this.shapeType),this.vertexIndex=0}}check(t,e){if(!this.isDrawing)throw new Error("ShapeRenderer.begin() has not been called");if(this.shapeType==t)if(this.mesh.maxVertices()-this.mesh.numVertices()(t[t.Point=0]="Point",t[t.Line=1]="Line",t[t.Filled=4]="Filled",t))(Vs||{}),Os=class Zi{boneLineColor=new V(1,0,0,1);boneOriginColor=new V(0,1,0,1);attachmentLineColor=new V(0,0,1,.5);triangleLineColor=new V(1,.64,0,.5);pathColor=new V().setFromString("FF7F00");clipColor=new V(.8,0,0,2);aabbColor=new V(0,1,0,.5);drawBones=!0;drawRegionAttachments=!0;drawBoundingBoxes=!0;drawMeshHull=!0;drawMeshTriangles=!0;drawPaths=!0;drawSkeletonXY=!1;drawClipping=!0;premultipliedAlpha=!1;scale=1;boneWidth=2;context;bounds=new ks;temp=new Array;vertices=X.newFloatArray(2*1024);static LIGHT_GRAY=new V(192/255,192/255,192/255,1);static GREEN=new V(0,1,0,1);constructor(e){this.context=e instanceof ge?e:new ge(e)}draw(e,i,s){let r=i.x,h=i.y,l=this.context.gl,n=this.premultipliedAlpha?l.ONE:l.SRC_ALPHA;e.setBlendMode(n,l.ONE,l.ONE_MINUS_SRC_ALPHA);let a=i.bones;if(this.drawBones){e.setColor(this.boneLineColor);for(let o=0,c=a.length;o-1||!u.parent)continue;let d=u.data.length*u.a+u.worldX,m=u.data.length*u.c+u.worldY;e.rectLine(!0,u.worldX,u.worldY,d,m,this.boneWidth*this.scale)}this.drawSkeletonXY&&e.x(r,h,4*this.scale)}if(this.drawRegionAttachments){e.setColor(this.attachmentLineColor);let o=i.slots;for(let c=0,u=o.length;c0){e.setColor(this.attachmentLineColor),b=(b>>1)*2;let p=g[b-2],x=g[b-1];for(let v=0,y=b;v-1||e.circle(!0,u.worldX,u.worldY,3*this.scale,this.boneOriginColor,8)}}if(this.drawClipping){let o=i.slots;e.setColor(this.clipColor);for(let c=0,u=o.length;c=0&&s==y.data.index&&(b=!0),!b){l.clipEndWithSlot(y);continue}r>=0&&r==y.data.index&&(b=!1);let A=y.getAttachment(),C;if(A instanceof it){let S=A;c.vertices=this.vertices,c.numVertices=4,c.numFloats=v<<2,S.computeWorldVertices(y,c.vertices,0,v),d=sr.QUAD_TRIANGLES,u=S.uvs,C=S.region.texture,f=S.color}else if(A instanceof Ge){let S=A;c.vertices=this.vertices,c.numVertices=S.worldVerticesLength>>1,c.numFloats=c.numVertices*v,c.numFloats>c.vertices.length&&(c.vertices=this.vertices=X.newFloatArray(c.numFloats)),S.computeWorldVertices(y,0,S.worldVerticesLength,c.vertices,0,v),d=S.triangles,C=S.region.texture,u=S.uvs,f=S.color}else if(A instanceof tt){let S=A;l.clipStart(y,S);continue}else{l.clipEndWithSlot(y);continue}if(C){let S=y.color,k=this.tempColor;k.r=g.r*S.r*f.r,k.g=g.g*S.g*f.g,k.b=g.b*S.b*f.b,k.a=g.a*S.a*f.a,n&&(k.r*=k.a,k.g*=k.a,k.b*=k.a);let R=this.tempColor2;y.darkColor?(n?(R.r=y.darkColor.r*k.a,R.g=y.darkColor.g*k.a,R.b=y.darkColor.b*k.a):R.setFromColor(y.darkColor),R.a=n?1:0):R.set(0,0,0,1);let Y=y.data.blendMode;if(Y!=o&&(o=Y,e.setBlendMode(o,n)),l.isClipping()){l.clipTriangles(c.vertices,d,d.length,u,k,R,a);let F=new Float32Array(l.clippedVertices),L=l.clippedTriangles;h&&h(F,F.length,w),e.draw(C,F,L)}else{let F=c.vertices;if(a)for(let I=2,M=0,B=c.numFloats;I(t[t.Stretch=0]="Stretch",t[t.Expand=1]="Expand",t[t.Fit=2]="Fit",t))(Ns||{}),Ze,Ue,Ui=0,sn=1,Wi=1,yt=165,At=108,Ee=163,Us=class{renderer;logo=null;spinner=null;angle=0;fadeOut=0;fadeIn=0;timeKeeper=new ot;backgroundColor=new V(.135,.135,.135,1);tempColor=new V;constructor(t){if(this.renderer=t,this.timeKeeper.maxDelta=9,!Ue){let e=navigator.userAgent.indexOf("Safari")>-1,i=()=>Ui++;Ue=new Image,Ue.src=nn,e||(Ue.crossOrigin="anonymous"),Ue.onload=i,Ze=new Image,Ze.src=rn,e||(Ze.crossOrigin="anonymous"),Ze.onload=i}}dispose(){this.logo?.dispose(),this.spinner?.dispose()}draw(t=!1){if(Ui<2||t&&this.fadeOut>Wi)return;this.timeKeeper.update();let e=Math.abs(Math.sin(this.timeKeeper.totalTime+.25));this.angle-=this.timeKeeper.delta*200*(1+1.5*Math.pow(e,5));let i=this.tempColor,s=this.renderer,r=s.canvas,h=s.context.gl;if(s.resize(1),s.camera.position.set(r.width/2,r.height/2,0),s.batcher.setBlendMode(0,!0),t){if(this.fadeOut+=this.timeKeeper.delta*(this.timeKeeper.totalTime<1?2:1),this.fadeOut>Wi)return;i.setFromColor(this.backgroundColor),e=1-this.fadeOut/Wi,e=1-(e-1)*(e-1),i.a*=e,i.a>0&&(s.camera.zoom=1,s.begin(),s.quad(!0,0,0,r.width,0,r.width,r.height,0,r.height,i,i,i,i),s.end())}else this.fadeIn+=this.timeKeeper.delta,this.backgroundColor.a>0&&(h.clearColor(this.backgroundColor.r,this.backgroundColor.g,this.backgroundColor.b,this.backgroundColor.a),h.clear(h.COLOR_BUFFER_BIT)),e=1;e*=Math.min(this.fadeIn/sn,1),i.set(e,e,e,e),this.logo||(this.logo=new _e(s.context,Ue),this.spinner=new _e(s.context,Ze)),s.camera.zoom=Math.max(1,Ee/r.height),s.begin(),s.drawTexture(this.logo,(r.width-yt)/2,(r.height-At)/2,yt,At,i),this.spinner&&s.drawTextureRotated(this.spinner,(r.width-Ee)/2,(r.height-Ee)/2,Ee,Ee,Ee/2,Ee/2,this.angle,i),s.end()}drawInCoordinates(t,e){if(Ui<2)return;this.timeKeeper.update();let i=this.renderer;i.batcher.setBlendMode(0,!0),this.logo||(this.logo=new _e(i.context,Ue),this.spinner=new _e(i.context,Ze));const s=t-yt/2,r=e-At/2;i.drawTexture(this.logo,s,r,yt,At),this.angle-=this.timeKeeper.delta*500,this.spinner&&i.drawTextureRotated(this.spinner,s,r-25,Ee,Ee,Ee/2,Ee/2,this.angle)}},rn="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAALKElEQVR42u2de2iW5R/GPzuqcwfnnKfNmafl5tTNHWzqNi3DEMQykcAoJSsySkspjSIk0iD/07Kf4R+FnVBDUTshZGpWUEJaaiWFgZlUFmXmIe3HNXthyebeZ77P9H13ffBG8Y8H7ut7vff93N/7fu4vGGPiFZiez/Qtw9lytJajfzfw9z/j+efPOv7cV8W+lUNY2a8T/ayTCRsWFLJA5rtUO1LLkV5p9LJeJizQiHeqnlOtmVFtdTGrrZkJCxYXsTgaI6r9MY4/UpNItW4mFDaXsTlaM6qVZlBq3UwofFrJp0HMWJ9DvXUzobCznJ1BzFjWlTLrZkJh/TDWBzFjTgo51s2EgnKI0Rrx+FiOWzNzVaym91Syx5qZsGBWb2ZFa0ZN6dbMhAWTcpkUrRmXD2K5NTNhgVbH0Zpxbl/mWjMTFvRIo0e0ZpzcncnWzISKtvmiMWNRJ4qslwmVXRXsas2Ix8ZwzFqZsGFREYtaM+Oaa1ljrUzYkJ9G/ok6TlzKjJWZVFor0y7c1Zu7WjLiqiGsskamXdHopyT4vALmzS9k/t19uHtKHlOSIMn6xAtARjIZ1sFcUSZ0Y4La+G6M18hS2IlCn4a+WoC0JNL0d/dUupdnUj40g6EJ2VEdMnhrOG/p5f/jUXz8SgmvaGU6KpNRNsLVQV0OdXf24s63h/P2gWoOrBjMCr2GJFQnnxnIM3q5P1PPmaYv+4ev4/C6UtbpV2gzXCkgL5W8Bwt48OIc6ul6Tp+s4+SyASxLiI4+PYCn1bHzDZxvaQW6vZzto7MYnQIpNkf7kp5EuozYUroqEjcNKHHd0Tl9mBPN1pk+hFeieGBnBtog7UXjsj9pWg+m6duecw2cay1OC/uxMC47KmP9OIYfoz1YoC20J/rzRG4quTZK2EAyJGs20qwUbYw0aNRmUxtvfUW/uEtNzc1NB1/X8LVyd15hh82F43AvD+VlXcsSJEZa1CQ3ejleAO7oxR3RDP0XN91X4+NXYb8nkv7UNTwV7e0YTdu7I3g33t7tuaEbNwSZpps2fSyvs4M2Tjhot+jb0Xzbltj8r5j/xVt/6Z1Ob93U1ZYO691EhhzchcHeXosVjcNZysyezLw4xRZt05R+fTeuj8vOj+zKyG0j2aZcVVs6v+QalnjrMFZASQYl2nBoSyz06e3j/Xk8rgWYmMvEICu2pm1HOTuc7okV8FgRj0XukwzanhvCc/F+72TjoQjdObN1OFuDLmh0xP+WHtxiI10ukJlCprb4guiv1fP+avZrS1C7NAkliHZjDtZwMMgqbukAltpMlwuMy2FcEBPqvfLLar5Uqi0hBdEwryy+Mv5n6zkbjTBa+dlMlwvUZFETZKGiFM7tvbhdJ3gSVRO0wzIjnxmvl/J6a6JsGMYGrahtpssFeqbR841S3mhN80OjOaSDEdqd6SjaMKgzgzRK7q1ib3PT9sYyNo7JZoyNFNvRcVMZmy7WOvIuryv/Zvdmdt90+nY0bRp3AvROohFwdwW7dTG7RFlbwlqdrbOBYg005NAQmZU0HWt1rXMBH1Xw0dQ8pmqzoaPmdhun7bHZjNVe9qP9eFQfO1VkUmHjhAVUZ1GtnKFSbjrkrPfy4i4UW5t/6ZxM54J0CqxFe81KpGsQyE4h23oYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjLna+bdOy+IiFquIpGq16Pb79cNYv3IIK/X/ugx+Ui6TVKvYVU9Nc8gX8od8Ir/IN/KPfCQ/yVfyl/6/pfJvLChkQdD6wyqntquCXYuKWJSfRr6D0dEAxV3xlw/khyD+kd/ku/88cHo+09tS3LBpO1HHCVUqcIA6CqB4K+6X6x35L/JM2loXurlWmUmlA5XogOIcK8/If5HncrSWo7F6cKIWPjT/RXGOlWfkv8hzaWsN4uaaysE6WIkOKM6x8oz8F3kusXqo2vxC5jtYiQ4ozrH0TeS5qIZcrB7qkrwdA8U5Vp6R/yLPZV8V+2L14Cl5THGwEh1QnGPlGfkv8lyUlIzFQ1cNYVVHrcjZ0VCcFe9Y+Eb+izy3ceclUl43aFN52DXXssYpnY6a4qFS8ZcP2uIf+e7inRh6pdFrdTGrm8uiHx/L8T2V7NGWzvJBLJ/bl7mTuzO5qBNFDoiJID/IF/KHfCK/yDfyT3O7d/KbfNfS80hNIrU0g9L6HOq1x5iTQo6FNpeLfCQ/yVfyl3xmXYwxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHNk9z4JwJ0SqKTdQkbyEwhU393T6V7zzR6pieR3tE1ITeVXImhe6BXDGZFdRbVeank2TBhcaEMr0rwbixj49IBLL2/L/ffmMuNHfqO9tFZjJYBd1ewO3Lx+IcVfKhqna5nHZYR6XFPH+5R3eeI5t9fx/fvjeC9Jdew5OKZKqFR/RDVKL6vL/f9PJafmyvHsL+a/ff24V6NmjZQbGchVbY6UM2BluqHv1rCqzVZ1KQlkZboepCdQvacPsz5bjTfXao+yMEaDt7Wk9tSIMVGig3TejCtJSM2bSpkPjWPqd1S6Zao+lORSYWmgkOjORRNwZqd5ezMSiHLRooNr5XwWjS6/1XHX9vL2T67N7M1iyXa9JCrYjVrS1gbpJyw6hBfsmiNCYT0P9/A+Wj1/6qGr5YNYFlJBiWJogEzezLz/ZG8/9s4fgtSyuvNYbyp1IONFBtu7sHNv4/j9yAxUHWrdaWsG9+N8XHd+YxkMpSy+aySz841cC5oXbmHCnnI74yxAgZ3YbDeB4PEQCOpBpFNZWwa2ZWRcdnxLsl00crtRB0n2lLg8JNRfDKoM4NsolgBSmw/UMADba1+qpmqfyf6x1u/0a/og3I+aEunP6/i86osqmygcGarF4p54dex/Bo0LqfqOfVwIQ/HW5/RSkwV1oN2WLlHTc82TljAwM4M1O5LWwYKZTjibYXNS0N5KcjKTe10PadfLObFuJwK4ozp+UzXDBTUjL+M5ZcBnRkQV53dMIwNQTu6bSTbVEzbi5awuVByd2E/FgaN0Tc1fKOzBHHV2aAdVSdv6s5NNkp7cSH/++xAng2yyHx+CM/H21YhfdPp+0U1X0TbSZnXx8faG9Aop0MS0cToh1p+iLcpOkLj9t/JOk5eqoPHxnDsyf486an5yqCDK7XZ1O4oZ4dWyy3FSXHUAYq47uyYbMZoGmhpG3DlEFb6uNiVBhpyaHhnBO8oJmfqOROJjzIiP43hJ8UxITqqX56S2Hur2KsOnq3nrE6PPNKPRwrSKbAZrjTQNZmuE7oxYXMZmxWbw9dxWFu4W4ezVedOE6qzI7oyYkY+M7TPeWsPbk2UX1qioSN+E3OZqOR2cReKE+qQRFN0Pi7y73g/UawU1KzezJpXwLz5hczX1ueUPKYkNb6GJQZ+j7/aAfRZREsv+quGsMoamXZBW2Gt5eU0alorEzYsKmJRa/m4NdeyxlqZsCGa84DKnVorEzboC7podis69DfIJmwufHMc7famvvmxZiYsKOtKWbRm1OcW1syEBboSJFozLh/EcmtmwgIluaM14/phrLdmJixYXMTiaM24p5I91syEBTphFOR7Y2tmwgJNvUFOr+tov3UzoaAv44KYUatv62ZCoemdhtG0+hzqrZsJBR08DWLG0gxKrZu50qvpxos3U5NItW4mFPp1ot+lPlpq2lYXs9qamVBZUMiC1ox4pJYjvlfStAu6GmTLcLboMtPIV4/6im5fFfuUi9QIap2MiWP+D96R1vPmsD/fAAAAAElFTkSuQmCC",nn="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKUAAABsCAYAAAALzHKmAAAQ7klEQVR42u3da4xdVRUA4D0zd2Y6nZY59DVtZ1puS9+lzC0YAi2UQ8AAQczFpPgA9VIeIQbirRqJ0cBUBVGjDr/QCKSNRSMmpuODxAdxqhgwxkhFjf6Sxh/+UUNVNGJCzR7uTvas7LXX2q9zzp3em6y0gTN3Zu75utZe5+yztxC9V+/Ve5X9En1Vjd7J6SFbLNF7naPw+l2jh7YHMBWssqMHtlsRdim4qsLtIawaPiHEQOLoNrA9iIkQDnRrVA1qD2LZ8ISoxYqKo13sQAtBWBayQWZUAXGRQM9JjCngDVY0UqJNDbQrMcaGmArdUKpIjbYiQLsCZCyIMQBy8QwnilR4Q5AuCpxFYvRFmBLbEiwKwpsSaWycVQGZBKMrwBjA9BhxDe57u2L2hOoKNCbOrgAZitEVYUxoKSMErQvSxYIzCkguRg5EF4AUhqUlhy/YUKSxcRaKsioYOQhD4I0yYxkR3PcJBcuFysmgsXAWBTMJyBCMIQh9kGGxXIXvexCQXbHGAMrBWTbM2CCpMSMLIxehC77lSJwXGth7M0FzoVJIXXDWQnGmhOkL0ic7YhhtWdGGkAuPAjUWGoF4faCmwBkbZmyUqUCyMqMLRA4+E6IsdTjidUHKBYrh9CnpRcH0ypKxsyOGEYNIIeTCOz91OIJ1QYoB5eAMyZo+MFNnyVTZ0YiRC9EGEMOyAgshxErHsL2XK1gOUgwohtM1a5YNM7Rsu4K0ZkcbRm4mpPBRwFZ5hg9eCqkrUB+csWGGogzNkqEgrdnRhpGLkINudaLgwvVB6oqzCjCTZElb2Y4B0gUjBtEG0ARnDRLjjoG9DwcshtQGlIPTljVjwUySLWNkyRCQVHa0ZUUTRAwgF91a33BEy0VKAcVwwqwZC2bqbOlUurllOxQkJzNyINoAYqjWhYYjWg5SCiiG05Q1U8FMjTIoS8YE6YORi1BHtJ4KIcQEEtTXUWAxpK44YVlPBdO1jCdFWTZIE8bVGEYMIRPcZGBw4HKQcoBiOE1ZMzbMgVQwU6JMAdKEEcuIJogUvg1YCCE2gsCO42DlIIVAKZwpYJaSLVNnSU6XjYHUmxhTmXaFaMO3EYkLqMC+FsLlIoVAKZzMrEnBhJeLfLNlKMrYWRIDCbOkFSSVHbHM6AKRC6/ODUewNqQ+OLlZkxpjUmV8MBbMUJSxyzY3Q1IgTRgxiBRCHdem0KDAUkBh9sRwwjEnAXMMgTnKhFlUtiwkS5rGka4g9SaGgxFmRC7AzTCEEBcyA36dDSsXqAtOLkysjGMwY5XxVChjZ0kuSCo7YlkRQsQQYtDEFsegsLoCxUp7Kpgps2UslFGzJGccSYHUmxhOZqwzEZqAbfUMCisHKIZzgsCpl3MTzMwTpi1bYp2477gyFKUxS7qWbdjY2EBS2dGE0QQRA7gNCyHEdhjE8RhUDlBT9tzgmjWZMFNlSy+Urk1OzCyJlW0XkK4YOQh1cDtcgwBrQmoDWkdgboBZE8mYsJSHlnFbJ+5bwmOPJ7lZkirbC8aRsMvmgtTHjBhGE0QbwJ2egUE1ITVlUC5OmDVdYNrKuN70xM6WoShjlW4464dbtiFIWK6x7GjESEHUUe0iYncnbMdQSE0Z1ITTNOb0hRmjjLtmS9dmJ2rp1jtuKktyyrb6YLEMCUHq2dGG0QQRQ7f72kzc+cJecerne8Wvv7JNPHPvenEkz8Sh3UtFc92QyGt9Yko/HgOLAIUZlItTz5ouMF3KuE+2jFLCQ1D6lm6fLMkBacuOJowYRBUXyfjuHjF3NhdnsfjvAfH6E9vFt9XxKgikEKgJZyyYalzOLeMu2bLbULI6bh+QGwmQ+rgRlumdGEQAao+K56bEL2woVUwOiev0r8OAUjiJrMmFCbvykGxZRAmPitK1dHM7bohyMsuyi/I8f0+e57fJYIKEZXpXo9E4mOf5XTKyLLvCBLETF8uY2SKepkC+dpX4T02Ivepr4HvZcOZ5fmee54fyPL+DmTUhzAs6n4n8bN5dr9f3YdkSg8nsxG0lPBVKVpNjG0/aGhzfLDmRZdnumZmZp8+c+cdZPV555fSr7Xb7s0jJ3i5Pcue4MxKkPPkvvXTqz/B92u32l0wYOzG1fkhcd/py8Rcbyq/vFM/KY1WA95h/3zzP71bfU6JsNpsfgj+P/FlbrdaDGExYyuXvLz8H+DudODH700ajcSM3W6Yu4alQ1spCOTd38jcKocTZbh9+9NixY99XJ8AEUkcpo9W64yH197m5k7+bnZ19QT+J09NHntQhwji/Jg58qi6++ofLxJ8gSFneVw2Ka4QQDfh1Ok4dZavVmtZ/nrm5k7/Vf55O1tRhboUw5+ZOvqyOl5+R/FyOHj32PYVU/tloNG5IXcKrhJIzngwp3fNjomazea/64BuNxts646f50lWv169utw9/DmtqdJQyZFaSJVuV6nq9fqMEof5/vV6/CYBqgJDlee+yAbF/+4i4ZWqZeNfaIfHWzn+Hx0KcEuU9+s8jv3ej0bhVlXOZydX/k0iRMeb8P0D5e6tj8zy/Xb9UJIc56h/yqVOnXul8lmuZ2bJslKmbHG7XrbpCmCXFRLvdfqQD6jTS3Jiy5I4OykM6ADV+1Eu1DmV6evopBORexzDi1L+X/HnGxsb2w3Hm9PSRJ9QxWPOTZdmlKht2hi+w6dkox5bqffI8fye3hDteGqKaHVsHXihKl0tB+h0cY+lute54AGRKDCW89LNTRynHb7ChUWVVjetOnJh9EYBUyPZeNCoOtsbFQwdXi4/esELcd+tq8cCHJ8UXp+viy9efLz7AgamjlKXc1AA1m83DoIRDlFubzeb96hhZLVTlgJ24gttutx+ONa50bHZKRenaeTs1OfpAfnr6yOOdE7EZdNwmlKocntXLNkA5JTGq47Ds+Lf94lWsyfnXleLfnIwJUN4DOnNYwuUxh2A3Ln9XULrfK8t3J27Tu3BVwiOjXJqoAy8UZej1yclGo3GTLN+gu3w+z/P3YaWbQqk3Ne12e4ZC+c8rxWsYytcPiP9RpZxCqWDKnxOiBNlyAUpOnGsoh4tA2Rm8X9xqtT6md5wyZmYe+0YRKL+1S/wYQ3n8zctBl5SBUv5djivfjMOPduIzcizeiYfr9foVvUwZG+XCuzibZKnSceZ5/v4QlKp8y7ElhnJlTeTP7BI/kllRYfzrfvHqFy4UX1vaL/aVlSmROzwbwdS29T2UcEwZF+V8ozM2lu1VY812u/15akypGh3TmFJesJbHHD167IdUxz3YJy5bNySuX1mbvy55CbMLtzU6tjGlsdFptVqfUMc0Go23F4wy1l2dSnbfvpMwVPe9WWVLDsrOJaF9MFu2Wq1PqmNkGce67xiXhTjdNwdlvV6/BgxfbPfBfVCetxi6b9/rlCup65QzM48dl2OjLMv26CibzeZ96sTIzEFdpwQXz9U1yrtVlpR/Zll2Fec65Y6l4pbbx8XHH9kknvzJlPjlHy8Tp29eKT5ou0aJoIT3w3dBlLDzVpfAJEZ1XOdaJZxnOSlvPMjPzxFljIvng914RwebsjYO7uhMyHu46sOfnf3Oz2TXDW6vvYxdFoIXz3Wc8J5zs9n8iOn2IrxTc2BM3Glqdp7dI553uaOjxrhwcob+MyuUpjs6WZZdon8OcigjPx8V+u+GTWFTSWEx3WYcdJ225jNDSE4q0GHCzlueHOyujn6bUWYgeb9ZZUaQPe+GzQ+Gc8+oOGhC+c1d4gfI16n3XDAhQ7+9qE9l01E2Go132GYKyXE1NiFDTcpoNpv3LOYJGWXNErJNW9sEp63p2RKiVPMn1bS1DgxsyhoGdGpmizj+xtXiDYnx7/vFmce3iWdW1cTVGEY4hQ2ZW0nNq8Qm/M6XbXm3S100lwGedFybuvNOibLI+ZS2ceU4eAxiEuvCkfmU8ycToDxETe6FgCBQHeqyAbFvfEhcO7BwDuXFCEbTZF840XeHK0jYcbs2OIGle0mVJ/mmnClEPQqxyTY5I8/zFhif7fSZee4bnrPOU4AssnRXHaVTCTd14dRDY3UbTIiSeFhsN/aMjgnqthFx880rxX3yATL5p3y4LPXzOaBkUyBjZMlYpbtQlIOBD475ZEusjMNSvkXe6VEoJVDkeZ2dzIfIFsRzU+JF2OyM9M9fTC/6SUYOyFQPjQ2nWiUjxnPfw5EeHqMWIqAeIFsAU847lJM2JM6xsewt1OIDLs99P7ZFHNdB/upS8XtPiD7PfLuCXJNolYyyFiNI/Zit65ItrOVafFbHcFohY7hPTN21Tjz4uc3iqfsnxKdX1MTl1OoYRFaMsToGB6Trw2JFP/OdZC2hJZ7ZkrMoAbbSGmelDJ91hFKuJeS7jlBMkJnrAqqJlgMUZS/dArPlGHNdSg5M3xXXtvquuEatvIYtDRhpxbUJuIgqsU5lGWtUploK0KuEU9mSW8YpmFQ556xNuYW7NiW13B+FkMiKHIy+C6eGgBxJvMR0oSv5hi6+z4HJyZoU0M2RVvDlrOQbcxVfX5AhZbuqy0v7ZstYMLHlAVlLTF9ALLbvu9Y5Zylpn/XOsd0ibIvxr2KCLHpp6SCUIdnSZSF+WzfOhem6GD+1KwR3Z4jNjrtDpNoZwmWd8yrupZN6Hx3fbMmFSe0Swdq2ZIPjxk1112Duo8OBGLrBkw/IoncdK2XHsdC9dHz204m50xh3tzFq1zFqtzHXrfCw7OgDsqyNnZLszVijsmXgrmNcmGtS78lIoMX2aJz03fKO2sDJddPQSCDPiQ1DfWBycY6XtXstc2PQKuxgG2McmXTPb9/9vmuJYXKyJrWjbeg+3xPM4O73nWqvbyw7xgZZSJbEUBa157cNJjdr2vb+5iA1YV3HxYscj30PDCEHIgcjtfm8K8hSsmRotkwFk5s1TTghUAopB6xrjHMBBkI0YYTZ0dZlxwLpkiWDULpmy5gwqayZgZNkA7oKQQCxctByYg0XIIEQQuRitGVHblMTA2ShKGPDpC6wu+DEgJqg2rDGDBtAF4Q6RAojp1xXGmSMbImVcR+YWNY04eQCtUG1ofUJ2/uvcETIgUhhdAE5GAlkKShjwHTNmhhODKgJqQ2sC14uOgyfD0IbRF+MlQaZAiZWyn2yJsTJATqGnHQO2Jhh+xlsACFCG0QbRtdyzQFZCZSxYPpmTS7Q5cjJHYNBYIkZpu99HoUQ/o4QIYSIZUZfjJ4ZMjZI32wZBDMU5yhy8pZTULl4XYP5fagMyEVoy4oupTpGduwnkloSlKEwY+AcQU4MhRTD6ovXBRwFzwWgCSEF0QVjJUGmgEllTS5OLlCIlIN1mS9mx/cZ5eLDALpCTI2RAhkTZQqYoTgpoCPECbaBHQ2ETL3PUl98ECAXYijG0OyYAmQoTG7W5ODkAF1CnVgm2JQx4okPA+gCMTbGskBGgRmaOblAh5GTORIrfKFx4VH4EIAxIXIxlg2SBbMvECY3e7oApbDaIgQu5/2HmeEKEINYiwSRi7EQkLFgumZOCuggctKGI4ULZN/vMeSLj0AYMytWEqMLzFg4fYDaoKaC6wvOFR4FkIPQFaILxrJAOsHsc/zlfYDWXE8qF22s8Pz5KHxcgEVALBtjJXBSSEOwFhk1Zgy4hitCT4hVw+gFs8/zwxqIBbUgyK7fcyA0PD9XX4iVxhiC0xdof6STWCsoBmKF7+cVCWFXQYyBMxRpf+STX1b0x45AhN0OMSrOGEirhrY/dfQAdjvS7oy+WCF6r1RIFxXWvlTRg1YVqFWBmxZbD99ig9pt0YPQw9rD1nstVri9V+/Ve3XrS/wfim4P5fIFxLoAAAAASUVORK5CYII=",an=class{constructor(t,e){this.config=e,e.pathPrefix||(e.pathPrefix=""),e.app||(e.app={loadAssets:()=>{},initialize:()=>{},update:()=>{},render:()=>{},error:()=>{},dispose:()=>{}}),e.webglConfig||(e.webglConfig={alpha:!0}),this.htmlCanvas=t,this.context=new ge(t,e.webglConfig),this.renderer=new Ni(t,this.context),this.gl=this.context.gl,this.assetManager=new Xi(this.context,e.pathPrefix),this.input=new nt(t),e.app.loadAssets&&e.app.loadAssets(this);let i=()=>{this.disposed||(requestAnimationFrame(i),this.time.update(),e.app.update&&e.app.update(this,this.time.delta),e.app.render&&e.app.render(this))},s=()=>{if(!this.disposed){if(this.assetManager.isLoadingComplete()){this.assetManager.hasErrors()?e.app.error&&e.app.error(this,this.assetManager.getErrors()):(e.app.initialize&&e.app.initialize(this),i());return}requestAnimationFrame(s)}};requestAnimationFrame(s)}context;time=new ot;htmlCanvas;gl;renderer;assetManager;input;disposed=!1;clear(t,e,i,s){this.gl.clearColor(t,e,i,s),this.gl.clear(this.gl.COLOR_BUFFER_BIT)}dispose(){this.config.app.dispose&&this.config.app.dispose(this),this.disposed=!0}},ln=class{constructor(t,e){this.config=e;let i=typeof t=="string"?document.getElementById(t):t;if(i==null)throw new Error("SpinePlayer parent not found: "+t);this.parent=i,e.showControls===void 0&&(e.showControls=!0);let s=e.showControls?` +
    +
    +
    + +
    + + + + + + +
    `:"";this.parent.appendChild(this.dom=Ve(`
    ${s}
    `));try{this.validateConfig(e)}catch(r){this.showError(r.message,r)}this.initialize(),this.addEventListener(window,"resize",()=>this.drawFrame(!1)),requestAnimationFrame(()=>this.drawFrame())}parent;dom;canvas=null;context=null;sceneRenderer=null;loadingScreen=null;assetManager=null;bg=new V;bgFullscreen=new V;playerControls=null;timelineSlider=null;playButton=null;skinButton=null;animationButton=null;playTime=0;selectedBones=[];cancelId=0;popup=null;error=!1;skeleton=null;animationState=null;paused=!0;speed=1;time=new ot;stopRequestAnimationFrame=!1;disposed=!1;viewport={};currentViewport={};previousViewport={};viewportTransitionStart=0;eventListeners=[];input;dispose(){this.sceneRenderer?.dispose(),this.loadingScreen?.dispose(),this.assetManager?.dispose(),this.context?.dispose();for(var t=0;t{this.pause();let w=this.animationState.getCurrent(0).animation.duration*f;this.animationState.update(w-this.playTime),this.animationState.apply(this.skeleton),this.skeleton.update(w-this.playTime),this.skeleton.updateWorldTransform(2),this.playTime=w},this.playButton.onclick=()=>this.paused?this.play():this.pause(),h.onclick=()=>this.showSpeedDialog(h),this.animationButton.onclick=()=>this.showAnimationsDialog(this.animationButton),this.skinButton.onclick=()=>this.showSkinsDialog(this.skinButton),l.onclick=()=>this.showSettingsDialog(l);let o=this.canvas.clientWidth,c=this.canvas.clientHeight,u=this.canvas.style.width,d=this.canvas.style.height,m=!1;n.onclick=()=>{let f=()=>{m=!m,m||(this.canvas.style.width=o+"px",this.canvas.style.height=c+"px",this.drawFrame(!1),requestAnimationFrame(()=>{this.canvas.style.width=u,this.canvas.style.height=d}))},g=e;g.onfullscreenchange=f,g.onwebkitfullscreenchange=f;let w=document;w.fullscreenElement||w.webkitFullscreenElement||w.mozFullScreenElement||w.msFullscreenElement?w.exitFullscreen?w.exitFullscreen():w.mozCancelFullScreen?w.mozCancelFullScreen():w.webkitExitFullscreen?w.webkitExitFullscreen():w.msExitFullscreen&&w.msExitFullscreen():(o=this.canvas.clientWidth,c=this.canvas.clientHeight,u=this.canvas.style.width,d=this.canvas.style.height,g.requestFullscreen?g.requestFullscreen():g.webkitRequestFullScreen?g.webkitRequestFullScreen():g.mozRequestFullScreen?g.mozRequestFullScreen():g.msRequestFullscreen&&g.msRequestFullscreen())},a.onclick=()=>window.open("http://esotericsoftware.com")}return e}loadSkeleton(){if(this.error)return;this.assetManager.hasErrors()&&this.showError(`Error: Assets could not be loaded. +`+zi(this.assetManager.getErrors()));let t=this.config,e=this.assetManager.require(t.atlas),i=this.context.gl,s=i.getExtension("EXT_texture_filter_anisotropic"),r=i.getParameter(i.VERSION).indexOf("WebGL 1.0")!=-1;for(let c of e.pages){let u=c.minFilter;var h=t.mipmaps,l=P.isPowerOfTwo(c.width)&&P.isPowerOfTwo(c.height);r&&!l&&(h=!1),h&&(s?(i.texParameterf(i.TEXTURE_2D,s.TEXTURE_MAX_ANISOTROPY_EXT,8),u=9987):u=9729,c.texture.setFilters(u,9728)),u!=9728&&u!=9729&&c.texture.update(!0)}let n;try{let c,u,d=new gs(e);if(t.skeleton.endsWith(".json")){if(u=this.assetManager.remove(t.skeleton),!u)throw new Error("Empty JSON data.");if(t.jsonField&&(u=u[t.jsonField],!u))throw new Error("JSON field does not exist: "+t.jsonField);c=new Ms(d)}else u=this.assetManager.remove(t.skeleton),c=new Ss(d);c.scale=t.scale,n=c.readSkeletonData(u)}catch(c){this.showError(`Error: Could not load skeleton data. +${c.message}`,c);return}this.skeleton=new Ei(n);let a=new cs(n);a.defaultMix=t.defaultMix,this.animationState=new rs(a),t.controlBones.forEach(c=>{n.findBone(c)||this.showError(`Error: Control bone does not exist in skeleton: ${c}`)}),!t.skin&&n.skins.length&&(t.skin=n.skins[0].name),t.skins&&t.skin.length&&t.skins.forEach(c=>{this.skeleton.data.findSkin(c)||this.showError(`Error: Skin in config list does not exist in skeleton: ${c}`)}),t.skin&&(this.skeleton.data.findSkin(t.skin)||this.showError(`Error: Skin does not exist in skeleton: ${t.skin}`),this.skeleton.setSkinByName(t.skin),this.skeleton.setSlotsToSetupPose()),Object.getOwnPropertyNames(t.viewport.animations).forEach(c=>{n.findAnimation(c)||this.showError(`Error: Animation for which a viewport was specified does not exist in skeleton: ${c}`)}),t.animations&&t.animations.length&&(t.animations.forEach(c=>{this.skeleton.data.findAnimation(c)||this.showError(`Error: Animation in config list does not exist in skeleton: ${c}`)}),t.animation||(t.animation=t.animations[0])),t.animation&&!n.findAnimation(t.animation)&&this.showError(`Error: Animation does not exist in skeleton: ${t.animation}`),this.setupInput(),t.showControls&&((n.skins.length==1||t.skins&&t.skins.length==1)&&this.skinButton.classList.add("spine-player-hidden"),(n.animations.length==1||t.animations&&t.animations.length==1)&&this.animationButton.classList.add("spine-player-hidden")),t.success&&t.success(this);let o=this.animationState.getCurrent(0);o?(this.currentViewport.x===void 0&&this.setViewport(o.animation),t.animation||(t.animation=o.animation?.name),this.play()):t.animation?(o=this.setAnimation(t.animation),this.play()):(o=this.animationState.setEmptyAnimation(0),o.trackEnd=1e8,this.skeleton.updateWorldTransform(2),this.setViewport(o.animation),this.pause())}setupInput(){let t=this.config,e=t.controlBones;if(!e.length&&!t.showControls)return;let i=this.selectedBones=new Array(e.length),s=this.canvas,r=null,h=new Ce,l=new ve,n=new ve,a=new Ce,o=this.skeleton,c=this.sceneRenderer;if(t.interactive){let u=function(d,m){n.set(d,s.clientHeight-m,0),h.x=h.y=0;let f=24,g=0,w=null;for(let b=0;b{r=u(d,m)},up:()=>{r?r=null:t.showControls&&(this.paused?this.play():this.pause())},dragged:(d,m)=>{r&&(d=P.clamp(d+h.x,0,s.clientWidth),m=P.clamp(m-h.y,0,s.clientHeight),c.camera.screenToWorld(l.set(d,m,0),s.clientWidth,s.clientHeight),r.parent?(r.parent.worldToLocal(a.set(l.x-o.x,l.y-o.y)),r.x=a.x,r.y=a.y):(r.x=l.x-o.x,r.y=l.y-o.y))},moved:(d,m)=>u(d,m)})}if(t.showControls){this.addEventListener(document,"mousemove",g=>{g instanceof MouseEvent&&f(g.clientX,g.clientY)}),this.addEventListener(document,"touchmove",g=>{if(g instanceof TouchEvent){let w=g.changedTouches;if(w.length){let b=w[0];f(b.clientX,b.clientY)}}});let u=(g,w,b)=>{let p=g-b.left,x=w-b.top;return p>=0&&p<=b.width&&x>=0&&x<=b.height},d=!0,m=!1,f=(g,w)=>{let b=Xe(this.dom,"spine-player-popup");d=u(g,w,this.playerControls.getBoundingClientRect()),m=u(g,w,s.getBoundingClientRect()),clearTimeout(this.cancelId),!b&&!d&&!m&&!this.paused?this.playerControls.classList.add("spine-player-controls-hidden"):this.playerControls.classList.remove("spine-player-controls-hidden"),!d&&!b&&!this.paused&&(this.cancelId=setTimeout(()=>{this.paused||this.playerControls.classList.add("spine-player-controls-hidden")},1e3))}}}play(){this.paused=!1;let t=this.config;t.showControls&&(this.cancelId=setTimeout(()=>{this.paused||this.playerControls.classList.add("spine-player-controls-hidden")},1e3),this.playButton.classList.remove("spine-player-button-icon-play"),this.playButton.classList.add("spine-player-button-icon-pause"),t.animation||(t.animations&&t.animations.length?t.animation=t.animations[0]:this.skeleton.data.animations.length&&(t.animation=this.skeleton.data.animations[0].name),t.animation&&this.setAnimation(t.animation)))}pause(){this.paused=!0,this.config.showControls&&(this.playerControls.classList.remove("spine-player-controls-hidden"),clearTimeout(this.cancelId),this.playButton.classList.remove("spine-player-button-icon-pause"),this.playButton.classList.add("spine-player-button-icon-play"))}setAnimation(t,e=!0){return t=this.setViewport(t),this.animationState.setAnimationWith(0,t,e)}addAnimation(t,e=!0,i=0){return t=this.setViewport(t),this.animationState.addAnimationWith(0,t,e,i)}setViewport(t){if(typeof t=="string"){let r=this.skeleton.data.findAnimation(t);if(!r)throw new Error("Animation not found: "+t);t=r}this.previousViewport=this.currentViewport;let e=this.config.viewport,i=this.currentViewport={padLeft:e.padLeft!==void 0?e.padLeft:"10%",padRight:e.padRight!==void 0?e.padRight:"10%",padTop:e.padTop!==void 0?e.padTop:"10%",padBottom:e.padBottom!==void 0?e.padBottom:"10%"};e.x!==void 0&&e.y!==void 0&&e.width&&e.height?(i.x=e.x,i.y=e.y,i.width=e.width,i.height=e.height):this.calculateAnimationViewport(t,i);let s=this.config.viewport.animations[t.name];return s&&(s.x!==void 0&&s.y!==void 0&&s.width&&s.height&&(i.x=s.x,i.y=s.y,i.width=s.width,i.height=s.height),s.padLeft!==void 0&&(i.padLeft=s.padLeft),s.padRight!==void 0&&(i.padRight=s.padRight),s.padTop!==void 0&&(i.padTop=s.padTop),s.padBottom!==void 0&&(i.padBottom=s.padBottom)),i.padLeft=this.percentageToWorldUnit(i.width,i.padLeft),i.padRight=this.percentageToWorldUnit(i.width,i.padRight),i.padBottom=this.percentageToWorldUnit(i.height,i.padBottom),i.padTop=this.percentageToWorldUnit(i.height,i.padTop),this.viewportTransitionStart=performance.now(),t}percentageToWorldUnit(t,e){return typeof e=="string"?t*parseFloat(e.substr(0,e.length-1))/100:e}calculateAnimationViewport(t,e){this.skeleton.setToSetupPose();let i=100,s=t.duration?t.duration/i:0,r=0,h=1e8,l=-1e8,n=1e8,a=-1e8,o=new Ce,c=new Ce;const u=new Array(2);for(let d=0;dthis.drawFrame());let e=document,s=e.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement?this.bgFullscreen:this.bg;this.time.update();let r=this.time.delta,h=!this.assetManager.isLoadingComplete();!this.skeleton&&!h&&this.loadSkeleton();let l=this.skeleton,n=this.config;if(l){let a=this.sceneRenderer;a.resize(1);let o=this.paused?0:r*this.speed;if(n.frame&&n.frame(this,o),!this.paused&&(l.update(o),this.animationState.update(o),this.animationState.apply(l),n.updateWorldTransform?n.updateWorldTransform(this,o):l.updateWorldTransform(2),n.showControls)){this.playTime+=o;let f=this.animationState.getCurrent(0);if(f){let g=f.animation.duration;for(;this.playTime>=g&&g!=0;)this.playTime-=g;this.playTime=Math.max(0,Math.min(this.playTime,g)),this.timelineSlider.setValue(this.playTime/g)}}let c=this.viewport;if(c.x=this.currentViewport.x-this.currentViewport.padLeft,c.y=this.currentViewport.y-this.currentViewport.padBottom,c.width=this.currentViewport.width+this.currentViewport.padLeft+this.currentViewport.padRight,c.height=this.currentViewport.height+this.currentViewport.padBottom+this.currentViewport.padTop,this.previousViewport){let f=(performance.now()-this.viewportTransitionStart)/1e3/n.viewport.transitionTime;if(f<1){let g=this.previousViewport.x-this.previousViewport.padLeft,w=this.previousViewport.y-this.previousViewport.padBottom,b=this.previousViewport.width+this.previousViewport.padLeft+this.previousViewport.padRight,p=this.previousViewport.height+this.previousViewport.padBottom+this.previousViewport.padTop;c.x=g+(c.x-g)*f,c.y=w+(c.y-w)*f,c.width=b+(c.width-b)*f,c.height=p+(c.height-p)*f}}a.camera.zoom=this.canvas.height/this.canvas.width>c.height/c.width?c.width/this.canvas.width:c.height/this.canvas.height,a.camera.position.x=c.x+c.width/2,a.camera.position.y=c.y+c.height/2;let u=this.context.gl;u.clearColor(s.r,s.g,s.b,s.a),u.clear(u.COLOR_BUFFER_BIT),n.update&&n.update(this,o),a.begin();let d=n.backgroundImage;if(d){let f=this.assetManager.require(d.url);d.x!==void 0&&d.y!==void 0&&d.width&&d.height?a.drawTexture(f,d.x,d.y,d.width,d.height):a.drawTexture(f,c.x,c.y,c.width,c.height)}a.drawSkeleton(l,n.premultipliedAlpha),Number(a.skeletonDebugRenderer.drawBones=n.debug.bones??!1)+Number(a.skeletonDebugRenderer.drawBoundingBoxes=n.debug.bounds??!1)+Number(a.skeletonDebugRenderer.drawClipping=n.debug.clipping??!1)+Number(a.skeletonDebugRenderer.drawMeshHull=n.debug.hulls??!1)+Number(a.skeletonDebugRenderer.drawPaths=n.debug.paths??!1)+Number(a.skeletonDebugRenderer.drawRegionAttachments=n.debug.regions??!1)+Number(a.skeletonDebugRenderer.drawMeshTriangles=n.debug.meshes??!1)>0&&a.drawSkeletonDebug(l,n.premultipliedAlpha);let m=n.controlBones;if(m.length){let f=this.selectedBones;u.lineWidth(2);for(let g=0;gthis.drawFrame())}stopRendering(){this.stopRequestAnimationFrame=!0}hidePopup(t){return this.popup!=null&&this.popup.hide(t)}showSpeedDialog(t){let e="speed";if(this.hidePopup(e))return;let i=new Ct(e,t,this,this.playerControls,` +
    Speed
    +
    +
    +
    +
    +
    0.1x
    1x
    2x
    +
    +
    `),s=new Ws(2,.1,!0);Xe(i.dom,"spine-player-speed-slider").appendChild(s.create()),s.setValue(this.speed/2),s.change=r=>this.speed=r*2,i.show()}showAnimationsDialog(t){let e="animations";if(this.hidePopup(e)||!this.skeleton||!this.skeleton.data.animations.length)return;let i=new Ct(e,t,this,this.playerControls,'
    Animations

      '),s=Xe(i.dom,"spine-player-list");this.skeleton.data.animations.forEach(r=>{if(this.config.animations&&this.config.animations.indexOf(r.name)<0)return;let h=Ve('
    • ');r.name==this.config.animation&&h.classList.add("selected"),Xe(h,"selectable-text").innerText=r.name,s.appendChild(h),h.onclick=()=>{zs(s.children,"selected"),h.classList.add("selected"),this.config.animation=r.name,this.playTime=0,this.setAnimation(r.name),this.play()}}),i.show()}showSkinsDialog(t){let e="skins";if(this.hidePopup(e)||!this.skeleton||!this.skeleton.data.animations.length)return;let i=new Ct(e,t,this,this.playerControls,'
      Skins

        '),s=Xe(i.dom,"spine-player-list");this.skeleton.data.skins.forEach(r=>{if(this.config.skins&&this.config.skins.indexOf(r.name)<0)return;let h=Ve('
      • ');r.name==this.config.skin&&h.classList.add("selected"),Xe(h,"selectable-text").innerText=r.name,s.appendChild(h),h.onclick=()=>{zs(s.children,"selected"),h.classList.add("selected"),this.config.skin=r.name,this.skeleton.setSkinByName(this.config.skin),this.skeleton.setSlotsToSetupPose()}}),i.show()}showSettingsDialog(t){let e="settings";if(this.hidePopup(e)||!this.skeleton||!this.skeleton.data.animations.length)return;let i=new Ct(e,t,this,this.playerControls,'
        Debug

          '),s=Xe(i.dom,"spine-player-list"),r=(h,l)=>{let n=Ve('
        • '),a=new on(h);n.appendChild(a.create());let o=this.config.debug;a.setEnabled(o[l]),a.change=c=>o[l]=c,s.appendChild(n)};r("Bones","bones"),r("Regions","regions"),r("Meshes","meshes"),r("Bounds","bounds"),r("Paths","paths"),r("Clipping","clipping"),r("Points","points"),r("Hulls","hulls"),i.show()}showError(t,e){if(this.error){if(e)throw e}else{throw this.error=!0,this.dom.appendChild(Ve('
          '+t.replace(` +`,"

          ")+"
          ")),this.config.error&&this.config.error(this,t),e||new Error(t);console.log(e)}}},Ct=class{constructor(t,e,i,s,r){this.id=t,this.button=e,this.player=i,this.dom=Ve('
          '),this.dom.innerHTML=r,s.appendChild(this.dom),this.className="spine-player-button-icon-"+t+"-selected"}dom;className;windowClickListener;dispose(){}hide(t){return this.dom.remove(),this.button.classList.remove(this.className),this.id==t?(this.player.popup=null,!0):!1}show(){this.player.popup=this,this.button.classList.add(this.className),this.dom.classList.remove("spine-player-hidden");let t=!1,e=()=>{t||requestAnimationFrame(e);let r=this.player.dom,h=Math.abs(r.getBoundingClientRect().bottom-r.getBoundingClientRect().bottom),l=Math.abs(r.getBoundingClientRect().right-r.getBoundingClientRect().right);this.dom.style.maxHeight=r.clientHeight-h-l+"px"};requestAnimationFrame(e);let i=!0,s=r=>{if(i||this.player.popup!=this){i=!1;return}this.dom.contains(r.target)||(this.dom.remove(),window.removeEventListener("click",s),this.button.classList.remove(this.className),this.player.popup=null,t=!0)};this.player.addEventListener(window,"click",s)}},on=class{constructor(t){this.text=t}switch=null;enabled=!1;change=()=>{};create(){return this.switch=Ve(` +
          + ${this.text} +
          +
          +
          +
          `),this.switch.addEventListener("click",()=>{this.setEnabled(!this.enabled),this.change&&this.change(this.enabled)}),this.switch}setEnabled(t){t?this.switch?.classList.add("active"):this.switch?.classList.remove("active"),this.enabled=t}isEnabled(){return this.enabled}},Ws=class{constructor(t=0,e=.1,i=!1){this.snaps=t,this.snapPercentage=e,this.big=i}slider=null;value=null;knob=null;change=()=>{};create(){this.slider=Ve(` +
          +
          + +
          `),this.value=Xe(this.slider,"spine-player-slider-value"),this.setValue(0);let t=!1;return new nt(this.slider).addListener({down:(e,i)=>{t=!0,this.value?.classList.add("hovering")},up:(e,i)=>{t=!1,this.change&&this.change(this.setValue(e/this.slider.clientWidth)),this.value?.classList.remove("hovering")},moved:(e,i)=>{t&&this.change&&this.change(this.setValue(e/this.slider.clientWidth))},dragged:(e,i)=>{this.change&&this.change(this.setValue(e/this.slider.clientWidth))}}),this.slider}setValue(t){if(t=Math.max(0,Math.min(1,t)),this.snaps){let e=1/this.snaps,i=t%e;ie-e*this.snapPercentage&&(t=t-i+e),t=Math.max(0,Math.min(1,t))}return this.value.style.width=""+t*100+"%",t}};function Xe(t,e){return t.getElementsByClassName(e)[0]}function Ve(t){let e=document.createElement("div");return e.innerHTML=t,e.children[0]}function zs(t,e){for(let i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}var hn=new V(.478,0,0,.25),cn=new V(1,1,1,1),dn=new V(.478,0,0,.5),un=new V(1,0,0,.8);function fn(t){return new Promise((e,i)=>{const s=document.createElement("script");s.src=t,s.onload=()=>e(),s.onerror=()=>i(new Error(`Script load error for ${t}`)),document.head.appendChild(s)})}function mn(t){return new Promise((e,i)=>{const s=document.createElement("link");s.href=t,s.rel="stylesheet",s.onload=()=>e(),s.onerror=()=>i(new Error(`CSS load error for ${t}`)),document.head.appendChild(s)})}var gn=class rr{constructor(e){this.parent=e,this.load()}static DEFAULT_CODE=` + + diff --git a/src/components/analytics/MicrosoftClarity.astro b/src/components/analytics/MicrosoftClarity.astro new file mode 100644 index 0000000..4c2c793 --- /dev/null +++ b/src/components/analytics/MicrosoftClarity.astro @@ -0,0 +1,15 @@ +--- +interface Props { + clarityId: string; +} + +const { clarityId } = Astro.props; +--- + + \ No newline at end of file diff --git a/src/components/comment/Artalk.astro b/src/components/comment/Artalk.astro new file mode 100644 index 0000000..80efe30 --- /dev/null +++ b/src/components/comment/Artalk.astro @@ -0,0 +1,50 @@ +--- +import { commentConfig, siteConfig } from "@/config"; + +interface Props { + path: string; +} + +const config = { + ...commentConfig.artalk, + el: "#artalk", + site: siteConfig.title, + pageKey: Astro.props.path, + dark: "html.dark", + pageTitle: "", + ...(commentConfig.artalk?.visitorCount ? { pageview: true } : {}), +}; +--- + +
          + +
          + + + + + + +
          \ No newline at end of file diff --git a/src/components/comment/Disqus.astro b/src/components/comment/Disqus.astro new file mode 100644 index 0000000..57b4996 --- /dev/null +++ b/src/components/comment/Disqus.astro @@ -0,0 +1,37 @@ +--- +import { commentConfig } from "@/config"; + +interface Props { + identifier: string; + url: string; + title: string; +} + +const { identifier, url, title } = Astro.props; + +if (!commentConfig || !commentConfig.disqus) { + throw new Error("Disqus comments are not configured"); +} +const shortname = commentConfig.disqus.shortname; +--- + +
          + + +
          + \ No newline at end of file diff --git a/src/components/comment/Giscus.astro b/src/components/comment/Giscus.astro new file mode 100644 index 0000000..ecd98f6 --- /dev/null +++ b/src/components/comment/Giscus.astro @@ -0,0 +1,63 @@ +--- +import { commentConfig } from "@/config"; + +if (!commentConfig || !commentConfig.giscus) { + throw new Error("Giscus comments are not configured"); +} + +const giscus = commentConfig.giscus; +const lightTheme = "light"; +const darkTheme = "dark"; +--- + + + + + + + diff --git a/src/components/comment/Twikoo.astro b/src/components/comment/Twikoo.astro new file mode 100644 index 0000000..a72bdac --- /dev/null +++ b/src/components/comment/Twikoo.astro @@ -0,0 +1,88 @@ +--- +import { commentConfig } from "@/config/commentConfig"; +import { url } from "@/utils/url-utils"; + +interface Props { + path: string; +} + +const config = { + ...commentConfig.twikoo, + el: "#tcomment", + path: Astro.props.path, +}; +--- + +
          + + + diff --git a/src/components/comment/Waline.astro b/src/components/comment/Waline.astro new file mode 100644 index 0000000..a54ea67 --- /dev/null +++ b/src/components/comment/Waline.astro @@ -0,0 +1,25 @@ +--- +import { commentConfig } from "@/config"; + +interface Props { + path: string; +} + +const config = { + ...commentConfig.waline, + el: "#waline", + path: Astro.props.path, + dark: "html.dark", + wordLimit: ["2", "300"], + ...(commentConfig.waline?.visitorCount ? { pageview: true } : {}), +}; +--- + +
          +
          + + +
          \ No newline at end of file diff --git a/src/components/comment/index.astro b/src/components/comment/index.astro new file mode 100644 index 0000000..6f854f7 --- /dev/null +++ b/src/components/comment/index.astro @@ -0,0 +1,70 @@ +--- +import type { CollectionEntry } from "astro:content"; +import { commentConfig } from "@/config/commentConfig"; +import Key from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { removeFileExtension } from "@/utils/url-utils"; +import Artalk from "./Artalk.astro"; +import Disqus from "./Disqus.astro"; +import Giscus from "./Giscus.astro"; +import Twikoo from "./Twikoo.astro"; +import Waline from "./Waline.astro"; + +interface Props { + post: CollectionEntry<"posts"> | CollectionEntry<"spec">; + customPath?: string; +} + +const { post, customPath } = Astro.props; +const { id } = post; + +// 根据页面类型确定路径 +const slug = removeFileExtension(id); +const path = + customPath || (post.collection === "posts" ? `/posts/${slug}` : `/${slug}`); +const url = `${Astro.site?.href}${path}`; + +// 强制commentService类型为string,避免类型不兼容警告 +let commentService: string = commentConfig?.type || "none"; +--- + +{ + commentService !== "none" && ( +
          + +
          + + + + + +
          + +
          +
          +
          +

          {i18n(Key.commentSection)}

          +
          + +
          + +
          + {commentService === "twikoo" && } + {commentService === "waline" && } + {commentService === "giscus" && } + {commentService === "disqus" && } + {commentService === "artalk" && } + {commentService === "none" && ( + + )} +
          +
          + ) +} diff --git a/src/components/common/README.md b/src/components/common/README.md new file mode 100644 index 0000000..ccd624c --- /dev/null +++ b/src/components/common/README.md @@ -0,0 +1,196 @@ +# Common 公共组件 + +位于 `src/components/common/` + +这个文件夹包含项目中通用的、可复用的 UI 组件。 + +## 📁 文件夹结构 + +``` +common/ +├── base/ # 基础 UI 组件 +├── controls/ # 控制交互组件 +└── styles/ # 样式组件 +``` + +## 📦 base/ - 基础 UI 组件 + +基础的 UI 容器和组件,用于构建更复杂的界面。 + +### DropdownPanel (Astro & Svelte) +下拉面板容器组件,提供统一的卡片样式背景。 + +**文件:** +- `DropdownPanel.astro` - Astro 版本 +- `DropdownPanel.svelte` - Svelte 版本 + +**Props:** +- `class?: string` - 可选的额外类名 +- `children?: Snippet` (Svelte only) + +**使用示例:** +```astro +import DropdownPanel from "@/components/common/base/DropdownPanel.astro"; + + + + +``` + +### DropdownItem (Astro & Svelte) +下拉面板选项组件,提供统一的按钮样式。 + +**文件:** +- `DropdownItem.astro` - Astro 版本 +- `DropdownItem.svelte` - Svelte 版本 + +**Props (Astro):** +- `href?: string` - 链接地址 +- `target?: string` - 链接目标 +- `isActive?: boolean` - 是否为激活状态 +- `isLast?: boolean` - 是否为最后一项 +- `class?: string` - 额外类名 +- `onclick?: string` - 点击事件 + +**Props (Svelte):** +- `isActive?: boolean` - 是否为激活状态 +- `isLast?: boolean` - 是否为最后一项 +- `class?: string` - 额外类名 +- `onclick?: (event: MouseEvent) => void` - 点击事件 +- `children?: Snippet` + +**使用场景:** +- WallpaperSwitch.svelte - 壁纸模式切换 +- LightDarkSwitch.svelte - 亮暗色主题切换 +- DropdownMenu.astro - 导航栏下拉菜单 + +## 🎛️ controls/ - 控制交互组件 + +用户交互控制组件,如按钮、分页等。 + +### BackToTop.astro +返回顶部按钮组件。 + +**使用:** +```astro +import BackToTop from "@/components/common/controls/BackToTop.astro"; + + +``` + +### ButtonLink.astro +链接按钮组件,用于分类等场景。 + +**使用:** +```astro +import ButtonLink from "@/components/common/controls/ButtonLink.astro"; + +技术 +``` + +### ButtonTag.astro +标签按钮组件,用于标签展示。 + +**使用:** +```astro +import ButtonTag from "@/components/common/controls/ButtonTag.astro"; + +JavaScript +``` + +### Pagination.astro +静态路由分页组件,用于 Astro 原生分页(文章列表等)。 + +**Props:** +- `page: Page` - Astro 的 Page 对象(由 `paginate()` 生成) +- `class?: string` - 可选的额外类名 +- `style?: string` - 可选的样式 + +**使用:** +```astro +import Pagination from "@/components/common/controls/Pagination.astro"; + + +``` + +**使用场景:** +- `[...page].astro` - 文章列表分页 + +### ClientPagination.astro +客户端 JavaScript 分页组件,用于 DOM 级别的显示/隐藏控制。 + +**Props:** +- `totalItems: number` - 总条目数 +- `itemsPerPage: number` - 每页显示数量 +- `currentPage: number` - 当前页码 +- `sectionId: string` - 分页区域唯一标识 + +**特点:** +- 支持移动端和桌面端不同布局 +- 可以响应筛选器事件(通过 `updatePagination` 自定义事件) +- 支持多个独立的分页区域(通过 `sectionId`) +- 通过 JavaScript 控制 `data-item-section` 元素的显示隐藏 + +**使用:** +```astro +import ClientPagination from "@/components/common/controls/ClientPagination.astro"; + + +``` + +**使用场景:** +- `bangumi.astro` - 番组页面的动态分页 +- 任何需要客户端分页的场景 + +## 🎨 styles/ - 样式组件 + +提供统一样式的组件。 + +### TOCStyles.astro +目录(Table of Contents)的样式组件。 + +**使用:** +```astro +import TOCStyles from "@/components/common/styles/TOCStyles.astro"; + + +``` + +**使用场景:** +- SidebarTOC.astro - 侧边栏目录 +- FloatingTOC.astro - 浮动目录 + +## 📝 样式规范 + +### 下拉面板 +- 容器: `card-base float-panel p-2` +- 最小宽度: `min-w-[12rem]` + +### 下拉选项 +- 基础类: `btn-plain scale-animation rounded-lg h-9 px-3 font-medium active:scale-95` +- 间距: 非最后一项 `mb-0.5` +- 激活: `current-theme-btn` + +### 图标 +- 大小: `text-[1.25rem]` +- 间距: `mr-3` + +## 🔧 技术说明 + +### Astro vs Svelte +- **Astro 组件**: 适用于静态内容,服务端渲染 +- **Svelte 组件**: 适用于需要客户端交互的场景 + +### Svelte 5 新特性 +Base 组件使用 Svelte 5 的 **Snippet** 和 **`{@render}`** 语法: +- `children?: Snippet` - 接收子内容 +- `{@render children()}` - 渲染子内容 +- 完全兼容 Svelte 5 标准 + +## 📚 参考 +- [Svelte 5 迁移指南](https://svelte.dev/docs/svelte/v5-migration-guide) diff --git a/src/components/common/base/DropdownItem.astro b/src/components/common/base/DropdownItem.astro new file mode 100644 index 0000000..98c521a --- /dev/null +++ b/src/components/common/base/DropdownItem.astro @@ -0,0 +1,41 @@ +--- +/** + * 公共下拉面板选项组件 + * 用于下拉面板中的选项项 + */ +interface Props { + href?: string; + target?: string; + isActive?: boolean; + isLast?: boolean; + class?: string; + onclick?: string; +} + +const { + href, + target, + isActive = false, + isLast = false, + class: className, + onclick, +} = Astro.props; + +const baseClasses = + "flex transition whitespace-nowrap items-center !justify-start w-full btn-plain scale-animation rounded-lg h-9 px-3 font-medium active:scale-95"; +const spacingClass = isLast ? "" : "mb-0.5"; +const activeClass = isActive ? "current-theme-btn" : ""; +const allClasses = + `${baseClasses} ${spacingClass} ${activeClass} ${className || ""}`.trim(); + +const Tag = href ? "a" : "button"; +--- + + + + diff --git a/src/components/common/base/DropdownItem.svelte b/src/components/common/base/DropdownItem.svelte new file mode 100644 index 0000000..7e34ab6 --- /dev/null +++ b/src/components/common/base/DropdownItem.svelte @@ -0,0 +1,44 @@ + + + diff --git a/src/components/common/base/DropdownPanel.astro b/src/components/common/base/DropdownPanel.astro new file mode 100644 index 0000000..cbdb7b1 --- /dev/null +++ b/src/components/common/base/DropdownPanel.astro @@ -0,0 +1,15 @@ +--- +/** + * 公共下拉面板组件 + * 用于壁纸切换、亮暗色切换、导航栏菜单等下拉面板 + */ +interface Props { + class?: string; +} + +const { class: className } = Astro.props; +--- + +
          + +
          diff --git a/src/components/common/base/DropdownPanel.svelte b/src/components/common/base/DropdownPanel.svelte new file mode 100644 index 0000000..5f2d0ce --- /dev/null +++ b/src/components/common/base/DropdownPanel.svelte @@ -0,0 +1,20 @@ + + +
          + {#if children} + {@render children()} + {/if} +
          diff --git a/src/components/common/controls/BackToTop.astro b/src/components/common/controls/BackToTop.astro new file mode 100644 index 0000000..ce28450 --- /dev/null +++ b/src/components/common/controls/BackToTop.astro @@ -0,0 +1,223 @@ +--- +import { Icon } from "astro-icon/components"; +--- + + + + + + + diff --git a/src/components/common/controls/ButtonLink.astro b/src/components/common/controls/ButtonLink.astro new file mode 100644 index 0000000..603bec2 --- /dev/null +++ b/src/components/common/controls/ButtonLink.astro @@ -0,0 +1,43 @@ +--- +interface Props { + badge?: string; + url?: string; + label?: string; +} +const { badge, url, label } = Astro.props; +--- + + + diff --git a/src/components/common/controls/ButtonTag.astro b/src/components/common/controls/ButtonTag.astro new file mode 100644 index 0000000..3af7533 --- /dev/null +++ b/src/components/common/controls/ButtonTag.astro @@ -0,0 +1,13 @@ +--- +interface Props { + size?: string; + dot?: boolean; + href?: string; + label?: string; +} +const { dot, href, label }: Props = Astro.props; +--- + + {dot &&
          } + +
          diff --git a/src/components/common/controls/ClientPagination.astro b/src/components/common/controls/ClientPagination.astro new file mode 100644 index 0000000..37e4ddc --- /dev/null +++ b/src/components/common/controls/ClientPagination.astro @@ -0,0 +1,404 @@ +--- +import { Icon } from "astro-icon/components"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; + +interface Props { + totalItems: number; + itemsPerPage: number; + currentPage: number; + sectionId: string; +} + +const { totalItems, itemsPerPage, currentPage, sectionId } = Astro.props; +const totalPages = Math.ceil(totalItems / itemsPerPage); + +// 生成智能分页页码数组 +function generatePageNumbers(current: number, total: number) { + const delta = 2; // 当前页左右显示的页码数量 + const range: number[] = []; + const rangeWithDots: (number | string)[] = []; + + // 如果总页数小于等于7,显示所有页码 + if (total <= 7) { + for (let i = 1; i <= total; i++) { + range.push(i); + } + return range; + } + + // 计算显示范围 + const left = Math.max(2, current - delta); + const right = Math.min(total - 1, current + delta); + + // 始终显示第一页 + rangeWithDots.push(1); + + // 如果左边界大于2,添加省略号 + if (left > 2) { + rangeWithDots.push("..."); + } + + // 添加中间页码 + for (let i = left; i <= right; i++) { + rangeWithDots.push(i); + } + + // 如果右边界小于最后一页-1,添加省略号 + if (right < total - 1) { + rangeWithDots.push("..."); + } + + // 始终显示最后一页(如果总页数大于1) + if (total > 1) { + rangeWithDots.push(total); + } + + return rangeWithDots; +} + +const pageNumbers = generatePageNumbers(currentPage, totalPages); +--- + +{totalPages > 1 && ( +
          + +
          + + + +
          + {currentPage} + / + {totalPages} +
          + + +
          + + +
          + + +
          + {pageNumbers.map((pageItem) => ( + pageItem === '...' ? ( + + ) : ( + + ) + ))} +
          + + +
          +
          +)} + + + + \ No newline at end of file diff --git a/src/components/common/controls/FloatingTOC.astro b/src/components/common/controls/FloatingTOC.astro new file mode 100644 index 0000000..b53dab9 --- /dev/null +++ b/src/components/common/controls/FloatingTOC.astro @@ -0,0 +1,480 @@ +--- +import type { MarkdownHeading } from "astro"; +import { Icon } from "astro-icon/components"; +import TOCStyles from "@/components/common/styles/TOCStyles.astro"; +import { sidebarLayoutConfig } from "@/config/sidebarConfig"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; + +interface Props { + headings: MarkdownHeading[]; +} + +let { headings: _ = [] } = Astro.props; + +// 检查侧边栏目录组件是否启用 +const sidebarTocComponent = sidebarLayoutConfig.rightComponents?.find( + (c) => c.type === "sidebarToc", +); +const isSidebarTocEnabled = sidebarTocComponent?.enable ?? false; +const sidebarPosition = sidebarLayoutConfig.position; +const showRightSidebarOnPostPage = + sidebarLayoutConfig.showRightSidebarOnPostPage; +--- + + +
          +
          + +
          +
          + + +
          +
          +
          +

          + {i18n(I18nKey.tableOfContents)} +

          + +
          +
          + +
          +
          + +
          +
          +
          + + + + + + diff --git a/src/components/common/controls/Pagination.astro b/src/components/common/controls/Pagination.astro new file mode 100644 index 0000000..345cc05 --- /dev/null +++ b/src/components/common/controls/Pagination.astro @@ -0,0 +1,123 @@ +--- +import type { Page } from "astro"; +import { Icon } from "astro-icon/components"; +import { url } from "@/utils/url-utils"; + +interface Props { + page: Page; + class?: string; + style?: string; +} + +const { page, style } = Astro.props; + +const HIDDEN = -1; + +const className = Astro.props.class; + +const ADJ_DIST = 2; +const VISIBLE = ADJ_DIST * 2 + 1; + +// for test +let count = 1; +let l = page.currentPage; +let r = page.currentPage; +while (0 < l - 1 && r + 1 <= page.lastPage && count + 2 <= VISIBLE) { + count += 2; + l--; + r++; +} +while (0 < l - 1 && count < VISIBLE) { + count++; + l--; +} +while (r + 1 <= page.lastPage && count < VISIBLE) { + count++; + r++; +} + +let pages: number[] = []; +if (l > 1) pages.push(1); +if (l === 3) pages.push(2); +if (l > 3) pages.push(HIDDEN); +for (let i = l; i <= r; i++) pages.push(i); +if (r < page.lastPage - 2) pages.push(HIDDEN); +if (r === page.lastPage - 2) pages.push(page.lastPage - 1); +if (r < page.lastPage) pages.push(page.lastPage); + +const getPageUrl = (p: number) => { + if (p === 1) return "/"; + return `/${p}/`; +}; +--- + +
          + + + + +
          + + + +
          + { + pages.map((p) => { + if (p == HIDDEN) + return ; + if (p == page.currentPage) + return ( +
          + {p} +
          + ); + return ( + + {p} + + ); + }) + } +
          + + + +
          +
          diff --git a/src/components/common/styles/TOCStyles.astro b/src/components/common/styles/TOCStyles.astro new file mode 100644 index 0000000..cef4913 --- /dev/null +++ b/src/components/common/styles/TOCStyles.astro @@ -0,0 +1,114 @@ +--- +/** + * TOC 共享样式组件 + * 用于 SidebarTOC 和 FloatingTOC + */ +--- + + diff --git a/src/components/content/PostCard.astro b/src/components/content/PostCard.astro new file mode 100644 index 0000000..6e5b034 --- /dev/null +++ b/src/components/content/PostCard.astro @@ -0,0 +1,259 @@ +--- +import type { CollectionEntry } from "astro:content"; +import { render } from "astro:content"; +import { Icon } from "astro-icon/components"; +import RandomCoverImage from "@/components/misc/RandomCoverImage.astro"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { processCoverImageSync } from "@/utils/image-utils"; +import { getFileDirFromPath, getTagUrl } from "@/utils/url-utils"; +import PostMetadata from "./PostMeta.astro"; + +interface Props { + class?: string; + entry: CollectionEntry<"posts">; + title: string; + url: string; + published: Date; + updated?: Date; + tags: string[]; + category: string | null; + image: string; + description: string; + draft: boolean; + pinned?: boolean; + style: string; +} +const { + entry, + title, + url, + published, + updated, + tags, + category, + image, + description, + pinned, + style, +} = Astro.props; +const className = Astro.props.class; + +// 处理随机图:如果image为"api",则从配置的API获取随机图 +const processedImage = processCoverImageSync(image, entry.id); +const hasCover = + processedImage !== undefined && + processedImage !== null && + processedImage !== ""; + +const coverWidth = "30%"; + +const { remarkPluginFrontmatter } = await render(entry); +--- + +
          + +
          + + + + + {title} + + + + + + + +
          + {description || remarkPluginFrontmatter.excerpt} +
          + + +
          + { + tags && + tags.length > 0 && + tags.map((tag, _i) => ( + + #{tag.trim()} + + )) + } + { + !(tags && tags.length > 0) && ( + + ) + } +
          +
          + + { + hasCover && ( + +
          +
          + +
          + +
          + ) + } + + { + !hasCover && ( + + + + ) + } +
          + + diff --git a/src/components/content/PostMeta.astro b/src/components/content/PostMeta.astro new file mode 100644 index 0000000..6e31d36 --- /dev/null +++ b/src/components/content/PostMeta.astro @@ -0,0 +1,223 @@ +--- +import { Icon } from "astro-icon/components"; +import { commentConfig } from "@/config"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { formatDateToYYYYMMDD } from "@/utils/date-utils"; +import { getCategoryUrl, getTagUrl } from "@/utils/url-utils"; + +export interface Props { + published: Date; + updated?: Date; + category?: string; + tags?: string[]; + hideUpdateDate?: boolean; + hideTagsForMobile?: boolean; + isHome?: boolean; + className?: string; + id?: string; + words?: number; + minutes?: number; + showWordCount?: boolean; // 是否显示字数统计,默认false显示标签 + customPath?: string; + pinned?: boolean; +} + +const { + published, + updated, + category, + tags, + hideUpdateDate, + hideTagsForMobile, + isHome, + className = "", + id, + words, + minutes, + showWordCount = false, + customPath, + pinned, +} = Astro.props; + +const path = customPath || (id ? `/posts/${id}` : ""); +--- + +
          + + { + pinned && ( +
          + + {i18n(I18nKey.pinned)} +
          + ) + } + + +
          +
          + +
          + {formatDateToYYYYMMDD(published)} +
          + + + { + !hideUpdateDate && updated && updated.getTime() !== published.getTime() && ( +
          +
          + +
          + + {formatDateToYYYYMMDD(updated)} + +
          + ) + } + + + + + + { + showWordCount && words !== undefined && minutes !== undefined && ( + <> + +
          +
          + +
          +
          + {words} + {" " + i18n(words === 1 ? I18nKey.wordCount : I18nKey.wordsCount)} +
          +
          + +{/* +
          +
          + +
          +
          + {minutes} + {" " + + i18n(minutes === 1 ? I18nKey.minuteCount : I18nKey.minutesCount)} +
          +
          */} + + ) + } + + + { + !showWordCount && ( +
          +
          + +
          +
          + {(tags && tags.length > 0) && tags.map((tag, i) => ( +
          /
          + + {tag.trim()} + + ))} + {!(tags && tags.length > 0) &&
          {i18n(I18nKey.noTags)}
          } +
          +
          + ) + } + + + { + !isHome && + commentConfig.type === 'twikoo' && + commentConfig.twikoo?.visitorCount && + id && ( +
          +
          + +
          + + {i18n(I18nKey.pageViews)} + + + {i18n(I18nKey.pageViewsLoading)} + +
          + ) + } + + { + !isHome && + commentConfig.type === 'waline' && + commentConfig.waline?.visitorCount && + id && ( +
          +
          + +
          + + {i18n(I18nKey.pageViews)} + + {i18n(I18nKey.pageViewsLoading)} +
          + ) + } + + { + !isHome && + commentConfig.type === 'artalk' && + commentConfig.waline?.visitorCount && + id && ( +
          +
          + +
          + + {i18n(I18nKey.pageViews)} + + {i18n(I18nKey.pageViewsLoading)} +
          + ) + } +
          diff --git a/src/components/content/Profile.astro b/src/components/content/Profile.astro new file mode 100644 index 0000000..e296e03 --- /dev/null +++ b/src/components/content/Profile.astro @@ -0,0 +1,106 @@ +--- +import { Icon } from "astro-icon/components"; +import ImageWrapper from "@/components/misc/ImageWrapper.astro"; +import { profileConfig } from "@/config/profileConfig"; +import { url } from "@/utils/url-utils"; +--- + +
          + +
          + +
          + +
          +
          +
          + {profileConfig.name} +
          +
          +
          +
          + {profileConfig.bio} +
          +
          + {profileConfig.links.length > 1 && profileConfig.links.map(item => + { + const showName = item.showName; + const className = showName + ? "btn-regular rounded-lg h-10 gap-2 px-3 font-bold active:scale-95" + : "btn-regular rounded-lg h-10 w-10 active:scale-90"; + + if (item.url.startsWith("mailto:")) { + const encodedEmail = Buffer.from(item.url.replace("mailto:", "")).toString("base64"); + return + + {showName && item.name} + + } else { + return + + {showName && item.name} + + } + } + )} + {profileConfig.links.length == 1 && (function(item){ + if (item.url.startsWith("mailto:")) { + const encodedEmail = Buffer.from(item.url.replace("mailto:", "")).toString("base64"); + return + + {item.name} + + } else { + return + + {item.name} + + } + })(profileConfig.links[0])} +
          +
          +
          diff --git a/src/components/content/StatCard.astro b/src/components/content/StatCard.astro new file mode 100644 index 0000000..3291a1a --- /dev/null +++ b/src/components/content/StatCard.astro @@ -0,0 +1,171 @@ +--- +export interface Props { + title: string; + value: string | number; + subtitle?: string; + icon?: string; + color?: string; + gradient?: { + from: string; + to: string; + }; + size?: "small" | "medium" | "large"; + trend?: { + value: number; + isPositive: boolean; + label?: string; + }; + link?: { + url: string; + text: string; + }; +} + +const { + title, + value, + subtitle, + icon, + color = "#3B82F6", + gradient, + size = "medium", + trend, + link, +} = Astro.props; + +// 尺寸样式映射 +const getSizeClasses = (size: string) => { + switch (size) { + case "small": + return { + container: "p-3", + value: "text-xl", + title: "text-xs", + subtitle: "text-xs", + icon: "text-lg", + iconContainer: "w-8 h-8", + }; + case "large": + return { + container: "p-6", + value: "text-4xl", + title: "text-base", + subtitle: "text-sm", + icon: "text-2xl", + iconContainer: "w-12 h-12", + }; + default: // medium + return { + container: "p-4", + value: "text-2xl", + title: "text-sm", + subtitle: "text-xs", + icon: "text-xl", + iconContainer: "w-10 h-10", + }; + } +}; + +const sizeClasses = getSizeClasses(size); + +// 生成渐变背景样式 +const getBackgroundStyle = () => { + if (gradient) { + return `background: linear-gradient(135deg, ${gradient.from}, ${gradient.to})`; + } + return `background: linear-gradient(135deg, ${color}15, ${color}25)`; +}; + +// 生成图标容器样式 +const getIconStyle = () => { + return `background-color: ${color}20; color: ${color}`; +}; +--- + +
          +
          + +
          + + {icon && ( +
          + +
          + )} + + + {trend && ( +
          + + + {trend.isPositive ? '+' : ''}{trend.value}% + +
          + )} +
          + + +
          + {value} +
          + + +
          + {title} +
          + + + {subtitle && ( +
          + {subtitle} +
          + )} + + + {trend && trend.label && ( +
          + {trend.label} +
          + )} + + + {link && ( + + )} +
          + + +
          +
          + + + + \ No newline at end of file diff --git a/src/components/content/TypewriterText.astro b/src/components/content/TypewriterText.astro new file mode 100644 index 0000000..1226c44 --- /dev/null +++ b/src/components/content/TypewriterText.astro @@ -0,0 +1,176 @@ +--- +export interface Props { + text: string | string[]; + speed?: number; + deleteSpeed?: number; + pauseTime?: number; + class?: string; +} + +const { + text, + speed = 100, + deleteSpeed = 50, + pauseTime = 2000, + class: className = "", +} = Astro.props; +const textData = Array.isArray(text) ? JSON.stringify(text) : text; +--- + + + + + + diff --git a/src/components/effects/FancyboxManager.astro b/src/components/effects/FancyboxManager.astro new file mode 100644 index 0000000..f84c235 --- /dev/null +++ b/src/components/effects/FancyboxManager.astro @@ -0,0 +1,105 @@ +--- +import "@fancyapps/ui/dist/fancybox/fancybox.css"; +import "@/styles/fancybox-custom.css"; +// Fancybox 管理器组件 +--- + + diff --git a/src/components/effects/KatexManager.astro b/src/components/effects/KatexManager.astro new file mode 100644 index 0000000..2fe9304 --- /dev/null +++ b/src/components/effects/KatexManager.astro @@ -0,0 +1,16 @@ +--- +--- + \ No newline at end of file diff --git a/src/components/effects/SakuraEffect.astro b/src/components/effects/SakuraEffect.astro new file mode 100644 index 0000000..f691b2a --- /dev/null +++ b/src/components/effects/SakuraEffect.astro @@ -0,0 +1,357 @@ +--- +import { sakuraConfig } from "@/config"; + +const config = sakuraConfig; +--- + +{sakuraConfig?.enable && ( + +)} diff --git a/src/components/interactive/ArchivePanel.svelte b/src/components/interactive/ArchivePanel.svelte new file mode 100644 index 0000000..6ced245 --- /dev/null +++ b/src/components/interactive/ArchivePanel.svelte @@ -0,0 +1,156 @@ + + +
          + {#each groups as group} +
          +
          +
          + {group.year} +
          +
          +
          +
          +
          + {group.posts.length} {i18n(group.posts.length === 1 ? I18nKey.postCount : I18nKey.postsCount)} +
          +
          + + {#each group.posts as post} + +
          + +
          + {formatDate(post.data.published)} +
          + + +
          +
          +
          + + +
          + {post.data.title} +
          + + + +
          +
          + {/each} +
          + {/each} +
          \ No newline at end of file diff --git a/src/components/interactive/DisplaySettings.svelte b/src/components/interactive/DisplaySettings.svelte new file mode 100644 index 0000000..3af0943 --- /dev/null +++ b/src/components/interactive/DisplaySettings.svelte @@ -0,0 +1,93 @@ + + +
          +
          +
          + {i18n(I18nKey.themeColor)} + +
          +
          +
          + {hue} +
          +
          +
          +
          + +
          +
          + + + diff --git a/src/components/interactive/FontManager.astro b/src/components/interactive/FontManager.astro new file mode 100644 index 0000000..7b17b4e --- /dev/null +++ b/src/components/interactive/FontManager.astro @@ -0,0 +1,173 @@ +--- +import { siteConfig } from "@/config"; + +const { font: fontConfig } = siteConfig; + +// 获取选中的字体 +const getSelectedFonts = () => { + if (!fontConfig.enable || !fontConfig.selected) return []; + + const selectedIds = Array.isArray(fontConfig.selected) + ? fontConfig.selected + : [fontConfig.selected]; + + return selectedIds + .map((id) => fontConfig.fonts[id]) + .filter((font) => font?.src); // 过滤掉系统字体和不存在的字体 +}; + +const selectedFonts = getSelectedFonts(); + +// 生成字体CSS类名 +const generateFontClasses = () => { + if (!fontConfig.enable) return []; + + const selectedIds = Array.isArray(fontConfig.selected) + ? fontConfig.selected + : [fontConfig.selected]; + + return selectedIds.map((id) => `font-${id}-enabled`); +}; + +const fontClasses = generateFontClasses(); + +// 生成font-family回退样式 +const generateFontFamilyStyle = () => { + if (!fontConfig.enable || !fontConfig.selected) return ""; + + const selectedIds = Array.isArray(fontConfig.selected) + ? fontConfig.selected + : [fontConfig.selected]; + + const selectedFontFamilies = selectedIds + .map((id) => fontConfig.fonts[id]) + .filter((font) => font) + .map((font) => `"${font.family}"`); + + if (selectedFontFamilies.length === 0) return ""; + + const fallbacks = fontConfig.fallback || []; + const allFonts = [...selectedFontFamilies, ...fallbacks]; + + return `font-family: ${allFonts.join(", ")};`; +}; + +const fontFamilyStyle = generateFontFamilyStyle(); +--- + +{ + selectedFonts.map((font) => { + // 判断是否为外部链接 + const isExternalUrl = + font.src.startsWith("http://") || + font.src.startsWith("https://") || + font.src.startsWith("//"); + + if (isExternalUrl) { + // 外部字体链接 (如 Google Fonts, CDN等) + return ; + } else { + // 本地字体文件 + return ( + diff --git a/src/components/interactive/LightDarkSwitch.svelte b/src/components/interactive/LightDarkSwitch.svelte new file mode 100644 index 0000000..45dc13b --- /dev/null +++ b/src/components/interactive/LightDarkSwitch.svelte @@ -0,0 +1,154 @@ + + + \ No newline at end of file diff --git a/src/components/interactive/OverlayWallpaper.astro b/src/components/interactive/OverlayWallpaper.astro new file mode 100644 index 0000000..32bed61 --- /dev/null +++ b/src/components/interactive/OverlayWallpaper.astro @@ -0,0 +1,68 @@ +--- +import { url } from "@/utils/url-utils"; + +interface Props { + config: { + src: { + desktop?: string; + mobile?: string; + }; + position?: string; + zIndex?: number; + opacity?: number; + blur?: number; + }; + className?: string; +} + +const { config, className } = Astro.props; + +// 获取图片源 +const desktopSrc = config.src.desktop || config.src.mobile || ""; +const mobileSrc = config.src.mobile || config.src.desktop || ""; + +// 如果没有任何图片源,不渲染 +if (!desktopSrc && !mobileSrc) { + return null; +} + +// 样式相关 +const position = config.position || "center"; +const zIndex = config.zIndex || -1; +const opacity = config.opacity || 0.8; +const blur = config.blur || 0; +--- + +
          + + {desktopSrc && ( + + )} + + + {mobileSrc && ( +
          + Mobile wallpaper 0 ? ` filter: blur(${blur}px);` : ''}`} + /> +
          + )} +
          + diff --git a/src/components/interactive/Search.svelte b/src/components/interactive/Search.svelte new file mode 100644 index 0000000..a7b8348 --- /dev/null +++ b/src/components/interactive/Search.svelte @@ -0,0 +1,291 @@ + + + + + + + + + + + + + diff --git a/src/components/interactive/WallpaperSwitch.svelte b/src/components/interactive/WallpaperSwitch.svelte new file mode 100644 index 0000000..8509f92 --- /dev/null +++ b/src/components/interactive/WallpaperSwitch.svelte @@ -0,0 +1,71 @@ + + + + diff --git a/src/components/layout/ConfigCarrier.astro b/src/components/layout/ConfigCarrier.astro new file mode 100644 index 0000000..c3096fc --- /dev/null +++ b/src/components/layout/ConfigCarrier.astro @@ -0,0 +1,11 @@ +--- +import { backgroundWallpaper, siteConfig } from "@/config"; +--- + + +
          +
          diff --git a/src/components/layout/DropdownMenu.astro b/src/components/layout/DropdownMenu.astro new file mode 100644 index 0000000..9c0b1ca --- /dev/null +++ b/src/components/layout/DropdownMenu.astro @@ -0,0 +1,201 @@ +--- +import { Icon } from "astro-icon/components"; +import DropdownItem from "@/components/common/base/DropdownItem.astro"; +import DropdownPanel from "@/components/common/base/DropdownPanel.astro"; +import { LinkPresets } from "@/constants/link-presets"; +import { LinkPreset, type NavBarLink } from "@/types/config"; +import { url } from "@/utils/url-utils"; + +interface Props { + link: NavBarLink; + class?: string; +} + +const { link, class: className } = Astro.props; + +// 检查 link 是否存在 +if (!link) { + return null; +} + +// 转换子菜单中的LinkPreset为NavBarLink +const processedLink = { + ...link, + children: link.children + ?.map((child: NavBarLink | LinkPreset): NavBarLink | null => { + if (typeof child === "number") { + // 检查 LinkPreset 是否存在于 LinkPresets 中 + if (child in LinkPresets) { + return LinkPresets[child as LinkPreset]; + } + return null; + } + return child; + }) + .filter((child): child is NavBarLink => child !== null), +}; + +const hasChildren = processedLink.children && processedLink.children.length > 0; +--- + +
          + {hasChildren ? ( + + + ) : ( + +
          + {processedLink.icon && } + {processedLink.name} + {processedLink.external && } +
          +
          + )} +
          + + + + \ No newline at end of file diff --git a/src/components/layout/Footer.astro b/src/components/layout/Footer.astro new file mode 100644 index 0000000..d0d4a3a --- /dev/null +++ b/src/components/layout/Footer.astro @@ -0,0 +1,69 @@ +--- +import fs from "node:fs"; +import path from "node:path"; +import { footerConfig, profileConfig } from "@/config"; +import { url } from "@/utils/url-utils"; + +const currentYear = new Date().getFullYear(); + +// 读取FooterConfig.html文件内容 +let customFooterHtml = ""; +if (footerConfig.enable) { + try { + const footerConfigPath = path.join( + process.cwd(), + "src", + "config", + "FooterConfig.html", + ); + customFooterHtml = fs.readFileSync(footerConfigPath, "utf-8"); + // 移除HTML注释 + customFooterHtml = customFooterHtml.replace(//g, "").trim(); + } catch (error) { + console.warn("FooterConfig.html文件读取失败:", error.message); + } +} +--- + + +
          +
          + +
          +
          + {customFooterHtml &&
          } + © {currentYear} + {profileConfig.name}. All Rights Reserved. / + RSS / + Sitemap
          + Powered by + Astro & + Firefly
          + +
          +
          diff --git a/src/components/layout/GlobalStyles.astro b/src/components/layout/GlobalStyles.astro new file mode 100644 index 0000000..853d812 --- /dev/null +++ b/src/components/layout/GlobalStyles.astro @@ -0,0 +1,3 @@ +--- + +--- diff --git a/src/components/layout/LeftSideBar.astro b/src/components/layout/LeftSideBar.astro new file mode 100644 index 0000000..4e1b3f7 --- /dev/null +++ b/src/components/layout/LeftSideBar.astro @@ -0,0 +1,148 @@ +--- +import type { MarkdownHeading } from "astro"; +import Profile from "@/components/content/Profile.astro"; +import Advertisement from "@/components/widget/Advertisement.astro"; +import Announcement from "@/components/widget/Announcement.astro"; +import Calendar from "@/components/widget/Calendar.astro"; +import Categories from "@/components/widget/Categories.astro"; +import SiteStats from "@/components/widget/SiteStats.astro"; +import Tags from "@/components/widget/Tags.astro"; +import type { WidgetComponentConfig } from "@/types/config"; +import { widgetManager } from "@/utils/widget-manager"; + +interface Props { + class?: string; + headings?: MarkdownHeading[]; +} + +const { class: className, headings: _headings } = Astro.props; + +// 获取左侧边栏的组件列表 +const topComponents = widgetManager.getComponentsByPosition("top", "left"); +const stickyComponents = widgetManager.getComponentsByPosition( + "sticky", + "left", +); + +// 提取客户端需要的数据 +const sidebarConfig = { + shouldShowSidebar: { + mobile: widgetManager.shouldShowSidebar("mobile"), + tablet: widgetManager.shouldShowSidebar("tablet"), + desktop: widgetManager.shouldShowSidebar("desktop"), + }, +}; + +// 组件映射表 +const componentMap = { + profile: Profile, + announcement: Announcement, + categories: Categories, + tags: Tags, + advertisement: Advertisement, + stats: SiteStats, + calendar: Calendar, +}; + +// 渲染组件的辅助函数 +function renderComponent( + component: WidgetComponentConfig, + index: number, + _components: WidgetComponentConfig[], +) { + const ComponentToRender = + componentMap[component.type as keyof typeof componentMap]; + if (!ComponentToRender) return null; + + const componentClass = widgetManager.getComponentClass( + component, + "left", + index, + ); + const componentStyle = widgetManager.getComponentStyle(component, index); + + return { + Component: ComponentToRender, + props: { + class: componentClass, + style: componentStyle, + headings: undefined, + configId: component.configId, + ...component.customProps, + }, + }; +} +--- + + + + + + + diff --git a/src/components/layout/NavMenuPanel.astro b/src/components/layout/NavMenuPanel.astro new file mode 100644 index 0000000..87dc517 --- /dev/null +++ b/src/components/layout/NavMenuPanel.astro @@ -0,0 +1,129 @@ +--- +import Icon from "@/components/misc/Icon.astro"; +import { LinkPresets } from "@/constants/link-presets"; +import { LinkPreset, type NavBarLink } from "@/types/config"; +import { url } from "@/utils/url-utils"; + +interface Props { + links: NavBarLink[]; +} + +// 处理links中的LinkPreset转换 +const processedLinks = Astro.props.links.map((link: NavBarLink) => ({ + ...link, + children: link.children?.map((child: NavBarLink | LinkPreset): NavBarLink => { + if (typeof child === "number") { + return LinkPresets[child]; + } + return child; + }), +})); +--- + + + + + diff --git a/src/components/layout/Navbar.astro b/src/components/layout/Navbar.astro new file mode 100644 index 0000000..c161874 --- /dev/null +++ b/src/components/layout/Navbar.astro @@ -0,0 +1,261 @@ +--- +import { Icon } from "astro-icon/components"; +import DisplaySettings from "@/components/interactive/DisplaySettings.svelte"; +import LayoutSwitchButton from "@/components/interactive/LayoutSwitchButton.svelte"; +import LightDarkSwitch from "@/components/interactive/LightDarkSwitch.svelte"; +import Search from "@/components/interactive/Search.svelte"; +import WallpaperSwitch from "@/components/interactive/WallpaperSwitch.svelte"; +import { + backgroundWallpaper, + navBarConfig, + navBarSearchConfig, + siteConfig, +} from "@/config"; +import { LinkPresets } from "@/constants/link-presets"; +import { + LinkPreset, + type NavBarLink, + NavBarSearchMethod, +} from "@/types/config"; +import { isHomePage } from "@/utils/layout-utils"; +import { url } from "@/utils/url-utils"; +import DropdownMenu from "./DropdownMenu.astro"; +import NavMenuPanel from "./NavMenuPanel.astro"; + +const className = Astro.props.class; + +// 检查是否允许切换壁纸模式 +const isWallpaperSwitchable = backgroundWallpaper.switchable ?? true; + +// 检查是否允许切换布局(双侧栏模式下也允许切换,但切换到网格时会自动隐藏右侧边栏) +const allowLayoutSwitch = siteConfig.postListLayout.allowSwitch; + +// 获取导航栏透明模式配置 +const navbarTransparentMode = + backgroundWallpaper.banner?.navbar?.transparentMode || "semi"; + +// 获取导航栏标题,如果没有设置则使用 siteConfig.title +const navbarTitle = siteConfig.navbar.title || siteConfig.title; + +// 获取导航栏宽度配置 +const navbarWidthFull = siteConfig.navbar.widthFull ?? false; + +// 检查是否为首页 +const isHomePageCheck = isHomePage(Astro.url.pathname); + +let links: NavBarLink[] = navBarConfig.links.map( + (item: NavBarLink | LinkPreset): NavBarLink => { + if (typeof item === "number") { + return LinkPresets[item]; + } + return item; + }, +); +--- + + + + +{ + navBarSearchConfig.method === NavBarSearchMethod.PageFind && import.meta.env.PROD && ( + + ) +} diff --git a/src/components/layout/PostPage.astro b/src/components/layout/PostPage.astro new file mode 100644 index 0000000..7a752af --- /dev/null +++ b/src/components/layout/PostPage.astro @@ -0,0 +1,452 @@ +--- +import type { CollectionEntry } from "astro:content"; +import { getPostUrlBySlug } from "@utils/url-utils"; +import PostCard from "@/components/content/PostCard.astro"; +import { sidebarLayoutConfig, siteConfig } from "@/config"; + +const { page } = Astro.props; + +let delay = 0; +const interval = 50; + +// 类型别名避免Fragment语法问题 +type PostEntry = CollectionEntry<"posts">; + +// 检查是否启用双侧边栏 +const isBothSidebars = sidebarLayoutConfig.position === "both"; +const masonryEnabled = siteConfig.postListLayout.grid.masonry; +const gridColumns = siteConfig.postListLayout.grid.columns || 2; + +// 根据配置设置初始布局模式,避免闪烁 +const defaultLayout = siteConfig.postListLayout.defaultMode || "list"; +const gridCols = + !isBothSidebars && gridColumns === 3 + ? "md:grid-cols-2 lg:grid-cols-3" + : "md:grid-cols-2"; +const initialLayoutClass = + defaultLayout === "grid" + ? `grid grid-cols-1 ${gridCols} gap-4 grid-mode` + : "flex flex-col gap-4 md:gap-4 list-mode"; +--- + +
          + { + page.data.map((entry: PostEntry) => ( + + )) + } +
          + + + + + + + diff --git a/src/components/layout/RightSideBar.astro b/src/components/layout/RightSideBar.astro new file mode 100644 index 0000000..a454dcf --- /dev/null +++ b/src/components/layout/RightSideBar.astro @@ -0,0 +1,201 @@ +--- +import type { MarkdownHeading } from "astro"; +import Profile from "@/components/content/Profile.astro"; +import Advertisement from "@/components/widget/Advertisement.astro"; +import Announcement from "@/components/widget/Announcement.astro"; +import Calendar from "@/components/widget/Calendar.astro"; +import Categories from "@/components/widget/Categories.astro"; +import SidebarTOC from "@/components/widget/SidebarTOC.astro"; +import SiteStats from "@/components/widget/SiteStats.astro"; +import Tags from "@/components/widget/Tags.astro"; +import type { WidgetComponentConfig } from "@/types/config"; +import { widgetManager } from "@/utils/widget-manager"; + +interface Props { + class?: string; + headings?: MarkdownHeading[]; +} + +const { class: className, headings } = Astro.props; + +// 获取右侧边栏的组件列表 +const topComponents = widgetManager.getComponentsByPosition("top", "right"); +const stickyComponents = widgetManager.getComponentsByPosition( + "sticky", + "right", +); + +// 组件类型到ID的映射 +const componentTypeToId = { + stats: "site-stats", + calendar: "calendar-widget", + sidebarToc: "sidebar-toc", + profile: "profile", + announcement: "announcement", + categories: "categories", + tags: "tags", + advertisement: "advertisement", +}; + +// 提取客户端需要的数据 - 包含组件的 showOnPostPage 配置 +const rightComponentsConfig = widgetManager + .getConfig() + .rightComponents.filter((c) => c.enable) + .map((c) => ({ + id: componentTypeToId[c.type as keyof typeof componentTypeToId], + showOnPostPage: c.showOnPostPage ?? true, // 默认为 true + })); + +// 组件映射表 +const componentMap = { + profile: Profile, + announcement: Announcement, + categories: Categories, + tags: Tags, + sidebarToc: SidebarTOC, + advertisement: Advertisement, + stats: SiteStats, + calendar: Calendar, +}; + +// 渲染组件的辅助函数 +function renderComponent( + component: WidgetComponentConfig, + index: number, + _components: WidgetComponentConfig[], +) { + const ComponentToRender = + componentMap[component.type as keyof typeof componentMap]; + if (!ComponentToRender) return null; + + const componentClass = widgetManager.getComponentClass( + component, + "right", + index, + ); + const componentStyle = widgetManager.getComponentStyle(component, index); + + return { + Component: ComponentToRender, + props: { + class: componentClass, + style: componentStyle, + headings: headings ?? [], + configId: component.configId, + showOnPostPage: component.showOnPostPage, + ...component.customProps, + }, + }; +} +--- + + + + + + + diff --git a/src/components/layout/SideBar.astro b/src/components/layout/SideBar.astro new file mode 100644 index 0000000..125ad94 --- /dev/null +++ b/src/components/layout/SideBar.astro @@ -0,0 +1,275 @@ +--- +import type { MarkdownHeading } from "astro"; +import Profile from "@/components/content/Profile.astro"; +import Advertisement from "@/components/widget/Advertisement.astro"; +import Announcement from "@/components/widget/Announcement.astro"; +import Calendar from "@/components/widget/Calendar.astro"; +import Categories from "@/components/widget/Categories.astro"; +import SidebarTOC from "@/components/widget/SidebarTOC.astro"; +import SiteStats from "@/components/widget/SiteStats.astro"; +import Tags from "@/components/widget/Tags.astro"; +import type { WidgetComponentConfig } from "@/types/config"; +import { widgetManager } from "@/utils/widget-manager"; + +interface Props { + class?: string; + headings?: MarkdownHeading[]; +} + +const { class: className, headings } = Astro.props; + +// 获取配置的侧边栏位置 +const sidebarPosition = widgetManager.getConfig().position; +const targetSidebar = sidebarPosition === "left" ? "left" : undefined; + +// 获取配置的组件列表 - 根据 position 配置决定显示哪一侧 +const topComponents = widgetManager.getComponentsByPosition( + "top", + targetSidebar, +); +const stickyComponents = widgetManager.getComponentsByPosition( + "sticky", + targetSidebar, +); + +// 组件类型到ID的映射 +const componentTypeToId = { + stats: "site-stats", + calendar: "calendar-widget", + sidebarToc: "sidebar-toc", + profile: "profile", + announcement: "announcement", + categories: "categories", + tags: "tags", + advertisement: "advertisement", +}; + +// 提取客户端需要的数据 +const sidebarConfig = { + shouldShowSidebar: { + mobile: widgetManager.shouldShowSidebar("mobile"), + tablet: widgetManager.shouldShowSidebar("tablet"), + desktop: widgetManager.shouldShowSidebar("desktop"), + }, + breakpoints: { + mobile: 768, + tablet: 1024, + desktop: 1280, + }, +}; + +// 提取组件的 showOnPostPage 配置 +const componentsConfig = (() => { + const components = + targetSidebar === "left" + ? widgetManager.getConfig().leftComponents + : [ + ...widgetManager.getConfig().leftComponents, + ...widgetManager.getConfig().rightComponents, + ]; + + return components + .filter((c) => c.enable) + .map((c) => ({ + id: componentTypeToId[c.type as keyof typeof componentTypeToId], + showOnPostPage: c.showOnPostPage ?? true, + })); +})(); + +// 组件映射表 +const componentMap = { + profile: Profile, + announcement: Announcement, + categories: Categories, + tags: Tags, + sidebarToc: SidebarTOC, + advertisement: Advertisement, + stats: SiteStats, + calendar: Calendar, +}; + +// 渲染组件的辅助函数 +function renderComponent( + component: WidgetComponentConfig, + index: number, + _components: WidgetComponentConfig[], +) { + const ComponentToRender = + componentMap[component.type as keyof typeof componentMap]; + if (!ComponentToRender) return null; + + // 使用配置的侧边栏位置,如果是 both 则默认为 left + const sidebar = targetSidebar || "left"; + const componentClass = widgetManager.getComponentClass( + component, + sidebar, + index, + ); + const componentStyle = widgetManager.getComponentStyle(component, index); + + return { + Component: ComponentToRender, + props: { + class: componentClass, + style: componentStyle, + headings: headings ?? [], + configId: component.configId, // 传递configId给Advertisement组件 + ...component.customProps, + }, + }; +} +--- + + + + + + + diff --git a/src/components/misc/Icon.astro b/src/components/misc/Icon.astro new file mode 100644 index 0000000..5e2629f --- /dev/null +++ b/src/components/misc/Icon.astro @@ -0,0 +1,105 @@ +--- +// 可靠的图标组件 +// 提供加载状态管理和错误处理 + +export interface Props { + icon: string; + class?: string; + style?: string; + size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xl"; + color?: string; + fallback?: string; // 备用图标或文本 + loading?: "lazy" | "eager"; +} + +const { + icon, + class: className = "", + style = "", + size = "md", + color, + fallback = "●", + loading = "lazy", +} = Astro.props; + +// 尺寸映射 +const sizeClasses = { + xs: "text-xs", + sm: "text-sm", + md: "text-base", + lg: "text-lg", + xl: "text-xl", + "2xl": "text-2xl", +}; + +const sizeClass = sizeClasses[size] || sizeClasses.md; +const colorStyle = color ? `color: ${color};` : ""; +const combinedStyle = `${colorStyle}${style}`; +const combinedClass = `${sizeClass} ${className}`.trim(); + +// 生成唯一ID +const iconId = `icon-${Math.random().toString(36).slice(2, 11)}`; +--- + + + + + {fallback} + + + + + + + \ No newline at end of file diff --git a/src/components/misc/IconifyLoader.astro b/src/components/misc/IconifyLoader.astro new file mode 100644 index 0000000..37d7eba --- /dev/null +++ b/src/components/misc/IconifyLoader.astro @@ -0,0 +1,270 @@ +--- +// 全局Iconify加载器组件 +// 在页面头部加载,确保图标库尽早可用 + +export interface Props { + preloadIcons?: string[]; // 需要预加载的图标列表 + timeout?: number; // 加载超时时间 + retryCount?: number; // 重试次数 +} + +const { preloadIcons = [], timeout = 10000, retryCount = 3 } = Astro.props; +--- + + + + + + \ No newline at end of file diff --git a/src/components/misc/ImageWrapper.astro b/src/components/misc/ImageWrapper.astro new file mode 100644 index 0000000..e746afd --- /dev/null +++ b/src/components/misc/ImageWrapper.astro @@ -0,0 +1,53 @@ +--- +import { Image } from "astro:assets"; +import * as path from "node:path"; +import type { ImageMetadata } from "astro"; +import { url } from "@/utils/url-utils"; + +interface Props { + id?: string; + src: string; + class?: string; + alt?: string; + position?: string; + basePath?: string; +} + +const { id, src, alt, position = "center", basePath = "/" } = Astro.props; +const className = Astro.props.class; + +const isLocal = !( + src.startsWith("/") || + src.startsWith("http") || + src.startsWith("https") || + src.startsWith("data:") +); +const isPublic = src.startsWith("/"); + +// TODO temporary workaround for images dynamic import +// https://github.com/withastro/astro/issues/3373 +let img: ImageMetadata | null = null; +if (isLocal) { + const files = import.meta.glob("../../**", { + import: "default", + }); + let normalizedPath = path + .normalize(path.join("../../", basePath, src)) + .replace(/\\/g, "/"); + const file = files[normalizedPath]; + if (!file) { + console.error( + `\n[ERROR] Image file not found: ${normalizedPath.replace("../../", "src/")}`, + ); + } + img = await file(); +} + +const imageClass = "w-full h-full object-cover"; +const imageStyle = `object-position: ${position}`; +--- +
          +
          + {isLocal && img && {alt} + {!isLocal && {alt} +
          diff --git a/src/components/misc/License.astro b/src/components/misc/License.astro new file mode 100644 index 0000000..9a69174 --- /dev/null +++ b/src/components/misc/License.astro @@ -0,0 +1,70 @@ +--- +import { Icon } from "astro-icon/components"; +import { licenseConfig } from "@/config/licenseConfig"; +import { profileConfig } from "@/config/profileConfig"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { formatDateToYYYYMMDD } from "@/utils/date-utils"; + +interface Props { + title: string; + id: string; + pubDate: Date; + class: string; + author: string; + sourceLink: string; + licenseName: string; + licenseUrl: string; +} + +const { title, pubDate, author, sourceLink, licenseName, licenseUrl } = + Astro.props; +const className = Astro.props.class; +const profileConf = profileConfig; +const licenseConf = licenseConfig; +const postUrl = sourceLink || decodeURIComponent(Astro.url.toString()); +--- + +
          +
          + {title} +
          + + {postUrl} + +
          +
          +
          + {i18n(I18nKey.author)} +
          +
          + {author || profileConf.name} +
          +
          +
          +
          + {i18n(I18nKey.publishedAt)} +
          +
          + {formatDateToYYYYMMDD(pubDate)} +
          +
          +
          +
          + {i18n(I18nKey.license)} +
          + {licenseName || licenseConf.name} +
          +
          + +
          diff --git a/src/components/misc/Markdown.astro b/src/components/misc/Markdown.astro new file mode 100644 index 0000000..c7f9771 --- /dev/null +++ b/src/components/misc/Markdown.astro @@ -0,0 +1,23 @@ +--- +// 只加载基础的等宽字体,减少加载时间 +import "@fontsource-variable/jetbrains-mono"; + +interface Props { + class: string; +} +const className = Astro.props.class; +--- +
          + +
          + + diff --git a/src/components/misc/RandomCoverImage.astro b/src/components/misc/RandomCoverImage.astro new file mode 100644 index 0000000..cdeb9cb --- /dev/null +++ b/src/components/misc/RandomCoverImage.astro @@ -0,0 +1,755 @@ +--- +import { Image } from "astro:assets"; +import * as path from "node:path"; +import { coverImageConfig } from "@/config/coverImageConfig"; +import { generateApiUrls } from "@/utils/image-utils"; +import { url } from "@/utils/url-utils"; + +const { randomCoverImage } = coverImageConfig; + +interface Props { + id?: string; + src: string; + class?: string; + alt?: string; + position?: string; + basePath?: string; + seed?: string; // 用于生成随机图API的种子(文章slug) + preview?: boolean; // 是否是预览模式(文章列表页),true为预览模式(小尺寸),false为详情页(大尺寸) + fallback?: string; // 图片加载失败时的备用图片 +} + +const { + id, + src, + alt, + position = "center", + basePath = "/", + seed, + preview = false, + fallback, +} = Astro.props; +const className = Astro.props.class; + +const isLocal = !( + src.startsWith("/") || + src.startsWith("http") || + src.startsWith("https") || + src.startsWith("data:") +); +const isPublic = src.startsWith("/"); + +// 检查是否是随机图API(包含query参数v=) +const isRandomApiImage = + (src.startsWith("http://") || src.startsWith("https://")) && + src.includes("?v="); + +// TODO temporary workaround for images dynamic import +// https://github.com/withastro/astro/issues/3373 +let img: ImageMetadata | null = null; +if (isLocal) { + const files = import.meta.glob("../../**", { + import: "default", + }); + let normalizedPath = path + .normalize(path.join("../../", basePath, src)) + .replace(/\\/g, "/"); + const file = files[normalizedPath]; + if (!file) { + console.error( + `\n[ERROR] Image file not found: ${normalizedPath.replace("../../", "src/")}`, + ); + img = null; // 设置为 null 而不是继续调用 + } else { + img = await file(); + } +} +// 如果是随机图API,生成所有API URL列表用于客户端重试 +let allApiUrls: string[] = []; +if ( + isRandomApiImage && + randomCoverImage.enable && + randomCoverImage.apis && + randomCoverImage.apis.length > 0 +) { + allApiUrls = generateApiUrls(seed); +} + +// 确定fallback图片路径 +let fallbackSrc = ""; +if (isRandomApiImage) { + if (randomCoverImage.enable) { + fallbackSrc = fallback || randomCoverImage.fallback || ""; + } +} else { + fallbackSrc = fallback || ""; +} + +// 处理fallback URL +const getFallbackUrl = (src: string): string => { + if (!src) return ""; + if (src.startsWith("http://") || src.startsWith("https://")) { + return src; + } + if (src.startsWith("/")) { + return url(src); + } + return url(`/${src}`); +}; + +// 图片样式 +const imageClass = "w-full h-full object-cover"; +const imageStyle = `object-position: ${position || "center"}; image-rendering: -webkit-optimize-contrast;`; + +// 水印配置 +const watermark = randomCoverImage.watermark; +const showWatermark = + isRandomApiImage && randomCoverImage.enable && watermark?.enable; + +// 生成水印位置样式和类名 +const getWatermarkStyles = ( + pos?: string, +): { classes: string; styles: string } => { + const position = pos || "bottom-right"; + let classes = ""; + let styles = ""; + + switch (position) { + case "top-left": + classes = "top-2 left-2"; + break; + case "top-right": + classes = "top-2 right-2"; + break; + case "bottom-left": + classes = "top-2 left-2 md:top-auto md:bottom-2 md:left-2"; + break; + case "bottom-right": + classes = "top-2 right-2 md:top-auto md:bottom-2 md:right-2"; + break; + case "center": + classes = "top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"; + break; + default: + classes = "top-2 right-2 md:top-auto md:bottom-2 md:right-2"; + } + + styles = `padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: ${watermark?.fontSize || "0.75rem"}; color: ${watermark?.color || "#ffffff"}; background-color: ${watermark?.backgroundColor || "rgba(0, 0, 0, 0.4)"}; opacity: ${watermark?.opacity || 0.6}; pointer-events: none; z-index: 10; white-space: nowrap; user-select: none;`; + + return { classes, styles }; +}; + +const watermarkStyles = showWatermark + ? getWatermarkStyles(watermark?.position) + : { classes: "", styles: "" }; +--- + +
          + + {randomCoverImage.enable && randomCoverImage.loading?.enable !== false && ( +
          + Loading... +
          + )} + + + {isLocal && img && ( + {alt 0 && img.naturalHeight > 0) { + setTimeout(function() { + const container = img.parentElement; + if (container) { + const loadingIndicator = container.querySelector('.image-loading-indicator'); + if (loadingIndicator) { + loadingIndicator.style.setProperty('opacity', '0', 'important'); + loadingIndicator.style.setProperty('transition', 'opacity 0.3s ease-out', 'important'); + setTimeout(function() { + loadingIndicator.style.setProperty('display', 'none', 'important'); + loadingIndicator.classList.add('hidden'); + }, 300); + } + } + }, 800); + } + })(this);`} + /> + )} + + + {!isLocal && ( + {alt 0 ? JSON.stringify(allApiUrls) : ""} + data-fallback={fallbackSrc ? getFallbackUrl(fallbackSrc) : ""} + data-api-index={allApiUrls.length > 0 ? "0" : ""} + data-enable={isRandomApiImage ? (randomCoverImage.enable ? "true" : "false") : ""} + data-need-check-fallback="true" + onloadstart={`(function(img){ + const container = img.parentElement; + if (container) { + const loadingIndicator = container.querySelector('.image-loading-indicator'); + if (loadingIndicator) { + loadingIndicator.classList.remove('hidden'); + loadingIndicator.style.removeProperty('opacity'); + loadingIndicator.style.removeProperty('display'); + } + } + })(this);`} + onload={`(function(img){ + if (img.naturalWidth > 0 && img.naturalHeight > 0) { + setTimeout(function() { + const container = img.parentElement; + if (container) { + const loadingIndicator = container.querySelector('.image-loading-indicator'); + if (loadingIndicator) { + loadingIndicator.style.setProperty('opacity', '0', 'important'); + loadingIndicator.style.setProperty('transition', 'opacity 0.3s ease-out', 'important'); + setTimeout(function() { + loadingIndicator.style.setProperty('display', 'none', 'important'); + loadingIndicator.classList.add('hidden'); + }, 300); + } + const watermarkEl = container.querySelector('[data-watermark]'); + if (watermarkEl && watermarkEl.getAttribute('data-watermark-visible') !== 'true') { + watermarkEl.setAttribute('data-watermark-visible', 'true'); + watermarkEl.classList.remove('opacity-0'); + watermarkEl.classList.add('opacity-100'); + const originalOpacity = watermarkEl.getAttribute('data-original-opacity') || '0.6'; + watermarkEl.style.opacity = originalOpacity; + } + } + }, 800); + } + })(this);`} + onerror={`(function(img){ + try { + const apiUrls = img.dataset.apiUrls ? JSON.parse(img.dataset.apiUrls) : []; + let currentIndex = parseInt(img.dataset.apiIndex || '0'); + const isEnabled = img.dataset.enable !== 'false'; + const fallbackUrl = img.dataset.fallback; + + if (apiUrls.length > 0 && currentIndex < apiUrls.length - 1) { + currentIndex = currentIndex + 1; + img.dataset.apiIndex = currentIndex.toString(); + img.src = apiUrls[currentIndex]; + } + else if (isEnabled && fallbackUrl && fallbackUrl.length > 0) { + const seed = img.dataset.seed; + if (seed) { + try { + localStorage.setItem('api_image_failed_' + seed, 'true'); + } catch (e) {} + } + const container = img.parentElement; + if (container) { + const watermarkEl = container.querySelector('[data-watermark]'); + if (watermarkEl) { + watermarkEl.textContent = 'Image API Error'; + watermarkEl.setAttribute('data-error', 'true'); + } + } + img.onerror = null; + img.src = fallbackUrl; + img.addEventListener('load', function() { + if (img.naturalWidth > 0 && img.naturalHeight > 0) { + const container = img.parentElement; + if (container) { + const loadingIndicator = container.querySelector('.image-loading-indicator'); + if (loadingIndicator) { + loadingIndicator.style.opacity = '0'; + setTimeout(function() { + loadingIndicator.style.display = 'none'; + }, 300); + } + const watermarkEl = container.querySelector('[data-watermark]'); + if (watermarkEl && watermarkEl.getAttribute('data-watermark-visible') !== 'true') { + watermarkEl.setAttribute('data-watermark-visible', 'true'); + watermarkEl.classList.remove('opacity-0'); + watermarkEl.classList.add('opacity-100'); + const originalOpacity = watermarkEl.getAttribute('data-original-opacity') || '0.6'; + watermarkEl.style.opacity = originalOpacity; + watermarkEl.style.setProperty('opacity', originalOpacity, 'important'); + } + } + } + }, { once: true }); + } + else { + img.onerror = null; + img.style.display = 'none'; + const container = img.parentElement; + if (container) { + const loadingIndicator = container.querySelector('.image-loading-indicator'); + if (loadingIndicator) { + loadingIndicator.style.opacity = '0'; + setTimeout(function() { + loadingIndicator.style.display = 'none'; + }, 300); + } + } + } + } catch(e) { + const isEnabled = img.dataset.enable !== 'false'; + const fallbackUrl = img.dataset.fallback; + const seed = img.dataset.seed; + if (isEnabled && fallbackUrl && fallbackUrl.length > 0) { + if (seed) { + try { + localStorage.setItem('api_image_failed_' + seed, 'true'); + } catch (e) {} + } + const container = img.parentElement; + if (container) { + const watermarkEl = container.querySelector('[data-watermark]'); + if (watermarkEl) { + watermarkEl.textContent = 'Image API Error'; + watermarkEl.setAttribute('data-error', 'true'); + } + } + img.onerror = null; + img.src = fallbackUrl; + } else { + img.onerror = null; + img.style.display = 'none'; + const container = img.parentElement; + if (container) { + const loadingIndicator = container.querySelector('.image-loading-indicator'); + if (loadingIndicator) { + loadingIndicator.style.opacity = '0'; + setTimeout(function() { + loadingIndicator.style.display = 'none'; + }, 300); + } + } + } + } + })(this);`} + /> + )} + + {showWatermark && ( +
          + {watermark?.text || "Random Cover"} +
          + )} +
          + + + + \ No newline at end of file diff --git a/src/components/misc/SharePoster.svelte b/src/components/misc/SharePoster.svelte new file mode 100644 index 0000000..d9fc679 --- /dev/null +++ b/src/components/misc/SharePoster.svelte @@ -0,0 +1,536 @@ + + + + + + + + +{#if showModal} + + +
          +
          + +
          + {#if posterImage} + Poster + {:else} +
          +
          + {i18n(I18nKey.generatingPoster)} +
          + {/if} +
          + +
          + + +
          +
          +
          +{/if} diff --git a/src/components/pages/AdvancedSearch.svelte b/src/components/pages/AdvancedSearch.svelte new file mode 100644 index 0000000..f60ca76 --- /dev/null +++ b/src/components/pages/AdvancedSearch.svelte @@ -0,0 +1,191 @@ + + +
          + +
          +
          +
          + +
          +

          + {title} +

          +
          + {#if description} +

          + {description} +

          + {/if} +
          + + +
          +
          +
          + +
          + +
          +
          +
          + +
          + +
          + {#if isSearching} +
          + +
          + {:else if results.length > 0} +
          + {#each results as result} + + {/each} +
          + {:else if keyword} +
          + {i18n(I18nKey.searchNoResults)} +
          + {:else} +
          + {i18n(I18nKey.searchTypeSomething)} +
          + {/if} +
          +
          + + \ No newline at end of file diff --git a/src/components/pages/bangumi/BangumiSection.astro b/src/components/pages/bangumi/BangumiSection.astro new file mode 100644 index 0000000..4c6bb73 --- /dev/null +++ b/src/components/pages/bangumi/BangumiSection.astro @@ -0,0 +1,149 @@ +--- +import ClientPagination from "@/components/common/controls/ClientPagination.astro"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import type { UserSubjectCollection } from "@/types/bangumi"; +import Card from "./Card.astro"; +import FilterControls from "./FilterControls.astro"; + +interface Props { + sectionId: string; + items: UserSubjectCollection[]; + isActive: boolean; + itemsPerPage?: number; +} + +const { sectionId, items, isActive, itemsPerPage = 12 } = Astro.props; + +// 状态映射 +const statusMap = { + 1: "wish", + 2: "collect", + 3: "doing", + 4: "on_hold", + 5: "dropped", +}; + +// Get status filters with counts +const statusCounts = items.reduce( + (acc, item) => { + const status = statusMap[item.type as keyof typeof statusMap] || "unknown"; + acc[status] = (acc[status] || 0) + 1; + return acc; + }, + {} as Record, +); + +const isGame = sectionId === "game"; +const isBook = sectionId === "book"; +const isMusic = sectionId === "music"; + +const getFilterLabel = (type: "collect" | "doing" | "wish") => { + if (isGame) { + switch (type) { + case "collect": + return i18n(I18nKey.bangumiFilterGamePlayed); + case "doing": + return i18n(I18nKey.bangumiFilterGamePlaying); + case "wish": + return i18n(I18nKey.bangumiFilterGameWish); + } + } + if (isBook) { + switch (type) { + case "collect": + return i18n(I18nKey.bangumiFilterBookRead); + case "doing": + return i18n(I18nKey.bangumiFilterBookReading); + case "wish": + return i18n(I18nKey.bangumiFilterBookWish); + } + } + if (isMusic) { + switch (type) { + case "collect": + return i18n(I18nKey.bangumiFilterMusicListened); + case "doing": + return i18n(I18nKey.bangumiFilterMusicListening); + case "wish": + return i18n(I18nKey.bangumiFilterMusicWish); + } + } + // Default (Anime/Real) + switch (type) { + case "collect": + return i18n(I18nKey.bangumiFilterWatched); + case "doing": + return i18n(I18nKey.bangumiFilterWatching); + case "wish": + return i18n(I18nKey.bangumiFilterWish); + } +}; + +const filters = [ + { value: "all", label: i18n(I18nKey.bangumiFilterAll), count: items.length }, + { + value: "collect", + label: getFilterLabel("collect"), + count: statusCounts.collect || 0, + }, + { + value: "doing", + label: getFilterLabel("doing"), + count: statusCounts.doing || 0, + }, + { + value: "wish", + label: getFilterLabel("wish"), + count: statusCounts.wish || 0, + }, + { + value: "on_hold", + label: i18n(I18nKey.bangumiFilterOnHold), + count: statusCounts.on_hold || 0, + }, + { + value: "dropped", + label: i18n(I18nKey.bangumiFilterDropped), + count: statusCounts.dropped || 0, + }, +].filter((filter) => filter.value === "all" || filter.count > 0); + +const defaultFilter = "all"; // 默认显示全部,用户可以通过筛选器选择 +--- + +
          + {items.length > 0 ? ( + <> + + +
          + {items.map((item) => ( +
          + +
          + ))} +
          + + + + ) : ( +
          +

          {i18n(I18nKey.bangumiNoData)}

          +

          {i18n(I18nKey.bangumiNoDataDescription)}

          +
          + )} +
          \ No newline at end of file diff --git a/src/components/pages/bangumi/Card.astro b/src/components/pages/bangumi/Card.astro new file mode 100644 index 0000000..fd0cb76 --- /dev/null +++ b/src/components/pages/bangumi/Card.astro @@ -0,0 +1,135 @@ +--- +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import type { UserSubjectCollection } from "@/types/bangumi"; + +interface Props { + item: UserSubjectCollection; +} + +const { item } = Astro.props; + +const subject_base_url = "https://bgm.tv/subject/"; + +const getStatusColor = (type: number) => { + switch (type) { + case 1: + return "bg-blue-500"; + case 2: + return "bg-green-500"; + case 3: + return "bg-yellow-500"; + case 4: + return "bg-orange-500"; + case 5: + return "bg-red-500"; + default: + return "bg-gray-500"; + } +}; + +const getStatusText = (type: number) => { + const subjectType = item.subject.type; + // 1: Book, 2: Anime, 3: Music, 4: Game, 6: Real + + switch (type) { + case 1: // Wish + if (subjectType === 1) return i18n(I18nKey.bangumiStatusBookWish); + if (subjectType === 3) return i18n(I18nKey.bangumiStatusMusicWish); + if (subjectType === 4) return i18n(I18nKey.bangumiStatusGameWish); + return i18n(I18nKey.bangumiStatusWish); + case 2: // Collect (Played/Watched/Read/Listened) + if (subjectType === 1) return i18n(I18nKey.bangumiStatusBookRead); + if (subjectType === 3) return i18n(I18nKey.bangumiStatusMusicListened); + if (subjectType === 4) return i18n(I18nKey.bangumiStatusGamePlayed); + return i18n(I18nKey.bangumiStatusWatched); + case 3: // Doing (Playing/Watching/Reading/Listening) + if (subjectType === 1) return i18n(I18nKey.bangumiStatusBookReading); + if (subjectType === 3) return i18n(I18nKey.bangumiStatusMusicListening); + if (subjectType === 4) return i18n(I18nKey.bangumiStatusGamePlaying); + return i18n(I18nKey.bangumiStatusWatching); + case 4: + return i18n(I18nKey.bangumiStatusOnHold); + case 5: + return i18n(I18nKey.bangumiStatusDropped); + default: + return i18n(I18nKey.bangumiStatusUnknown); + } +}; + +// 获取标签:优先用户标签,否则使用条目标签 +const displayTags = + item.tags && item.tags.length > 0 + ? item.tags + : (item.subject.tags || []).map((t) => t.name).slice(0, 5); +--- + + +
          + {item.subject?.images?.medium ? ( + {item.subject.name_cn + ) : ( +
          +
          📖
          +
          + )} + + +
          + {getStatusText(item.type)} +
          +
          + + +
          +

          + {item.subject.name_cn || item.subject.name} +

          + + {(item.subject.score || item.comment) && ( +
          + {item.subject.score && ( +
          +
          + {item.subject.score} +
          + )} + + {item.comment && ( +
          +
          💬
          +
          + {item.comment} +
          +
          + )} +
          + )} + + + {displayTags && displayTags.length > 0 && ( +
          + {displayTags.slice(0, 5).map((tag: string) => ( + + {tag} + + ))} + {displayTags.length > 5 && ( + + +{displayTags.length - 5} + + )} +
          + )} +
          +
          \ No newline at end of file diff --git a/src/components/pages/bangumi/FilterControls.astro b/src/components/pages/bangumi/FilterControls.astro new file mode 100644 index 0000000..e6ab5df --- /dev/null +++ b/src/components/pages/bangumi/FilterControls.astro @@ -0,0 +1,97 @@ +--- +interface Filter { + value: string; + label: string; + count?: number; +} + +interface Props { + filters: Filter[]; + activeFilter: string; + sectionId: string; +} + +const { filters, activeFilter, sectionId } = Astro.props; +--- + +
          + {filters.map((filter) => ( + + ))} +
          + + \ No newline at end of file diff --git a/src/components/pages/bangumi/TabNav.astro b/src/components/pages/bangumi/TabNav.astro new file mode 100644 index 0000000..669f252 --- /dev/null +++ b/src/components/pages/bangumi/TabNav.astro @@ -0,0 +1,79 @@ +--- +interface Tab { + id: string; + name: string; + count?: number; +} + +interface Props { + tabs: Tab[]; + activeTab: string; +} + +const { tabs, activeTab } = Astro.props; +--- + +
          + +
          + + \ No newline at end of file diff --git a/src/components/widget/Advertisement.astro b/src/components/widget/Advertisement.astro new file mode 100644 index 0000000..d519872 --- /dev/null +++ b/src/components/widget/Advertisement.astro @@ -0,0 +1,376 @@ +--- +import { adConfig1, adConfig2 } from "@/config/adConfig"; +import type { AdConfig } from "@/types/config"; +import { url } from "@/utils/url-utils"; + +export interface Props { + class?: string; + configId?: string; +} + +const { class: className = "", configId } = Astro.props as Props; + +// 根据configId选择对应的广告配置 +const getAdConfig = (id?: string): AdConfig => { + switch (id) { + case "ad1": + return adConfig1; + case "ad2": + return adConfig2; + default: + return adConfig1; // 默认配置 + } +}; + +const currentAdConfig = getAdConfig(configId); + +// 检查广告是否过期 +const isExpired = currentAdConfig.expireDate + ? new Date() > new Date(currentAdConfig.expireDate) + : false; + +// 如果过期则不显示 +if (isExpired) { + return null; +} + +// 处理自定义边距 +const getPaddingStyle = () => { + if (!currentAdConfig.padding) return "p-4"; // 默认边距 + + if (currentAdConfig.padding.all !== undefined) { + // 统一边距 + return currentAdConfig.padding.all === "0" ? "p-0" : ""; + } + + // 单独边距 + const { top, right, bottom, left } = currentAdConfig.padding; + return ( + [ + top !== undefined ? `pt-[${top}]` : "", + right !== undefined ? `pr-[${right}]` : "", + bottom !== undefined ? `pb-[${bottom}]` : "", + left !== undefined ? `pl-[${left}]` : "", + ] + .filter(Boolean) + .join(" ") || "p-4" + ); +}; + +const paddingClass = getPaddingStyle(); +--- + +
          + + { + currentAdConfig.closable && ( + + ) + } + + +
          + + { + currentAdConfig.title && ( +

          + {currentAdConfig.title} +

          + ) + } + + + { + currentAdConfig.image && ( +
          + {currentAdConfig.image.link ? ( + + {currentAdConfig.image.alt + + ) : ( + {currentAdConfig.image.alt + )} +
          + ) + } + + + { + currentAdConfig.content && ( +

          + {currentAdConfig.content} +

          + ) + } + + + { + currentAdConfig.link && ( + + ) + } +
          +
          + + + + diff --git a/src/components/widget/Announcement.astro b/src/components/widget/Announcement.astro new file mode 100644 index 0000000..27fbb0c --- /dev/null +++ b/src/components/widget/Announcement.astro @@ -0,0 +1,89 @@ +--- +import { Icon } from "astro-icon/components"; +import { announcementConfig } from "@/config/announcementConfig"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import WidgetLayout from "./WidgetLayout.astro"; + +const config = announcementConfig; + +interface Props { + class?: string; + style?: string; +} +const className = Astro.props.class; +const style = Astro.props.style; +--- + + + +
          + +
          + {config.content} +
          + + +
          +
          + { + config.link && config.link.enable !== false && ( + + {config.link.text} + + ) + } +
          + + { + config.closable && ( + + ) + } +
          +
          +
          + + diff --git a/src/components/widget/Calendar.astro b/src/components/widget/Calendar.astro new file mode 100644 index 0000000..e02a5d0 --- /dev/null +++ b/src/components/widget/Calendar.astro @@ -0,0 +1,496 @@ +--- +import { Icon } from "astro-icon/components"; +import { siteConfig } from "@/config/siteConfig"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { url } from "@/utils/url-utils"; +import WidgetLayout from "./WidgetLayout.astro"; + +interface Props { + class?: string; + style?: string; +} + +const { class: className, style } = Astro.props; + +// 月份名称(使用 i18n) +const monthNames = [ + i18n(I18nKey.calendarJanuary), + i18n(I18nKey.calendarFebruary), + i18n(I18nKey.calendarMarch), + i18n(I18nKey.calendarApril), + i18n(I18nKey.calendarMay), + i18n(I18nKey.calendarJune), + i18n(I18nKey.calendarJuly), + i18n(I18nKey.calendarAugust), + i18n(I18nKey.calendarSeptember), + i18n(I18nKey.calendarOctober), + i18n(I18nKey.calendarNovember), + i18n(I18nKey.calendarDecember), +]; + +// 星期名称(简写,使用 i18n) +const weekDays = [ + i18n(I18nKey.calendarSunday), + i18n(I18nKey.calendarMonday), + i18n(I18nKey.calendarTuesday), + i18n(I18nKey.calendarWednesday), + i18n(I18nKey.calendarThursday), + i18n(I18nKey.calendarFriday), + i18n(I18nKey.calendarSaturday), +]; + +// 年份文本 +const yearText = i18n(I18nKey.year); + +// 获取当前语言 +const currentLang = siteConfig.lang || "en"; + +const calendarDataUrl = url("/api/calendar.json"); +const postUrlPrefix = url("/posts/"); +--- + +.widget-title]:hidden " + className} style={style}> +
          +
          + +
          +
          + + +
          +
          + + +
          + +
          + {weekDays.map(day => ( +
          + {day} +
          + ))} +
          + + +
          + +
          +
          + + + + + + + + +
          + +
          + +
          +
          +
          +
          + + + + diff --git a/src/components/widget/Categories.astro b/src/components/widget/Categories.astro new file mode 100644 index 0000000..fa0c7f6 --- /dev/null +++ b/src/components/widget/Categories.astro @@ -0,0 +1,43 @@ +--- +import ButtonLink from "@/components/common/controls/ButtonLink.astro"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { getCategoryList } from "@/utils/content-utils"; +import { widgetManager } from "@/utils/widget-manager"; +import WidgetLayout from "./WidgetLayout.astro"; + +const categories = await getCategoryList(); + +const COLLAPSED_HEIGHT = "7.5rem"; + +// 使用统一的组件管理器检查是否应该折叠 +const allComponents = [ + ...widgetManager.getConfig().leftComponents, + ...widgetManager.getConfig().rightComponents, +]; +const categoriesComponent = allComponents.find((c) => c.type === "categories"); +const isCollapsed = categoriesComponent + ? widgetManager.isCollapsed(categoriesComponent, categories.length) + : false; + +interface Props { + class?: string; + style?: string; +} +const className = Astro.props.class; +const style = Astro.props.style; +--- + + + {categories.map((c) => + + {c.name.trim()} + + )} + \ No newline at end of file diff --git a/src/components/widget/Live2DWidget.astro b/src/components/widget/Live2DWidget.astro new file mode 100644 index 0000000..84585e4 --- /dev/null +++ b/src/components/widget/Live2DWidget.astro @@ -0,0 +1,453 @@ +--- +import type { Live2DModelConfig } from "@/types/config"; +import { url } from "@/utils/url-utils"; +import MessageBox from "./PioMessageBox.astro"; + +interface Props { + config: Live2DModelConfig; +} + +const { config } = Astro.props; + +// 获取位置和尺寸配置 +const position = config.position || { + corner: "bottom-right" as const, + offsetX: 20, + offsetY: 20, +}; +const size = config.size || { width: 280, height: 250 }; +--- + +
          + +
          + + + + + + + diff --git a/src/components/widget/MusicPlayer.astro b/src/components/widget/MusicPlayer.astro new file mode 100644 index 0000000..2dedc29 --- /dev/null +++ b/src/components/widget/MusicPlayer.astro @@ -0,0 +1,547 @@ +--- +import { musicPlayerConfig } from "@/config/musicConfig"; +import { url } from "@/utils/url-utils"; + +const config = musicPlayerConfig; + +// 预先生成本地资源路径,确保在非根目录部署时也能正确加载 +const aplayerCssPath = url("/assets/css/APlayer.min.css"); +const aplayerCustomCssPath = url("/assets/css/APlayer.custom.css"); +const aplayerJsPath = url("/assets/js/APlayer.min.js"); + +// MetingJS 路径处理 +// 如果配置的是相对路径(以 / 开头),使用 url() 处理以确保非根目录部署时正确 +// 如果是完整的 URL(http/https),直接使用 +const metingJsPath = config.meting?.jsPath + ? config.meting.jsPath.startsWith("http://") || + config.meting.jsPath.startsWith("https://") + ? config.meting.jsPath + : url(config.meting.jsPath) + : "https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"; // 默认 CDN 路径 + +// 预处理本地音乐列表的路径(如果使用本地模式) +const processedLocalPlaylist = + config.mode === "local" && config.local?.playlist + ? config.local.playlist.map((song) => { + // 辅助函数:判断是否为完整 URL + const isFullUrl = (path: string): boolean => { + return /^https?:\/\//.test(path); + }; + + return { + ...song, + // 仅对相对路径使用 url() 处理,完整 URL 直接使用 + url: isFullUrl(song.url) ? song.url : url(song.url), + cover: song.cover + ? isFullUrl(song.cover) + ? song.cover + : url(song.cover) + : undefined, + }; + }) + : null; +--- + +{config.enable && ( + <> + + + + + +
          + {config.mode === "meting" && config.meting ? ( + + + ) : config.mode === "local" && processedLocalPlaylist && processedLocalPlaylist.length > 0 ? ( + +
          + ) : null} +
          + +)} + + + + + diff --git a/src/components/widget/PioMessageBox.astro b/src/components/widget/PioMessageBox.astro new file mode 100644 index 0000000..a6d1d73 --- /dev/null +++ b/src/components/widget/PioMessageBox.astro @@ -0,0 +1,309 @@ +--- +// 消息框公共组件 +// 用于Live2D和Spine模型的消息显示 +--- + + diff --git a/src/components/widget/SidebarTOC.astro b/src/components/widget/SidebarTOC.astro new file mode 100644 index 0000000..a4005ef --- /dev/null +++ b/src/components/widget/SidebarTOC.astro @@ -0,0 +1,122 @@ +--- +import type { MarkdownHeading } from "astro"; +import TOCStyles from "@/components/common/styles/TOCStyles.astro"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import WidgetLayout from "./WidgetLayout.astro"; + +interface Props { + headings: MarkdownHeading[]; + class?: string; + style?: string; +} + +const { headings: _headings = [], class: className, style } = Astro.props; +--- + + +
          + +
          +
          + + + + + + diff --git a/src/components/widget/SiteStats.astro b/src/components/widget/SiteStats.astro new file mode 100644 index 0000000..bb2fc58 --- /dev/null +++ b/src/components/widget/SiteStats.astro @@ -0,0 +1,180 @@ +--- +import { Icon } from "astro-icon/components"; +import { siteConfig } from "@/config"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { + getCategoryList, + getSortedPosts, + getTagList, +} from "@/utils/content-utils"; +import WidgetLayout from "./WidgetLayout.astro"; + +interface Props { + class?: string; + style?: string; +} + +const { class: className, style } = Astro.props; + +// 从配置中获取站点开始日期 +const siteStartDate = siteConfig.siteStartDate || "2025-01-01"; + +// 获取所有文章 +const posts = await getSortedPosts(); +const categories = await getCategoryList(); +const tags = await getTagList(); + +// 计算总字数 +let totalWords = 0; +for (const post of posts) { + if (post.body) { + // 移除 Markdown 空白字符后计算字数 + const text = post.body + .replace(/\s+/g, " ") // 合并空白 + .trim(); + + // 分别计算中文字符和英文单词 + const chineseChars = text.match(/[\u4e00-\u9fa5]/g) || []; + const englishWords = text.match(/[a-zA-Z]+/g) || []; + + totalWords += chineseChars.length + englishWords.length; + } +} + +// 格式化数字(添加千位分隔符) +function formatNumber(num: number): string { + return num.toLocaleString(); +} + +// 获取最新文章日期(用于客户端计算) +const latestPost = posts.reduce((latest, post) => { + if (!latest) return post; + return post.data.published > latest.data.published ? post : latest; +}, posts[0]); + +const lastPostDate = latestPost + ? latestPost.data.published.toISOString() + : null; + +const todayText = i18n(I18nKey.today); + +const stats = [ + { + icon: "material-symbols:article-outline", + label: i18n(I18nKey.siteStatsPostCount), + value: posts.length, + }, + { + icon: "material-symbols:folder-outline", + label: i18n(I18nKey.siteStatsCategoryCount), + value: categories.length, + }, + { + icon: "material-symbols:label-outline", + label: i18n(I18nKey.siteStatsTagCount), + value: tags.length, + }, + { + icon: "material-symbols:text-ad-outline-rounded", + label: i18n(I18nKey.siteStatsTotalWords), + value: totalWords, + formatted: true, + }, + { + icon: "material-symbols:calendar-clock-outline", + label: i18n(I18nKey.siteStatsRunningDays), + value: 0, // 将由客户端更新 + suffix: i18n(I18nKey.siteStatsDays).replace("{days}", ""), + dynamic: true, + id: "running-days", + }, + { + icon: "material-symbols:ecg-heart-outline", + label: i18n(I18nKey.siteStatsLastUpdate), + value: 0, // 将由客户端更新 + suffix: i18n(I18nKey.siteStatsDaysAgo).replace("{days}", ""), + dynamic: true, + id: "last-update", + }, +]; +--- + + +
          + {stats.map((stat) => ( +
          +
          +
          + +
          + + {stat.label} + +
          +
          + + {stat.formatted ? formatNumber(stat.value) : stat.value} + + {stat.suffix && ( + + {stat.suffix} + + )} +
          +
          + ))} +
          +
          + + diff --git a/src/components/widget/SpineModel.astro b/src/components/widget/SpineModel.astro new file mode 100644 index 0000000..227cea6 --- /dev/null +++ b/src/components/widget/SpineModel.astro @@ -0,0 +1,399 @@ +--- +import { spineModelConfig } from "@/config/pioConfig"; +import { url } from "@/utils/url-utils"; +import MessageBox from "./PioMessageBox.astro"; +--- + +{ + spineModelConfig.enable && ( +
          +
          + + ) +} + + + + + diff --git a/src/components/widget/Tags.astro b/src/components/widget/Tags.astro new file mode 100644 index 0000000..4ec7d98 --- /dev/null +++ b/src/components/widget/Tags.astro @@ -0,0 +1,40 @@ +--- + +import ButtonTag from "@/components/common/controls/ButtonTag.astro"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import { getTagList } from "@/utils/content-utils"; +import { getTagUrl } from "@/utils/url-utils"; +import { widgetManager } from "@/utils/widget-manager"; +import WidgetLayout from "./WidgetLayout.astro"; + +const tags = await getTagList(); + +const COLLAPSED_HEIGHT = "7.5rem"; + +// 使用统一的组件管理器检查是否应该折叠 +const allComponents = [ + ...widgetManager.getConfig().leftComponents, + ...widgetManager.getConfig().rightComponents, +]; +const tagsComponent = allComponents.find((c) => c.type === "tags"); +const isCollapsed = tagsComponent + ? widgetManager.isCollapsed(tagsComponent, tags.length) + : false; + +interface Props { + class?: string; + style?: string; +} +const className = Astro.props.class; +const style = Astro.props.style; +--- + +
          + {tags.map(t => ( + + {t.name.trim()} + + ))} +
          +
          \ No newline at end of file diff --git a/src/components/widget/WidgetLayout.astro b/src/components/widget/WidgetLayout.astro new file mode 100644 index 0000000..02f57e6 --- /dev/null +++ b/src/components/widget/WidgetLayout.astro @@ -0,0 +1,63 @@ +--- +import { Icon } from "astro-icon/components"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; + +interface Props { + id: string; + name?: string; + isCollapsed?: boolean; + collapsedHeight?: string; + class?: string; + style?: string; +} +const { id, name, isCollapsed, collapsedHeight, style } = Astro.props; +const className = Astro.props.class; +--- + +
          + {name} + +
          +
          + +
          + {isCollapsed &&
          + +
          } +
          + + + + diff --git a/src/config/FooterConfig.html b/src/config/FooterConfig.html new file mode 100644 index 0000000..f434d90 --- /dev/null +++ b/src/config/FooterConfig.html @@ -0,0 +1 @@ +这里是HTML注入示例,你可以在这个文件中添加自定义的HTML内容 diff --git a/src/config/README.md b/src/config/README.md new file mode 100644 index 0000000..471a077 --- /dev/null +++ b/src/config/README.md @@ -0,0 +1,66 @@ +# 配置文件说明 + +本目录包含 Firefly 主题的所有配置文件,采用模块化设计,每个文件负责特定的功能模块。 + +## 📁 配置文件结构 + +``` +src/config/ +├── index.ts # 配置索引文件 - 统一导出 +├── siteConfig.ts # 站点基础配置 +├── backgroundWallpaper.ts # 背景壁纸配置 +├── profileConfig.ts # 用户资料配置 +├── musicConfig.ts # 音乐播放器配置 +├── sakuraConfig.ts # 樱花特效配置 +├── commentConfig.ts # 评论系统配置 +├── announcementConfig.ts # 公告配置 +├── licenseConfig.ts # 许可证配置 +├── footerConfig.ts # 页脚配置 +├── expressiveCodeConfig.ts # 代码高亮配置 +├── fontConfig.ts # 字体配置 +├── sidebarConfig.ts # 侧边栏配置 +├── navBarConfig.ts # 导航栏配置 +├── pioConfig.ts # Pio 模型配置 +├── adConfig.ts # 广告配置 +├── friendsConfig.ts # 友链配置 +├── sponsorConfig.ts # 赞助配置 +├── coverImageConfig.ts # 封面图配置 +└── README.md # 本文件 +``` + +## 🚀 使用方式 + +### 推荐:使用配置索引(统一导入) +```typescript +import { siteConfig, profileConfig } from '../config'; +``` + +### 直接导入单个配置 +```typescript +import { siteConfig } from '../config/siteConfig'; +import { profileConfig } from '../config/profileConfig'; +``` + +## 📋 配置文件列表 + +- `siteConfig.ts` - 站点基础配置(标题、描述、主题色等) +- `backgroundWallpaper.ts` - 背景壁纸配置(壁纸模式、图片、横幅文字等) +- `profileConfig.ts` - 用户资料配置(头像、姓名、社交链接等) +- `musicConfig.ts` - 音乐播放器配置(支持本地音乐和 Meting API) +- `sakuraConfig.ts` - 樱花特效配置(数量、速度、尺寸等) +- `commentConfig.ts` - 评论系统配置(Twikoo 评论和文章访问量统计) +- `announcementConfig.ts` - 公告配置(标题、内容、链接等) +- `licenseConfig.ts` - 许可证配置(CC 协议等) +- `footerConfig.ts` - 页脚配置(HTML 注入等) +- `expressiveCodeConfig.ts` - 代码高亮配置(主题等) +- `fontConfig.ts` - 字体配置(字体族、大小等) +- `sidebarConfig.ts` - 侧边栏配置(组件布局等) +- `navBarConfig.ts` - 导航栏配置(链接、样式等) +- `pioConfig.ts` - Pio 模型配置(Spine、Live2D 等) +- `adConfig.ts` - 广告配置(广告位设置等) +- `friendsConfig.ts` - 友链配置(友链列表等) +- `sponsorConfig.ts` - 赞助配置(赞助方式、二维码等) +- `coverImageConfig.ts` - 封面图配置(随机封面图列表等) + + +``` diff --git a/src/config/adConfig.ts b/src/config/adConfig.ts new file mode 100644 index 0000000..eff9a6c --- /dev/null +++ b/src/config/adConfig.ts @@ -0,0 +1,63 @@ +import type { AdConfig } from "../types/config"; + +// 这里只是配置广告内容,如果要开关请在sidebarConfig.ts中控制侧边栏组件的的启用组件即可 + +// 广告配置1 - 纯图片广告(无边距) +export const adConfig1: AdConfig = { + image: { + src: "/assets/images/d1.webp", + alt: "广告横幅", + link: "#", + external: true, + }, + + // 是否允许关闭广告 + closable: true, + + // 显示次数限制,-1为无限制 + displayCount: -1, + + // 组件内边距配置,可通过取消注释生效 + padding: { + // 零边距,图片占满整个组件 + all: "0", + + // 四边1rem边距 + // all: "1rem", + + // 顶部无边距 + // top: "0", + + // 右侧无边距 + // right: "1rem", + + // 底部无边距 + // bottom: "1rem", + + // 左侧无边距 + // left: "1rem", + }, +}; + +// 广告配置2 - 完整内容广告 +export const adConfig2: AdConfig = { + title: "支持博主", + content: + "如果您觉得本站内容对您有帮助,欢迎支持我们的创作!您的支持是我们持续更新的动力。", + image: { + src: "/assets/images/d2.webp", + alt: "支持博主", + link: "about/", + external: false, + }, + link: { + text: "支持一下", + url: "about/", + external: false, + }, + closable: true, + displayCount: -1, + padding: { + // all: "1rem", + }, +}; diff --git a/src/config/announcementConfig.ts b/src/config/announcementConfig.ts new file mode 100644 index 0000000..0932a88 --- /dev/null +++ b/src/config/announcementConfig.ts @@ -0,0 +1,23 @@ +import type { AnnouncementConfig } from "../types/config"; + +export const announcementConfig: AnnouncementConfig = { + // 公告标题 + title: "公告", + + // 公告内容 + content: "欢迎来到我的博客!这是一则示例公告。", + + // 是否允许用户关闭公告 + closable: true, + + link: { + // 启用链接 + enable: true, + // 链接文本 + text: "了解更多", + // 链接 URL + url: "/about/", + // 内部链接 + external: false, + }, +}; diff --git a/src/config/backgroundWallpaper.ts b/src/config/backgroundWallpaper.ts new file mode 100644 index 0000000..a7e253c --- /dev/null +++ b/src/config/backgroundWallpaper.ts @@ -0,0 +1,110 @@ +import type { BackgroundWallpaperConfig } from "@/types/config"; + +export const backgroundWallpaper: BackgroundWallpaperConfig = { + // 壁纸模式:"banner" 横幅壁纸,"overlay" 全屏透明,"none" 纯色背景无壁纸 + mode: "banner", + // 是否允许用户通过导航栏切换壁纸模式,设为false可提升性能(只渲染当前模式) + switchable: true, + // 背景图片配置 + src: { + // 桌面背景图片 + desktop: "/assets/images/d1.webp", + // 移动背景图片 + mobile: "/assets/images/m1.webp", + }, + // Banner模式特有配置 + banner: { + // 图片位置 + // 支持所有CSS object-position值,如: 'top', 'center', 'bottom', 'left top', 'right bottom', '25% 75%', '10px 20px'.. + // 如果不知道怎么配置百分百之类的配置,推荐直接使用:'center'居中,'top'顶部居中,'bottom' 底部居中,'left'左侧居中,'right'右侧居中 + position: "0% 20%", + + // 主页横幅文字 + homeText: { + // 是否启用主页横幅文字 + enable: true, + // 主页横幅主标题 + title: "Lovely firefly!", + // 主页横幅主标题字体大小 + titleSize: "3.8rem", + // 主页横幅副标题 + subtitle: [ + "In Reddened Chrysalis, I Once Rest", + "From Shattered Sky, I Free Fall", + "Amidst Silenced Stars, I Deep Sleep", + "Upon Lighted Fyrefly, I Soon Gaze", + "From Undreamt Night, I Thence Shine", + "In Finalized Morrow, I Full Bloom", + ], + // 主页横幅副标题字体大小 + subtitleSize: "1.5rem", + typewriter: { + // 是否启用打字机效果 + // 打字机开启 → 循环显示所有副标题 + // 打字机关闭 → 每次刷新随机显示一条副标题 + enable: true, + // 打字速度(毫秒) + speed: 100, + // 删除速度(毫秒) + deleteSpeed: 50, + // 完全显示后的暂停时间(毫秒) + pauseTime: 2000, + }, + }, + // 图片来源 + credit: { + enable: { + // 桌面端显示横幅图片来源文本 + desktop: true, + // 移动端显示横幅图片来源文本 + mobile: true, + }, + text: { + // 桌面端要显示的来源文本 + desktop: "Pixiv - 晚晚喵", + // 移动端要显示的来源文本 + mobile: "Pixiv - KiraraShss", + }, + url: { + // 桌面端原始艺术品或艺术家页面的 URL 链接 + desktop: "https://www.pixiv.net/artworks/135490046", + // 移动端原始艺术品或艺术家页面的 URL 链接 + mobile: "https://www.pixiv.net/users/42715864", + }, + }, + // 横幅导航栏配置 + navbar: { + // 横幅导航栏透明模式:"semi" 半透明加圆角,"full" 完全透明,"semifull" 动态透明 + transparentMode: "semifull", + }, + // 波浪动画效果配置,开启可能会影响页面性能,请根据实际情况开启 + waves: { + enable: { + // 桌面端是否启用波浪动画效果 + desktop: true, + // 移动端是否启用波浪动画效果 + mobile: true, + }, + performance: { + // 性能优化说明: + // quality: "high" - 最佳视觉效果,但GPU占用较高,适合高性能设备 + // quality: "medium" - 平衡性能和质量,适合中等性能设备 + // quality: "low" - 最低GPU占用,动画更简单,适合低性能设备 + // hardwareAcceleration: true - 启用GPU加速,提升性能但增加GPU占用 + // hardwareAcceleration: false - 禁用GPU加速,降低GPU占用但可能影响性能 + quality: "high", + // 是否启用硬件加速 + hardwareAcceleration: true, + }, + }, + }, + // 全屏透明覆盖模式特有配置 + overlay: { + // 层级,确保壁纸在背景层 + zIndex: -1, + // 壁纸透明度 + opacity: 0.8, + // 背景模糊程度 + blur: 1, + }, +}; diff --git a/src/config/commentConfig.ts b/src/config/commentConfig.ts new file mode 100644 index 0000000..da2e858 --- /dev/null +++ b/src/config/commentConfig.ts @@ -0,0 +1,72 @@ +import type { CommentConfig } from "../types/config"; + +export const commentConfig: CommentConfig = { + // 评论系统类型: none, twikoo, waline, giscus, disqus, artalk,默认为none,即不启用评论系统 + type: "none", + + //twikoo评论系统配置 + twikoo: { + envId: "https://twikoo.vercel.app", + // 设置 Twikoo 评论系统语言 + lang: "zh-CN", + // 是否启用文章访问量统计功能 + visitorCount: true, + }, + + //waline评论系统配置 + waline: { + // waline 后端服务地址 + serverURL: "https://waline.vercel.app", + // 设置 Waline 评论系统语言 + lang: "zh-CN", + // 评论登录模式。可选值如下: + // 'enable' —— 默认,允许访客匿名评论和用第三方 OAuth 登录评论,兼容性最佳。 + // 'force' —— 强制必须登录后才能评论,适合严格社区,关闭匿名评论。 + // 'disable' —— 禁止所有登录和 OAuth,仅允许匿名评论(填写昵称/邮箱),适用于极简留言。 + login: "enable", + // 是否启用文章访问量统计功能 + visitorCount: true, + }, + + // artalk评论系统配置 + artalk: { + // artalk后端程序 API 地址 + server: "https://artalk.example.com/", + // 设置 Artalk 语言 + locale: "zh-CN", + // 是否启用文章访问量统计功能 + visitorCount: true, + }, + + //giscus评论系统配置 + giscus: { + // 设置 Giscus 评论系统仓库 + repo: "CuteLeaf/Firefly", + // 设置 Giscus 评论系统仓库ID + repoId: "R_kgD2gfdFGd", + // 设置 Giscus 评论系统分类 + category: "General", + // 获取 Giscus 评论系统分类ID + categoryId: "DIC_kwDOKy9HOc4CegmW", + // 获取 Giscus 评论系统映射方式 + mapping: "title", + // 获取 Giscus 评论系统严格模式 + strict: "0", + // 获取 Giscus 评论系统反应功能 + reactionsEnabled: "1", + // 获取 Giscus 评论系统元数据功能 + emitMetadata: "1", + // 获取 Giscus 评论系统输入位置 + inputPosition: "top", + // 获取 Giscus 评论系统语言 + lang: "zh-CN", + // 获取 Giscus 评论系统加载方式 + loading: "lazy", + }, + + //disqus评论系统配置 + disqus: { + // 获取 Disqus 评论系统 + shortname: "firefly", + }, +}; diff --git a/src/config/coverImageConfig.ts b/src/config/coverImageConfig.ts new file mode 100644 index 0000000..a78f78b --- /dev/null +++ b/src/config/coverImageConfig.ts @@ -0,0 +1,79 @@ +import type { CoverImageConfig } from "../types/config"; + +/** + * 文章封面图配置 + * + * enableInPost - 是否在文章详情页显示封面图 + * + * 随机封面图使用说明: + * 1. 在文章的 Frontmatter 中添加 image: "api" 即可使用随机图功能 + * 2. 系统会依次尝试所有配置的 API,全部失败后使用备用图片 + * 3. 如果 enable 为 false,则直接不显示封面图(也不会显示备用图) + * + * // 文章 Frontmatter 示例: + * --- + * title: 文章标题 + * image: "api" + * --- + */ +export const coverImageConfig: CoverImageConfig = { + // 是否在文章详情页显示封面图 + enableInPost: true, + + randomCoverImage: { + // 随机封面图功能开关 + enable: true, + // 封面图API列表 + apis: [ + "https://t.alcy.cc/pc", + "https://www.dmoe.cc/random.php", + "https://uapis.cn/api/v1/random/image?category=acg&type=pc", + ], + // 备用图片路径 + fallback: "/assets/images/cover.webp", + + /** + * 加载指示器配置 + * - 自定义加载图片和背景色,用于在图片加载过程中显示 + * - 如果不配置,将使用默认的 loading.gif 和 #fefefe 背景色 + */ + loading: { + // 加载指示器开关 + enable: false, + // 自定义加载图片路径(相对于 public 目录) + image: "/assets/images/loading.gif", + // 加载指示器背景颜色,应与加载图片的背景色一致,避免在暗色模式下显得突兀 + backgroundColor: "#fefefe", + }, + + /** + * 水印配置 + * - 仅在随机图API成功加载时显示水印 + * - 当使用备用图片时,水印文字会自动更新为 "Image API Error" + * - 移动端会自动调整位置(bottom位置会显示在top,避免被裁剪) + */ + watermark: { + // 水印开关 + enable: true, + // 水印文本 + text: "Random Cover", + /** + * 水印位置 + * - "top-left": 左上角 + * - "top-right": 右上角 + * - "bottom-left": 左下角(移动端显示在左上角,桌面端显示在左下角) + * - "bottom-right": 右下角(移动端显示在右上角,桌面端显示在右下角) + * - "center": 居中 + */ + position: "bottom-right", + // 水印透明度 + opacity: 0.6, + // 字体大小 + fontSize: "0.75rem", + // 字体颜色 + color: "#ffffff", + // 背景颜色 + backgroundColor: "rgba(0, 0, 0, 0.5)", + }, + }, +}; diff --git a/src/config/expressiveCodeConfig.ts b/src/config/expressiveCodeConfig.ts new file mode 100644 index 0000000..65dbfd2 --- /dev/null +++ b/src/config/expressiveCodeConfig.ts @@ -0,0 +1,12 @@ +import type { ExpressiveCodeConfig } from "../types/config"; + +export const expressiveCodeConfig: ExpressiveCodeConfig = { + // 暗色主题(用于暗色模式) + darkTheme: "one-dark-pro", + + // 亮色主题(用于亮色模式) + lightTheme: "one-light", + + // 更多样式请看expressive-code的官方文档 + // https://expressive-code.com/guides/themes/ +}; diff --git a/src/config/fontConfig.ts b/src/config/fontConfig.ts new file mode 100644 index 0000000..e84e206 --- /dev/null +++ b/src/config/fontConfig.ts @@ -0,0 +1,69 @@ +// 字体配置 +export const fontConfig = { + // 是否启用自定义字体功能 + enable: true, + // 是否预加载字体文件 + preload: true, + // 当前选择的字体,支持多个字体组合 + selected: ["system"], + + // 字体列表 + fonts: { + // 系统字体 + system: { + id: "system", + name: "系统字体", + src: "", // 系统字体无需 src + family: + "system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif", + }, + + // Google Fonts - Zen Maru Gothic + "zen-maru-gothic": { + id: "zen-maru-gothic", + name: "Zen Maru Gothic", + src: "https://fonts.googleapis.com/css2?family=Zen+Maru+Gothic:wght@300;400;500;700;900&display=swap", + family: "Zen Maru Gothic", + display: "swap" as const, + }, + + // Google Fonts - Inter + inter: { + id: "inter", + name: "Inter", + src: "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap", + family: "Inter", + display: "swap" as const, + }, + + // 小米字体 - MiSans Normal + "misans-normal": { + id: "misans-normal", + name: "MiSans Normal", + src: "https://unpkg.com/misans@4.1.0/lib/Normal/MiSans-Normal.min.css", + family: "MiSans", + weight: 400, + display: "swap" as const, + }, + + // 小米字体 - MiSans Semibold + "misans-semibold": { + id: "misans-semibold", + name: "MiSans Semibold", + src: "https://unpkg.com/misans@4.1.0/lib/Normal/MiSans-Semibold.min.css", + family: "MiSans", + weight: 600, + display: "swap" as const, + }, + }, + + // 全局字体回退 + fallback: [ + "system-ui", + "-apple-system", + "BlinkMacSystemFont", + "Segoe UI", + "Roboto", + "sans-serif", + ], +}; diff --git a/src/config/footerConfig.ts b/src/config/footerConfig.ts new file mode 100644 index 0000000..1ebf2ce --- /dev/null +++ b/src/config/footerConfig.ts @@ -0,0 +1,8 @@ +import type { FooterConfig } from "../types/config"; + +export const footerConfig: FooterConfig = { + // 是否启用Footer HTML注入功能 + enable: false, +}; + +// 直接编辑 config/FooterConfig.html 文件来添加备案号等自定义内容 diff --git a/src/config/friendsConfig.ts b/src/config/friendsConfig.ts new file mode 100644 index 0000000..c691149 --- /dev/null +++ b/src/config/friendsConfig.ts @@ -0,0 +1,47 @@ +import type { FriendLink, FriendsPageConfig } from "../types/config"; + +// 可以在src/content/spec/friends.md中编写友链页面下方的自定义内容 + +// 友链页面配置 +export const friendsPageConfig: FriendsPageConfig = { + // 显示列数:2列或3列 + columns: 2, +}; + +// 友链配置 +export const friendsConfig: FriendLink[] = [ + { + title: "夏夜流萤", + imgurl: "https://q1.qlogo.cn/g?b=qq&nk=7618557&s=640", + desc: "飞萤之火自无梦的长夜亮起,绽放在终竟的明天。", + siteurl: "https://blog.cuteleaf.cn", + tags: ["Blog"], + weight: 10, // 权重,数字越大排序越靠前 + enabled: true, // 是否启用 + }, + { + title: "Firefly Docs", + imgurl: "https://docs-firefly.cuteleaf.cn/logo.png", + desc: "Firefly主题模板文档", + siteurl: "https://docs-firefly.cuteleaf.cn", + tags: ["Docs"], + weight: 9, + enabled: true, + }, + { + title: "Astro", + imgurl: "https://avatars.githubusercontent.com/u/44914786?v=4&s=640", + desc: "The web framework for content-driven websites. ⭐️ Star to support our work!", + siteurl: "https://github.com/withastro/astro", + tags: ["Framework"], + weight: 8, + enabled: true, + }, +]; + +// 获取启用的友链并按权重排序 +export const getEnabledFriends = (): FriendLink[] => { + return friendsConfig + .filter((friend) => friend.enabled) + .sort((a, b) => b.weight - a.weight); +}; diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..ac55e15 --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,47 @@ +// 配置索引文件 - 统一导出所有配置 +// 这样组件可以一次性导入多个相关配置,减少重复的导入语句 + +// 类型导出 +export type { + AnnouncementConfig, + BackgroundWallpaperConfig, + CommentConfig, + CoverImageConfig, + ExpressiveCodeConfig, + FooterConfig, + LicenseConfig, + MusicPlayerConfig, + NavBarConfig, + ProfileConfig, + SakuraConfig, + SidebarLayoutConfig, + SiteConfig, + SponsorConfig, + SponsorItem, + SponsorMethod, + WidgetComponentConfig, + WidgetComponentType, +} from "../types/config"; +export { adConfig1, adConfig2 } from "./adConfig"; // 广告配置 +export { announcementConfig } from "./announcementConfig"; // 公告配置 +// 样式配置 +export { backgroundWallpaper } from "./backgroundWallpaper"; // 背景壁纸配置 +// 功能配置 +export { commentConfig } from "./commentConfig"; // 评论系统配置 +export { coverImageConfig } from "./coverImageConfig"; // 封面图配置 +export { expressiveCodeConfig } from "./expressiveCodeConfig"; // 代码高亮配置 +export { fontConfig } from "./fontConfig"; // 字体配置 +export { footerConfig } from "./footerConfig"; // 页脚配置 +export { friendsPageConfig, getEnabledFriends } from "./friendsConfig"; // 友链配置 +export { licenseConfig } from "./licenseConfig"; // 许可证配置 +// 组件配置 +export { musicPlayerConfig } from "./musicConfig"; // 音乐播放器配置 +export { navBarConfig, navBarSearchConfig } from "./navBarConfig"; // 导航栏配置与搜索配置 +export { live2dModelConfig, spineModelConfig } from "./pioConfig"; // 看板娘配置 +export { profileConfig } from "./profileConfig"; // 用户资料配置 +export { sakuraConfig } from "./sakuraConfig"; // 樱花特效配置 +// 布局配置 +export { sidebarLayoutConfig } from "./sidebarConfig"; // 侧边栏布局配置 +// 核心配置 +export { siteConfig } from "./siteConfig"; // 站点基础配置 +export { sponsorConfig } from "./sponsorConfig"; // 赞助配置 diff --git a/src/config/licenseConfig.ts b/src/config/licenseConfig.ts new file mode 100644 index 0000000..900bc7e --- /dev/null +++ b/src/config/licenseConfig.ts @@ -0,0 +1,10 @@ +import type { LicenseConfig } from "../types/config"; + +export const licenseConfig: LicenseConfig = { + // 是否启用文章顶部许可证信息显示 + enable: true, + + // 许可证名称及链接 + name: "CC BY-NC-SA 4.0", + url: "https://creativecommons.org/licenses/by-nc-sa/4.0/", +}; diff --git a/src/config/musicConfig.ts b/src/config/musicConfig.ts new file mode 100644 index 0000000..124d3de --- /dev/null +++ b/src/config/musicConfig.ts @@ -0,0 +1,89 @@ +import type { MusicPlayerConfig } from "../types/config"; + +// 音乐播放器配置 +export const musicPlayerConfig: MusicPlayerConfig = { + // 音乐播放器功能开关 + enable: true, + + // 使用方式:"meting" 使用 Meting API,"local" 使用本地音乐列表 + mode: "meting", + + // Meting API 配置 + meting: { + // Meting API 地址 + // 默认使用官方 API,也可以使用自定义 API + api: "https://api.i-meto.com/meting/api?server=:server&type=:type&id=:id&r=:r", + // 音乐平台:netease=网易云音乐, tencent=QQ音乐, kugou=酷狗音乐, xiami=虾米音乐, baidu=百度音乐 + server: "netease", + // 类型:song=单曲, playlist=歌单, album=专辑, search=搜索, artist=艺术家 + type: "playlist", + // 歌单/专辑/单曲 ID 或搜索关键词 + id: "10046455237", + // 认证 token(可选) + auth: "", + // 备用 API 配置(当主 API 失败时使用) + fallbackApis: [ + "https://api.injahow.cn/meting/?server=:server&type=:type&id=:id", + "https://api.moeyao.cn/meting/?server=:server&type=:type&id=:id", + ], + // MetingJS 脚本路径 + // 默认使用 CDN:https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js + // 备用CDN:https://unpkg.com/meting@2/dist/Meting.min.js + // 也可配置为本地路径 + jsPath: "https://unpkg.com/meting@2/dist/Meting.min.js", + }, + + // 本地音乐配置(当 mode 为 'local' 时使用) + local: { + playlist: [ + { + name: "使一颗心免于哀伤", + artist: "知更鸟 / HOYO-MiX / Chevy", + url: "/assets/music/使一颗心免于哀伤-哼唱.wav", + cover: "/assets/music/cover/109951169585655912.jpg", + // 歌词内容,支持 LRC 格式 + lrc: "", + }, + ], + }, + + // APlayer 配置选项 + player: { + // 是否自动播放 浏览器可能会阻止,需用户交互一次网页后才自动播放 + autoplay: false, + // 主题色 + theme: "var(--btn-regular-bg)", + // 循环模式:'all'=列表循环, 'one'=单曲循环, 'none'=不循环 + loop: "all", + // 播放顺序:'list'=列表顺序, 'random'=随机播放 + order: "list", + // 预加载:'none'=不预加载, 'metadata'=预加载元数据, 'auto'=自动 + preload: "auto", + // 默认音量 (0-1) + volume: 0.7, + // 是否互斥播放(同时只能播放一个播放器) + mutex: true, + // local歌词类型:0=不显示, 1=显示(需要提供 lrc 字段), 2=显示(从 HTML 内容读取) + lrcType: 1, + // 歌词是否默认隐藏(当 lrcType 不为 0 时,可以通过此选项控制初始显示状态) + // true=默认隐藏(用户可以通过歌词按钮手动显示), false=默认显示 + lrcHidden: true, + // 播放列表是否默认折叠 + listFolded: false, + // 播放列表最大高度 + listMaxHeight: "340px", + // localStorage 存储键名 + storageName: "aplayer-setting", + }, + + // 响应式配置 + responsive: { + // 移动端配置 + mobile: { + // 在移动端是否隐藏 + hide: false, + // 移动端断点(小于此宽度时应用移动端配置) + breakpoint: 768, + }, + }, +}; diff --git a/src/config/navBarConfig.ts b/src/config/navBarConfig.ts new file mode 100644 index 0000000..c4d4838 --- /dev/null +++ b/src/config/navBarConfig.ts @@ -0,0 +1,91 @@ +import { + LinkPreset, + type NavBarConfig, + type NavBarLink, + type NavBarSearchConfig, + NavBarSearchMethod, +} from "../types/config"; +import { siteConfig } from "./siteConfig"; + +// 根据页面开关动态生成导航栏配置 +const getDynamicNavBarConfig = (): NavBarConfig => { + // 基础导航栏链接 + const links: (NavBarLink | LinkPreset)[] = [ + // 主页 + LinkPreset.Home, + + // 归档 + LinkPreset.Archive, + ]; + + // 自定义导航栏链接,并且支持多级菜单 + links.push({ + name: "链接", + url: "/links/", + icon: "material-symbols:link", + + // 子菜单 + children: [ + { + name: "GitHub", + url: "https://github.com/CuteLeaf/Firefly", + external: true, + icon: "fa6-brands:github", + }, + { + name: "Bilibili", + url: "https://space.bilibili.com/38932988", + external: true, + icon: "fa6-brands:bilibili", + }, + ], + }); + + // 友链 + links.push(LinkPreset.Friends); + + // 根据配置决定是否添加留言板,在siteConfig关闭pages.guestbook时导航栏不显示留言板 + if (siteConfig.pages.guestbook) { + links.push(LinkPreset.Guestbook); + } + + // 关于及其子菜单 + links.push({ + name: "关于", + url: "/content/", + icon: "material-symbols:info", + children: [ + // 根据配置决定是否添加赞助,在siteConfig关闭pages.sponsor时导航栏不显示赞助 + ...(siteConfig.pages.sponsor ? [LinkPreset.Sponsor] : []), + + // 关于页面 + LinkPreset.About, + + // 根据配置决定是否添加番组计划,在siteConfig关闭pages.bangumi时导航栏不显示番组计划 + ...(siteConfig.pages.bangumi ? [LinkPreset.Bangumi] : []), + ], + }); + + // 仅返回链接,其它导航搜索相关配置在模块顶层常量中独立导出 + return { links } as NavBarConfig; +}; + +// 导航搜索配置 +export const navBarSearchConfig: NavBarSearchConfig = { + // 可选:PageFind, MeiliSearch + // 选择PageFind时:NavBarSearchMethod.PageFind, + // 选择MeiliSearch时:NavBarSearchMethod.MeiliSearch, + method: NavBarSearchMethod.PageFind, + + // 当选择 MeiliSearch 时的配置 + meiliSearchConfig: { + INDEX_NAME: "posts", + CONTENT_DIR: "src/content/posts", + MEILI_HOST: "http://localhost:7700", + PUBLIC_MEILI_HOST: "http://localhost:7700", + PUBLIC_MEILI_SEARCH_KEY: + "41134b15079da66ca545375edbea848a9b7173dff13be2028318fefa41ae8f2b", + }, +}; + +export const navBarConfig: NavBarConfig = getDynamicNavBarConfig(); diff --git a/src/config/pioConfig.ts b/src/config/pioConfig.ts new file mode 100644 index 0000000..e38a5ad --- /dev/null +++ b/src/config/pioConfig.ts @@ -0,0 +1,138 @@ +import type { Live2DModelConfig, SpineModelConfig } from "../types/config"; + +// Spine 看板娘配置 +export const spineModelConfig: SpineModelConfig = { + // Spine 看板娘开关 + enable: false, + + // Spine模型配置 + model: { + // Spine模型文件路径 + path: "/pio/models/spine/firefly/1310.json", + // 模型缩放比例 + scale: 1.0, + // X轴偏移 + x: 0, + // Y轴偏移 + y: 0, + }, + + // 位置配置 + position: { + // 显示位置 bottom-left,bottom-right,top-left,top-right,注意:在右下角可能会挡住返回顶部按钮 + corner: "bottom-left", + // 距离边缘0px + offsetX: 0, + // 距离下边缘0px + offsetY: 0, + }, + + // 尺寸配置 + size: { + // 容器宽度 + width: 135, + // 容器高度 + height: 165, + }, + + // 交互配置 + interactive: { + // 交互功能开关 + enabled: true, + // 点击时随机播放的动画列表 + clickAnimations: [ + "emoji_0", + "emoji_1", + "emoji_2", + "emoji_3", + "emoji_4", + "emoji_5", + "emoji_6", + ], + // 点击时随机显示的文字消息 + clickMessages: [ + "你好呀!我是流萤~", + "今天也要加油哦!✨", + "想要一起去看星空吗?🌟", + "记得要好好休息呢~", + "有什么想对我说的吗?💫", + "让我们一起探索未知的世界吧!🚀", + "每一颗星星都有自己的故事~⭐", + "希望能带给你温暖和快乐!💖", + ], + // 文字显示时间(毫秒) + messageDisplayTime: 3000, + // 待机动画列表 + idleAnimations: ["idle", "emoji_0", "emoji_1", "emoji_3", "emoji_4"], + // 待机动画切换间隔(毫秒) + idleInterval: 8000, + }, + + // 响应式配置 + responsive: { + // 在移动端隐藏 + hideOnMobile: true, + // 移动端断点 + mobileBreakpoint: 768, + }, + + // 层级 + zIndex: 1000, // 层级 + + // 透明度 + opacity: 1.0, +}; + +// Live2D 看板娘配置 +export const live2dModelConfig: Live2DModelConfig = { + // Live2D 看板娘开关 + enable: false, + // Live2D模型配置 + model: { + // Live2D模型文件路径 + path: "/pio/models/live2d/snow_miku/model.json", + // path: "/pio/models/live2d/illyasviel/illyasviel.model.json", + }, + + // 位置配置 + position: { + // 显示位置 bottom-left,bottom-right,top-left,top-right,注意:在右下角可能会挡住返回顶部按钮 + corner: "bottom-left", + // 距离边缘0px + offsetX: 0, + // 距离下边缘0px + offsetY: 0, + }, + + // 尺寸配置 + size: { + // 容器宽度 + width: 135, + // 容器高度 + height: 165, + }, + + // 交互配置 + interactive: { + // 交互功能开关 + enabled: true, + // 点击时随机显示的文字消息,motions 和 expressions 将从模型 JSON 文件中自动读取 + clickMessages: [ + "你好!我是Miku~", + "有什么需要帮助的吗?", + "今天天气真不错呢!", + "要不要一起玩游戏?", + "记得按时休息哦!", + ], + // 随机显示的文字消息显示时间(毫秒) + messageDisplayTime: 3000, + }, + + // 响应式配置 + responsive: { + // 在移动端隐藏 + hideOnMobile: true, + // 移动端断点 + mobileBreakpoint: 768, + }, +}; diff --git a/src/config/profileConfig.ts b/src/config/profileConfig.ts new file mode 100644 index 0000000..39545e9 --- /dev/null +++ b/src/config/profileConfig.ts @@ -0,0 +1,45 @@ +import type { ProfileConfig } from "../types/config"; + +export const profileConfig: ProfileConfig = { + // 头像 + avatar: "/assets/images/avatar.webp", + + // 名字 + name: "Firefly", + + // 个人签名 + bio: "Hello, I'm Firefly.", + + // 链接配置 + // 已经预装的图标集:fa6-brands,fa6-regular,fa6-solid,material-symbols,simple-icons + // 访问https://icones.js.org/ 获取图标代码, + // 如果想使用尚未包含相应的图标集,则需要安装它 + // `pnpm add @iconify-json/` + // showName: true 时显示图标和名称,false 时只显示图标 + links: [ + { + name: "Bilibli", + icon: "fa6-brands:bilibili", + url: "https://space.bilibili.com/38932988", + showName: false, + }, + { + name: "GitHub", + icon: "fa6-brands:github", + url: "https://github.com/CuteLeaf", + showName: false, + }, + { + name: "Email", + icon: "fa6-solid:envelope", + url: "mailto:xiaye@msn.com", + showName: false, + }, + { + name: "RSS", + icon: "fa6-solid:rss", + url: "/rss/", + showName: false, + }, + ], +}; diff --git a/src/config/sakuraConfig.ts b/src/config/sakuraConfig.ts new file mode 100644 index 0000000..c57fd1d --- /dev/null +++ b/src/config/sakuraConfig.ts @@ -0,0 +1,53 @@ +import type { SakuraConfig } from "../types/config"; + +export const sakuraConfig: SakuraConfig = { + // 是否启用樱花特效 + enable: false, + + // 樱花数量 + sakuraNum: 21, + + // 樱花越界限制次数,-1为无限循环 + limitTimes: -1, + + // 樱花尺寸 + size: { + // 樱花最小尺寸倍数 + min: 0.5, + // 樱花最大尺寸倍数 + max: 1.1, + }, + + // 樱花不透明度 + opacity: { + // 樱花最小不透明度 + min: 0.3, + // 樱花最大不透明度 + max: 0.9, + }, + + // 樱花移动速度 + speed: { + // 水平移动 + horizontal: { + // 水平移动速度最小值 + min: -1.7, + // 水平移动速度最大值 + max: -1.2, + }, + // 垂直移动 + vertical: { + // 垂直移动速度最小值 + min: 1.5, + // 垂直移动速度最大值 + max: 2.2, + }, + // 旋转速度 + rotation: 0.03, + // 消失速度,不应大于最小不透明度 + fadeSpeed: 0.03, + }, + + // 层级,确保樱花在合适的层级显示 + zIndex: 100, +}; diff --git a/src/config/sidebarConfig.ts b/src/config/sidebarConfig.ts new file mode 100644 index 0000000..918d171 --- /dev/null +++ b/src/config/sidebarConfig.ts @@ -0,0 +1,201 @@ +import type { SidebarLayoutConfig } from "../types/config"; + +/** + * 侧边栏布局配置 + * 用于控制侧边栏组件的显示、排序、动画和响应式行为 + */ +export const sidebarLayoutConfig: SidebarLayoutConfig = { + // 是否启用侧边栏功能 + enable: true, + + // 侧边栏位置:left=左侧,both=双侧 + // 开启双侧边栏后,右侧组件会在宽度低于1200px时隐藏 + position: "both", + + // 使用左侧单侧栏时,是否在文章详情页显示右侧边栏 + // 当position为left时开启此项后,文章详情页将显示双侧边栏,主页等其他页面保持左侧单侧边栏 + // 适用在只想用左侧单侧栏,但在文章详情页想用右侧栏的目录等组件的场景 + showRightSidebarOnPostPage: true, + + // 左侧边栏组件配置列表 + // 组件位置position:top=顶部,sticky=粘性定位(会跟随页面滚动) + leftComponents: [ + { + // 组件类型:用户资料组件 + type: "profile", + // 是否启用该组件 + enable: true, + // 组件显示顺序(数字越小越靠前) + order: 1, + // 组件位置 + position: "top", + // CSS 类名,用于应用样式和动画 + class: "onload-animation", + // 动画延迟时间(毫秒),用于错开动画效果 + animationDelay: 0, + }, + { + // 组件类型:公告组件 + type: "announcement", + // 是否启用该组件 + enable: true, + // 组件显示顺序 + order: 2, + // 组件位置 + position: "top", + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 50, + }, + { + // 组件类型:分类组件 + type: "categories", + // 是否启用该组件 + enable: true, + // 组件显示顺序 + order: 3, + // 组件位置 + position: "sticky", + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 150, + // 响应式配置 + responsive: { + // 折叠阈值:当分类数量超过5个时自动折叠 + collapseThreshold: 5, + }, + }, + { + // 组件类型:标签组件 + type: "tags", + // 是否启用该组件 + enable: true, + // 组件显示顺序 + order: 4, + // 组件位置 + position: "sticky", + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 250, + // 响应式配置 + responsive: { + // 折叠阈值:当标签数量超过20个时自动折叠 + collapseThreshold: 20, + }, + }, + { + // 组件类型:广告栏组件 1 + type: "advertisement", + // 是否启用该组件 + enable: false, + // 组件显示顺序 + order: 5, + // 组件位置 + position: "sticky", + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 300, + // 配置ID:使用第一个广告配置 + configId: "ad1", + }, + ], + + // 右侧边栏组件配置列表 + rightComponents: [ + { + // 组件类型:站点统计组件 + type: "stats", + // 是否启用该组件 + enable: true, + // 组件显示顺序 + order: 1, + // 组件位置 + position: "top", + // 是否在文章详情页显示 + showOnPostPage: true, + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 200, + }, + { + // 组件类型:日历组件 + type: "calendar", + // 是否启用该组件 + enable: true, + // 组件显示顺序 + order: 2, + // 组件位置 + position: "sticky", + // 是否在文章详情页显示 + showOnPostPage: false, + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 250, + }, + { + // 组件类型:侧边栏目录组件(只在文章详情页显示) + type: "sidebarToc", + // 是否启用该组件 + enable: true, + // 组件显示顺序 + order: 3, + // 组件位置 + position: "sticky", + // 是否在文章详情页显示 + showOnPostPage: true, + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 250, + }, + { + // 组件类型:广告栏组件 2 + type: "advertisement", + // 是否启用该组件 + enable: false, + // 组件显示顺序 + order: 4, + // 组件位置 + position: "sticky", + // 是否在文章详情页显示 + showOnPostPage: true, + // CSS 类名 + class: "onload-animation", + // 动画延迟时间 + animationDelay: 350, + // 配置ID:使用第二个广告配置 + configId: "ad2", + }, + ], + + // 默认动画配置 + defaultAnimation: { + // 是否启用默认动画 + enable: true, + // 基础延迟时间(毫秒) + baseDelay: 0, + // 递增延迟时间(毫秒),每个组件依次增加的延迟 + increment: 50, + }, + + // 响应式布局配置 + responsive: { + // 不同设备的布局模式 + // hidden:不显示侧边栏 drawer:抽屉模式(移动端不显示) sidebar:显示侧边栏 + // 使用 Tailwind 标准断点:mobile(<768px), tablet(768px-1023px), desktop(>=1024px) + layout: { + // 移动端:<768px + mobile: "sidebar", + // 平板端:768px-1023px + tablet: "sidebar", + // 桌面端:>=1024px + desktop: "sidebar", + }, + }, +}; diff --git a/src/config/siteConfig.ts b/src/config/siteConfig.ts new file mode 100644 index 0000000..e0bea9a --- /dev/null +++ b/src/config/siteConfig.ts @@ -0,0 +1,145 @@ +import type { SiteConfig } from "@/types/config"; +import { fontConfig } from "./fontConfig"; + +// 定义站点语言 +// 语言代码,例如:'zh_CN', 'zh_TW', 'en', 'ja', 'ru'。 +const SITE_LANG = "zh_CN"; + +export const siteConfig: SiteConfig = { + // 站点标题 + title: "5426的技术分享基地", + + // 站点副标题 + subtitle: "", + + // 站点 URL + site_url: "https://blog.micar9.com", + + // 站点描述 + description: + "欢迎来到5426!", + + // 站点关键词 + keywords: [ + "Firefly", + "Fuwari", + "Astro", + "ACGN", + "博客", + "技术博客", + "静态博客", + "AI" + ], + + // 主题色 + themeColor: { + // 主题色的默认色相,范围从 0 到 360。例如:红色:0,青色:200,蓝绿色:250,粉色:345 + hue: 165, + // 是否对访问者隐藏主题色选择器 + fixed: false, + // 默认模式:"light" 亮色,"dark" 暗色,"system" 跟随系统 + defaultMode: "system", + }, + + // Favicon 配置 + favicon: [ + { + // 图标文件路径 + src: "/assets/images/favicon.ico", + // 可选,指定主题 'light' | 'dark' + // theme: "light", + // 可选,图标大小 + // sizes: "32x32", + }, + ], + + // 导航栏配置 + navbar: { + // 导航栏Logo + // 支持三种类型:Astro图标库,本地图片,网络图片 + // { type: "icon", value: "material-symbols:home-pin-outline" } + // { type: "image", value: "/assets/images/logo.webp", alt: "Firefly Logo" } + // { type: "image", value: "https://example.com/logo.png", alt: "Firefly Logo" } + logo: { + type: "image", + value: "/assets/images/firefly.png", + alt: "🍀", + }, + // 导航栏标题 + title: "Firefly", + // 全宽导航栏,导航栏是否占满屏幕宽度,true:占满,false:不占满 + widthFull: false, + // 导航栏图标和标题是否跟随主题色 + followTheme: false, + }, + + // 站点开始日期,用于统计运行天数 + siteStartDate: "2026-01-07", + + // 文章页底部的"上次编辑时间"卡片开关 + showLastModified: true, + + // 文章过期阈值(天数),超过此天数才显示"上次编辑"卡片 + outdatedThreshold: 30, + + // 是否开启分享海报生成功能 + sharePoster: true, + + // OpenGraph图片功能,注意开启后要渲染很长时间,不建议本地调试的时候开启 + generateOgImages: false, + + // bangumi配置 + bangumi: { + // Bangumi用户ID + userId: "1163581", + }, + + // 页面开关配置 - 控制特定页面的访问权限,设为false会返回404 + // bangumi的数据为编译时获取的,所以不是实时数据,请配置bangumi.userId + pages: { + // 赞助页面开关 + sponsor: true, + // 留言板页面开关,需要配置评论系统 + guestbook: true, + // 番组计划页面开关,含追番、游戏、书籍和音乐,dev调试时只获取一页数据,build才会获取全部数据 + bangumi: true, + }, + + // 文章列表布局配置 + postListLayout: { + // 默认布局模式:"list" 列表模式(单列布局),"grid" 网格模式(多列布局) + defaultMode: "list", + // 是否允许用户切换布局 + allowSwitch: true, + // 网格布局配置,仅在 defaultMode 为 "grid" 或允许切换布局时生效 + grid: { + // 是否开启瀑布流布局,同时有封面图和无封面图的混合文章推荐开启 + masonry: false, + // 网格模式列数:2 或 3 + // 2列是默认模式,在任何侧边栏配置下均可生效 + // 3列模式仅在单侧边栏(或无侧边栏)时生效, + columns: 3, + }, + }, + + // 分页配置 + pagination: { + // 每页显示的文章数量 + postsPerPage: 10, + }, + + // 统计分析 + analytics: { + // Google Analytics ID + googleAnalyticsId: "G-P7GBNJKJKL", + // Microsoft Clarity ID + microsoftClarityId: "tx9equrgr6", + }, + + // 字体配置 + // 在src/config/fontConfig.ts中配置具体字体 + font: fontConfig, + + // 站点语言,在本配置文件顶部SITE_LANG定义 + lang: SITE_LANG, +}; diff --git a/src/config/sponsorConfig.ts b/src/config/sponsorConfig.ts new file mode 100644 index 0000000..239c27b --- /dev/null +++ b/src/config/sponsorConfig.ts @@ -0,0 +1,74 @@ +import type { SponsorConfig } from "../types/config"; + +export const sponsorConfig: SponsorConfig = { + // 页面标题,如果留空则使用 i18n 中的翻译 + title: "", + + // 页面描述文本,如果留空则使用 i18n 中的翻译 + description: "", + + // 赞助用途说明 + usage: + "您的赞助将用于服务器维护、内容创作和功能开发,帮助我持续提供优质内容。", + + // 是否显示赞助者列表 + showSponsorsList: true, + + // 是否在文章详情页底部显示赞助按钮 + showButtonInPost: true, + + // 赞助方式列表 + methods: [ + { + name: "支付宝", + icon: "fa6-brands:alipay", + // 收款码图片路径(需要放在 public 目录下) + qrCode: "/assets/images/sponsor/alipay.png", + link: "", + description: "使用 支付宝 扫码赞助", + enabled: true, + }, + { + name: "微信", + icon: "fa6-brands:weixin", + qrCode: "/assets/images/sponsor/wechat.png", + link: "", + description: "使用 微信 扫码赞助", + enabled: true, + }, + { + name: "爱发电", + icon: "simple-icons:afdian", + qrCode: "", + link: "https://afdian.com/a/cuteleaf", + description: "通过 爱发电 进行赞助", + enabled: true, + }, + { + name: "Github", + icon: "fa6-brands:github", + qrCode: "", + link: "https://github.com/CuteLeaf/Firefly", + description: "点个Star就是最大的支持", + enabled: true, + }, + ], + + // 赞助者列表(可选) + sponsors: [ + // 示例:已实名赞助者 + { + name: "夏叶", + amount: "¥50", + date: "2025-10-01", + message: "感谢分享!", + }, + + // 示例:匿名赞助者 + { + name: "匿名用户", + amount: "¥20", + date: "2025-10-01", + }, + ], +}; diff --git a/src/constants/constants.ts b/src/constants/constants.ts new file mode 100644 index 0000000..49e3f87 --- /dev/null +++ b/src/constants/constants.ts @@ -0,0 +1,25 @@ +export const PAGE_SIZE = 8; + +export const LIGHT_MODE = "light", + DARK_MODE = "dark", + SYSTEM_MODE = "system"; +export const DEFAULT_THEME = LIGHT_MODE; // 仅作为向后兼容的默认值,实际使用 siteConfig.themeColor.defaultMode + +// Wallpaper modes +export const WALLPAPER_BANNER = "banner", + WALLPAPER_OVERLAY = "overlay", + WALLPAPER_NONE = "none"; + +// Banner height unit: vh +export const BANNER_HEIGHT = 35; +export const BANNER_HEIGHT_EXTEND = 30; +export const BANNER_HEIGHT_HOME = BANNER_HEIGHT + BANNER_HEIGHT_EXTEND; + +// The height the main panel overlaps the banner, unit: rem +export const MAIN_PANEL_OVERLAPS_BANNER_HEIGHT = 3.5; + +// Page width: rem +export const PAGE_WIDTH = 90; + +// Category constants +export const UNCATEGORIZED = "uncategorized"; diff --git a/src/constants/icon.ts b/src/constants/icon.ts new file mode 100644 index 0000000..f03efba --- /dev/null +++ b/src/constants/icon.ts @@ -0,0 +1,44 @@ +import type { Favicon } from "@/types/config.ts"; + +export const defaultFavicons: Favicon[] = [ + { + src: "/favicon/favicon-light-32.png", + theme: "light", + sizes: "32x32", + }, + { + src: "/favicon/favicon-light-128.png", + theme: "light", + sizes: "128x128", + }, + { + src: "/favicon/favicon-light-180.png", + theme: "light", + sizes: "180x180", + }, + { + src: "/favicon/favicon-light-192.png", + theme: "light", + sizes: "192x192", + }, + { + src: "/favicon/favicon-dark-32.png", + theme: "dark", + sizes: "32x32", + }, + { + src: "/favicon/favicon-dark-128.png", + theme: "dark", + sizes: "128x128", + }, + { + src: "/favicon/favicon-dark-180.png", + theme: "dark", + sizes: "180x180", + }, + { + src: "/favicon/favicon-dark-192.png", + theme: "dark", + sizes: "192x192", + }, +]; diff --git a/src/constants/link-presets.ts b/src/constants/link-presets.ts new file mode 100644 index 0000000..b57dc94 --- /dev/null +++ b/src/constants/link-presets.ts @@ -0,0 +1,41 @@ +import I18nKey from "@i18n/i18nKey"; +import { i18n } from "@i18n/translation"; +import { LinkPreset, type NavBarLink } from "@/types/config"; + +export const LinkPresets: { [key in LinkPreset]: NavBarLink } = { + [LinkPreset.Home]: { + name: i18n(I18nKey.home), + url: "/", + icon: "material-symbols:home", + }, + [LinkPreset.About]: { + name: i18n(I18nKey.about), + url: "/about/", + icon: "material-symbols:person", + }, + [LinkPreset.Archive]: { + name: i18n(I18nKey.archive), + url: "/archive/", + icon: "material-symbols:archive", + }, + [LinkPreset.Friends]: { + name: i18n(I18nKey.friends), + url: "/friends/", + icon: "material-symbols:group", + }, + [LinkPreset.Sponsor]: { + name: i18n(I18nKey.sponsor), + url: "/sponsor/", + icon: "material-symbols:favorite", + }, + [LinkPreset.Guestbook]: { + name: i18n(I18nKey.guestbook), + url: "/guestbook/", + icon: "material-symbols:chat", + }, + [LinkPreset.Bangumi]: { + name: i18n(I18nKey.bangumi), + url: "/bangumi/", + icon: "material-symbols:movie", + }, +}; diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000..f4a01ed --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,40 @@ +import { defineCollection } from "astro:content"; +import { glob } from "astro/loaders"; +import { z } from "astro/zod"; + +const postsCollection = defineCollection({ + loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/posts" }), + schema: z.object({ + title: z.string(), + published: z.date(), + updated: z.date().optional(), + draft: z.boolean().optional().default(false), + description: z.string().optional().default(""), + image: z.string().optional().default(""), + tags: z.array(z.string()).optional().default([]), + category: z.string().optional().nullable().default(""), + lang: z.string().optional().default(""), + pinned: z.boolean().optional().default(false), + author: z.string().optional().default(""), + sourceLink: z.string().optional().default(""), + licenseName: z.string().optional().default(""), + licenseUrl: z.string().optional().default(""), + comment: z.boolean().optional().default(true), + + /* For internal use */ + prevTitle: z.string().default(""), + prevSlug: z.string().default(""), + nextTitle: z.string().default(""), + nextSlug: z.string().default(""), + }), +}); + +const specCollection = defineCollection({ + loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/spec" }), + schema: z.object({}), +}); + +export const collections = { + posts: postsCollection, + spec: specCollection, +}; diff --git a/src/content/posts/agent.md b/src/content/posts/agent.md new file mode 100644 index 0000000..d3fc9fd --- /dev/null +++ b/src/content/posts/agent.md @@ -0,0 +1,228 @@ +--- +title: Agent应用框架 +published: 2025-01-11 +pinned: false +description: Agent应用框架 +tags: [Agent] +category: 学习日志 +draft: true +--- +# 一、Agent应用架构深度解析 +下面有两个Agent的方案,请对比一下,哪个方案更好? + +方案一: + +```mermaid +graph LR + 规划--> 行动1 --> 行动2 --> 结束 +``` + +方案二: + +```mermaid + graph LR + 思考1--> 行动1 --> 思考2 --> 行动2 --> 结束 +``` +方案二比方案一好,因为思考2可以判断行动1的执行效果是否达成目的,达成目的时继续下一个行动,否则需要修改行动1并重新执行。 +## Agent应用架构 + +```mermaid +graph LR + 规划--> 思考; + 行动 --> 思考; + 思考-->行动; + 思考-->结束; +``` + +运行机制: + +```mermaid +graph LR + Thought--> Observation; + Observation-->Action; + Action-->Thought; +``` + +Though:决定下一步要做的动作并给出理由 + +Action:执行下一步动作 + +Observation:观察执行动作结果的观察,用于反馈思考 + +> React:智能体感知环境变化做出相应调整的机制 + +```mermaid +graph LR + subgraph Tools + Calendar + Calculator + CodeInterpreter + Search + ...more + end + A[Tools] -->Calendar; + A -->Calculator; + A -->CodeInterpreter; + A -->Search; + A -->...more; + + subgraph Memory + C[Short-term memory] + D[Long-term memory] + end + E[大模型]-->A + E --> B[Memory] + E --> F[Action]; + + B-->C + B-->D + + E --> G[Planning]; + G --> H[Reflection]; + G --> I[Self-critics]; + G --> J[Chain of thoughts]; + G --> K[Subgoal decomposition]; + + A-.->F + B-.->G + B-.->H +``` + +### Tools:工具库 + +Memory:记忆 + +Action:行动 + +### Planning:规划 + +- 理解任务,给出完成任务的具体步骤 +- 反思和优化,下一步行动的一个推理 + +规划阶段的关键技术: + +- Chain-of-Thought Prompting(COT) + + 通过Prompt激发大模型的潜能,引导LLM做出更好的规划。 + + 例子: + + Q:我有5个羽毛球。我买了2罐羽毛球,一罐3个。我现在有多少个羽毛球? + + GPT-4o:你原本有 5 个羽毛球,买了 2 瓶,每瓶 3 个。所以,你现在总共有: + + 5 + 2 × 3 = 5 + 6 = 11 个羽毛球。 + +- 反思和细化 +- 记忆增强 + + 记忆增强通常有两种方法,RAG和微调。目的是注入背景知识,让模型能更好地完成任务。 + + + + 1. RAG的核心技术有: + - 数据工程:收集数据,需要确保数据高质量 + - 数据切分:切分数据,切分的每个chunk尽量高质量 + - 一阶段检索:语义检索,尽可能多的找知识 + - 二阶段精排:重排序,返回高质量的数据 + - 用户意图识别:理解用户意图 + - 效果评估 + +### Action:行动 + +- 语言模型通过推理触发 +- 执行器调用工具执行 + +```mermaid +graph LR + 工具库-->|注册| LLM --> |触发|执行器 +``` +函数调用执行全过程: +[![agent.png](https://tuchuang.bluishhao.top/i/2024/12/24/676ac9cfbe407.png)](https://tuchuang.bluishhao.top/i/2024/12/24/676ac9cfbe407.png) +#### 1.定义函数 + +编写函数,在注释说明该函数的功能、需要的参数、返回的数据。 + +```python +def add(num1,num2): + """ + 该函数计算两个数字的和 + :param num1: 必要参数,表示需要计算的第一个数字 + :param num2: 必要参数,表示需要计算的第二个数字 + :return: add函数计算后的结果,返回结果为float对象 + """ + return float(num1+num2) +``` + +注册函数 + +```python +add_tool={ +"type":"function", +"function":{ + "name":"add", + "description":"用于执行add算法函数,定义了一种将两个数字加起来的计算过程", + "parameters":{"type":"object","parameters":{"num1":{"type":"float","description":"需要计算的第一个数字"},"num2":{"type":"float","description":"需要计算的第二个数字"}},"required":["num1","num2"]} + } +} +tools=[add_tool] +``` + +#### 2.函数描述和模型调用(第一次) +模型去匹配对应的函数并调用。 +```python +response = client.chat.completions.create( + model="gpt-3.5-turbo", + messages=messages, + tools=tools, + tool_choice="auto", + ) + +response.choices[0].message +``` +回复的内容如下: +```python +ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_OqKaG4mk8Z5oEVKCYsd5rSCO', function=Function(arguments='{"num1":"1","num2":"2"}', name='add_tool'), type='function')]) +``` +这里的id是唯一的,用于匹配询问与回复。 +#### 3.解析模型返回数据并完成函数调用 +```python +tool_calls = response.choices[0].message.tool_calls + +for tool_call in tool_calls: + function_name = tool_call.function.name + function_to_call = available_tools[function_name] + function_args = json.loads(tool_call.function.arguments) + function_response = function_to_call(**function_args) + + +print(function_name) +print(function_args) +print(function_response) +``` +输出为: +```python +add_tool +{'num1':'1','num2':'2'} +"3" +``` +#### 4.结果增强模型生成(第二次) +将函数调用的结果添加到消息中,增强模型生成。 +```python +messages.append( + { + "tool_call_id": tool_call.id, + "role": "tool", + "name": function_name, + "content": function_response, + } +) +``` +### Observation \ No newline at end of file diff --git a/src/content/posts/code-examples.md b/src/content/posts/code-examples.md new file mode 100644 index 0000000..038c100 --- /dev/null +++ b/src/content/posts/code-examples.md @@ -0,0 +1,313 @@ +--- +title: Firefly 代码块示例 +published: 1970-01-03 +pinned: false +description: 在Firefly中使用表达性代码的代码块在 Markdown 中的外观。 +tags: [Markdown, Firefly] +category: 文章示例 +draft: false +image: ./images/firefly3.webp +--- + +在这里,我们将探索如何使用 [Expressive Code](https://expressive-code.com/) 展示代码块。提供的示例基于官方文档,您可以参考以获取更多详细信息。 + +## 表达性代码 + +### 语法高亮 + +[语法高亮](https://expressive-code.com/key-features/syntax-highlighting/) + +#### 常规语法高亮 + +```js +console.log('此代码有语法高亮!') +``` + +#### 渲染 ANSI 转义序列 + +```ansi +ANSI colors: +- Regular: Red Green Yellow Blue Magenta Cyan +- Bold: Red Green Yellow Blue Magenta Cyan +- Dimmed: Red Green Yellow Blue Magenta Cyan + +256 colors (showing colors 160-177): +160 161 162 163 164 165 +166 167 168 169 170 171 +172 173 174 175 176 177 + +Full RGB colors: +ForestGreen - RGB(34, 139, 34) + +Text formatting: Bold Dimmed Italic Underline +``` + +### 编辑器和终端框架 + +[编辑器和终端框架](https://expressive-code.com/key-features/frames/) + +#### 代码编辑器框架 + +```js title="my-test-file.js" +console.log('标题属性示例') +``` + +--- + +```html + +
          文件名注释示例
          +``` + +#### 终端框架 + +```bash +echo "此终端框架没有标题" +``` + +--- + +```powershell title="PowerShell 终端示例" +Write-Output "这个有标题!" +``` + +#### 覆盖框架类型 + +```sh frame="none" +echo "看,没有框架!" +``` + +--- + +```ps frame="code" title="PowerShell Profile.ps1" +# 如果不覆盖,这将是一个终端框架 +function Watch-Tail { Get-Content -Tail 20 -Wait $args } +New-Alias tail Watch-Tail +``` + +### 文本和行标记 + +[文本和行标记](https://expressive-code.com/key-features/text-markers/) + +#### 标记整行和行范围 + +```js {1, 4, 7-8} +// 第1行 - 通过行号定位 +// 第2行 +// 第3行 +// 第4行 - 通过行号定位 +// 第5行 +// 第6行 +// 第7行 - 通过范围 "7-8" 定位 +// 第8行 - 通过范围 "7-8" 定位 +``` + +#### 选择行标记类型 (mark, ins, del) + +```js title="line-markers.js" del={2} ins={3-4} {6} +function demo() { + console.log('此行标记为已删除') + // 此行和下一行标记为已插入 + console.log('这是第二个插入行') + + return '此行使用中性默认标记类型' +} +``` + +#### 为行标记添加标签 + +```jsx {"1":5} del={"2":7-8} ins={"3":10-12} +// labeled-line-markers.jsx + +``` + +#### 在单独行上添加长标签 + +```jsx {"1. Provide the value prop here:":5-6} del={"2. Remove the disabled and active states:":8-10} ins={"3. Add this to render the children inside the button:":12-15} +// labeled-line-markers.jsx + +``` + +#### 使用类似 diff 的语法 + +```diff ++此行将标记为已插入 +-此行将标记为已删除 +这是常规行 +``` + +--- + +```diff +--- a/README.md ++++ b/README.md +@@ -1,3 +1,4 @@ ++this is an actual diff file +-all contents will remain unmodified + no whitespace will be removed either +``` + +#### 结合语法高亮和类似 diff 的语法 + +```diff lang="js" + function thisIsJavaScript() { + // 整个块都会以 JavaScript 高亮显示, + // 并且我们仍然可以为其添加 diff 标记! +- console.log('要删除的旧代码') ++ console.log('新的闪亮代码!') + } +``` + +#### 标记行内的单独文本 + +```js "given text" +function demo() { + // 标记行内的任何给定文本 + return '支持给定文本的多个匹配项'; +} +``` + +#### 正则表达式 + +```ts /ye[sp]/ +console.log('单词 yes 和 yep 将被标记。') +``` + +#### 转义正斜杠 + +```sh /\/ho.*\// +echo "Test" > /home/test.txt +``` + +#### 选择内联标记类型 (mark, ins, del) + +```js "return true;" ins="inserted" del="deleted" +function demo() { + console.log('这些是插入和删除的标记类型'); + // return 语句使用默认标记类型 + return true; +} +``` + +### 自动换行 + +[自动换行](https://expressive-code.com/key-features/word-wrap/) + +#### 为每个块配置自动换行 + +```js wrap +// 启用换行的示例 +function getLongString() { + return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间' +} +``` + +--- + +```js wrap=false +// wrap=false 的示例 +function getLongString() { + return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间' +} +``` + +#### 配置换行的缩进 + +```js wrap preserveIndent +// preserveIndent 示例(默认启用) +function getLongString() { + return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间' +} +``` + +--- + +```js wrap preserveIndent=false +// preserveIndent=false 的示例 +function getLongString() { + return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间' +} +``` + +## 可折叠部分 + +[可折叠部分](https://expressive-code.com/plugins/collapsible-sections/) + +```js collapse={1-5, 12-14, 21-24} +// 所有这些样板设置代码将被折叠 +import { someBoilerplateEngine } from '@example/some-boilerplate' +import { evenMoreBoilerplate } from '@example/even-more-boilerplate' + +const engine = someBoilerplateEngine(evenMoreBoilerplate()) + +// 这部分代码默认可见 +engine.doSomething(1, 2, 3, calcFn) + +function calcFn() { + // 您可以有多个折叠部分 + const a = 1 + const b = 2 + const c = a + b + + // 这将保持可见 + console.log(`计算结果: ${a} + ${b} = ${c}`) + return c +} + +// 直到块末尾的所有代码将再次被折叠 +engine.closeConnection() +engine.freeMemory() +engine.shutdown({ reason: '示例样板代码结束' }) +``` + +## 行号 + +[行号](https://expressive-code.com/plugins/line-numbers/) + +### 为每个块显示行号 + +```js showLineNumbers +// 此代码块将显示行号 +console.log('来自第2行的问候!') +console.log('我在第3行') +``` + +--- + +```js showLineNumbers=false +// 此块禁用行号 +console.log('你好?') +console.log('抱歉,你知道我在第几行吗?') +``` + +### 更改起始行号 + +```js showLineNumbers startLineNumber=5 +console.log('来自第5行的问候!') +console.log('我在第6行') +``` diff --git a/src/content/posts/docker.md b/src/content/posts/docker.md new file mode 100644 index 0000000..2aa7f1e --- /dev/null +++ b/src/content/posts/docker.md @@ -0,0 +1,150 @@ +--- +title: Docker安装教程(Ubuntu) +published: 2025-01-02 +pinned: false +description: Docker安装教程(Ubuntu)。 +tags: [Docker] +category: 教程系列 +draft: false +--- +# 一、前期准备 + +## 1、防火墙设置 + +1.如果您使用 ufw 或 firewalld 来管理防火墙设置,请注意,当您使用 Docker 公开容器端口时,这些端口会绕过您的防火墙规则。当您使用 Docker 发布容器的端口时,该容器的进出流量在通过 ufw 防火墙设置之前就会被重定向。Docker 在 `nat` 表中路由容器流量,这意味着数据包在到达 ufw 使用的 `INPUT` 和 `OUTPUT` 链之前就会被重定向。数据包在防火墙规则生效之前就被路由,实际上忽略了您的防火墙配置。 + +2.Docker 仅兼容 `iptables-nft` 和 `iptables-legacy` 。使用 `nft` 创建的防火墙规则在安装了 Docker 的系统上不受支持。请确保您使用的任何防火墙规则集都是使用 `iptables` 或 `ip6tables` 创建的,并将它们添加到 `DOCKER-USER` 链中,参见数据包过滤和防火墙。 +具体点击下面链接查看: + +[Packet filtering and firewalls](https://docs.docker.com/engine/network/packet-filtering-firewalls/) + +## 2、操作系统要求 + +要安装 Docker 引擎,您需要以下 Ubuntu 版本之一的 64 位版本: + +- Ubuntu Oracular 24.10 +- Ubuntu Noble 24.04 (LTS) +- Ubuntu Jammy 22.04 (LTS) +- Ubuntu Focal 20.04 (LTS) + +Docker 引擎适用于 Ubuntu,兼容 x86_64(或 amd64)、armhf、arm64、s390x 和 ppc64le(ppc64el)架构。 + +# 二、安装方法 + +[Docker安装官方教程](https://docs.docker.com/engine/install/ubuntu/#installation-methods) + +# 三、非root用户运行Docker + + Docker 守护进程绑定到 Unix 套接字,而不是 TCP 端口。默认情况下,Unix 套接字属于 `root` 用户,其他用户只能使用 `sudo` 访问它。Docker 守护进程始终以 `root` 用户身份运行。 + 如果您不想在 `docker` 命令前加上 `sudo` ,请创建一个名为 `docker` 的 Unix 组并将用户添加到其中。当 Docker 守护进程启动时,它会创建一个 Unix 套接字,该套接字可供 `docker` 组的成员访问。在某些 Linux 发行版中,使用软件包管理器安装 Docker Engine 时,系统会自动创建此组。在这种情况下,您无需手动创建组。 + +1、创建 `docker` 群组并添加您的用户: + +```bash +sudo groupadd docker +``` + +2、添加您的用户到 `docker` 组。 + +```bash +sudo usermod -aG docker $USER +``` + +3、退出并重新登录,或者运行下面命令。 + +```bash +newgrp docker +``` + +4、在不使用 `sudo` 的情况下运行 `docker` 命令。 + +```bash +docker run hello-world +``` + +> 如果出现以下错误: +> +> +> WARNING: Error loading config file: /home/user/.docker/config.json - +> stat /home/user/.docker/config.json: permission denied +> +> 此错误表示由于之前使用了 `sudo` 命令, `~/.docker/` 目录的权限设置不正确。 +> 要解决这个问题,要么删除 `~/.docker/` 目录(它将自动重新创建,但任何自定义设置都将丢失),要么使用以下命令更改其所有权和权限: +> +> ```bash +> sudo chown "$USER":"$USER" /home/"$USER"/.docker -R +> sudo chmod g+rwx "$HOME/.docker" -R +> ``` +> + +# 四、Docker配置 + +## 1、修改镜像源 + +创建或修改/etc/docker/daemon.json文件 + +```bash +vim /etc/docker/daemon.json +``` + +或: + +```bash +nano /etc/docker/daemon.json +``` + +添加下面内容: + +```json +{ + "registry-mirrors": [ + "https://registry-1.docker.io" + ] +} +``` + +> 请修改地址为可用的镜像源 +> + +重启docker + +```bash +service docker restart +``` + +查看是否更换成功 + +```bash +docker info +``` + +## 2、配置默认日志驱动程序 + +Docker 为主机上运行的所有容器提供日志驱动程序,用于收集和查看日志数据。默认的日志驱动程序 `json-file` 将日志数据写入主机文件系统中的 JSON 格式文件。随着时间的推移,这些日志文件会不断增大,可能导致磁盘资源耗尽。 +为避免因过度使用磁盘存储日志数据而产生问题,请考虑以下选项之一: + +- 配置 `json-file` 日志驱动程序以启用[日志轮转](https://docs.docker.com/engine/logging/drivers/json-file/)。 +- 使用默认执行日志轮转的[替代日志驱动程序](https://docs.docker.com/engine/logging/configure/#configure-the-default-logging-driver),例如[“local”日志驱动程序](https://docs.docker.com/engine/logging/drivers/local/)。 +- 使用将日志发送到远程日志聚合器的日志驱动程序。 + +# Docker卸载 + +1.卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包: + +```bash +sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras +``` + +2.镜像、容器、卷或自定义配置文件在您的宿主机上不会被自动删除。要删除所有镜像、容器和卷: + +```bash +sudo rm -rf /var/lib/docker +sudo rm -rf /var/lib/containerd +``` + +3.删除源列表和密钥环 + +```bash +sudo rm /etc/apt/sources.list.d/docker.list +sudo rm /etc/apt/keyrings/docker.asc +``` \ No newline at end of file diff --git a/src/content/posts/draft.md b/src/content/posts/draft.md new file mode 100644 index 0000000..c7b12f7 --- /dev/null +++ b/src/content/posts/draft.md @@ -0,0 +1,22 @@ +--- +title: 草稿示例 +published: 1970-01-01 +tags: [Markdown, 博客, 演示] +category: 文章示例 +draft: true +--- + +# 这篇文章是草稿 + +这篇文章目前处于草稿状态,尚未发布。因此,它不会对普通读者可见。内容仍在进行中,可能需要进一步编辑和审查。 + +当文章准备发布时,您可以在 Frontmatter 中将 "draft" 字段更新为 "false": + +```markdown +--- +title: 草稿示例 +published: 2024-01-11T04:40:26.381Z +tags: [Markdown, 博客, 演示] +category: 示例 +draft: false +--- diff --git a/src/content/posts/firefly-layout-system.md b/src/content/posts/firefly-layout-system.md new file mode 100644 index 0000000..8039dd1 --- /dev/null +++ b/src/content/posts/firefly-layout-system.md @@ -0,0 +1,272 @@ +--- +title: Firefly 布局系统详解 +published: 1970-01-03 +description: 深入了解 Firefly 的布局系统,包括侧边栏布局(左侧/双侧)和文章列表布局(列表/网格),以及全新的三列网格模式。 +image: ./images/firefly1.webp +tags: [Firefly, 布局, 博客, 使用指南] +category: 博客指南 +draft: false +--- + +## 📖 概述 + +Firefly 提供了灵活的布局系统,允许您根据内容需求和个人喜好自定义博客的视觉呈现方式。布局系统主要包括**侧边栏布局**和**文章列表布局**两个维度,它们相互配合,共同决定了页面的整体结构。 + +本文将详细介绍 Firefly 的各种布局模式、它们的特点、使用场景,以及不同布局组合的效果。 + +--- + +## 一、侧边栏布局系统 + +侧边栏是博客页面的重要组成部分,用于展示导航、分类、标签、统计信息等辅助内容。Firefly 支持两种侧边栏布局模式。 + +### 1.1 左侧边栏模式 (position: "left") + +#### 特点 + +- 侧边栏固定在页面左侧 +- 主内容区域位于右侧 +- 符合从左到右的阅读习惯 +- 适合展示导航和分类等重要信息 + +#### 布局结构 + +![左侧边栏布局](./images/left-list.webp) + +#### 适用场景 + +- 传统博客风格 +- 强调导航和分类的博客 +- 需要突出用户资料的个人博客 +- 内容为主,辅助信息次之的场景 + +:::tip +开启左侧单侧边栏后,位于文章详情页右侧边栏的文章目录导航将失效 + +会改用浮动目录导航替代,需要手动点击弹出目录导航 + +但可以通过showRightSidebarOnPostPage配置是否在文章详情页显示右侧边栏 + +当position为left时开启此项后,文章详情页将显示双侧边栏,主页等其他页面保持左侧单侧边栏 + +适用在只想用左侧单侧栏,但在文章详情页想用右侧栏的目录等组件的场景 +::: + + +#### 配置示例 + +```typescript +// src/config/sidebarConfig.ts +export const sidebarLayoutConfig: SidebarLayoutConfig = { + enable: true, + position: "left", // 左侧边栏 + showRightSidebarOnPostPage: true, // 是否在文章详情页显示右侧边栏 +}; +``` + +--- + +### 1.2 双侧边栏模式 (position: "both") + +#### 特点 + +- 左右两侧同时存在侧边栏 +- 主内容区域位于中间 +- 最大化利用屏幕空间 +- 可以展示更多辅助信息 +- 适合宽屏显示器 + +#### 布局结构 + +![双侧边栏布局](./images/both-list.webp) + +#### 适用场景 + +- 宽屏桌面端浏览 +- 信息密集型博客 +- 需要展示大量辅助内容 +- 专业性强的技术博客 + + +#### 配置示例 + +```typescript +// src/config/sidebarConfig.ts +export const sidebarLayoutConfig: SidebarLayoutConfig = { + enable: true, + position: "both", // 双侧边栏 +``` + +--- + +## 二、文章列表布局系统 + +文章列表是博客首页和归档页的核心内容,Firefly 提供两种展示方式,并支持多种网格配置。 + +### 2.1 列表模式 (defaultMode: "list") + +#### 特点 + +- 单列纵向排列 +- 显示文章封面图 +- 展示更多文章摘要 +- 适合深度阅读 + +#### 列表布局结构 + +![列表模式布局](./images/left-list.webp) + +#### 优点 + +- ✅ 视觉冲击力强,封面图吸引眼球 +- ✅ 可以展示更多文章信息(摘要、标签等) +- ✅ 适合图片内容丰富的博客 +- ✅ 移动端友好,单列更易阅读 +- ✅ 兼容所有侧边栏配置(单侧、双侧) + +#### 配置示例 + +```typescript +// src/config/siteConfig.ts +export const siteConfig: SiteConfig = { + postListLayout: { + defaultMode: "list", // 列表模式 + allowSwitch: true, // 允许用户切换 + }, +}; +``` + +--- + +### 2.2 网格模式 (defaultMode: "grid") + +#### 特点 + +- 多列横向排列(支持 2 列或 3 列) +- 紧凑布局,信息密度高 +- 适合快速浏览 + +#### 2.2.1 双列网格 (Columns: 2) + +这是网格模式的默认配置,适合大多数场景。 + +![双列网格布局](./images/left-grid2.webp) + +#### 2.2.2 三列网格 (Columns: 3) ✨ New + +在宽屏设备上,您可以开启三列网格模式,进一步提高信息密度。 + +![三列网格布局](./images/left-grid3.webp) + +**⚠️ 注意**:三列网格模式仅在**左侧边栏模式**(或无侧边栏)下生效。如果您启用了双侧边栏,系统将自动回退到双列网格,以保证文章卡片有足够的展示宽度。 + +#### 配置示例 + +```typescript +// src/config/siteConfig.ts +export const siteConfig: SiteConfig = { + postListLayout: { + defaultMode: "grid", + allowSwitch: true, + grid: { + masonry: true, // 开启瀑布流 + columns: 3, // 设置为 3 列模式(仅单侧边栏生效) + }, + }, +}; +``` + +--- + +### 2.3 瀑布流布局 (Masonry) + +Firefly 的网格模式内置了智能瀑布流布局支持,解决了网格布局中因图文混合文章导致的卡片高度不一致导致的空白问题。 + +![瀑布流布局](./images/masonry.webp) + +- **智能排版**:采用 Z 字形分布(左右交替),严格保持文章的时间顺序。 +- **消除空白**:通过绝对定位精确计算每个卡片的位置,让卡片紧贴上一行的卡片,消除垂直方向的空白间隙。 +- **配置灵活**:您可以在 `siteConfig.ts` 中通过 `postListLayout.grid.masonry` 选项自由开启或关闭此功能。 + +--- + +## 三、布局组合指南 + +Firefly 允许您自由组合侧边栏和文章列表布局。以下是各种组合的效果说明。 + +### 3.1 左侧边栏 + 网格模式 + +这是最灵活的组合。您可以选择 2 列或 3 列网格。 + +- **2 列模式**:经典的网格布局,卡片宽度适中,阅读舒适。 +- **3 列模式**:适合宽屏(≥1024px),单屏展示更多内容,视觉效果震撼。 + +### 3.2 双侧边栏 + 网格模式 + +在旧版本中,此组合被禁用。但在最新版 Firefly 中,我们解除了限制,允许双侧边栏与网格模式共存。 + +![双侧边栏+网格布局](./images/both-grid.webp) + +**特点与限制**: +- **强制双列**:即使您配置了 `columns: 3`,在此模式下也会强制显示为 2 列。 +- **空间紧凑**:由于左右都有侧边栏,中间的主内容区域相对较窄。 +- **信息密度极高**:这是信息密度最高的布局方式,适合需要同时展示大量导航信息和文章列表的站点。 + +### 3.3 布局选择建议 + +| 侧边栏模式 | 文章列表模式 | 推荐度 | 适用场景 | +|-----------|------------|--------|---------| +| 左侧边栏 | 列表模式 | ⭐⭐⭐⭐⭐ | 摄影、设计、生活类博客,强调图片和沉浸感 | +| 左侧边栏 | 2列网格 | ⭐⭐⭐⭐⭐ | 技术、笔记类博客,平衡阅读与检索效率 | +| 左侧边栏 | 3列网格 | ⭐⭐⭐⭐⭐ | 内容量大的站点,宽屏体验极佳 | +| 双侧边栏 | 列表模式 | ⭐⭐⭐⭐⭐ | 需要展示大量侧边栏信息的站点 | +| 双侧边栏 | 2列网格 | ⭐⭐⭐⭐⭐ | 极客风格,追求最高信息密度 | + +--- + +## 四、响应式布局行为 + +Firefly 的布局系统具有智能的响应式设计,会根据屏幕尺寸自动调整。 + +### 4.1 智能降级规则 + +为了保证最佳阅读体验,系统会在屏幕变窄时自动调整布局: + +1. **3 列网格 -> 2 列网格**:当屏幕宽度不足以容纳 3 列时(或开启双侧边栏时),自动降级为单列表模式。 +2. **网格模式 -> 列表模式**:当屏幕宽度小于 1200px(平板和手机)时,网格模式会自动切换为单列列表模式,以保证卡片内容的可读性。 +3. **双侧边栏 -> 左侧边栏**:当屏幕宽度小于 1200px 时,右侧边栏会自动隐藏,文章目录导航会切换成浮动目录导航。 + +--- + +## 五、常见问题 + +### Q1: 为什么我配置了 3 列网格,但只显示 2 列? + +**A**: 请检查以下情况: +1. 是否开启了双侧边栏(`position: "both"`)?双侧边栏模式下强制 2 列。 +2. 屏幕宽度是否足够?3 列模式通常需要 ≥1024px 的宽度。 + +### Q2: 为什么在手机上看不到网格效果? + +**A**: 为了保证阅读体验,Firefly 在屏幕宽度小于 1200px 时会自动强制切换为列表模式。手机屏幕太窄,不适合展示多列网格。 + +### Q3: 布局切换按钮在哪里? + +**A**: 布局切换按钮位于导航栏右侧。它仅在屏幕宽度 ≥ 1200px 时显示,因为在小屏幕上系统强制使用列表模式,无需切换。 + +--- + +## 六、总结 + +Firefly 的新版布局系统给予了您更大的自由度。无论是追求视觉冲击力的**三列网格**,还是追求信息密度的**双侧边栏网格**,您都可以通过简单的配置实现。 + +我们建议您根据自己的内容类型和目标读者的设备偏好,尝试不同的组合,找到最适合您的博客形态。 + +--- + +## 相关链接 + +- 📚 [侧边栏配置文档](https://docs-firefly.cuteleaf.cn/config/sidebarConfig-usage/) +- 📚 [站点配置文档](https://docs-firefly.cuteleaf.cn/config/siteConfig-usage/) +- 🏠 [Firefly 官方文档](https://docs-firefly.cuteleaf.cn/) +- ⭐ [Firefly GitHub](https://github.com/CuteLeaf/Firefly) diff --git a/src/content/posts/firefly.md b/src/content/posts/firefly.md new file mode 100644 index 0000000..132ef13 --- /dev/null +++ b/src/content/posts/firefly.md @@ -0,0 +1,44 @@ +--- +title: Firefly 一款清新美观的 Astro 博客主题模板 +published: 1970-01-02 +pinned: true +description: Firefly 是一款基于 Astro 框架和 Fuwari 模板开发的清新美观且现代化个人博客主题模板,专为技术爱好者和内容创作者设计。该主题融合了现代 Web 技术栈,提供了丰富的功能模块和高度可定制的界面,让您能够轻松打造出专业且美观的个人博客网站。 +tags: [Markdown, Firefly, 博客, 主题, 模板] +category: 文章示例 +draft: false +image: ./images/firefly2.webp +--- + +## 🌟 项目概述 + +**Firefly** 是一款基于 Astro 框架和 Fuwari 模板开发的清新美观且现代化个人博客主题模板,专为技术爱好者和内容创作者设计。该主题融合了现代 Web 技术栈,提供了丰富的功能模块和高度可定制的界面,让您能够轻松打造出专业且美观的个人博客网站。 + + +**🖥️在线预览: [Firefly - Demo site](https://firefly.cuteleaf.cn/)** + +**🏠我的博客: [https://blog.cuteleaf.cn](https://blog.cuteleaf.cn/)** + +**📝Firefly使用文档: [https://docs-firefly.cuteleaf.cn](https://docs-firefly.cuteleaf.cn/)** + +**⭐Firefly开源地址:[https://github.com/CuteLeaf/Firefly](https://github.com/CuteLeaf/Firefly)** + +**⭐Fuwari开源地址:[https://github.com/saicaca/fuwari](https://github.com/saicaca/fuwari)** + +::github{repo="CuteLeaf/Firefly"} + +::github{repo="saicaca/fuwari"} + +![Firefly](./images/1.webp) + + +## 🚀 技术架构 + +- **静态站点生成**: 基于 Astro ,提供极快的加载速度和优秀的 SEO 优化 +- **TypeScript 支持**: 完整的类型安全,提升开发体验和代码质量 +- **响应式设计**: 使用 Tailwind CSS 构建,完美适配桌面端和移动端 +- **组件化开发**: 支持 Astro、Svelte 组件,灵活可扩展 + + +## 📖 配置说明 + +> 📚 **详细配置文档**: 查看 [Firefly使用文档](https://docs-firefly.cuteleaf.cn/) 获取完整的配置指南 diff --git a/src/content/posts/guide/cover.webp b/src/content/posts/guide/cover.webp new file mode 100644 index 0000000..c838166 Binary files /dev/null and b/src/content/posts/guide/cover.webp differ diff --git a/src/content/posts/guide/index.md b/src/content/posts/guide/index.md new file mode 100644 index 0000000..152a3a2 --- /dev/null +++ b/src/content/posts/guide/index.md @@ -0,0 +1,112 @@ +--- +title: Firefly 简单使用指南 +published: 1970-01-02 +pinned: true +description: "如何使用 Firefly 博客模板。" +image: "./cover.webp" +tags: ["Firefly", "博客", "Markdown", "使用指南"] +category: 博客指南 +draft: false +--- + + + +这个博客模板是基于 [Astro](https://astro.build/) 构建的。对于本指南中未提及的内容,您可以在 [Astro 文档](https://docs.astro.build/) 中找到答案。 + +## 文章的 Front-matter + +```yaml +--- +title: 我的第一篇博客文章 +published: 2023-09-09 +description: 这是我新 Astro 博客的第一篇文章。 +image: ./cover.jpg +tags: [前端, 开发] +category: 前端开发 +draft: false +--- +``` + + + + +| 属性 | 描述 | +|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `title` | 文章标题。 | +| `published` | 文章发布日期。 | +| `pinned` | 是否将此文章置顶在文章列表顶部。 | +| `description` | 文章的简短描述。显示在首页上。 | +| `image` | 文章封面图片路径。
          1. 以 `http://` 或 `https://` 开头:使用网络图片
          2. 以 `/` 开头:`public` 目录中的图片
          3. 不带任何前缀:相对于 markdown 文件的路径 | +| `tags` | 文章标签。 | +| `category` | 文章分类。 | +| `licenseName` | 文章内容的许可证名称。 | +| `author` | 文章作者。 | +| `sourceLink` | 文章内容的来源链接或参考。 | +| `draft` | 如果这篇文章仍是草稿,则不会显示。 | +| `slug` | 自定义文章 URL 路径。如果不设置,将使用文件名作为 URL。 | + +## 文章文件的放置位置 + +您的文章文件应放置在 `src/content/posts/` 目录中。您也可以创建子目录来更好地组织您的文章和资源。 + +``` +src/content/posts/ +├── post-1.md +└── post-2/ + ├── cover.png + └── index.md +``` + +## 自定义文章 URL (Slug) + +### 什么是 Slug? + +Slug 是文章 URL 路径的自定义部分。如果不设置 slug,系统将使用文件名作为 URL。 + +### Slug 使用示例 + +#### 示例 1:使用文件名作为 URL +```yaml +--- +title: 我的第一篇博客文章 +published: 2023-09-09 +--- +``` +文件:`src/content/posts/my-first-blog-post.md` +URL:`/posts/my-first-blog-post` + +#### 示例 2:自定义 Slug +```yaml +--- +title: 我的第一篇博客文章 +published: 2023-09-09 +slug: hello-world +--- +``` +文件:`src/content/posts/my-first-blog-post.md` +URL:`/posts/hello-world` + +#### 示例 3:中文标题使用英文 Slug +```yaml +--- +title: 如何使用 Firefly 博客主题 +published: 2023-09-09 +slug: how-to-use-firefly-blog-theme +--- +``` +文件:`src/content/posts/firefly-guide.md` +URL:`/posts/how-to-use-firefly-blog-theme` + +### Slug 使用建议 + +1. **使用英文和连字符**:`my-awesome-post` 而不是 `my awesome post` +2. **保持简洁**:避免过长的 slug +3. **具有描述性**:让 URL 能够反映文章内容 +4. **避免特殊字符**:只使用字母、数字和连字符 +5. **保持一致性**:在整个博客中使用相似的命名模式 + +### 注意事项 + +- Slug 一旦设置并发布,建议不要随意更改,以免影响 SEO 和已存在的链接 +- 如果多个文章使用相同的 slug,后面的文章会覆盖前面的 +- Slug 会自动转换为小写 \ No newline at end of file diff --git a/src/content/posts/images/1.webp b/src/content/posts/images/1.webp new file mode 100644 index 0000000..44bb058 Binary files /dev/null and b/src/content/posts/images/1.webp differ diff --git a/src/content/posts/images/both-grid.webp b/src/content/posts/images/both-grid.webp new file mode 100644 index 0000000..404aeb3 Binary files /dev/null and b/src/content/posts/images/both-grid.webp differ diff --git a/src/content/posts/images/both-list.webp b/src/content/posts/images/both-list.webp new file mode 100644 index 0000000..3bd1795 Binary files /dev/null and b/src/content/posts/images/both-list.webp differ diff --git a/src/content/posts/images/firefly1.webp b/src/content/posts/images/firefly1.webp new file mode 100644 index 0000000..49e2f27 Binary files /dev/null and b/src/content/posts/images/firefly1.webp differ diff --git a/src/content/posts/images/firefly2.webp b/src/content/posts/images/firefly2.webp new file mode 100644 index 0000000..bcb6e99 Binary files /dev/null and b/src/content/posts/images/firefly2.webp differ diff --git a/src/content/posts/images/firefly3.webp b/src/content/posts/images/firefly3.webp new file mode 100644 index 0000000..a548ec9 Binary files /dev/null and b/src/content/posts/images/firefly3.webp differ diff --git a/src/content/posts/images/left-grid2.webp b/src/content/posts/images/left-grid2.webp new file mode 100644 index 0000000..5eb02f3 Binary files /dev/null and b/src/content/posts/images/left-grid2.webp differ diff --git a/src/content/posts/images/left-grid3.webp b/src/content/posts/images/left-grid3.webp new file mode 100644 index 0000000..3df1cd8 Binary files /dev/null and b/src/content/posts/images/left-grid3.webp differ diff --git a/src/content/posts/images/left-list.webp b/src/content/posts/images/left-list.webp new file mode 100644 index 0000000..a01cbda Binary files /dev/null and b/src/content/posts/images/left-list.webp differ diff --git a/src/content/posts/images/masonry.webp b/src/content/posts/images/masonry.webp new file mode 100644 index 0000000..889e04f Binary files /dev/null and b/src/content/posts/images/masonry.webp differ diff --git a/src/content/posts/katex-math-example.md b/src/content/posts/katex-math-example.md new file mode 100644 index 0000000..48b2eef --- /dev/null +++ b/src/content/posts/katex-math-example.md @@ -0,0 +1,91 @@ +--- +title: KaTeX 数学公式示例 +published: 1970-01-02 +description: 展示 Firefly 主题对 KaTeX 数学公式的支持,包括行内公式、块级公式和复杂数学符号。 +tags: [KaTeX, Math, 示例] +category: 文章示例 +draft: false +image: api +--- + +本文展示了 [Firefly](https://github.com/CuteLeaf/Firefly) 主题对 KaTeX 数学公式的渲染支持。 + +## 行内公式 (Inline) + +行内公式使用单个 `$` 符号包裹。 + +例如:欧拉公式 $e^{i\pi} + 1 = 0$ 是数学中最优美的公式之一。 + +质能方程 $E = mc^2$ 也是家喻户晓。 + +## 块级公式 (Block) + +块级公式使用两个 `$$` 符号包裹,会居中显示。 + +$$ +\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi} +$$ + +$$ +x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} +$$ + +## 复杂示例 + +### 矩阵 (Matrices) + +$$ +\begin{pmatrix} +a & b \\ +c & d +\end{pmatrix} +\begin{pmatrix} +\alpha & \beta \\ +\gamma & \delta +\end{pmatrix} = +\begin{pmatrix} +a\alpha + b\gamma & a\beta + b\delta \\ +c\alpha + d\gamma & c\beta + d\delta +\end{pmatrix} +$$ + +### 极限与求和 (Limits and Sums) + +$$ +\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6} +$$ + +$$ +\lim_{x \to 0} \frac{\sin x}{x} = 1 +$$ + +### 麦克斯韦方程组 (Maxwell's Equations) + +$$ +\begin{aligned} +\nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \\ +\nabla \cdot \mathbf{B} &= 0 \\ +\nabla \times \mathbf{E} &= -\frac{\partial \mathbf{B}}{\partial t} \\ +\nabla \times \mathbf{B} &= \mu_0\mathbf{J} + \mu_0\varepsilon_0\frac{\partial \mathbf{E}}{\partial t} +\end{aligned} +$$ + +### 化学方程式 (Chemical Equations) + +$$ +\ce{CH4 + 2O2 -> CO2 + 2H2O} +$$ + +## 更多符号 + +| 符号 | 代码 | 渲染结果 | +| :--- | :--- | :--- | +| Alpha | `\alpha` | $\alpha$ | +| Beta | `\beta` | $\beta$ | +| Gamma | `\Gamma` | $\Gamma$ | +| Pi | `\pi` | $\pi$ | +| Infinity | `\infty` | $\infty$ | +| Right Arrow | `\rightarrow` | $\rightarrow$ | +| Partial | `\partial` | $\partial$ | + +更多 KaTeX 语法请参考 [KaTeX Supported Functions](https://katex.org/docs/supported.html)。 diff --git a/src/content/posts/markdown-extended.md b/src/content/posts/markdown-extended.md new file mode 100644 index 0000000..8140557 --- /dev/null +++ b/src/content/posts/markdown-extended.md @@ -0,0 +1,93 @@ +--- +title: Markdown 扩展功能 +published: 1970-01-01 +updated: 1970-01-01 +description: '了解 Firefly 中的 Markdown 功能' +image: '' +tags: [演示, 示例, Markdown, Firefly] +category: '文章示例' +draft: false +--- + +## GitHub 仓库卡片 +您可以添加链接到 GitHub 仓库的动态卡片,在页面加载时,仓库信息会从 GitHub API 获取。 + +::github{repo="CuteLeaf/Firefly"} + +使用代码 `::github{repo="CuteLeaf/Firefly"}` 创建 GitHub 仓库卡片。 + +```markdown +::github{repo="CuteLeaf/Firefly"} +``` + +## 提醒框 + +支持以下类型的提醒框:`note` `tip` `important` `warning` `caution` + +:::note +突出显示用户应该考虑的信息,即使在快速浏览时也是如此。 +::: + +:::tip +可选信息,帮助用户更成功。 +::: + +:::important +用户成功所必需的关键信息。 +::: + +:::warning +由于潜在风险需要用户立即注意的关键内容。 +::: + +:::caution +行动的负面潜在后果。 +::: + +### 基本语法 + +```markdown +:::note +突出显示用户应该考虑的信息,即使在快速浏览时也是如此。 +::: + +:::tip +可选信息,帮助用户更成功。 +::: +``` + +### 自定义标题 + +可以自定义提醒框的标题。 + +:::note[我的自定义标题] +这是一个带有自定义标题的注释。 +::: + +```markdown +:::note[我的自定义标题] +这是一个带有自定义标题的注释。 +::: +``` + +### GitHub 语法 + +> [!TIP] +> 也支持 [GitHub 语法](https://github.com/orgs/community/discussions/16925)。 + +``` +> [!NOTE] +> 也支持 GitHub 语法。 + +> [!TIP] +> 也支持 GitHub 语法。 +``` + +### 剧透 + +您可以为文本添加剧透。文本也支持 **Markdown** 语法。 + +内容 :spoiler[被隐藏了 **哈哈**]! + +```markdown +内容 :spoiler[被隐藏了 **哈哈**]! diff --git a/src/content/posts/markdown-mermaid.md b/src/content/posts/markdown-mermaid.md new file mode 100644 index 0000000..f88f56f --- /dev/null +++ b/src/content/posts/markdown-mermaid.md @@ -0,0 +1,192 @@ +--- +title: Markdown Mermaid 图表 +published: 1970-01-01 +pinned: false +description: 一个包含 Mermaid 的 Markdown 博客文章简单示例。 +tags: [Markdown, 博客, Mermaid, Firefly] +category: 文章示例 +draft: false +--- +# Markdown 中 Mermaid 图表完整指南 + +本文演示如何在 Markdown 文档中使用 Mermaid 创建各种复杂图表,包括流程图、时序图、甘特图、类图和状态图。 + +## 流程图示例 + +流程图非常适合表示流程或算法步骤。 + + + + +```mermaid +graph TD + A[开始] --> B{条件检查} + B -->|是| C[处理步骤 1] + B -->|否| D[处理步骤 2] + C --> E[子过程] + D --> E + subgraph E [子过程详情] + E1[子步骤 1] --> E2[子步骤 2] + E2 --> E3[子步骤 3] + end + E --> F{另一个决策} + F -->|选项 1| G[结果 1] + F -->|选项 2| H[结果 2] + F -->|选项 3| I[结果 3] + G --> J[结束] + H --> J + I --> J +``` + +## 时序图示例 + +时序图显示对象之间随时间的交互。 + +```mermaid +sequenceDiagram + participant User as 用户 + participant WebApp as 网页应用 + participant Server as 服务器 + participant Database as 数据库 + + User->>WebApp: 提交登录请求 + WebApp->>Server: 发送认证请求 + Server->>Database: 查询用户凭据 + Database-->>Server: 返回用户数据 + Server-->>WebApp: 返回认证结果 + + alt 认证成功 + WebApp->>User: 显示欢迎页面 + WebApp->>Server: 请求用户数据 + Server->>Database: 获取用户偏好 + Database-->>Server: 返回偏好设置 + Server-->>WebApp: 返回用户数据 + WebApp->>User: 加载个性化界面 + else 认证失败 + WebApp->>User: 显示错误消息 + WebApp->>User: 提示重新输入 + end +``` + +## 甘特图示例 + +甘特图非常适合显示项目进度和时间线。 + +```mermaid +gantt + title 网站开发项目时间线 + dateFormat YYYY-MM-DD + axisFormat %m/%d + + section 设计阶段 + 需求分析 :a1, 2023-10-01, 7d + UI设计 :a2, after a1, 10d + 原型创建 :a3, after a2, 5d + + section 开发阶段 + 前端开发 :b1, 2023-10-20, 15d + 后端开发 :b2, after a2, 18d + 数据库设计 :b3, after a1, 12d + + section 测试阶段 + 单元测试 :c1, after b1, 8d + 集成测试 :c2, after b2, 10d + 用户验收测试 :c3, after c2, 7d + + section 部署 + 生产环境部署 :d1, after c3, 3d + 发布 :milestone, after d1, 0d +``` + +## 类图示例 + +类图显示系统的静态结构,包括类、属性、方法及其关系。 + +```mermaid +classDiagram + class User { + +String username + +String password + +String email + +Boolean active + +login() + +logout() + +updateProfile() + } + + class Article { + +String title + +String content + +Date publishDate + +Boolean published + +publish() + +edit() + +delete() + } + + class Comment { + +String content + +Date commentDate + +addComment() + +deleteComment() + } + + class Category { + +String name + +String description + +addArticle() + +removeArticle() + } + + User "1" -- "*" Article : 写作 + User "1" -- "*" Comment : 发表 + Article "1" -- "*" Comment : 拥有 + Article "1" -- "*" Category : 属于 +``` + +## 状态图示例 + +状态图显示对象在其生命周期中经历的状态序列。 + +```mermaid +stateDiagram-v2 + [*] --> 草稿 + + 草稿 --> 审核中 : 提交 + 审核中 --> 草稿 : 拒绝 + 审核中 --> 已批准 : 批准 + 已批准 --> 已发布 : 发布 + 已发布 --> 已归档 : 归档 + 已发布 --> 草稿 : 撤回 + + state 已发布 { + [*] --> 活跃 + 活跃 --> 隐藏 : 临时隐藏 + 隐藏 --> 活跃 : 恢复 + 活跃 --> [*] + 隐藏 --> [*] + } + + 已归档 --> [*] +``` + +## 饼图示例 + +饼图非常适合显示比例和百分比数据。 + +```mermaid +pie title 网站流量来源分析 + "搜索引擎" : 45.6 + "直接访问" : 30.1 + "社交媒体" : 15.3 + "推荐链接" : 6.4 + "其他来源" : 2.6 +``` + +## 总结 + +Mermaid 是在 Markdown 文档中创建各种类型图表的强大工具。本文演示了如何使用流程图、时序图、甘特图、类图、状态图和饼图。这些图表可以帮助您更清晰地表达复杂的概念、流程和数据结构。 + +要使用 Mermaid,只需在代码块中指定 mermaid 语言,并使用简洁的文本语法描述图表。Mermaid 会自动将这些描述转换为美观的可视化图表。 + +尝试在您的下一篇技术博客文章或项目文档中使用 Mermaid 图表 - 它们将使您的内容更加专业且更易理解! \ No newline at end of file diff --git a/src/content/posts/markdown-tutorial.md b/src/content/posts/markdown-tutorial.md new file mode 100644 index 0000000..ea14443 --- /dev/null +++ b/src/content/posts/markdown-tutorial.md @@ -0,0 +1,1003 @@ +--- +title: Markdown 教程 +published: 1970-01-01 +pinned: false +description: 一个简明的 Markdown 博客示例。 +tags: [文章示例] +category: 文章示例 +licenseName: "未授权" +author: emn178 +sourceLink: "https://github.com/emn178/markdown" +draft: false + +--- + +这是一个展示如何编写 Markdown 文件的示例。本文档汇总了核心语法与常见扩展(GFM)。 + +- [块级元素](#block-elements) + - [段落与换行](#paragraphs-and-line-breaks) + - [标题](#headers) + - [引用](#blockquotes) + - [列表](#lists) + - [代码块](#code-blocks) + - [分割线](#horizontal-rules) + - [表格](#table) +- [内联元素](#span-elements) + - [链接](#links) + - [强调](#emphasis) + - [行内代码](#code) + - [图片](#images) + - [删除线](#strikethrough) +- [杂项](#miscellaneous) + - [自动链接](#automatic-links) + - [反斜杠转义](#backslash-escapes) +- [内联 HTML](#inline-html) + + +## 块级元素 + + +### 段落与换行 + +#### 段落 + +HTML 标签:`

          ` + +使用一个或多个空行分隔段落。(仅包含**空格**或**制表符**的行也视为空行。) + +代码: + + This will be + inline. + + This is second paragraph. + +预览: + +--- + +This will be +inline. + +This is second paragraph. + +--- + +#### 换行 + +HTML 标签:`
          ` + +在行末添加**两个或更多空格**来产生换行。 + +代码: + + This will be not + inline. + +预览: + +--- + +This will be not +inline. + +--- + + +### 标题 + +Markdown 支持两种标题样式:Setext 与 atx。 + +#### Setext + +HTML 标签:`

          `,`

          ` + +使用**等号 (=)** 表示 `

          `、使用**短横线 (-)** 表示 `

          `,数量不限,作为“下划线”。 + +代码: + + This is an H1 + ============= + This is an H2 + ------------- + +预览: + +--- + +# This is an H1 + +## This is an H2 + +--- + +#### atx + +HTML 标签:`

          `,`

          `,`

          `,`

          `,`

          `,`
          ` + +在行首使用 1-6 个**井号 (#)**,对应 `

          ` 至 `

          `。 + +代码: + + # This is an H1 + ## This is an H2 + ###### This is an H6 + +预览: + +--- + +# This is an H1 + +## This is an H2 + +###### This is an H6 + +--- + +可选:你可以在行尾“闭合” atx 标题。末尾的井号数量**不必与**开头一致。 + +代码: + + # This is an H1 # + ## This is an H2 ## + ### This is an H3 ###### + +预览: + +--- + +# This is an H1 + +## This is an H2 + +### This is an H3 + +--- + + +### 引用 + +HTML 标签:`
          ` + +Markdown 使用邮件风格的 **>** 作为引用符号。若手动换行并在每行前加 >,显示效果最佳。 + +代码: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + > + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + > id sem consectetuer libero luctus adipiscing. + +预览: + +--- + +> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, +> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. +> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. +> +> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse +> id sem consectetuer libero luctus adipiscing. + +--- + +Markdown 允许“偷懒”:在一个硬换行段落中,只在第一行前加 > 即可。 + +代码: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + id sem consectetuer libero luctus adipiscing. + +预览: + +--- + +> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, +> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. +> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + +> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse +> id sem consectetuer libero luctus adipiscing. + +--- + +引用可以嵌套(引用中的引用),通过增加 > 层级实现。 + +代码: + + > This is the first level of quoting. + > + > > This is nested blockquote. + > + > Back to the first level. + +预览: + +--- + +> This is the first level of quoting. +> +> > This is nested blockquote. +> +> Back to the first level. + +--- + +引用内可包含其他 Markdown 元素,包括标题、列表与代码块。 + +代码: + + > ## This is a header. + > + > 1. This is the first list item. + > 2. This is the second list item. + > + > Here's some example code: + > + > return shell_exec("echo $input | $markdown_script"); + +预览: + +--- + +> ## This is a header. +> +> 1. This is the first list item. +> 2. This is the second list item. +> +> Here's some example code: +> +> return shell_exec("echo $input | $markdown_script"); + +--- + + +### 列表 + +Markdown 支持有序(数字)与无序(圆点)列表。 + +#### 无序列表 + +HTML 标签:`
            ` + +无序列表可使用 **星号 (\*)**、**加号 (+)** 或 **短横线 (-)**。 + +代码: + + * Red + * Green + * Blue + +预览: + +--- + +- Red +- Green +- Blue + +--- + +等价于: + +代码: + + + Red + + Green + + Blue + +或者: + +代码: + + - Red + - Green + - Blue + +#### 有序列表 + +HTML 标签:`
              ` + +有序列表使用数字加英文句点: + +代码: + + 1. Bird + 2. McHale + 3. Parish + +预览: + +--- + +1. Bird +2. McHale +3. Parish + +--- + +注意:像下面这样可能会“意外触发”有序列表: + +代码: + + 1986. What a great season. + +预览: + +--- + +1986. What a great season. + +--- + +你可以用**反斜杠转义 (\\)** 句点: + +代码: + + 1986\. What a great season. + +预览: + +--- + +1986\. What a great season. + +--- + +#### 列表中的缩进内容 + +##### 列表项里的引用 + +在列表项内放置引用,需要将 > 符号整体缩进: + +代码: + + * A list item with a blockquote: + + > This is a blockquote + > inside a list item. + +预览: + +--- + +- A list item with a blockquote: + + > This is a blockquote + > inside a list item. + +--- + +##### 列表项里的代码块 + +在列表项内放置代码块,需要缩进两层——**8 个空格**或**两个 Tab**: + +代码: + + * A list item with a code block: + + + +预览: + +--- + +- A list item with a code block: + + + +--- + +##### 嵌套列表 + +代码: + + * A + * A1 + * A2 + * B + * C + +预览: + +--- + +- A + - A1 + - A2 +- B +- C + +--- + + +### 代码块 + +HTML 标签:`
              `
              +
              +将代码块中的每行缩进至少**4 个空格**或**1 个制表符**。
              +
              +代码:
              +
              +    This is a normal paragraph:
              +
              +        This is a code block.
              +
              +预览:
              +
              +---
              +
              +This is a normal paragraph:
              +
              +    This is a code block.
              +
              +---
              +
              +代码块会一直持续,直到遇到未缩进的行(或文末)。
              +
              +在代码块内,**与号 (&)** 和尖括号 **(< >)** 会自动转为 HTML 实体。
              +
              +代码:
              +
              +        
              +
              +预览:
              +
              +---
              +
              +    
              +
              +---
              +
              +下文的“围栏代码块”和“语法高亮”属于扩展语法,你也可以用它们来书写代码块。
              +
              +#### 围栏代码块
              +
              +使用成对的反引号围起来(如下所示),就不需要四空格缩进了。
              +
              +代码:
              +
              +    Here's an example:
              +
              +    ```
              +    function test() {
              +      console.log("notice the blank line before this function?");
              +    }
              +    ```
              +
              +预览:
              +
              +---
              +
              +Here's an example:
              +
              +```
              +function test() {
              +  console.log("notice the blank line before this function?");
              +}
              +```
              +
              +---
              +
              +#### 语法高亮
              +
              +在围栏代码块后添加可选的语言标识,即可启用语法高亮(参见支持语言列表)。
              +
              +代码:
              +
              +    ```ruby
              +    require 'redcarpet'
              +    markdown = Redcarpet.new("Hello World!")
              +    puts markdown.to_html
              +    ```
              +
              +预览:
              +
              +---
              +
              +```ruby
              +require 'redcarpet'
              +markdown = Redcarpet.new("Hello World!")
              +puts markdown.to_html
              +```
              +
              +---
              +
              +
              +### 分割线(水平线)
              +
              +HTML 标签:`
              ` +一行中放置**三个或以上的短横线 (-)、星号 (\*) 或下划线 (\_)**。符号之间允许有空格。 + +代码: + + * * * + *** + ***** + - - - + --------------------------------------- + ___ + +预览: + +--- + +--- + +--- + +--- + +--- + +--- + +--- + +--- + + +### 表格 + +HTML 标签:`` + +这是扩展语法。 + +用**竖线 (|)** 分隔列,用**短横线 (-)** 分隔表头,使用**冒号 (:)** 指定对齐方式。 + +两侧的**竖线 (|)** 与对齐可选。用于表头分隔时,每列至少需要 **3 个短横线**。 + +代码: + +``` +| Left | Center | Right | +|:-----|:------:|------:| +|aaa |bbb |ccc | +|ddd |eee |fff | + + A | B +---|--- +123|456 + + +A |B +--|-- +12|45 +``` + +预览: + +--- + +| Left | Center | Right | +| :--- | :----: | ----: | +| aaa | bbb | ccc | +| ddd | eee | fff | + +| A | B | +| --- | --- | +| 123 | 456 | + +| A | B | +| --- | --- | +| 12 | 45 | + +--- + + +## 内联元素 + + +### 链接 + +HTML 标签:`` + +Markdown 支持两种链接样式:行内链接与引用式链接。 + +#### 行内链接 + +行内链接格式:`[文本](URL "标题")` + +标题可选。 + +代码: + + This is [an example](http://example.com/ "Title") inline link. + + [This link](http://example.net/) has no title attribute. + +预览: + +--- + +This is [an example](http://example.com/ "Title") inline link. + +[This link](http://example.net/) has no title attribute. + +--- + +如果引用同一站点的本地资源,可以使用相对路径: + +代码: + + See my [About](/about/) page for details. + +预览: + +--- + +See my [About](/about/) page for details. + +--- + +#### 引用式链接 + +可以预定义链接引用。定义格式:`[id]: URL "标题"` + +标题同样可选。引用时使用:`[文本][id]` + +代码: + + [id]: http://example.com/ "Optional Title Here" + This is [an example][id] reference-style link. + +预览: + +--- + +[id]: http://example.com/ "Optional Title Here" + +This is [an example][id] reference-style link. + +--- + +说明: + +- 方括号中包含链接标识(**不区分大小写**,可在左侧缩进最多三格空格); +- 随后是冒号; +- 再跟一个或多个空格(或 tab); +- 然后是链接 URL; +- URL 可选地用尖括号包裹; +- 可选地跟随标题属性,用引号或圆括号包裹。 + +以下三种定义等价: + +代码: + + [foo]: http://example.com/ "Optional Title Here" + [foo]: http://example.com/ 'Optional Title Here' + [foo]: http://example.com/ (Optional Title Here) + [foo]: "Optional Title Here" + +如果使用空的方括号,则链接文本本身会作为名称。 + +代码: + + [Google]: http://google.com/ + [Google][] + +预览: + +--- + +[Google]: http://google.com/ + +[Google][] + +--- + + +### 强调 + +HTML 标签:``,`` + +Markdown 使用 **星号 (\*)** 或 **下划线 (\_)** 表示强调。**一个分隔符**对应 ``;**两个分隔符**对应 ``。 + +代码: + + *single asterisks* + + _single underscores_ + + **double asterisks** + + __double underscores__ + +预览: + +--- + +_single asterisks_ + +_single underscores_ + +**double asterisks** + +**double underscores** + +--- + +但如果两侧有空格,则会被视作普通字符而非强调语法。 + +你可以使用反斜杠进行转义: + +代码: + + \*this text is surrounded by literal asterisks\* + +预览: + +--- + +\*this text is surrounded by literal asterisks\* + +--- + + +### 行内代码 + +HTML 标签:`` + +用**反引号 (`)** 包裹。 + +代码: + + Use the `printf()` function. + +预览: + +--- + +Use the `printf()` function. + +--- + +若行内代码中需要包含反引号字符,可使用**多重反引号**作为定界符: + +代码: + + ``There is a literal backtick (`) here.`` + +预览: + +--- + +``There is a literal backtick (`) here.`` + +--- + +行内代码两侧的定界符允许包含空格(开头一个、结尾一个),方便在代码起始或结尾放置反引号字符: + +代码: + + A single backtick in a code span: `` ` `` + + A backtick-delimited string in a code span: `` `foo` `` + +预览: + +--- + +A single backtick in a code span: `` ` `` + +A backtick-delimited string in a code span: `` `foo` `` + +--- + + +### 图片 + +HTML 标签:`` + +Markdown 的图片语法与链接类似,支持行内与引用两种方式。 + +#### 行内图片 + +行内图片语法:`![替代文本](URL "标题")` + +标题可选。 + +代码: + + ![Alt text](/path/to/img.jpg) + + ![Alt text](/path/to/img.jpg "Optional title") + +预览: + +--- + +![Alt text](https://s2.loli.net/2024/08/20/5fszgXeOxmL3Wdv.webp) + +![Alt text](https://s2.loli.net/2024/08/20/5fszgXeOxmL3Wdv.webp "Optional title") + +--- + +说明: + +- 一个感叹号 !; +- 后接方括号,放置图片的替代文本; +- 再接圆括号,内含图片 URL/路径,及可选的标题(引号包裹)。 + +#### 引用式图片 + +引用式图片语法:`![替代文本][id]` + +代码: + + [img id]: https://s2.loli.net/2024/08/20/5fszgXeOxmL3Wdv.webp "Optional title attribute" + ![Alt text][img id] + +预览: + +--- + +[img id]: https://s2.loli.net/2024/08/20/5fszgXeOxmL3Wdv.webp "Optional title attribute" + +![Alt text][img id] + +--- + + +### 删除线 + +HTML 标签:`` + +这是扩展语法。 + +GFM 增加了删除线语法。 + +代码: + +``` +~~Mistaken text.~~ +``` + +预览: + +--- + +~~Mistaken text.~~ + +--- + + +## 杂项 + + +### 自动链接 + +Markdown 支持一种便捷写法来创建“自动链接”(URL 与邮箱地址):只需用尖括号将其包住即可。 + +代码: + + + + + +预览: + +--- + + + + + +--- + +GFM 会自动识别标准 URL 并转换为链接。 + +代码: + +``` +https://github.com/emn178/markdown +``` + +预览: + +--- + +https://github.com/emn178/markdown + +--- + + +### 反斜杠转义 + +Markdown 允许使用反斜杠来转义那些本用于 Markdown 语法的特殊字符,使其按字面显示。 + +代码: + + \*literal asterisks\* + +预览: + +--- + +\*literal asterisks\* + +--- + +以下字符可通过反斜杠转义以按字面量输出: + +Code: + + \ backslash + ` backtick + * asterisk + _ underscore + {} curly braces + [] square brackets + () parentheses + # hash mark + + plus sign + - minus sign (hyphen) + . dot + ! exclamation mark + + +## 内联 HTML + +对于 Markdown 语法未覆盖的标记,直接使用原生 HTML 即可。无需特别声明从 Markdown 切换到 HTML,直接写标签就行。 + +代码: + + This is a regular paragraph. + +
              + + + +
              Foo
              + + This is another regular paragraph. + +预览: + +--- + +This is a regular paragraph. + + + + + +
              Foo
              + +This is another regular paragraph. + +--- + +请注意:在**块级 HTML 标签**内不会处理 Markdown 语法。 + +与块级标签不同,在**行内级标签**内会处理 Markdown 语法。 + +代码: + + **Work** + +
              + **No Work** +
              + +预览: + +--- + +**Work** + +
              + **No Work** +
              +*** \ No newline at end of file diff --git a/src/content/posts/mdx-example.mdx b/src/content/posts/mdx-example.mdx new file mode 100644 index 0000000..8b03af1 --- /dev/null +++ b/src/content/posts/mdx-example.mdx @@ -0,0 +1,69 @@ +--- +title: MDX 格式文章示例 +published: 1970-01-02 +description: 这是一个 MDX 格式的示例文章,展示了如何在 Markdown 中使用 JSX。 +tags: [MDX, 文章示例] +category: 文章示例 +draft: false +image: api +--- + +import { Icon } from 'astro-icon/components' + +:::tip +[Firefly](https://github.com/CuteLeaf/Firefly) 支持 `MDX` 和 `Markdown` 两种类型的文章,你可以在文章中混合使用两种格式,如果没有特别复杂内容和需求,推荐使用 Markdown 格式就够了。 +::: + +## Markdown 和 MDX 的区别 +- Markdown (MD) 是一种轻量级标记语言,允许用户使用纯文本格式编写文档,然后将其转换为格式化的HTML。它因其简洁易用的语法而广受欢迎,特别适合编写文档和博客文章。 +- MDX 是一种扩展了 Markdown 语法的格式,允许在 Markdown 文档中无缝地插入 JSX 代码。通过 MDX,用户可以在文档中嵌入 React 组件,从而实现更丰富的交互性和动态性。 + +| 特性 | Markdown | MDX | +| :--- | :--- | :--- | +| 基础语法 | 支持 (CommonMark) | 支持 (CommonMark) | +| HTML 标签 | 支持 | 支持 (作为 JSX) | +| 组件导入 | 不支持 | 支持 (import) | +| 动态数据 | 不支持 | 支持 (JS 表达式) | +| 样式定制 | 有限 (class/style) | 灵活 (className/CSS-in-JS) | + +## 使用组件 + +这是一个图标组件: +``` +import { Icon } from 'astro-icon/components' + +
              + + 火箭发射! +
              +``` +
              + + 火箭发射! +
              + + +## 使用 JSX + +你也可以直接写 HTML/JSX: +``` +
              + 这是一个自定义样式的 div 块,使用了 Tailwind CSS 类。 +
              +``` +
              + 这是一个自定义样式的 div 块,使用了 Tailwind CSS 类。 +
              + +## 简单的变量导出 +``` +export const year = new Date().getFullYear() + +今年是 {year} 年。 +``` +export const year = new Date().getFullYear() + +今年是 {year} 年。 + + +更多信息,请查看 [MDX 文档](https://mdxjs.com/) \ No newline at end of file diff --git a/src/content/posts/opendevin.md b/src/content/posts/opendevin.md new file mode 100644 index 0000000..c05a59e --- /dev/null +++ b/src/content/posts/opendevin.md @@ -0,0 +1,133 @@ +--- +title: 部署Opendevin在WSL2 on Win11 +published: 2025-01-02 +pinned: false +description: 部署Opendevin在WSL2 on Win11的教程。 +tags: [Opendevin, windows, wsl] +category: 教程系列 +draft: false +--- +# 一、 WSL2下载和设置 + +## 1.勾选WSL2所需的Windows功能 + +打开**控制面板**,选择**程序**,进入**启用或关闭windows功能**,勾选**Hyper-V及其内部**两个选项,向下滑动找到并勾选**适用于Linux的Windows子系统**和**虚拟机平台**,点击**确定**,然后**重启**Windows电脑。 + +> 若没有该选项则表示你的windows版本不是专业版及以上,要对Windows进行更新 + +## 2.下载WSL2 + +设置wsl版本:wsl --set-default-version 2 +**win+R**,cmd进入命令行,设置WSL版本 + +```bash +wsl --set-default-version 2 +``` + +查看可以安装的发行版: + +```bash +wsl --list --online +``` + +安装ununtu 22.04: + +```bash +wsl --install -d Ubuntu-22.04 +``` + +> 注意安装完成后,需要你输入用户名和密码,密码是不显示的,安装完自动进入Linux系统(由于我已经下载安装过,这里就不附加图片了) +> + +# 二、 Docker 下载和设置 + +## 1、Docke下载安装 + +进入docker官网下载docker desktop + +[Docker Desktop: The #1 Containerization Tool for Developers | Docker](https://www.docker.com/products/docker-desktop/) + +下载完成后,点击Docker Desktop Installer.exe进行安装,安装时两个选项都进行勾选,等待安装成功。 + +## 2.Docker设置 + +打开刚刚安装好的Docker desktop(桌面有快捷方式),点击Accept。 +可以选择登录、注册或者不登陆直接进入。 +点击右上角的齿轮(setting)进入设置,在Resources下的**WSL integration**中打开Ubuntu-22.04,并点击**apply & restart** + +## 3.检查Docker是否安装成功 + +进入Ubuntu,输入 + +```bash +sudo -i +``` + +进入root,再输入 + +```bash +docker -v +``` + +查看docker版本,如下图是docker安装成功了。 + +# 三、使用镜像网络模式,开启局域网访问 + +关闭WSL(在power shell或者Windows命令行使用): + +```bash +wsl --shutdown +``` + +过一会docker可能会报一个错,不用管叉掉就行。 +打开此电脑,在导航栏输入%UserProfile%,按回车进入,第一次进来应该是没有.wslconfig文件的,所以新建一个.wslconfig文件,并且用记事本进行编写,具体内容: + +``` +[wsl2]networkingMode=mirroredhostAddressLoopback=true +``` + +之后建议重启电脑,避免不必要的麻烦。 + +# 四、 Opendevin部署 + +## 1.打开Opendevin的官网执行命令 + +目前是2024.7.12官方的docker部署方式如下: + +```bash +WORKSPACE_BASE=$(pwd)/workspace +``` + +上述命令解释:给opendevin一个工作路径,以便于OpenDevin后续在工作目录下读写文件。 + +```bash +docker run -it \ +--pull=always \ +-e SANDBOX_USER_ID=$(id -u) \ +-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \ +-v $WORKSPACE_BASE:/opt/workspace_base \ +-v /var/run/docker.sock:/var/run/docker.sock \ +-p 3000:3000 \ +--add-host host.docker.internal:host-gateway \ +--name opendevin-app-$(date +%Y%m%d%H%M%S) \ +ghcr.io/opendevin/opendevin +``` + +命令解释:拉取执行sandbox和opendevin镜像,其中opendevin镜像用于启动整个opendevin服务,sandbox镜像用于执行命令行和脚本文件,端口映射在了3000。 +由于镜像我已经拉过了,所以这里执行docker run已经不需要下载镜像了,即使下载好启动也比较慢,所以要耐心等待,到我如下两张图的程度就可以了(不要点击命令行中的http://0.0.0.0:3000) + +## 2.Docker Desktop启动opendevin + +进入docker Desktop,在Containers中找到正在跑的Docker容器,点击port下的3000:3000进入OpenDevin界面。 +耐心等待智能体初始化,第一次进入,选择智能体时可以选择语言为简体中文,选择输入你需要使用的对应模型和它的apikey,点击保存,由于我不是第一次进入且我使用工作区的小云朵,上传了yaml.txt文件,所以我的工作区不为空,其次可以看到界面上有一个浏览器的选项卡,它会保留智能体浏览过的网页信息,左下角对话框可以进行交流,左上角是对话历史,右下角四分之一大小的框是命令行执行的界面。 + +# 五、opendevin的简单使用示例 + +我将让智能体用python写一个脚本用于生成斐波那契数列,并执行该脚本。 +我们可以看到它很漂亮的完成了我们的工作,且我们可以在工作区找到脚本文件。 + +后端执行过程: +创建Python脚本文件:系统创建了一个名为`fibonacci.py`的文件。 +编写并插入代码:系统编写了生成斐波那契数列的Python代码,并尝试使用`edit_file`函数将其插入到`fibonacci.py`文件中。然而,由于参数传递错误,产生了一个`AttributeError`异常。随后,系统改用`insert_content_at_line`函数成功将代码插入文件。 +执行脚本:系统运行了`fibonacci.py`脚本,该脚本生成并打印了前10个斐波那契数列。 +返回结果:系统成功运行脚本,并返回生成的斐波那契数列:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]。并提示任务已完成。 \ No newline at end of file diff --git a/src/content/posts/prompt.md b/src/content/posts/prompt.md new file mode 100644 index 0000000..0e154ab --- /dev/null +++ b/src/content/posts/prompt.md @@ -0,0 +1,170 @@ +--- +title: 什么是大模型提示词? +published: 2025-01-03 +pinned: false +description: 什么是大模型提示词? +tags: [Prompt] +category: 学习日志 +draft: true +--- +开始前先推荐一个闯关网站 +[点击跳转](https://gandalf.lakera.ai/) +# 什么是提示词 +提示词是用于和LLMs交互使用的,最终的目的是为了让大模型能够根据你的输入,输出符合你指令、描述的回复。比如对于 Stable Diffusion 模型,提示词是生成图像的描述。对于 Gpt 模型,提示词可以是一个问题、指令或者数据,还可以是特定的约束或要求,如语气、风格、期望的回复长度。对于 VLM 模型,提示词可以是图片的格式,这样生成的文本是图像的描述。提示词对于生成的质量和相关性都有着非常大的影响,因此,如何写一个好的提示词非常重要。 +# 如何写好提示词 +## 提示词工程 +提示词工程指的是精心设计提示词以生成特定输出的过程。目前常用的提示词编写策略有以下三种: +1. Zero-shot prompts 零样本提示 +2. Few-shot prompts 少样本提示 +3. Chain-of-thought prompts 思维链 + +### Zero-shot prompts 零样本提示 +零样本提示指的是提示词没有任何具体的输出示例提示模型。例如: + +Question: +```text +你是一个擅长中文和英文的翻译家,擅长中文和英文相关的文章编写和翻译。 +请将下面的句子翻译成中文,要求语言生动活泼。 +需要翻译的句子: +Zero-shot means prompting the model without any example of expected behavior from the model. +``` +Gpt-4o Answer: +```text +“零-shot”指的是在没有提供任何期望行为示例的情况下,直接引导模型进行操作。 +``` +### Few-shot prompts 少样本提示 +少样本提示指的是提示词有少许输出示例。例如: + +Question: +```text +你是一个擅长中文和英文的翻译家,擅长中文和英文相关的文章编写和翻译。 +请将下面的句子翻译成中文,要求语言生动活泼。 +请参考我给的示例: + +英文: +Zero-shot prompts +中文: +零样本提示 + + +需要翻译的句子: +Zero-shot means prompting the model without any example of expected behavior from the model. +``` +Gpt-4o Answer: +```text +零样本意味着在没有任何期望行为示例的情况下对模型进行提示。 +``` +### Chain-of-thought prompts 思维链(COT) +思维链是指在提示词中给出几步思考的提示,也可以直接让LLM"让我们逐步地思考这个问题”。 +Question: +```text +甲、乙两人从相距490米的A、B两地同时步行出发,相向而行。丙与甲同时从A地出发,在甲、乙二人之间来回跑步(遇到乙立即返回,遇到甲也立即返回)。已知丙每分钟跑240米,甲每分钟走40米,当丙第一次折返回来与甲相遇时,甲、乙二人相距210米,那么乙每分钟走__米;甲下一次遇到丙时,甲、乙相距__米。 +``` +Gpt-4o Answer: +```text +要解答这个问题,我们需要分两部分来解决。 + +首先,我们确定乙的速度。根据问题的描述: + +1. 丙从A地出发,当第一次遇到乙时,立即返回遇到甲。 +2. 甲每分钟走40米,乙每分钟的速度记为\( v \)米。 + +从题目中得知,当丙第一次遇到乙并返回与甲相遇时,甲和乙相距210米。我们需要先计算这段时间内丙和甲各行走的距离。 + +假设第一次丙与乙相遇的时间为\( t \)分钟,则丙跑了\( 240t \)米。 + +当丙第一次返回与甲相遇时,甲走了\( 40t \)米。 + +从A和B出发的甲、乙之间的距离经过\( 210 \)米,所以,他们缩短的距离为\( 490 - 210 = 280 \)米,这段距离正好是他们相对速度的乘积的结果,即: +\[ +40t + vt = 280 +\] +从上面这个方程,我们可以解得乙的速度\( v \)米: +\[ +40 + v = \frac{280}{t} +\] + +现在去解这个方程。考虑到这个问题的动态特性,我们知道他们这个时间段的变化来自于丙的运动。 + +同样在这个期间,丙一定跑完全距离和返回的部分: +因为丙跑到乙后返回甲,所以丙总共跑的距离为 +\[ +2 \times 240t = 480t +\] + +通过合并这些,我们可以再解方程: +\[ +480t = 280t + 210t +\] + +而从另外一个方面: + +\[ +480t = 2 \times 240t, +\] + +通过解这个,我们能得到乙的速度\( v \) + +对于丙再次与甲相遇时,甲乙相距的问题: +因为丙再次与甲相遇时跑过的第二个区间,这次情景中指甲、本次跑距离刚好是合二为一(240),于此可求甲乙速度。 + +综上所述,我们找到乙的速度\( v = 20 \)米。 + +所以, +- 乙的速度为20米/分钟。 +- 甲第二次与丙相遇时相距\( 210 + (40 + 20) \cdot 1.75 = 315 \)米。 + +第二个结果这里较为复数条件下演绎。 +``` +加上思维链提示词后: +Question: +```text +甲、乙两人从相距490米的A、B两地同时步行出发,相向而行。丙与甲同时从A地出发,在甲、乙二人之间来回跑步(遇到乙立即返回,遇到甲也立即返回)。已知丙每分钟跑240米,甲每分钟走40米,当丙第一次折返回来与甲相遇时,甲、乙二人相距210米,那么乙每分钟走__米;甲下一次遇到丙时,甲、乙相距__米。 +请逐步思考这个问题。 +``` +Gpt-4o Answer: +```text +为了求解这个问题,我们可以逐步分析每个人的运动情况。 + +### 第一步:确定甲、丙第一次相遇的位置 + +1. **甲、丙的运动情况** + - 甲的速度为每分钟40米。 + - 丙的速度为每分钟240米。 + - 甲、丙同时从A出发时,丙向着乙跑。 + +2. **当丙第一次回来与甲相遇时** + - 丙和乙相遇后立刻返回,且两者之间第一次相遇时,甲乙间距为210米。 + - 因为开始时两地相距490米,所以此时丙跑的总距离(折返前)是 \( 490 - 210 = 280 \)米。 + +3. **时间计算:** + - 丙跑280米用了 \( \frac{280}{240} = 1.1667 \)分钟(大约1分10秒)。 + +4. **甲的位置:** + - 在1.1667分钟内,甲走了 \( 1.1667 \times 40 = 46.67 \)米。 + +此时,甲到达A点46.67米处,而丙即将跑回此点与甲相遇。 + +### 第二步:求解乙的速度 + +1. **乙的运动情况:** + - 在1.1667分钟内,乙与初始位置B间距减小了210米,分别为 \( 490 - 210 = 280 \)米, 这意味着乙走了210米。 + +2. **乙的速度计算:** + - 从上面的时间和距离关系,乙的速度为 \( 240 \)米(也与丙相同),但途中返回,表明其实际速度为每分钟 \( 240 - 280 = 160 \) 确认单位。 + +### 第三步:甲与丙下一次相遇时的甲乙距离 + +1. **计算甲、丙再次相遇的距离和时间:** + - 从上述信息得知甲和丙速度的合运动关系。 + - 乙继续在反向运动,甲和丙在(A,甲和丙的运动关系是求界距)。 + - 在甲丙相遇时合运动关系和净递减关系即为甲乙差值。需要运算:乙与甲平均值关系。 + - 重复上述,从丙与甲的互动中算出甲乙渐差值至等于新极限约等于方向即: + + 为达到此运算需要扩展后回复,理论物理还原可能但不确定其精确值应在高原速运动下更详。 + +在此运算得到的信息足以再度验证其过程和值,最终结论证明在具体高偏运动中需考虑更微量但关系理论可应对。 +``` +正确答案是乙的速度为60米/分钟,甲乙相距90米。虽然最终没有解答正确, + + diff --git a/src/content/posts/ragflow.md b/src/content/posts/ragflow.md new file mode 100644 index 0000000..2041091 --- /dev/null +++ b/src/content/posts/ragflow.md @@ -0,0 +1,179 @@ +--- +title: ubuntu22.04部署ragflow和ollama +published: 2025-02-11 +pinned: false +description: ubuntu22.04部署ragflow和ollama的教程。 +tags: [Ragflow, ollama, ubuntu] +category: 教程系列 +draft: false +--- +# 安装驱动和CUDA +参考下面这个链接 +[安装NVIDIA驱动](https://blog.csdn.net/huiyoooo/article/details/128015155) +安装过程中可能会出现下面这个报错: +an error occurred while performing building kernel modules see /var/log/nvidia-installer.log for details. unrecognized command-line option... + +原因是系统gcc版本和内核gcc版本不一致,安装gcc-12 + That’s an issue with the Ubuntu kernel. For whatever reasons, the ubuntu kernel team decided to use gcc-12 for kernel compilation while the 22.04 system compiler is gcc-11. Please install gcc-12 from ubuntu repo to be able to compile the nvidia modules again. + +```cpp +sudo apt update +sudo apt install gcc-12 g++-12 +``` + +并将gcc-12设置为默认编译器 + +```cpp +sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12 +sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12 +``` + +验证gcc版本 + +```cpp +gcc --version +``` +# 部署ollama(本地) +打开ollama官网,选择linux,直接下载 +[ollama官网](https://ollama.com/) + + +下载完成之后,可以在官网下载模型,搜索你想下载的模型,复制右边的命令即可下载模型 +[![](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_ab9dc1ad49e957e19dcf24da0010a3cd.jpg)](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_ab9dc1ad49e957e19dcf24da0010a3cd.jpg) + + + + + + + + + + + + + + + + + +## ollama配置 +需要修改ollama配置,如果不修改ragflow没办法访问到ollama +由于默认ollama绑定在127.0.0.1的11434端口,其他IP都拒绝 +使用docker只能访问到自己不能访问到宿主机上,所以需要将ollama服务暴露给网络 +方法修改如下文件: + + vim /etc/systemd/system/ollama.service + +在[Service]下继续添加如下内容,使ollama绑定到0.0.0.0的11434端口 + + Environment="OLLAMA_HOST=0.0.0.0" + +填入的基础URL为 + + http://host.docker.internal:11434/ +参考链接 +[ragflow无法访问ollama](https://github.com/infiniflow/ragflow/issues/612) +## 解决linux中待机时间过长导致ollama回退到cpu处理模式的问题 +笔记本电脑挂起恢复 +在 Linux 上,经过一次挂起/恢复周期后,有时 Ollama 会无法发现你的 NVIDIA GPU,并回退到在 CPU 上运行。你可以通过重新加载 NVIDIA UVM 驱动来解决这个驱动程序错误,命令为 sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm。 + +出现这个问题后,复制下面四条命令重启ollama即可 +The 999 error is a generic "unknown error" code, which isn't super helpful. + +What happens if you try removing the uvm module: + +```bash +sudo systemctl stop ollama +sudo rmmod nvidia_uvm +sudo modprobe nvidia_uvm +sudo systemctl start ollama +``` + +如何找到这个问题呢,停止ollama然后重新启动ollama就会有log出来 + +```bash +sudo systemctl stop ollama +ollama serve +``` +会有这些log出来,说明GPU找不到了,所以ollama又使用cpu来跑模型了 +```bash +msg="unknown error initializing cuda driver library /usr/lib/x86_64-linux-gnu/libcuda.so.550.144.03: cuda driver library init failure: 999" +msg="no compatible GPUs were discovered" +msg="inference compute" id=0 library=cpu variant=avx2 +``` + +解决方法参考链接 +[Unknown error initializing cuda driver library](https://github.com/ollama/ollama/issues/8638) +# 部署ragflow(docker) +搜索ragflow,在github上面clone下来 + +```bash +git clone https://github.com/infiniflow/ragflow.git +``` + +ragflow有两个镜像版本,一个迷你版,一个完整版,推荐下载完整版本 +[![](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_a17643cb3d8b474f4a610d099e79c6dc.jpg)](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_a17643cb3d8b474f4a610d099e79c6dc.jpg) + + + + + + + + + + + + + + + + + + + + +如果要下载完整版本,打开ragflow/docker/.env,把完整版本取消注释,slim版本注释 + + + +[![](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_d2252baf69c436a5e09e368bfe23b1b7.jpg)](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_d2252baf69c436a5e09e368bfe23b1b7.jpg) + + + + +然后执行下面这条命令即可拉取镜像 + +```bash +docker compose -f docker-compose.yml up -d +``` + +完成后,在浏览器输入0.0.0.0即可打开ragflow的网页 + + +## 加入ollama里的模型 +ollama list,复制模型名字 + +[![](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_745a29a276e839c2b1e81e8c9f7518b0.jpg)](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_745a29a276e839c2b1e81e8c9f7518b0.jpg) + + + + + + + + + + + + + + + + + + + +如图填即可 +[![](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_67b1f4fd94f05c7e68502278b61b7e6f.jpg)](https://blog-wordpress.worker.bluishhao.top/wp-content/uploads/2025/02/wp_editor_md_67b1f4fd94f05c7e68502278b61b7e6f.jpg) \ No newline at end of file diff --git a/src/content/posts/video.md b/src/content/posts/video.md new file mode 100644 index 0000000..f2c0936 --- /dev/null +++ b/src/content/posts/video.md @@ -0,0 +1,27 @@ +--- +title: 在文章中嵌入视频 +published: 1970-01-01 +description: 这篇文章演示如何在博客文章中嵌入视频。 +tags: [示例, 视频, Firefly] +category: 文章示例 +draft: false +--- + +只需从 YouTube 或其他平台复制嵌入代码,然后将其粘贴到 markdown 文件中。 + +```yaml +--- +title: 在文章中嵌入视频 +published: 2023-10-19 +// ... +--- + + +``` +## YouTube + + + +## Bilibili + + \ No newline at end of file diff --git a/src/content/spec/about.md b/src/content/spec/about.md new file mode 100644 index 0000000..9baa324 --- /dev/null +++ b/src/content/spec/about.md @@ -0,0 +1,37 @@ +# 关于我 / About Me + +你好!我是 **夏叶** ,一个在数字世界中默默无闻的一片叶子。 + +## 🛠️ 关于本站 + +这个网站使用 **Astro** 框架构建,采用了 [Firefly](https://github.com/CuteLeaf/Firefly) 模板,Firefly 是基于 [Fuwari](https://github.com/saicaca/fuwari) 的二次开发。 + +**Firefly** 是一款基于 Astro 框架和 Fuwari 模板开发的清新美观且现代化个人博客主题模板,专为技术爱好者和内容创作者设计。该主题融合了现代 Web 技术栈,提供了丰富的功能模块和高度可定制的界面,让您能够轻松打造出专业且美观的个人博客网站。 + + +**🖥️在线预览: [Firefly - Demo site](https://firefly.cuteleaf.cn/)** + +**🏠我的博客: [https://blog.cuteleaf.cn](https://blog.cuteleaf.cn/)** + +**📝Firefly使用文档: [https://docs-firefly.cuteleaf.cn](https://docs-firefly.cuteleaf.cn/)** + +**⭐Firefly开源地址:[https://github.com/CuteLeaf/Firefly](https://github.com/CuteLeaf/Firefly)** + +**⭐Fuwari开源地址:[https://github.com/saicaca/fuwari](https://github.com/saicaca/fuwari)** + +::github{repo="CuteLeaf/Firefly"} + +::github{repo="saicaca/fuwari"} + + +## 📫 联系方式 + +如果你想和我交流技术问题,分享有趣的想法,或者只是想打个招呼,欢迎通过以下方式联系我: + +- 💻 **GitHub**: [CuteLeaf](https://github.com/CuteLeaf) +- ✉️ **Email**: [xiaye@msn.com](mailto:xiaye@msn.com) + +--- + +*感谢你的来访!希望在这里能找到对你有用的内容!* + diff --git a/src/content/spec/friends.md b/src/content/spec/friends.md new file mode 100644 index 0000000..4f18375 --- /dev/null +++ b/src/content/spec/friends.md @@ -0,0 +1,48 @@ +--- +title: "友情链接" +description: "与优秀的朋友们一起成长" +--- + +--- + +## 🍀本站信息 + +申请友链前请先在自己网站添加本站友链,请使用以下信息: + +```yaml +站点名称: 夏夜流萤 +站点描述: 飞萤之火自无梦的长夜亮起,绽放在终竟的明天。 +站点链接: https://blog.cuteleaf.cn +头像链接: https://q1.qlogo.cn/g?b=qq&nk=7618557&s=640 + +``` + +## ✉️申请友链 + +请将您的网站信息发送邮件至:`xxx@xxx.com` + +**邮件标题**:`友链申请 - [您的站点名称]` + +**邮件内容模板**: + +``` +站点信息: +站点名称:[您的站点名称] +站点描述:[您的站点描述] +站点链接:[您的站点链接] +头像链接:[您的头像链接] +``` + + +## ⚠️注意事项 + +1. **互换原则**:请先将本站添加到您的友链页面,我会在确认后添加您的友链 +2. **链接维护**:如发现友链网站长期无法访问或内容违规,将会移除友链 +3. **网站要求**: + - 网站内容积极向上,无违法违规信息 + - 不允许含有病毒、木马、恶意代码、弹出广告以及任何危害他人计算机安全的内容。 + - 不能有任何含色情/反动/暴力等不法内容。 + - 网站能够正常访问,加载速度合理 + - 网站有持续的内容更新,不是废弃站点 + - 网站支持HTTPS访问 + - 网站以原创内容为主,非纯采集站 diff --git a/src/content/spec/guestbook.md b/src/content/spec/guestbook.md new file mode 100644 index 0000000..495802d --- /dev/null +++ b/src/content/spec/guestbook.md @@ -0,0 +1,9 @@ +--- +title: "留言板" +description: "在这里留下你的足迹" +--- + +- 请保持友善和尊重,营造良好的交流氛围 +- 欢迎分享你的想法,也可以提出对网站的建议 +- 你的每一条留言都是对我最大的支持 ✨ + diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..df8adcc --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,40 @@ +/// +/// + +declare global { + interface ImportMetaEnv { + readonly MEILI_MASTER_KEY: string; + } + + interface ITOCManager { + init: () => void; + cleanup: () => void; + } + + interface Window { + SidebarTOC: { + manager: ITOCManager | null; + }; + FloatingTOC: { + btn: HTMLElement | null; + panel: HTMLElement | null; + manager: ITOCManager | null; + isPostPage: () => boolean; + }; + toggleFloatingTOC: () => void; + tocInternalNavigation: boolean; + iconifyLoaded: boolean; + // swup is defined in global.d.ts + // biome-ignore lint/suspicious/noExplicitAny: External library without types + spine: any; + closeAnnouncement: () => void; + // biome-ignore lint/suspicious/noExplicitAny: External library without types + __iconifyLoader: any; + __iconifyLoaderInitialized: boolean; + loadIconify: () => Promise; + preloadIcons: (icons: string | string[]) => void; + onIconifyReady: (callback: () => void) => void; + } +} + +export {}; diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..088554a --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,57 @@ +declare global { + interface HTMLElementTagNameMap { + "table-of-contents": HTMLElement & { + init?: () => void; + }; + } + + interface Window { + // biome-ignore lint/suspicious/noExplicitAny: External library + swup: any; + live2dModelInitialized?: boolean; + spineModelInitialized?: boolean; + floatingTOCListenersInitialized?: boolean; + // biome-ignore lint/suspicious/noExplicitAny: External library + spinePlayerInstance?: any; + pagefind: { + search: (query: string) => Promise<{ + results: Array<{ + data: () => Promise; + }>; + }>; + }; + } + + interface MediaQueryList { + addListener(listener: (e: MediaQueryListEvent) => void): void; + removeListener(listener: (e: MediaQueryListEvent) => void): void; + } +} + +interface SearchResult { + url: string; + meta: { + title: string; + }; + excerpt: string; + content?: string; + word_count?: number; + filters?: Record; + anchors?: Array<{ + element: string; + id: string; + text: string; + location: number; + }>; + weighted_locations?: Array<{ + weight: number; + balanced_score: number; + location: number; + }>; + locations?: number[]; + raw_content?: string; + raw_url?: string; + sub_results?: SearchResult[]; +} + +export type { SearchResult }; diff --git a/src/i18n/i18nKey.ts b/src/i18n/i18nKey.ts new file mode 100644 index 0000000..6bbd51d --- /dev/null +++ b/src/i18n/i18nKey.ts @@ -0,0 +1,236 @@ +enum I18nKey { + home = "home", + about = "about", + archive = "archive", + search = "search", + searchNoResults = "searchNoResults", + searchTypeSomething = "searchTypeSomething", + searchLoading = "searchLoading", + searchSummary = "searchSummary", + searchContent = "searchContent", + searchViewMore = "searchViewMore", + other = "other", + + tags = "tags", + categories = "categories", + recentPosts = "recentPosts", + postList = "postList", + tableOfContents = "tableOfContents", + + // 公告栏 + announcement = "announcement", + announcementClose = "announcementClose", + + comments = "comments", + commentSection = "commentSection", + commentSubtitle = "commentSubtitle", + commentNotConfigured = "commentNotConfigured", + guestbookCommentHint = "guestbookCommentHint", + + untitled = "untitled", + uncategorized = "uncategorized", + noTags = "noTags", + + wordCount = "wordCount", + wordsCount = "wordsCount", + minuteCount = "minuteCount", + minutesCount = "minutesCount", + postCount = "postCount", + postsCount = "postsCount", + + themeColor = "themeColor", + + lightMode = "lightMode", + darkMode = "darkMode", + systemMode = "systemMode", + + more = "more", + all = "all", + + author = "author", + publishedAt = "publishedAt", + license = "license", + friends = "friends", + friendsDescription = "friendsDescription", + guestbook = "guestbook", + guestbookDescription = "guestbookDescription", + bangumi = "bangumi", + + // 番组计划筛选和状态文本 + bangumiTitle = "bangumiTitle", + bangumiSubtitle = "bangumiSubtitle", + bangumiFilterAll = "bangumiFilterAll", + bangumiFilterWatched = "bangumiFilterWatched", + bangumiFilterWatching = "bangumiFilterWatching", + bangumiFilterWish = "bangumiFilterWish", + bangumiFilterOnHold = "bangumiFilterOnHold", + bangumiFilterDropped = "bangumiFilterDropped", + bangumiFilterGamePlayed = "bangumiFilterGamePlayed", + bangumiFilterGamePlaying = "bangumiFilterGamePlaying", + bangumiFilterGameWish = "bangumiFilterGameWish", + bangumiFilterBookRead = "bangumiFilterBookRead", + bangumiFilterBookReading = "bangumiFilterBookReading", + bangumiFilterBookWish = "bangumiFilterBookWish", + bangumiFilterMusicListened = "bangumiFilterMusicListened", + bangumiFilterMusicListening = "bangumiFilterMusicListening", + bangumiFilterMusicWish = "bangumiFilterMusicWish", + bangumiStatusWish = "bangumiStatusWish", + bangumiStatusWatched = "bangumiStatusWatched", + bangumiStatusWatching = "bangumiStatusWatching", + bangumiStatusOnHold = "bangumiStatusOnHold", + bangumiStatusDropped = "bangumiStatusDropped", + bangumiStatusGameWish = "bangumiStatusGameWish", + bangumiStatusGamePlayed = "bangumiStatusGamePlayed", + bangumiStatusGamePlaying = "bangumiStatusGamePlaying", + bangumiStatusBookWish = "bangumiStatusBookWish", + bangumiStatusBookRead = "bangumiStatusBookRead", + bangumiStatusBookReading = "bangumiStatusBookReading", + bangumiStatusMusicWish = "bangumiStatusMusicWish", + bangumiStatusMusicListened = "bangumiStatusMusicListened", + bangumiStatusMusicListening = "bangumiStatusMusicListening", + bangumiStatusUnknown = "bangumiStatusUnknown", + bangumiNoData = "bangumiNoData", + bangumiNoDataDescription = "bangumiNoDataDescription", + bangumiEmpty = "bangumiEmpty", + bangumiEmptyReason = "bangumiEmptyReason", + bangumiUsername = "bangumiUsername", + bangumiApi = "bangumiApi", + bangumiConfigTip = "bangumiConfigTip", + bangumiPrevPage = "bangumiPrevPage", + bangumiNextPage = "bangumiNextPage", + bangumiCurrentPage = "bangumiCurrentPage", + bangumiTotalPages = "bangumiTotalPages", + bangumiPage = "bangumiPage", + + // 番组分类 + bangumiCategoryBook = "bangumiCategoryBook", + bangumiCategoryAnime = "bangumiCategoryAnime", + bangumiCategoryMusic = "bangumiCategoryMusic", + bangumiCategoryGame = "bangumiCategoryGame", + bangumiCategoryReal = "bangumiCategoryReal", + + // 番组数据更新 + bangumiLastUpdated = "bangumiLastUpdated", + bangumiUpdatedAt = "bangumiUpdatedAt", + bangumiDataStatic = "bangumiDataStatic", + + // 分页 + paginationFirst = "paginationFirst", + paginationPrev = "paginationPrev", + paginationNext = "paginationNext", + paginationLast = "paginationLast", + paginationPage = "paginationPage", + paginationOf = "paginationOf", + paginationTotal = "paginationTotal", + paginationRecords = "paginationRecords", + + // 404页面 + notFound = "notFound", + notFoundTitle = "notFoundTitle", + notFoundDescription = "notFoundDescription", + backToHome = "backToHome", + + // RSS页面 + rss = "rss", + rssDescription = "rssDescription", + rssSubtitle = "rssSubtitle", + rssLink = "rssLink", + rssCopyToReader = "rssCopyToReader", + rssCopyLink = "rssCopyLink", + rssLatestPosts = "rssLatestPosts", + rssWhatIsRSS = "rssWhatIsRSS", + rssWhatIsRSSDescription = "rssWhatIsRSSDescription", + rssBenefit1 = "rssBenefit1", + rssBenefit2 = "rssBenefit2", + rssBenefit3 = "rssBenefit3", + rssBenefit4 = "rssBenefit4", + rssHowToUse = "rssHowToUse", + rssCopied = "rssCopied", + rssCopyFailed = "rssCopyFailed", + + //最后编辑时间卡片 + lastModifiedPrefix = "lastModifiedPrefix", + lastModifiedOutdated = "lastModifiedOutdated", + lastModifiedDaysAgo = "lastModifiedDaysAgo", + year = "year", + month = "month", + day = "day", + hour = "hour", + minute = "minute", + second = "second", + + // 访问量统计 + pageViews = "pageViews", + pageViewsLoading = "pageViewsLoading", + pageViewsError = "pageViewsError", + + // 置顶 + pinned = "pinned", + + // 壁纸模式 + wallpaperMode = "wallpaperMode", + wallpaperBannerMode = "wallpaperBannerMode", + wallpaperOverlayMode = "wallpaperOverlayMode", + wallpaperNoneMode = "wallpaperNoneMode", + + // 赞助页面 + sponsor = "sponsor", + sponsorTitle = "sponsorTitle", + sponsorDescription = "sponsorDescription", + sponsorMethods = "sponsorMethods", + sponsorList = "sponsorList", + sponsorEmpty = "sponsorEmpty", + sponsorAmount = "sponsorAmount", + sponsorDate = "sponsorDate", + sponsorMessage = "sponsorMessage", + sponsorAnonymous = "sponsorAnonymous", + scanToSponsor = "scanToSponsor", + sponsorGoTo = "sponsorGoTo", + sponsorButton = "sponsorButton", + sponsorButtonText = "sponsorButtonText", + + shareOnSocial = "shareOnSocial", + shareOnSocialDescription = "shareOnSocialDescription", + + // 站点统计 + siteStats = "siteStats", + siteStatsPostCount = "siteStatsPostCount", + siteStatsCategoryCount = "siteStatsCategoryCount", + siteStatsTagCount = "siteStatsTagCount", + siteStatsTotalWords = "siteStatsTotalWords", + siteStatsRunningDays = "siteStatsRunningDays", + siteStatsLastUpdate = "siteStatsLastUpdate", + siteStatsDaysAgo = "siteStatsDaysAgo", + siteStatsDays = "siteStatsDays", + today = "today", + + // 日历组件 + calendarSunday = "calendarSunday", + calendarMonday = "calendarMonday", + calendarTuesday = "calendarTuesday", + calendarWednesday = "calendarWednesday", + calendarThursday = "calendarThursday", + calendarFriday = "calendarFriday", + calendarSaturday = "calendarSaturday", + calendarJanuary = "calendarJanuary", + calendarFebruary = "calendarFebruary", + calendarMarch = "calendarMarch", + calendarApril = "calendarApril", + calendarMay = "calendarMay", + calendarJune = "calendarJune", + calendarJuly = "calendarJuly", + calendarAugust = "calendarAugust", + calendarSeptember = "calendarSeptember", + calendarOctober = "calendarOctober", + calendarNovember = "calendarNovember", + calendarDecember = "calendarDecember", + + shareArticle = "shareArticle", + generatingPoster = "generatingPoster", + copied = "copied", + copyLink = "copyLink", + savePoster = "savePoster", + scanToRead = "scanToRead", +} + +export default I18nKey; diff --git a/src/i18n/languages/en.ts b/src/i18n/languages/en.ts new file mode 100644 index 0000000..44e65c2 --- /dev/null +++ b/src/i18n/languages/en.ts @@ -0,0 +1,249 @@ +import Key from "../i18nKey"; +import type { Translation } from "../translation"; + +export const en: Translation = { + [Key.home]: "Home", + [Key.about]: "About", + [Key.archive]: "Archive", + [Key.search]: "Search", + [Key.searchNoResults]: "No results found.", + [Key.searchTypeSomething]: "Type something to search...", + [Key.searchLoading]: "Searching...", + [Key.searchSummary]: "Summary", + [Key.searchContent]: "Content", + [Key.searchViewMore]: "View more results ({count} more)", + [Key.other]: "Other", + [Key.all]: "All", + + [Key.tags]: "Tags", + [Key.categories]: "Categories", + [Key.recentPosts]: "Recent Posts", + [Key.postList]: "Post List", + [Key.tableOfContents]: "Table of Contents", + + // Announcement + [Key.announcement]: "Announcement", + [Key.announcementClose]: "Close", + + [Key.comments]: "Comments", + [Key.commentSection]: "Comments", + [Key.commentSubtitle]: "Share your thoughts and discuss with everyone", + [Key.commentNotConfigured]: "Comment system not configured", + [Key.guestbookCommentHint]: + "You have not enabled the comment system in the configuration file yet. After enabling it, visitors will be able to leave messages here", + [Key.friends]: "Friends", + [Key.friendsDescription]: + "Here are my friends, welcome to visit and communicate with each other", + [Key.guestbook]: "Guestbook", + [Key.guestbookDescription]: + "Welcome to leave your mark here, share your thoughts and suggestions", + [Key.untitled]: "Untitled", + [Key.uncategorized]: "Uncategorized", + [Key.noTags]: "No Tags", + + [Key.wordCount]: "word", + [Key.wordsCount]: "words", + [Key.minuteCount]: "minute", + [Key.minutesCount]: "minutes", + [Key.postCount]: "post", + [Key.postsCount]: "posts", + + [Key.themeColor]: "Theme Color", + + [Key.lightMode]: "Light", + [Key.darkMode]: "Dark", + [Key.systemMode]: "System", + + [Key.more]: "More", + + [Key.author]: "Author", + [Key.publishedAt]: "Published at", + [Key.license]: "License", + [Key.bangumi]: "Bangumi", + + // Bangumi Filter and Status Text + [Key.bangumiTitle]: "My Bangumi", + [Key.bangumiSubtitle]: "Record my ACG journey", + [Key.bangumiFilterAll]: "All", + [Key.bangumiFilterWatched]: "Watched", + [Key.bangumiFilterWatching]: "Watching", + [Key.bangumiFilterWish]: "Wish", + [Key.bangumiFilterOnHold]: "On Hold", + [Key.bangumiFilterDropped]: "Dropped", + [Key.bangumiFilterGamePlayed]: "Played", + [Key.bangumiFilterGamePlaying]: "Playing", + [Key.bangumiFilterGameWish]: "Wish to Play", + [Key.bangumiFilterBookRead]: "Read", + [Key.bangumiFilterBookReading]: "Reading", + [Key.bangumiFilterBookWish]: "Wish to Read", + [Key.bangumiFilterMusicListened]: "Listened", + [Key.bangumiFilterMusicListening]: "Listening", + [Key.bangumiFilterMusicWish]: "Wish to Listen", + [Key.bangumiStatusWish]: "Wish", + [Key.bangumiStatusWatched]: "Watched", + [Key.bangumiStatusWatching]: "Watching", + [Key.bangumiStatusOnHold]: "On Hold", + [Key.bangumiStatusDropped]: "Dropped", + [Key.bangumiStatusGameWish]: "Wish to Play", + [Key.bangumiStatusGamePlayed]: "Played", + [Key.bangumiStatusGamePlaying]: "Playing", + [Key.bangumiStatusBookWish]: "Wish to Read", + [Key.bangumiStatusBookRead]: "Read", + [Key.bangumiStatusBookReading]: "Reading", + [Key.bangumiStatusMusicWish]: "Wish to Listen", + [Key.bangumiStatusMusicListened]: "Listened", + [Key.bangumiStatusMusicListening]: "Listening", + [Key.bangumiStatusUnknown]: "Unknown", + [Key.bangumiNoData]: "No Data", + [Key.bangumiNoDataDescription]: "No items in this category", + [Key.bangumiEmpty]: "No Data", + [Key.bangumiEmptyReason]: + "Possible reasons: username does not exist, network connection issue, or API limit", + [Key.bangumiUsername]: "Username", + [Key.bangumiApi]: "API", + [Key.bangumiConfigTip]: + "Tip: Please set the correct Bangumi username in the page configuration", + [Key.bangumiPrevPage]: "Previous", + [Key.bangumiNextPage]: "Next", + [Key.bangumiCurrentPage]: "Page", + [Key.bangumiTotalPages]: "of", + [Key.bangumiPage]: "page", + + // Bangumi Categories + [Key.bangumiCategoryBook]: "Book", + [Key.bangumiCategoryAnime]: "Anime", + [Key.bangumiCategoryMusic]: "Music", + [Key.bangumiCategoryGame]: "Game", + [Key.bangumiCategoryReal]: "Real", + + // Bangumi Data Update + [Key.bangumiLastUpdated]: "Data updated at", + [Key.bangumiUpdatedAt]: "Build time", + [Key.bangumiDataStatic]: "Static data", + + // Pagination + [Key.paginationFirst]: "First", + [Key.paginationPrev]: "Previous", + [Key.paginationNext]: "Next", + [Key.paginationLast]: "Last", + [Key.paginationPage]: "Page", + [Key.paginationOf]: "of", + [Key.paginationTotal]: ", Total", + [Key.paginationRecords]: " records", + + // 404 Page + [Key.notFound]: "404", + [Key.notFoundTitle]: "Page Not Found", + [Key.notFoundDescription]: + "Sorry, the page you visited does not exist or has been moved.", + [Key.backToHome]: "Back to Home", + + // RSS Page + [Key.rss]: "RSS Feed", + [Key.rssDescription]: "Subscribe to get latest updates", + [Key.rssSubtitle]: + "Subscribe via RSS to get the latest articles and updates imediately", + [Key.rssLink]: "RSS Link", + [Key.rssCopyToReader]: "Copy link to your RSS reader", + [Key.rssCopyLink]: "Copy Link", + [Key.rssLatestPosts]: "Latest Posts", + [Key.rssWhatIsRSS]: "What is RSS?", + [Key.rssWhatIsRSSDescription]: + "RSS (Really Simple Syndication) is a standard format for publishing frequently updated content. With RSS, you can:", + [Key.rssBenefit1]: + "Get the latest website content in time without manually visiting", + [Key.rssBenefit2]: "Manage subscriptions to multiple websites in one place", + [Key.rssBenefit3]: "Avoid missing important updates and articles", + [Key.rssBenefit4]: "Enjoy an ad-free, clean reading experience", + [Key.rssHowToUse]: + "It is recommended to use Feedly, Inoreader or other RSS readers to subscribe to this site.", + [Key.rssCopied]: "RSS link copied to clipboard!", + [Key.rssCopyFailed]: "Copy failed, please copy the link manually", + + // Last Modified Time Card + [Key.lastModifiedPrefix]: "Last updated on ", + [Key.lastModifiedOutdated]: "Some content may be outdated", + [Key.lastModifiedDaysAgo]: "{days} days ago", + [Key.year]: "year", + [Key.month]: "month", + [Key.day]: "day", + [Key.hour]: "hour", + [Key.minute]: "minute", + [Key.second]: "second", + + // Page Views Statistics + [Key.pageViews]: "Views", + [Key.pageViewsLoading]: "Loading...", + [Key.pageViewsError]: "Stats unavailable", + + // Pinned + [Key.pinned]: "Pinned", + + // Wallpaper Mode + [Key.wallpaperMode]: "Wallpaper Mode", + [Key.wallpaperBannerMode]: "Banner Wallpaper", + [Key.wallpaperOverlayMode]: "Transparent", + [Key.wallpaperNoneMode]: "Solid Color Background", + + // Sponsor Page + [Key.sponsor]: "Sponsor", + [Key.sponsorTitle]: "Support Me", + [Key.sponsorDescription]: + "If my content has been helpful to you, welcome to sponsor me through the following methods. Your support is the driving force for my continued creation!", + [Key.sponsorMethods]: "Payment Methods", + [Key.sponsorList]: "Sponsors", + [Key.sponsorEmpty]: "No sponsors yet", + [Key.sponsorAmount]: "Amount", + [Key.sponsorDate]: "Date", + [Key.sponsorMessage]: "Message", + [Key.sponsorAnonymous]: "Anonymous", + [Key.scanToSponsor]: "Scan to Sponsor", + [Key.sponsorGoTo]: "Go to Sponsor", + [Key.sponsorButton]: "Support & Share", + [Key.sponsorButtonText]: + "If this article helped you, please share or support!", + + [Key.shareOnSocial]: "Share Article", + [Key.shareOnSocialDescription]: + "If this article helped you, please share it with others!", + + // Site Statistics + [Key.siteStats]: "Site Statistics", + [Key.siteStatsPostCount]: "Posts", + [Key.siteStatsCategoryCount]: "Categories", + [Key.siteStatsTagCount]: "Tags", + [Key.siteStatsTotalWords]: "Total Words", + [Key.siteStatsRunningDays]: "Running Days", + [Key.siteStatsLastUpdate]: "Last Activity", + [Key.siteStatsDaysAgo]: "{days} days ago", + [Key.siteStatsDays]: "{days} days", + [Key.today]: "Today", + + // Calendar Component + [Key.calendarSunday]: "Sun", + [Key.calendarMonday]: "Mon", + [Key.calendarTuesday]: "Tue", + [Key.calendarWednesday]: "Wed", + [Key.calendarThursday]: "Thu", + [Key.calendarFriday]: "Fri", + [Key.calendarSaturday]: "Sat", + [Key.calendarJanuary]: "Jan", + [Key.calendarFebruary]: "Feb", + [Key.calendarMarch]: "Mar", + [Key.calendarApril]: "Apr", + [Key.calendarMay]: "May", + [Key.calendarJune]: "Jun", + [Key.calendarJuly]: "Jul", + [Key.calendarAugust]: "Aug", + [Key.calendarSeptember]: "Sep", + [Key.calendarOctober]: "Oct", + [Key.calendarNovember]: "Nov", + [Key.calendarDecember]: "Dec", + + [Key.shareArticle]: "Share", + [Key.generatingPoster]: "Generating Poster...", + [Key.copied]: "Copied", + [Key.copyLink]: "Copy Link", + [Key.savePoster]: "Save Poster", + [Key.scanToRead]: "Scan to Read", +}; diff --git a/src/i18n/languages/ja.ts b/src/i18n/languages/ja.ts new file mode 100644 index 0000000..8a38090 --- /dev/null +++ b/src/i18n/languages/ja.ts @@ -0,0 +1,248 @@ +import Key from "../i18nKey"; +import type { Translation } from "../translation"; + +export const ja: Translation = { + [Key.home]: "ホーム", + [Key.about]: "について", + [Key.archive]: "アーカイブ", + [Key.search]: "検索", + [Key.searchNoResults]: "結果が見つかりません。", + [Key.searchTypeSomething]: "検索キーワードを入力してください。", + [Key.searchLoading]: "検索中...", + [Key.searchSummary]: "摘要", + [Key.searchContent]: "内容", + [Key.searchViewMore]: "さらに結果を表示 ({count} 件)", + [Key.other]: "その他", + [Key.all]: "すべて", + + [Key.tags]: "タグ", + [Key.categories]: "カテゴリ", + [Key.recentPosts]: "最近の投稿", + [Key.postList]: "投稿リスト", + [Key.tableOfContents]: "目次", + + // お知らせ + [Key.announcement]: "お知らせ", + [Key.announcementClose]: "閉じる", + + [Key.comments]: "コメント", + [Key.commentSection]: "コメント欄", + [Key.commentSubtitle]: "あなたの考えを共有し、みんなと議論しましょう", + [Key.commentNotConfigured]: "コメントシステムが設定されていません", + [Key.guestbookCommentHint]: + "設定ファイルでコメントシステムをまだ有効にしていません。有効にすると、訪問者がここにメッセージを残せるようになります", + [Key.friends]: "友達", + [Key.friendsDescription]: + "ここは私の友達です、お互いに訪問して交流することを歓迎します", + [Key.guestbook]: "ゲストブック", + [Key.guestbookDescription]: + "ここに足跡を残して、あなたの考えや提案を共有してください", + [Key.untitled]: "無題", + [Key.uncategorized]: "未分類", + [Key.noTags]: "タグなし", + + [Key.wordCount]: "語", + [Key.wordsCount]: "語", + [Key.minuteCount]: "分", + [Key.minutesCount]: "分", + [Key.postCount]: "投稿", + [Key.postsCount]: "投稿", + + [Key.themeColor]: "テーマカラー", + + [Key.lightMode]: "ライト", + [Key.darkMode]: "ダーク", + [Key.systemMode]: "システム", + + [Key.more]: "もっと", + + [Key.author]: "著者", + [Key.publishedAt]: "公開日", + [Key.license]: "ライセンス", + [Key.bangumi]: "バングミ", + + // バングミフィルターと状態文本 + [Key.bangumiTitle]: "私のバングミ", + [Key.bangumiSubtitle]: "私の二次元の旅を記録する", + [Key.bangumiFilterAll]: "すべて", + [Key.bangumiFilterWatched]: "見た", + [Key.bangumiFilterWatching]: "視聴中", + [Key.bangumiFilterWish]: "見たい", + [Key.bangumiFilterOnHold]: "保留", + [Key.bangumiFilterDropped]: "中断", + [Key.bangumiFilterGamePlayed]: "プレイ済み", + [Key.bangumiFilterGamePlaying]: "プレイ中", + [Key.bangumiFilterGameWish]: "プレイしたい", + [Key.bangumiFilterBookRead]: "読んだ", + [Key.bangumiFilterBookReading]: "読んでいる", + [Key.bangumiFilterBookWish]: "読みたい", + [Key.bangumiFilterMusicListened]: "聴いた", + [Key.bangumiFilterMusicListening]: "聴いている", + [Key.bangumiFilterMusicWish]: "聴きたい", + [Key.bangumiStatusWish]: "見たい", + [Key.bangumiStatusWatched]: "見た", + [Key.bangumiStatusWatching]: "視聴中", + [Key.bangumiStatusOnHold]: "保留", + [Key.bangumiStatusDropped]: "中断", + [Key.bangumiStatusGameWish]: "プレイしたい", + [Key.bangumiStatusGamePlayed]: "プレイ済み", + [Key.bangumiStatusGamePlaying]: "プレイ中", + [Key.bangumiStatusBookWish]: "読みたい", + [Key.bangumiStatusBookRead]: "読んだ", + [Key.bangumiStatusBookReading]: "読んでいる", + [Key.bangumiStatusMusicWish]: "聴きたい", + [Key.bangumiStatusMusicListened]: "聴いた", + [Key.bangumiStatusMusicListening]: "聴いている", + [Key.bangumiStatusUnknown]: "不明", + [Key.bangumiNoData]: "データなし", + [Key.bangumiNoDataDescription]: "このカテゴリに項目がありません", + [Key.bangumiEmpty]: "データなし", + [Key.bangumiEmptyReason]: + "考えられる理由:ユーザー名が存在しない、ネットワーク接続の問題、またはAPI制限", + [Key.bangumiUsername]: "ユーザー名", + [Key.bangumiApi]: "API", + [Key.bangumiConfigTip]: + "ヒント:ページ設定で正しいBangumiユーザー名を設定してください", + [Key.bangumiPrevPage]: "前へ", + [Key.bangumiNextPage]: "次へ", + [Key.bangumiCurrentPage]: "ページ", + [Key.bangumiTotalPages]: "の", + [Key.bangumiPage]: "ページ", + + // バングミカテゴリ + [Key.bangumiCategoryBook]: "本", + [Key.bangumiCategoryAnime]: "アニメ", + [Key.bangumiCategoryMusic]: "音楽", + [Key.bangumiCategoryGame]: "ゲーム", + [Key.bangumiCategoryReal]: "実写", + + // バングミデータ更新 + [Key.bangumiLastUpdated]: "データ更新", + [Key.bangumiUpdatedAt]: "ビルド時間", + [Key.bangumiDataStatic]: "静的データ", + + // ページネーション + [Key.paginationFirst]: "最初", + [Key.paginationPrev]: "前へ", + [Key.paginationNext]: "次へ", + [Key.paginationLast]: "最後", + [Key.paginationPage]: "", + [Key.paginationOf]: "ページ、全", + [Key.paginationTotal]: "ページ、合計", + [Key.paginationRecords]: "件", + + // 404ページ + [Key.notFound]: "404", + [Key.notFoundTitle]: "ページが見つかりません", + [Key.notFoundDescription]: + "申し訳ありませんが、アクセスしたページは存在しないか、移動されています。", + [Key.backToHome]: "ホームに戻る", + + // RSSページ + [Key.rss]: "RSSフィード", + [Key.rssDescription]: "最新の更新を購読する", + [Key.rssSubtitle]: "RSSで購読して、最新の記事と更新を第一时间で取得する", + [Key.rssLink]: "RSSリンク", + [Key.rssCopyToReader]: "RSSリンクをリーダーにコピー", + [Key.rssCopyLink]: "リンクをコピー", + [Key.rssLatestPosts]: "最新の投稿", + [Key.rssWhatIsRSS]: "RSSとは?", + [Key.rssWhatIsRSSDescription]: + "RSS(Really Simple Syndication)は、頻繁に更新されるコンテンツを公開するための標準形式です。RSSを使用すると:", + [Key.rssBenefit1]: + "手動で訪問することなく、最新のウェブサイトコンテンツを及时に取得", + [Key.rssBenefit2]: "1か所で複数のウェブサイトの購読を管理", + [Key.rssBenefit3]: "重要な更新や記事を見逃すことを回避", + [Key.rssBenefit4]: "広告なしのクリーンな読書体験を楽しむ", + [Key.rssHowToUse]: + "Feedly、Inoreaderまたは他のRSSリーダーを使用してこのサイトを購読することを推奨します。", + [Key.rssCopied]: "RSSリンクがクリップボードにコピーされました!", + [Key.rssCopyFailed]: "コピーに失敗しました。手動でリンクをコピーしてください", + + // 最終更新時間カード + [Key.lastModifiedPrefix]: "最終更新日:", + [Key.lastModifiedOutdated]: "一部の内容が古くなっている可能性があります", + [Key.lastModifiedDaysAgo]: "{days}日前", + [Key.year]: "年", + [Key.month]: "月", + [Key.day]: "日", + [Key.hour]: "時", + [Key.minute]: "分", + [Key.second]: "秒", + + // ページビュー統計 + [Key.pageViews]: "閲覧数", + [Key.pageViewsLoading]: "読み込み中...", + [Key.pageViewsError]: "統計利用不可", + + // ピン留め + [Key.pinned]: "ピン留め", + + // 壁紙モード + [Key.wallpaperMode]: "壁紙モード", + [Key.wallpaperBannerMode]: "バナー壁紙", + [Key.wallpaperOverlayMode]: "透明", + [Key.wallpaperNoneMode]: "単色背景", + + // スポンサーページ + [Key.sponsor]: "スポンサー", + [Key.sponsorTitle]: "サポート", + [Key.sponsorDescription]: + "私のコンテンツがあなたの役に立ったなら、以下の方法で私をスポンサーしてください。あなたのサポートは私の継続的な創作の原動力です!", + [Key.sponsorMethods]: "支払い方法", + [Key.sponsorList]: "スポンサーリスト", + [Key.sponsorEmpty]: "スポンサー記録なし", + [Key.sponsorAmount]: "金額", + [Key.sponsorDate]: "日付", + [Key.sponsorMessage]: "メッセージ", + [Key.sponsorAnonymous]: "匿名", + [Key.scanToSponsor]: "スキャンしてスポンサー", + [Key.sponsorGoTo]: "スポンサーへ", + [Key.sponsorButton]: "サポートと共有", + [Key.sponsorButtonText]: + "この記事が役に立ったなら、共有またはサポートをお願いします!", + + [Key.shareOnSocial]: "記事を共有", + [Key.shareOnSocialDescription]: + "この記事が役に立ったなら、ぜひ他の人と共有してください!", + + // サイト統計 + [Key.siteStats]: "サイト統計", + [Key.siteStatsPostCount]: "記事", + [Key.siteStatsCategoryCount]: "カテゴリー", + [Key.siteStatsTagCount]: "タグ", + [Key.siteStatsTotalWords]: "総文字数", + [Key.siteStatsRunningDays]: "運用日数", + [Key.siteStatsLastUpdate]: "最終活動", + [Key.siteStatsDaysAgo]: "{days} 日前", + [Key.siteStatsDays]: "{days} 日", + [Key.today]: "今日", + + // カレンダーコンポーネント + [Key.calendarSunday]: "日", + [Key.calendarMonday]: "月", + [Key.calendarTuesday]: "火", + [Key.calendarWednesday]: "水", + [Key.calendarThursday]: "木", + [Key.calendarFriday]: "金", + [Key.calendarSaturday]: "土", + [Key.calendarJanuary]: "1月", + [Key.calendarFebruary]: "2月", + [Key.calendarMarch]: "3月", + [Key.calendarApril]: "4月", + [Key.calendarMay]: "5月", + [Key.calendarJune]: "6月", + [Key.calendarJuly]: "7月", + [Key.calendarAugust]: "8月", + [Key.calendarSeptember]: "9月", + [Key.calendarOctober]: "10月", + [Key.calendarNovember]: "11月", + [Key.calendarDecember]: "12月", + + [Key.shareArticle]: "共有", + [Key.generatingPoster]: "ポスター生成中...", + [Key.copied]: "コピーしました", + [Key.copyLink]: "リンクをコピー", + [Key.savePoster]: "ポスターを保存", + [Key.scanToRead]: "QRコードで読む", +}; diff --git a/src/i18n/languages/ru.ts b/src/i18n/languages/ru.ts new file mode 100644 index 0000000..850bd6b --- /dev/null +++ b/src/i18n/languages/ru.ts @@ -0,0 +1,250 @@ +import Key from "../i18nKey"; +import type { Translation } from "../translation"; + +export const ru: Translation = { + [Key.home]: "Главная", + [Key.about]: "О нас", + [Key.archive]: "Архив", + [Key.search]: "Поиск", + [Key.searchNoResults]: "Результаты не найдены.", + [Key.searchTypeSomething]: "Введите ключевое слово для поиска...", + [Key.searchLoading]: "Поиск...", + [Key.searchSummary]: "Резюме", + [Key.searchContent]: "Содержание", + [Key.searchViewMore]: "Показать еще ({count} шт)", + [Key.other]: "Прочее", + [Key.all]: "Все", + + [Key.tags]: "Теги", + [Key.categories]: "Категории", + [Key.recentPosts]: "Последние посты", + [Key.postList]: "Список постов", + [Key.tableOfContents]: "Содержание", + + // Объявление + [Key.announcement]: "Объявление", + [Key.announcementClose]: "Закрыть", + + [Key.comments]: "Комментарии", + [Key.commentSection]: "Комментарии", + [Key.commentSubtitle]: "Поделитесь своими мыслями и обсудите с остальными", + [Key.commentNotConfigured]: "Система комментариев не настроена", + [Key.guestbookCommentHint]: + "Вы еще не включили систему комментариев в файле конфигурации. После включения посетители смогут оставлять сообщения здесь", + [Key.friends]: "Ссылки", + [Key.friendsDescription]: + "Вот мои друзья, добро пожаловать посетить и общаться друг с другом", + [Key.guestbook]: "Гостевая книга", + [Key.guestbookDescription]: + "Добро пожаловать, оставьте свой след здесь, поделитесь своими мыслями и предложениями", + [Key.untitled]: "Без названия", + [Key.uncategorized]: "Без категории", + [Key.noTags]: "Нет тегов", + + [Key.wordCount]: "слово", + [Key.wordsCount]: "слова", + [Key.minuteCount]: "минута", + [Key.minutesCount]: "минуты", + [Key.postCount]: "пост", + [Key.postsCount]: "постов", + + [Key.themeColor]: "Цвет темы", + + [Key.lightMode]: "Светлая", + [Key.darkMode]: "Тёмная", + [Key.systemMode]: "Система", + + [Key.more]: "Ещё", + + [Key.author]: "Автор", + [Key.publishedAt]: "Опубликовано", + [Key.license]: "Лицензия", + [Key.bangumi]: "Бангуми", + + // Фильтр и статус Бангуми текст + [Key.bangumiTitle]: "Мой план группы", + [Key.bangumiSubtitle]: "Запись моего аниме путешествия", + [Key.bangumiFilterAll]: "Все", + [Key.bangumiFilterWatched]: "Просмотрено", + [Key.bangumiFilterWatching]: "Смотрю", + [Key.bangumiFilterWish]: "Хочу", + [Key.bangumiFilterOnHold]: "Отложено", + [Key.bangumiFilterDropped]: "Брошено", + [Key.bangumiFilterGamePlayed]: "Пройдено", + [Key.bangumiFilterGamePlaying]: "Играю", + [Key.bangumiFilterGameWish]: "Хочу сыграть", + [Key.bangumiFilterBookRead]: "Прочитано", + [Key.bangumiFilterBookReading]: "Читаю", + [Key.bangumiFilterBookWish]: "Хочу прочитать", + [Key.bangumiFilterMusicListened]: "Прослушано", + [Key.bangumiFilterMusicListening]: "Слушаю", + [Key.bangumiFilterMusicWish]: "Хочу послушать", + [Key.bangumiStatusWish]: "Хочу", + [Key.bangumiStatusWatched]: "Просмотрено", + [Key.bangumiStatusWatching]: "Смотрю", + [Key.bangumiStatusOnHold]: "Отложено", + [Key.bangumiStatusDropped]: "Брошено", + [Key.bangumiStatusGameWish]: "Хочу сыграть", + [Key.bangumiStatusGamePlayed]: "Пройдено", + [Key.bangumiStatusGamePlaying]: "Играю", + [Key.bangumiStatusBookWish]: "Хочу прочитать", + [Key.bangumiStatusBookRead]: "Прочитано", + [Key.bangumiStatusBookReading]: "Читаю", + [Key.bangumiStatusMusicWish]: "Хочу послушать", + [Key.bangumiStatusMusicListened]: "Прослушано", + [Key.bangumiStatusMusicListening]: "Слушаю", + [Key.bangumiStatusUnknown]: "Неизвестно", + [Key.bangumiNoData]: "Нет данных", + [Key.bangumiNoDataDescription]: "В этой категории нет элементов", + [Key.bangumiEmpty]: "Нет данных", + [Key.bangumiEmptyReason]: + "Возможные причины: имя пользователя не существует, проблема с подключением к сети или ограничение API", + [Key.bangumiUsername]: "Имя пользователя", + [Key.bangumiApi]: "API", + [Key.bangumiConfigTip]: + "Подсказка: установите правильное имя пользователя Bangumi в конфигурации страницы", + [Key.bangumiPrevPage]: "Предыдущая", + [Key.bangumiNextPage]: "Следующая", + [Key.bangumiCurrentPage]: "Страница", + [Key.bangumiTotalPages]: "из", + [Key.bangumiPage]: "страница", + + // Категории Бангуми + [Key.bangumiCategoryBook]: "Книга", + [Key.bangumiCategoryAnime]: "Аниме", + [Key.bangumiCategoryMusic]: "Музыка", + [Key.bangumiCategoryGame]: "Игра", + [Key.bangumiCategoryReal]: "Реальный", + + // Обновление данных Бангуми + [Key.bangumiLastUpdated]: "Данные обновлены", + [Key.bangumiUpdatedAt]: "Время сборки", + [Key.bangumiDataStatic]: "Статические данные", + + // Пагинация + [Key.paginationFirst]: "Первая", + [Key.paginationPrev]: "Предыдущая", + [Key.paginationNext]: "Следующая", + [Key.paginationLast]: "Последняя", + [Key.paginationPage]: "Страница", + [Key.paginationOf]: "из", + [Key.paginationTotal]: ", всего", + [Key.paginationRecords]: " записей", + + // 404 Страница + [Key.notFound]: "404", + [Key.notFoundTitle]: "Страница не найдена", + [Key.notFoundDescription]: + "Извините, страница, которую вы посетили, не существует или была перемещена.", + [Key.backToHome]: "Вернуться на главную", + + // RSS Страница + [Key.rss]: "RSS лента", + [Key.rssDescription]: "Подпишитесь, чтобы получать последние обновления", + [Key.rssSubtitle]: + "Подписаться через RSS, чтобы сразу получать последние статьи и обновления", + [Key.rssLink]: "RSS ссылка", + [Key.rssCopyToReader]: "Скопировать ссылку в ваш RSS читатель", + [Key.rssCopyLink]: "Скопировать ссылку", + [Key.rssLatestPosts]: "Последние посты", + [Key.rssWhatIsRSS]: "Что такое RSS?", + [Key.rssWhatIsRSSDescription]: + "RSS (Really Simple Syndication) — стандартный формат для публикации часто обновляемого контента. С RSS вы можете:", + [Key.rssBenefit1]: + "Получать последний контент сайта вовремя без ручного посещения", + [Key.rssBenefit2]: "Управлять подписками на несколько сайтов в одном месте", + [Key.rssBenefit3]: "Не пропускать важные обновления и статьи", + [Key.rssBenefit4]: "Наслаждаться чистым чтением без рекламы", + [Key.rssHowToUse]: + "Рекомендуется использовать Feedly, Inoreader или другие RSS читатели для подписки на этот сайт.", + [Key.rssCopied]: "RSS ссылка скопирована в буфер обмена!", + [Key.rssCopyFailed]: + "Ошибка копирования, пожалуйста, скопируйте ссылку вручную", + + // Последнее изменение + [Key.lastModifiedPrefix]: "Последнее обновление: ", + [Key.lastModifiedOutdated]: "Некоторый контент может быть устаревшим", + [Key.lastModifiedDaysAgo]: "{days} дней назад", + [Key.year]: "год", + [Key.month]: "месяц", + [Key.day]: "день", + [Key.hour]: "час", + [Key.minute]: "минута", + [Key.second]: "секунда", + + // Статистика просмотров + [Key.pageViews]: "Просмотры", + [Key.pageViewsLoading]: "Загрузка...", + [Key.pageViewsError]: "Статистика недоступна", + + // Закреплено + [Key.pinned]: "Закреплено", + + // Режим обоев + [Key.wallpaperMode]: "Режим обоев", + [Key.wallpaperBannerMode]: "Баннер обои", + [Key.wallpaperOverlayMode]: "Прозрачный", + [Key.wallpaperNoneMode]: "Однотонный фон", + + // Страница спонсоров + [Key.sponsor]: "Спонсор", + [Key.sponsorTitle]: "Поддержать меня", + [Key.sponsorDescription]: + "Если мой контент был полезен для вас, добро пожаловать поддержать меня следующими способами. Ваша поддержка - это движущая сила моего постоянного творчества!", + [Key.sponsorMethods]: "Способы оплаты", + [Key.sponsorList]: "Спонсоры", + [Key.sponsorEmpty]: "Пока нет спонсоров", + [Key.sponsorAmount]: "Сумма", + [Key.sponsorDate]: "Дата", + [Key.sponsorMessage]: "Сообщение", + [Key.sponsorAnonymous]: "Анонимно", + [Key.scanToSponsor]: "Сканировать для поддержки", + [Key.sponsorGoTo]: "Перейти к спонсору", + [Key.sponsorButton]: "Поддержка и Поделиться", + [Key.sponsorButtonText]: + "Если эта статья помогла вам, пожалуйста, поделитесь или поддержите!", + + [Key.shareOnSocial]: "Поделиться статьей", + [Key.shareOnSocialDescription]: + "Если эта статья помогла вам, пожалуйста, поделитесь ею с другими!", + + // Статистика сайта + [Key.siteStats]: "Статистика сайта", + [Key.siteStatsPostCount]: "Статьи", + [Key.siteStatsCategoryCount]: "Категории", + [Key.siteStatsTagCount]: "Теги", + [Key.siteStatsTotalWords]: "Всего слов", + [Key.siteStatsRunningDays]: "Дней работы", + [Key.siteStatsLastUpdate]: "Последняя активность", + [Key.siteStatsDaysAgo]: "{days} дней назад", + [Key.siteStatsDays]: "{days} дней", + [Key.today]: "Сегодня", + + // Компонент календаря + [Key.calendarSunday]: "Вс", + [Key.calendarMonday]: "Пн", + [Key.calendarTuesday]: "Вт", + [Key.calendarWednesday]: "Ср", + [Key.calendarThursday]: "Чт", + [Key.calendarFriday]: "Пт", + [Key.calendarSaturday]: "Сб", + [Key.calendarJanuary]: "Янв", + [Key.calendarFebruary]: "Фев", + [Key.calendarMarch]: "Мар", + [Key.calendarApril]: "Апр", + [Key.calendarMay]: "Май", + [Key.calendarJune]: "Июн", + [Key.calendarJuly]: "Июл", + [Key.calendarAugust]: "Авг", + [Key.calendarSeptember]: "Сен", + [Key.calendarOctober]: "Окт", + [Key.calendarNovember]: "Ноя", + [Key.calendarDecember]: "Дек", + + [Key.shareArticle]: "Поделиться", + [Key.generatingPoster]: "Создание постера...", + [Key.copied]: "Скопировано", + [Key.copyLink]: "Копировать ссылку", + [Key.savePoster]: "Сохранить постер", + [Key.scanToRead]: "Сканируйте, чтобы прочитать", +}; diff --git a/src/i18n/languages/zh_CN.ts b/src/i18n/languages/zh_CN.ts new file mode 100644 index 0000000..607dba1 --- /dev/null +++ b/src/i18n/languages/zh_CN.ts @@ -0,0 +1,240 @@ +import Key from "../i18nKey"; +import type { Translation } from "../translation"; + +export const zh_CN: Translation = { + [Key.home]: "主页", + [Key.about]: "关于我", + [Key.archive]: "归档", + [Key.search]: "搜索", + [Key.searchNoResults]: "找不到相关结果。", + [Key.searchTypeSomething]: "请输入搜索关键词。", + [Key.searchLoading]: "正在搜索...", + [Key.searchSummary]: "摘要", + [Key.searchContent]: "内容", + [Key.searchViewMore]: "查看更多结果 ({count} 个更多)", + [Key.other]: "其他", + [Key.all]: "全部", + + [Key.tags]: "标签", + [Key.categories]: "分类", + [Key.recentPosts]: "最新文章", + [Key.postList]: "文章列表", + [Key.tableOfContents]: "目录", + + // 公告栏 + [Key.announcement]: "公告", + [Key.announcementClose]: "关闭", + + [Key.comments]: "评论", + [Key.commentSection]: "评论区", + [Key.commentSubtitle]: "分享你的想法,与大家交流讨论", + [Key.commentNotConfigured]: "评论系统暂未配置", + [Key.guestbookCommentHint]: + "您还未在配置文件中启用评论系统,启用后访客才可在此留言", + [Key.friends]: "友链", + [Key.friendsDescription]: "这里是我的朋友们,欢迎互相访问交流", + [Key.guestbook]: "留言", + [Key.guestbookDescription]: "欢迎在这里留下你的足迹,分享你的想法和建议", + [Key.untitled]: "无标题", + [Key.uncategorized]: "未分类", + [Key.noTags]: "无标签", + + [Key.wordCount]: "字", + [Key.wordsCount]: "字", + [Key.minuteCount]: "分钟", + [Key.minutesCount]: "分钟", + [Key.postCount]: "篇文章", + [Key.postsCount]: "篇文章", + + [Key.themeColor]: "主题色", + + [Key.lightMode]: "亮色", + [Key.darkMode]: "暗色", + [Key.systemMode]: "跟随系统", + + [Key.more]: "更多", + + [Key.author]: "作者", + [Key.publishedAt]: "发布于", + [Key.license]: "许可协议", + [Key.bangumi]: "番组计划", + + // 番组计划筛选和状态文本 + [Key.bangumiTitle]: "我的番组计划", + [Key.bangumiSubtitle]: "记录我的二次元之旅", + [Key.bangumiFilterAll]: "全部", + [Key.bangumiFilterWatched]: "看过", + [Key.bangumiFilterWatching]: "在看", + [Key.bangumiFilterWish]: "想看", + [Key.bangumiFilterOnHold]: "搁置", + [Key.bangumiFilterDropped]: "抛弃", + [Key.bangumiFilterGamePlayed]: "玩过", + [Key.bangumiFilterGamePlaying]: "在玩", + [Key.bangumiFilterGameWish]: "想玩", + [Key.bangumiFilterBookRead]: "读过", + [Key.bangumiFilterBookReading]: "在读", + [Key.bangumiFilterBookWish]: "想读", + [Key.bangumiFilterMusicListened]: "听过", + [Key.bangumiFilterMusicListening]: "在听", + [Key.bangumiFilterMusicWish]: "想听", + [Key.bangumiStatusWish]: "想看", + [Key.bangumiStatusWatched]: "看过", + [Key.bangumiStatusWatching]: "在看", + [Key.bangumiStatusOnHold]: "搁置", + [Key.bangumiStatusDropped]: "抛弃", + [Key.bangumiStatusGameWish]: "想玩", + [Key.bangumiStatusGamePlayed]: "玩过", + [Key.bangumiStatusGamePlaying]: "在玩", + [Key.bangumiStatusBookWish]: "想读", + [Key.bangumiStatusBookRead]: "读过", + [Key.bangumiStatusBookReading]: "在读", + [Key.bangumiStatusMusicWish]: "想听", + [Key.bangumiStatusMusicListened]: "听过", + [Key.bangumiStatusMusicListening]: "在听", + [Key.bangumiStatusUnknown]: "未知", + [Key.bangumiNoData]: "暂无数据", + [Key.bangumiNoDataDescription]: "该分类下还没有任何条目", + [Key.bangumiEmpty]: "暂无数据", + [Key.bangumiEmptyReason]: "可能的原因:用户名不存在、网络连接问题或API限制", + [Key.bangumiUsername]: "用户名", + [Key.bangumiApi]: "API", + [Key.bangumiConfigTip]: "提示:请在页面配置中设置正确的Bangumi用户名", + [Key.bangumiPrevPage]: "上一页", + [Key.bangumiNextPage]: "下一页", + [Key.bangumiCurrentPage]: "第", + [Key.bangumiTotalPages]: "页,共", + [Key.bangumiPage]: "页", + + // 番组分类 + [Key.bangumiCategoryBook]: "书籍", + [Key.bangumiCategoryAnime]: "动画", + [Key.bangumiCategoryMusic]: "音乐", + [Key.bangumiCategoryGame]: "游戏", + [Key.bangumiCategoryReal]: "三次元", + + // 番组数据更新 + [Key.bangumiLastUpdated]: "数据更新于", + [Key.bangumiUpdatedAt]: "构建时间", + [Key.bangumiDataStatic]: "静态数据", + + // 分页 + [Key.paginationFirst]: "首页", + [Key.paginationPrev]: "上一页", + [Key.paginationNext]: "下一页", + [Key.paginationLast]: "末页", + [Key.paginationPage]: "第", + [Key.paginationOf]: "页,共", + [Key.paginationTotal]: "页,总计", + [Key.paginationRecords]: "条记录", + + // 404页面 + [Key.notFound]: "404", + [Key.notFoundTitle]: "页面未找到", + [Key.notFoundDescription]: "抱歉,您访问的页面不存在或已被移动。", + [Key.backToHome]: "返回首页", + + // RSS页面 + [Key.rss]: "RSS 订阅", + [Key.rssDescription]: "订阅获取最新更新", + [Key.rssSubtitle]: "通过 RSS 订阅,第一时间获取最新文章和动态", + [Key.rssLink]: "RSS 链接", + [Key.rssCopyToReader]: "复制链接到你的 RSS 阅读器", + [Key.rssCopyLink]: "复制链接", + [Key.rssLatestPosts]: "最新文章", + [Key.rssWhatIsRSS]: "什么是 RSS?", + [Key.rssWhatIsRSSDescription]: + "RSS(Really Simple Syndication)是一种用于发布经常更新内容的标准格式。通过 RSS,你可以:", + [Key.rssBenefit1]: "及时获取网站最新内容,无需手动访问", + [Key.rssBenefit2]: "在一个地方管理多个网站的订阅", + [Key.rssBenefit3]: "避免错过重要更新和文章", + [Key.rssBenefit4]: "享受无广告的纯净阅读体验", + [Key.rssHowToUse]: "推荐使用 Feedly、Inoreader 或其他 RSS 阅读器来订阅本站。", + [Key.rssCopied]: "RSS 链接已复制到剪贴板!", + [Key.rssCopyFailed]: "复制失败,请手动复制链接", + + //最后编辑时间卡片 + [Key.lastModifiedPrefix]: "最后更新于 ", + [Key.lastModifiedOutdated]: "部分内容可能已过时", + [Key.lastModifiedDaysAgo]: "距今已过 {days} 天", + [Key.year]: "年", + [Key.month]: "月", + [Key.day]: "日", + [Key.hour]: "时", + [Key.minute]: "分", + [Key.second]: "秒", + + // 访问量统计 + [Key.pageViews]: "浏览量", + [Key.pageViewsLoading]: "加载中...", + [Key.pageViewsError]: "统计不可用", + + // 置顶 + [Key.pinned]: "置顶", + + // 壁纸模式 + [Key.wallpaperMode]: "壁纸模式", + [Key.wallpaperBannerMode]: "横幅壁纸", + [Key.wallpaperOverlayMode]: "全屏透明", + [Key.wallpaperNoneMode]: "纯色背景", + + // 赞助页面 + [Key.sponsor]: "赞助", + [Key.sponsorTitle]: "赞助支持", + [Key.sponsorDescription]: + "如果我的内容对你有帮助,欢迎通过以下方式赞助我,你的支持是我持续创作的动力!", + [Key.sponsorMethods]: "赞助方式", + [Key.sponsorList]: "赞助列表", + [Key.sponsorEmpty]: "暂无赞助记录", + [Key.sponsorAmount]: "金额", + [Key.sponsorDate]: "日期", + [Key.sponsorMessage]: "留言", + [Key.sponsorAnonymous]: "匿名", + [Key.scanToSponsor]: "扫码赞助", + [Key.sponsorGoTo]: "前往赞助", + [Key.sponsorButton]: "支持与分享", + [Key.sponsorButtonText]: + "如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!", + + [Key.shareOnSocial]: "文章分享", + [Key.shareOnSocialDescription]: "如果这篇文章对你有帮助,欢迎分享给更多人!", + + // 站点统计 + [Key.siteStats]: "站点统计", + [Key.siteStatsPostCount]: "文章", + [Key.siteStatsCategoryCount]: "分类", + [Key.siteStatsTagCount]: "标签", + [Key.siteStatsTotalWords]: "总字数", + [Key.siteStatsRunningDays]: "运行时长", + [Key.siteStatsLastUpdate]: "最后活动", + [Key.siteStatsDaysAgo]: "{days} 天前", + [Key.siteStatsDays]: "{days} 天", + [Key.today]: "今天", + + // 日历组件 + [Key.calendarSunday]: "日", + [Key.calendarMonday]: "一", + [Key.calendarTuesday]: "二", + [Key.calendarWednesday]: "三", + [Key.calendarThursday]: "四", + [Key.calendarFriday]: "五", + [Key.calendarSaturday]: "六", + [Key.calendarJanuary]: "1月", + [Key.calendarFebruary]: "2月", + [Key.calendarMarch]: "3月", + [Key.calendarApril]: "4月", + [Key.calendarMay]: "5月", + [Key.calendarJune]: "6月", + [Key.calendarJuly]: "7月", + [Key.calendarAugust]: "8月", + [Key.calendarSeptember]: "9月", + [Key.calendarOctober]: "10月", + [Key.calendarNovember]: "11月", + [Key.calendarDecember]: "12月", + + [Key.shareArticle]: "分享", + [Key.generatingPoster]: "海报生成中...", + [Key.copied]: "已复制", + [Key.copyLink]: "复制链接", + [Key.savePoster]: "保存海报", + [Key.scanToRead]: "扫码阅读文章", +}; diff --git a/src/i18n/languages/zh_TW.ts b/src/i18n/languages/zh_TW.ts new file mode 100644 index 0000000..9f45ff7 --- /dev/null +++ b/src/i18n/languages/zh_TW.ts @@ -0,0 +1,242 @@ +import Key from "../i18nKey"; +import type { Translation } from "../translation"; + +export const zh_TW: Translation = { + [Key.home]: "首頁", + [Key.about]: "關於我", + [Key.archive]: "歸檔", + [Key.search]: "搜尋", + [Key.searchNoResults]: "找不到相關結果。", + [Key.searchTypeSomething]: "請輸入搜尋關鍵字。", + [Key.searchLoading]: "搜尋中...", + [Key.searchSummary]: "摘要", + [Key.searchContent]: "內容", + [Key.searchViewMore]: "查看更多結果 ({count} 個更多)", + [Key.other]: "其他", + [Key.all]: "全部", + + [Key.tags]: "標籤", + [Key.categories]: "分類", + [Key.recentPosts]: "最新文章", + [Key.postList]: "文章列表", + [Key.tableOfContents]: "目錄", + + // 公告欄 + [Key.announcement]: "公告", + [Key.announcementClose]: "關閉", + + [Key.comments]: "評論", + [Key.commentSection]: "評論區", + [Key.commentSubtitle]: "分享你的想法,與大家交流討論", + [Key.commentNotConfigured]: "評論系統暫未配置", + [Key.guestbookCommentHint]: + "您還未在配置文件中啟用評論系統,啟用後訪客才可在此留言", + [Key.friends]: "友鏈", + [Key.friendsDescription]: "這裡是我的朋友們,歡迎互相訪問交流", + [Key.guestbook]: "留言", + [Key.guestbookDescription]: "歡迎在這裡留下你的足跡,分享你的想法和建議", + [Key.untitled]: "無標題", + [Key.uncategorized]: "未分類", + [Key.noTags]: "無標籤", + + [Key.wordCount]: "字", + [Key.wordsCount]: "字", + [Key.minuteCount]: "分鐘", + [Key.minutesCount]: "分鐘", + [Key.postCount]: "篇文章", + [Key.postsCount]: "篇文章", + + [Key.themeColor]: "主題色", + + [Key.lightMode]: "亮色", + [Key.darkMode]: "暗色", + [Key.systemMode]: "跟隨系統", + + [Key.more]: "更多", + + [Key.author]: "作者", + [Key.publishedAt]: "發布於", + [Key.license]: "許可協議", + [Key.bangumi]: "番組計劃", + + // 番組計劃 + [Key.bangumiTitle]: "我的番組計劃", + [Key.bangumiSubtitle]: "記錄我的二次元之旅", + + // 番組計劃篩選和狀態文本 + [Key.bangumiFilterAll]: "全部", + [Key.bangumiFilterWatched]: "看過", + [Key.bangumiFilterWatching]: "在看", + [Key.bangumiFilterWish]: "想看", + [Key.bangumiFilterOnHold]: "擱置", + [Key.bangumiFilterDropped]: "拋棄", + [Key.bangumiFilterGamePlayed]: "玩過", + [Key.bangumiFilterGamePlaying]: "在玩", + [Key.bangumiFilterGameWish]: "想玩", + [Key.bangumiFilterBookRead]: "讀過", + [Key.bangumiFilterBookReading]: "在讀", + [Key.bangumiFilterBookWish]: "想讀", + [Key.bangumiFilterMusicListened]: "聽過", + [Key.bangumiFilterMusicListening]: "在聽", + [Key.bangumiFilterMusicWish]: "想聽", + [Key.bangumiStatusWish]: "想看", + [Key.bangumiStatusWatched]: "看過", + [Key.bangumiStatusWatching]: "在看", + [Key.bangumiStatusOnHold]: "擱置", + [Key.bangumiStatusDropped]: "拋棄", + [Key.bangumiStatusGameWish]: "想玩", + [Key.bangumiStatusGamePlayed]: "玩過", + [Key.bangumiStatusGamePlaying]: "在玩", + [Key.bangumiStatusBookWish]: "想讀", + [Key.bangumiStatusBookRead]: "讀過", + [Key.bangumiStatusBookReading]: "在讀", + [Key.bangumiStatusMusicWish]: "想聽", + [Key.bangumiStatusMusicListened]: "聽過", + [Key.bangumiStatusMusicListening]: "在聽", + [Key.bangumiStatusUnknown]: "未知", + [Key.bangumiNoData]: "暫無數據", + [Key.bangumiNoDataDescription]: "該分類下還沒有任何條目", + [Key.bangumiEmpty]: "暫無數據", + [Key.bangumiEmptyReason]: "可能的原因:用戶名不存在、網絡連接問題或API限制", + [Key.bangumiUsername]: "用戶名", + [Key.bangumiApi]: "API", + [Key.bangumiConfigTip]: "提示:請在頁面配置中設置正確的Bangumi用戶名", + [Key.bangumiPrevPage]: "上一頁", + [Key.bangumiNextPage]: "下一頁", + [Key.bangumiCurrentPage]: "第", + [Key.bangumiTotalPages]: "頁,共", + [Key.bangumiPage]: "頁", + + // 番組分類 + [Key.bangumiCategoryBook]: "書籍", + [Key.bangumiCategoryAnime]: "動畫", + [Key.bangumiCategoryMusic]: "音樂", + [Key.bangumiCategoryGame]: "遊戲", + [Key.bangumiCategoryReal]: "三次元", + + // 番組數據更新 + [Key.bangumiLastUpdated]: "數據更新於", + [Key.bangumiUpdatedAt]: "構建時間", + [Key.bangumiDataStatic]: "靜態數據", + + // 分頁 + [Key.paginationFirst]: "首頁", + [Key.paginationPrev]: "上一頁", + [Key.paginationNext]: "下一頁", + [Key.paginationLast]: "末頁", + [Key.paginationPage]: "第", + [Key.paginationOf]: "頁,共", + [Key.paginationTotal]: "頁,總計", + [Key.paginationRecords]: "條記錄", + + // 404頁面 + [Key.notFound]: "404", + [Key.notFoundTitle]: "頁面未找到", + [Key.notFoundDescription]: "抱歉,您訪問的頁面不存在或已被移動。", + [Key.backToHome]: "返回首頁", + + // RSS頁面 + [Key.rss]: "RSS 訂閱", + [Key.rssDescription]: "訂閱獲取最新更新", + [Key.rssSubtitle]: "通過 RSS 訂閱,第一時間獲取最新文章和動態", + [Key.rssLink]: "RSS 鏈接", + [Key.rssCopyToReader]: "複製鏈接到你的 RSS 閱讀器", + [Key.rssCopyLink]: "複製鏈接", + [Key.rssLatestPosts]: "最新文章", + [Key.rssWhatIsRSS]: "什麼是 RSS?", + [Key.rssWhatIsRSSDescription]: + "RSS(Really Simple Syndication)是一種用於發布經常更新內容的標準格式。通過 RSS,你可以:", + [Key.rssBenefit1]: "及時獲取網站最新內容,無需手動訪問", + [Key.rssBenefit2]: "在一個地方管理多個網站的訂閱", + [Key.rssBenefit3]: "避免錯過重要更新和文章", + [Key.rssBenefit4]: "享受無廣告的純淨閱讀體驗", + [Key.rssHowToUse]: "推薦使用 Feedly、Inoreader 或其他 RSS 閱讀器來訂閱本站。", + [Key.rssCopied]: "RSS 鏈接已複製到剪貼板!", + [Key.rssCopyFailed]: "複製失敗,請手動複製鏈接", + + //最後編輯時間卡片 + [Key.lastModifiedPrefix]: "最後更新於 ", + [Key.lastModifiedOutdated]: "部分內容可能已過時", + [Key.lastModifiedDaysAgo]: "距今已過 {days} 天", + [Key.year]: "年", + [Key.month]: "月", + [Key.day]: "日", + [Key.hour]: "時", + [Key.minute]: "分", + [Key.second]: "秒", + + // 訪問量統計 + [Key.pageViews]: "瀏覽量", + [Key.pageViewsLoading]: "載入中...", + [Key.pageViewsError]: "統計不可用", + + // 置頂 + [Key.pinned]: "置頂", + + // 壁紙模式 + [Key.wallpaperMode]: "壁紙模式", + [Key.wallpaperBannerMode]: "橫幅壁紙", + [Key.wallpaperOverlayMode]: "全屏透明", + [Key.wallpaperNoneMode]: "純色背景", + + // 贊助頁面 + [Key.sponsor]: "贊助", + [Key.sponsorTitle]: "贊助支持", + [Key.sponsorDescription]: + "如果我的內容對你有幫助,歡迎通過以下方式贊助我,你的支持是我持續創作的動力!", + [Key.sponsorMethods]: "贊助方式", + [Key.sponsorList]: "贊助列表", + [Key.sponsorEmpty]: "暫無贊助記錄", + [Key.sponsorAmount]: "金額", + [Key.sponsorDate]: "日期", + [Key.sponsorMessage]: "留言", + [Key.sponsorAnonymous]: "匿名", + [Key.scanToSponsor]: "掃碼贊助", + [Key.sponsorGoTo]: "前往贊助", + [Key.sponsorButton]: "支持與分享", + [Key.sponsorButtonText]: + "如果這篇文章對你有幫助,歡迎分享給更多人或贊助支持!", + + [Key.shareOnSocial]: "文章分享", + [Key.shareOnSocialDescription]: "如果這篇文章對你有幫助,歡迎分享給更多人!", + + // 站點統計 + [Key.siteStats]: "站點統計", + [Key.siteStatsPostCount]: "文章", + [Key.siteStatsCategoryCount]: "分類", + [Key.siteStatsTagCount]: "標籤", + [Key.siteStatsTotalWords]: "總字數", + [Key.siteStatsRunningDays]: "運行時長", + [Key.siteStatsLastUpdate]: "最後活動", + [Key.siteStatsDaysAgo]: "{days} 天前", + [Key.siteStatsDays]: "{days} 天", + [Key.today]: "今天", + + // 日曆組件 + [Key.calendarSunday]: "日", + [Key.calendarMonday]: "一", + [Key.calendarTuesday]: "二", + [Key.calendarWednesday]: "三", + [Key.calendarThursday]: "四", + [Key.calendarFriday]: "五", + [Key.calendarSaturday]: "六", + [Key.calendarJanuary]: "1月", + [Key.calendarFebruary]: "2月", + [Key.calendarMarch]: "3月", + [Key.calendarApril]: "4月", + [Key.calendarMay]: "5月", + [Key.calendarJune]: "6月", + [Key.calendarJuly]: "7月", + [Key.calendarAugust]: "8月", + [Key.calendarSeptember]: "9月", + [Key.calendarOctober]: "10月", + [Key.calendarNovember]: "11月", + [Key.calendarDecember]: "12月", + + [Key.shareArticle]: "分享", + [Key.generatingPoster]: "海報生成中...", + [Key.copied]: "已複製", + [Key.copyLink]: "複製連結", + [Key.savePoster]: "保存海報", + [Key.scanToRead]: "掃碼閱讀文章", +}; diff --git a/src/i18n/translation.ts b/src/i18n/translation.ts new file mode 100644 index 0000000..696320b --- /dev/null +++ b/src/i18n/translation.ts @@ -0,0 +1,35 @@ +import { siteConfig } from "../config"; +import type I18nKey from "./i18nKey"; +import { en } from "./languages/en"; +import { ja } from "./languages/ja"; +import { ru } from "./languages/ru"; +import { zh_CN } from "./languages/zh_CN"; +import { zh_TW } from "./languages/zh_TW"; + +export type Translation = { + [K in I18nKey]: string; +}; + +const defaultTranslation = en; + +const map: { [key: string]: Translation } = { + en: en, + en_us: en, + en_gb: en, + en_au: en, + zh_cn: zh_CN, + zh_tw: zh_TW, + ja: ja, + ja_jp: ja, + ru: ru, + ru_ru: ru, +}; + +export function getTranslation(lang: string): Translation { + return map[lang.toLowerCase()] || defaultTranslation; +} + +export function i18n(key: I18nKey): string { + const lang = siteConfig.lang || "en"; + return getTranslation(lang)[key]; +} diff --git a/src/integrations/searchIndex.mts b/src/integrations/searchIndex.mts new file mode 100644 index 0000000..42bd0c9 --- /dev/null +++ b/src/integrations/searchIndex.mts @@ -0,0 +1,48 @@ +import { execSync } from "node:child_process"; +import type { AstroIntegration } from "astro"; +import { navBarSearchConfig } from "../config/index.ts"; +import MeiliSearchIndexer from "../scripts/index-to-meilisearch.mts"; +import { NavBarSearchMethod } from "../types/config.ts"; + +/** + * Astro 集成,用于在构建结束时运行 Search 索引器 + * @returns AstroIntegration + */ +export default function searchIndexer() { + const data: AstroIntegration = { + name: "search-indexer", + hooks: { + "astro:build:done": async () => { + console.log( + `${"=".repeat(10)}Running Search Indexer...${"=".repeat(10)}`, + ); + if (navBarSearchConfig.method === NavBarSearchMethod.MeiliSearch) { + const meiliSearchConfig = navBarSearchConfig.meiliSearchConfig; + if (!meiliSearchConfig) { + process.exit(1); + } + const MEILI_MASTER_KEY = process.env.MEILI_MASTER_KEY; + const indexer = new MeiliSearchIndexer( + meiliSearchConfig.MEILI_HOST, + MEILI_MASTER_KEY, + meiliSearchConfig.INDEX_NAME, + meiliSearchConfig.CONTENT_DIR, + ); + await indexer.main(); + } else if (navBarSearchConfig.method === NavBarSearchMethod.PageFind) { + console.log("Running Pagefind Indexer..."); + try { + execSync("pagefind --site dist", { + encoding: "utf-8", + stdio: "inherit", + }); + } catch (error) { + console.error("Pagefind Index Failed:", error.message); + } + } + console.log(`${"=".repeat(10)}Search Indexer Done.${"=".repeat(10)}`); + }, + }, + }; + return data; +} diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro new file mode 100644 index 0000000..7c27ec8 --- /dev/null +++ b/src/layouts/Layout.astro @@ -0,0 +1,1015 @@ +--- +import GoogleAnalytics from "@components/analytics/GoogleAnalytics.astro"; +import MicrosoftClarity from "@components/analytics/MicrosoftClarity.astro"; +import FancyboxManager from "@components/effects/FancyboxManager.astro"; +import KatexManager from "@components/effects/KatexManager.astro"; +import SakuraEffect from "@components/effects/SakuraEffect.astro"; +import FontManager from "@components/interactive/FontManager.astro"; +import ConfigCarrier from "@components/layout/ConfigCarrier.astro"; +import MusicPlayer from "@components/widget/MusicPlayer.astro"; + +import { + backgroundWallpaper, + expressiveCodeConfig, + profileConfig, + siteConfig, +} from "@/config"; +import { + BANNER_HEIGHT, + BANNER_HEIGHT_EXTEND, + BANNER_HEIGHT_HOME, + PAGE_WIDTH, +} from "@/constants/constants"; +import { defaultFavicons } from "@/constants/icon"; +import type { Favicon } from "@/types/config"; +import { getDefaultBackground, isHomePage } from "@/utils/layout-utils"; +import { url } from "@/utils/url-utils"; + +import "@/styles/navbar.css"; +import "@/styles/layout-styles.css"; +import "@/styles/waves.css"; + +interface Props { + title?: string; + banner?: string; + description?: string; + lang?: string; + setOGTypeArticle?: boolean; + postSlug?: string; +} + +let { title, banner, description, lang, setOGTypeArticle, postSlug } = + Astro.props; + +// apply a class to the body element to decide the height of the banner, only used for initial page load +// Swup can update the body for each page visit, but it's after the page transition, causing a delay for banner height change +// so use Swup hooks instead to change the height immediately when a link is clicked +const isHomePageCheck = isHomePage(Astro.url.pathname); + +// defines global css variables +// why doing this in Layout instead of GlobalStyles: https://github.com/withastro/astro/issues/6728#issuecomment-1502203757 +const configHue = siteConfig.themeColor.hue; + +// 获取导航栏透明模式配置 +const navbarTransparentMode = + backgroundWallpaper.banner?.navbar?.transparentMode || "semi"; +// 判断是否应该显示顶部高光效果(只在full和semifull模式下显示) +const shouldShowTopHighlight = + navbarTransparentMode === "full" || navbarTransparentMode === "semifull"; + +if (!banner || typeof banner !== "string" || banner.trim() === "") { + banner = getDefaultBackground(); +} + +// TODO don't use post cover as banner for now +banner = getDefaultBackground(); + +const enableBanner = backgroundWallpaper.mode === "banner"; + +let pageTitle: string; +if (title) { + pageTitle = `${title} - ${siteConfig.title}`; +} else { + pageTitle = siteConfig.subtitle + ? `${siteConfig.title} - ${siteConfig.subtitle}` + : siteConfig.title; +} + +let ogImageUrl: string | undefined; +if (siteConfig.generateOgImages && postSlug) { + ogImageUrl = new URL(`/og/${postSlug}.png`, Astro.site).toString(); +} + +const favicons: Favicon[] = + siteConfig.favicon.length > 0 ? siteConfig.favicon : defaultFavicons; + +// const siteLang = siteConfig.lang.replace('_', '-') +if (!lang) { + lang = `${siteConfig.lang}`; +} +const siteLang = lang.replace("_", "-"); + +// 使用固定的banner偏移量,position配置用于图片定位 +const bannerOffset = `${BANNER_HEIGHT_EXTEND / 2}vh`; +--- + + + + + {siteConfig.analytics?.googleAnalyticsId && ( + + )} + {siteConfig.analytics?.microsoftClarityId && ( + + )} + + {pageTitle} + + + + { + siteConfig.keywords && siteConfig.keywords.length > 0 && ( + + ) + } + + + + + + + {ogImageUrl && } + { + setOGTypeArticle ? ( + + ) : ( + + ) + } + + + + + + + + + { + favicons.map((favicon) => ( + + )) + } + + + + + + + + + + + + + + `font-${fontId}-enabled`) + : []), + ]} + > + + + {shouldShowTopHighlight &&
              } + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/layouts/MainGridLayout.astro b/src/layouts/MainGridLayout.astro new file mode 100644 index 0000000..57d8ed4 --- /dev/null +++ b/src/layouts/MainGridLayout.astro @@ -0,0 +1,496 @@ +--- +import BackToTop from "@components/common/controls/BackToTop.astro"; +import OverlayWallpaper from "@components/interactive/OverlayWallpaper.astro"; +import Footer from "@components/layout/Footer.astro"; +import LeftSideBar from "@components/layout/LeftSideBar.astro"; +import Navbar from "@components/layout/Navbar.astro"; +import RightSideBar from "@components/layout/RightSideBar.astro"; +import SideBar from "@components/layout/SideBar.astro"; +import Live2DWidget from "@components/widget/Live2DWidget.astro"; +import SpineModel from "@components/widget/SpineModel.astro"; +import type { MarkdownHeading } from "astro"; +import { Icon } from "astro-icon/components"; +import FloatingTOC from "@/components/common/controls/FloatingTOC.astro"; +import TypewriterText from "@/components/content/TypewriterText.astro"; +import IconifyLoader from "@/components/misc/IconifyLoader.astro"; +import ImageWrapper from "@/components/misc/ImageWrapper.astro"; +import { + backgroundWallpaper, + live2dModelConfig, + sidebarLayoutConfig, + siteConfig, +} from "@/config"; +import { + BANNER_HEIGHT, + BANNER_HEIGHT_EXTEND, + MAIN_PANEL_OVERLAPS_BANNER_HEIGHT, +} from "@/constants/constants"; +import { getBackgroundImages, isHomePage } from "@/utils/layout-utils"; +import { + generateGridClasses, + generateMainContentClasses, + generateRightSidebarClasses, + generateSidebarClasses, + getResponsiveSidebarConfig, +} from "@/utils/responsive-utils"; +import Layout from "./Layout.astro"; + +interface Props { + title?: string; + banner?: string; + description?: string; + lang?: string; + setOGTypeArticle?: boolean; + postSlug?: string; + headings?: MarkdownHeading[]; +} + +const backgroundImages = getBackgroundImages(); + +const { + title, + banner, + description, + lang, + setOGTypeArticle, + postSlug, + headings = [], +} = Astro.props; + +// 检查背景壁纸模式和是否允许切换 +const isBannerMode = backgroundWallpaper.mode === "banner"; +const isOverlayMode = backgroundWallpaper.mode === "overlay"; +const isBackgroundEnabled = backgroundWallpaper.mode !== "none"; +const isWallpaperSwitchable = backgroundWallpaper.switchable ?? true; + +// 检查是否启用波浪动画效果 +const wavesConfig = backgroundWallpaper.banner?.waves?.enable; +// 处理分设备控制的波浪动画 +const wavesEnabledOnDesktop = + typeof wavesConfig === "object" ? wavesConfig.desktop : wavesConfig; +const wavesEnabledOnMobile = + typeof wavesConfig === "object" ? wavesConfig.mobile : wavesConfig; + +// 获取波浪效果性能设置 +const performanceConfig = backgroundWallpaper.banner?.waves?.performance; +const waveQuality = performanceConfig?.quality || "high"; +const hardwareAcceleration = performanceConfig?.hardwareAcceleration ?? true; + +// 处理分设备控制的横幅信贷显示 +const creditEnableConfig = backgroundWallpaper.banner?.credit?.enable; +const creditEnabledOnDesktop = + typeof creditEnableConfig === "object" + ? creditEnableConfig.desktop + : creditEnableConfig; +const creditEnabledOnMobile = + typeof creditEnableConfig === "object" + ? creditEnableConfig.mobile + : creditEnableConfig; + +const hasBannerCredit = + isBannerMode && isBackgroundEnabled && creditEnableConfig; + +// 处理分设备控制的横幅信贷文本和链接 +const creditTextConfig = backgroundWallpaper.banner?.credit?.text; +const creditTextDesktop = + typeof creditTextConfig === "object" + ? creditTextConfig.desktop + : creditTextConfig; +const creditTextMobile = + typeof creditTextConfig === "object" + ? creditTextConfig.mobile + : creditTextConfig; + +const creditUrlConfig = backgroundWallpaper.banner?.credit?.url; +const creditUrlDesktop = + typeof creditUrlConfig === "object" + ? creditUrlConfig.desktop + : creditUrlConfig; +const creditUrlMobile = + typeof creditUrlConfig === "object" + ? creditUrlConfig.mobile + : creditUrlConfig; + +// 检查是否为首页 +const isHomePageCheck = isHomePage(Astro.url.pathname); + +// 随机选择副标题(当打字机关闭且为数组时) +const getRandomSubtitle = () => { + const subtitle = backgroundWallpaper.banner?.homeText?.subtitle; + if (Array.isArray(subtitle)) { + const randomIndex = Math.floor(Math.random() * subtitle.length); + return subtitle[randomIndex]; + } + return subtitle; +}; +const randomSubtitle = getRandomSubtitle(); + +// 主页横幅文本只在首页且全局开关为 true 时显示,不区分设备 +const homeTextEnable = backgroundWallpaper.banner?.homeText?.enable; +const showHomeText = isBannerMode && !!homeTextEnable && isHomePageCheck; +// 手机端非首页不显示banner的CSS类 +const mobileNonHomeBannerClass = !isHomePageCheck ? "mobile-hide-banner" : ""; + +// 计算主内容区域位置,考虑手机端非首页时banner被隐藏 +const mainPanelTop = + isBannerMode && isBackgroundEnabled + ? `calc(${BANNER_HEIGHT}vh - ${MAIN_PANEL_OVERLAPS_BANNER_HEIGHT}rem)` + : "5.5rem"; + +// 当banner模式被禁用时,主内容区域应该始终从顶栏下面开始 +// 非首页在小于1024px时会通过 mobile-main-no-banner CSS类覆盖top值为5.5rem +const finalMainPanelTop = + isBannerMode && isBackgroundEnabled ? mainPanelTop : "5.5rem"; + +// 获取响应式侧边栏配置 +// 传入是否为文章详情页的标志,用于控制是否显示右侧边栏 +const sidebarConfig = getResponsiveSidebarConfig(postSlug !== undefined); +const { gridCols } = generateGridClasses(sidebarConfig); +const sidebarClass = generateSidebarClasses(sidebarConfig); +const rightSidebarClass = sidebarConfig.isBothSidebars + ? generateRightSidebarClasses(sidebarConfig) + : ""; +const mainContentClass = generateMainContentClasses(sidebarConfig); + +// 检查是否应该启用半透明效果 +const shouldEnableTransparency = isOverlayMode && isBackgroundEnabled; + +// 为组件添加半透明效果的CSS类 +const transparentClass = shouldEnableTransparency + ? "wallpaper-transparent" + : ""; + +const navbarWidthFull = siteConfig.navbar.widthFull ?? false; +--- + + + + + +{(isWallpaperSwitchable || isOverlayMode) && ( + +)} + + + + + +{shouldEnableTransparency && ( + +)} + + + +
              + +
              + + +{(isWallpaperSwitchable || isBannerMode) && ( + +)} + + +
              + +
              +
              + + {hasBannerCredit && creditEnabledOnDesktop && } + + + {hasBannerCredit && creditEnabledOnMobile && } + + + {/* 渲染侧边栏 - 根据配置决定使用单侧或双侧边栏 */} + + + {/* 主内容区 - 始终渲染,确保 Swup 容器存在 */} +
              + {/* 携带网格布局类名,用于JS更新父容器 */} + +
              + + +
              +
              + + {/* 右侧边栏 - 仅双侧边栏模式 */} + {/* + 如果全局配置为双侧栏(position: both),则使用静态容器(不被swup替换),避免闪烁。 + 如果全局配置为单侧栏(position: left),则使用动态容器(被swup替换),以便在文章页显示右侧栏。 + 注意:为了满足swup要求所有containers必须存在,我们在两种模式下都必须渲染 #right-sidebar-dynamic。 + */} + {sidebarLayoutConfig.position === "both" ? ( + <> + + + + ) : ( + + )} + + +
              + + + + {live2dModelConfig.enable && } +
              +
              + + + + + +
              + + + diff --git a/src/pages/404.astro b/src/pages/404.astro new file mode 100644 index 0000000..f274a63 --- /dev/null +++ b/src/pages/404.astro @@ -0,0 +1,73 @@ +--- +import { Icon } from "astro-icon/components"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import MainGridLayout from "@/layouts/MainGridLayout.astro"; +--- + + +
              +
              + +
              + {i18n(I18nKey.notFound)} +
              + + +
              + +
              + + +

              + {i18n(I18nKey.notFoundTitle)} +

              + + +

              + {i18n(I18nKey.notFoundDescription)} +

              + + + + + {i18n(I18nKey.backToHome)} + + + +
              + +
              +
              + +
              +
              +
              +
              + + \ No newline at end of file diff --git a/src/pages/[...page].astro b/src/pages/[...page].astro new file mode 100644 index 0000000..79c09f9 --- /dev/null +++ b/src/pages/[...page].astro @@ -0,0 +1,70 @@ +--- +import type { GetStaticPaths } from "astro"; +import Pagination from "@/components/common/controls/Pagination.astro"; +import PostPage from "@/components/layout/PostPage.astro"; +import { siteConfig } from "@/config"; +import MainGridLayout from "@/layouts/MainGridLayout.astro"; +import { getSortedPosts } from "@/utils/content-utils"; +export const getStaticPaths = (async ({ paginate }) => { + const allBlogPosts = await getSortedPosts(); + // 使用配置中的文章数量 + const pageSize = siteConfig.pagination.postsPerPage; + return paginate(allBlogPosts, { pageSize }); +}) satisfies GetStaticPaths; +// https://github.com/withastro/astro/issues/6507#issuecomment-1489916992 + +const { page } = Astro.props; + +const len = page.data.length; +--- + + + + { + page.total > page.size && ( + + ) + } + + + diff --git a/src/pages/about.astro b/src/pages/about.astro new file mode 100644 index 0000000..5b8f4df --- /dev/null +++ b/src/pages/about.astro @@ -0,0 +1,25 @@ +--- + +import { getEntry, render } from "astro:content"; +import Markdown from "@components/misc/Markdown.astro"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import MainGridLayout from "@/layouts/MainGridLayout.astro"; + +const aboutPost = await getEntry("spec", "about"); + +if (!aboutPost) { + throw new Error("About page content not found"); +} + +const { Content } = await render(aboutPost); +--- + +
              +
              + + + +
              +
              +
              \ No newline at end of file diff --git a/src/pages/api/calendar.json.ts b/src/pages/api/calendar.json.ts new file mode 100644 index 0000000..c65a2a4 --- /dev/null +++ b/src/pages/api/calendar.json.ts @@ -0,0 +1,13 @@ +import { getSortedPosts } from "@/utils/content-utils"; + +export async function GET() { + const posts = await getSortedPosts(); + + const allPostsData = posts.map((post) => ({ + id: post.id, + title: post.data.title, + published: post.data.published.getTime(), + })); + + return new Response(JSON.stringify(allPostsData)); +} diff --git a/src/pages/archive.astro b/src/pages/archive.astro new file mode 100644 index 0000000..2d82b15 --- /dev/null +++ b/src/pages/archive.astro @@ -0,0 +1,13 @@ +--- +import ArchivePanel from "@components/interactive/ArchivePanel.svelte"; +import I18nKey from "@i18n/i18nKey"; +import { i18n } from "@i18n/translation"; +import MainGridLayout from "@layouts/MainGridLayout.astro"; +import { getSortedPostsList } from "@/utils/content-utils"; + +const sortedPostsList = await getSortedPostsList(); +--- + + + + \ No newline at end of file diff --git a/src/pages/bangumi.astro b/src/pages/bangumi.astro new file mode 100644 index 0000000..9016008 --- /dev/null +++ b/src/pages/bangumi.astro @@ -0,0 +1,251 @@ +--- +import Icon from "@/components/misc/Icon.astro"; +import BangumiSection from "@/components/pages/bangumi/BangumiSection.astro"; +import TabNav from "@/components/pages/bangumi/TabNav.astro"; +import { siteConfig } from "@/config"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import MainGridLayout from "@/layouts/MainGridLayout.astro"; +import type { + UserSubjectCollection, + UserSubjectCollectionResponse, +} from "@/types/bangumi"; +import { formatDateI18nWithTime } from "@/utils/date-utils"; + +//参考:霞葉 https://kasuha.com/posts/fuwari-enhance-ep2/ + +// 检查页面是否启用 +if (!siteConfig.pages.bangumi) { + return Astro.redirect("/404/"); +} + +// 获取构建时间 +const buildTime = formatDateI18nWithTime(new Date()); + +////////////// Bangumi 配置 //////////////////////// +const bangumiConfig = { + username: siteConfig.bangumi?.userId, // 在这里配置你的Bangumi用户名 + apiUrl: "https://api.bgm.tv", + categories: { + book: true, + anime: true, + music: true, + game: true, + real: false, + }, + // 数据获取设置 + pagination: { + limit: 50, // 每页获取数量 + delay: 50, // 请求间隔毫秒数,避免频率限制 + maxTotal: 1000, // 最大获取总数,防止无限循环(0=无限制) + }, +}; +////////////////////////////////////////////////// + +// 分类映射 +const categoryMap = { + book: { id: "book", name: i18n(I18nKey.bangumiCategoryBook), subjectType: 1 }, + anime: { + id: "anime", + name: i18n(I18nKey.bangumiCategoryAnime), + subjectType: 2, + }, + music: { + id: "music", + name: i18n(I18nKey.bangumiCategoryMusic), + subjectType: 3, + }, + game: { id: "game", name: i18n(I18nKey.bangumiCategoryGame), subjectType: 4 }, + real: { id: "real", name: i18n(I18nKey.bangumiCategoryReal), subjectType: 6 }, +}; + +// 获取Bangumi数据的函数 - 支持分页获取所有数据 +async function fetchBangumiData(username: string, subjectType: number) { + try { + const { limit, delay, maxTotal } = bangumiConfig.pagination; + let offset = 0; + let allData: UserSubjectCollection[] = []; + let hasMore = true; + + // 开发模式下只获取一页数据,加快调试速度 + const isDev = import.meta.env.DEV; + const maxPages = isDev ? 1 : 0; // 0 表示不限制 + + console.log( + `[Bangumi] ${isDev ? "🔧 开发模式" : "🌐 生产模式"} - 开始获取用户 ${username} 的 subjectType ${subjectType} 数据...`, + ); + + while (hasMore) { + // 开发模式限制:只获取一页 + if (isDev && maxPages > 0 && allData.length >= limit * maxPages) { + console.log(`[Bangumi] 开发模式:已获取 ${maxPages} 页数据,停止获取`); + break; + } + + // 检查是否超过最大获取限制 + if (maxTotal > 0 && allData.length >= maxTotal) { + console.log(`[Bangumi] 已达到最大获取限制 ${maxTotal},停止获取`); + break; + } + + const url = `${bangumiConfig.apiUrl}/v0/users/${username}/collections?subject_type=${subjectType}&limit=${limit}&offset=${offset}`; + + console.log(`[Bangumi] 正在获取数据: ${url} (已获取: ${allData.length})`); + + const response = await fetch(url, { + headers: { + "User-Agent": "YuuOuRou Blog", + Accept: "application/json", + }, + }); + + if (!response.ok) { + console.warn( + `[Bangumi] 无法获取数据 (状态码: ${response.status}):`, + url, + ); + break; + } + + const data = (await response.json()) as UserSubjectCollectionResponse; + const currentBatch = data.data || []; + + if (currentBatch.length > 0) { + allData = allData.concat(currentBatch); + offset += limit; + + // 如果本次获取的数据少于limit,说明已经是最后一页 + if (currentBatch.length < limit) { + hasMore = false; + } + } else { + hasMore = false; + } + + // 添加延迟避免请求过于频繁 + if (hasMore) { + await new Promise((resolve) => setTimeout(resolve, delay)); + } + } + + console.log(`[Bangumi] 总共获取到 ${allData.length} 条数据`); + return allData; + } catch (error) { + console.error("[Bangumi] 获取数据时出错:", error); + return []; + } +} + +// 获取所有启用分类的数据 +const bangumiData: Record = {}; +const tabs: Array<{ id: string; name: string; count: number }> = []; + +// 检查是否已配置 Bangumi 用户ID +const isUserIdConfigured = + bangumiConfig.username && + bangumiConfig.username !== "you-user-id" && + bangumiConfig.username.trim() !== ""; + +if (!isUserIdConfigured) { + console.log("[Bangumi] ⚠️ 未配置 Bangumi 用户ID,跳过数据获取"); +} else { + console.log("[Bangumi] 🌐 从 API 获取数据"); +} + +for (const [categoryKey, enabled] of Object.entries(bangumiConfig.categories)) { + // 如果未配置用户ID,跳过数据获取 + if (!isUserIdConfigured) { + break; + } + if (enabled && categoryMap[categoryKey as keyof typeof categoryMap]) { + const categoryInfo = categoryMap[categoryKey as keyof typeof categoryMap]; + try { + const data = await fetchBangumiData( + // biome-ignore lint/style/noNonNullAssertion: Checked by isUserIdConfigured + bangumiConfig.username!, + categoryInfo.subjectType, + ); + bangumiData[categoryKey] = data; + tabs.push({ + id: categoryKey, + name: categoryInfo.name, + count: data.length, + }); + } catch (error) { + console.error(`[Bangumi] 获取 ${categoryInfo.name} 数据失败:`, error); + bangumiData[categoryKey] = []; + tabs.push({ + id: categoryKey, + name: categoryInfo.name, + count: 0, + }); + } + } +} + +const activeTab = tabs[0]?.id || "anime"; +--- + + +
              +
              + +
              +
              +
              +
              + +
              +

              + {i18n(I18nKey.bangumi)} +

              +
              +

              + {i18n(I18nKey.bangumiSubtitle)} +

              +

              + {i18n(I18nKey.bangumiLastUpdated)} {buildTime} +

              +
              + + + {tabs.length > 0 ? ( + <> + + + + {tabs.map((tab) => ( + + ))} + + ) : ( +
              +
              + +
              +

              + {isUserIdConfigured ? i18n(I18nKey.bangumiEmpty) : "未配置 Bangumi 用户ID"} +

              +

              + {isUserIdConfigured ? i18n(I18nKey.bangumiEmptyReason) : "请在 src/config/siteConfig.ts 中配置你的 Bangumi 用户ID"} +

              +
              + )} +
              +
              + + + \ No newline at end of file diff --git a/src/pages/friends.astro b/src/pages/friends.astro new file mode 100644 index 0000000..7153e3e --- /dev/null +++ b/src/pages/friends.astro @@ -0,0 +1,212 @@ +--- +import { getEntry, render } from "astro:content"; +import Comment from "@components/comment/index.astro"; +import Markdown from "@components/misc/Markdown.astro"; +import Icon from "@/components/misc/Icon.astro"; +import { friendsPageConfig, getEnabledFriends } from "@/config"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import MainGridLayout from "@/layouts/MainGridLayout.astro"; + +const friendsPost = await getEntry("spec", "friends"); + +if (!friendsPost) { + throw new Error("friends page content not found"); +} + +const { Content } = await render(friendsPost); + +// 使用配置文件中的友链数据,按权重排序 +const items = getEnabledFriends(); +const allTags = [...new Set(items.flatMap((item) => item.tags || []))].sort(); + +// 页面标题和描述 +const title = i18n(I18nKey.friends); +const description = i18n(I18nKey.friendsDescription); +--- + + +
              +
              + +
              +
              +
              + +
              +

              + {title} +

              +
              + { + description && ( +

              + {description} +

              + ) + } +
              + + + { + items.length > 0 && ( + + + {allTags.map((tag) => ( + + ))} + + ) + } + + +
              + + +
              + +
              + + + diff --git a/src/pages/guestbook.astro b/src/pages/guestbook.astro new file mode 100644 index 0000000..70eb86d --- /dev/null +++ b/src/pages/guestbook.astro @@ -0,0 +1,90 @@ +--- +import { getEntry, render } from "astro:content"; +import Comment from "@components/comment/index.astro"; +import Markdown from "@components/misc/Markdown.astro"; +import Icon from "@/components/misc/Icon.astro"; +import { commentConfig, siteConfig } from "@/config"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import MainGridLayout from "@/layouts/MainGridLayout.astro"; + +// 检查页面是否启用 +if (!siteConfig.pages.guestbook) { + return Astro.redirect("/404/"); +} + +const guestbookPost = await getEntry("spec", "guestbook"); + +if (!guestbookPost) { + throw new Error("guestbook page content not found"); +} + +const { Content } = await render(guestbookPost); + +// 检查评论系统是否启用 +const isCommentEnabled = commentConfig?.type && commentConfig.type !== "none"; + +// 页面标题和描述 +const title = i18n(I18nKey.guestbook); +const description = i18n(I18nKey.guestbookDescription); +--- + + +
              +
              + +
              +
              +
              + +
              +

              + {title} +

              +
              + {description && ( +

              + {description} +

              + )} +
              + + + + +
              +
              + + +
              + {isCommentEnabled ? ( + + ) : ( +
              + +
              + )} +
              +
              diff --git a/src/pages/og/[...slug].png.ts b/src/pages/og/[...slug].png.ts new file mode 100644 index 0000000..4af82f5 --- /dev/null +++ b/src/pages/og/[...slug].png.ts @@ -0,0 +1,354 @@ +import type { CollectionEntry } from "astro:content"; +import { getCollection } from "astro:content"; +import * as fs from "node:fs"; +import type { APIContext, GetStaticPaths } from "astro"; +import satori from "satori"; +import sharp from "sharp"; +import { removeFileExtension } from "@/utils/url-utils"; + +import { profileConfig } from "../../config/profileConfig"; +import { siteConfig } from "../../config/siteConfig"; + +type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900; + +type FontStyle = "normal" | "italic"; +interface FontOptions { + data: Buffer | ArrayBuffer; + name: string; + weight?: Weight; + style?: FontStyle; + lang?: string; +} +export const prerender = true; + +export const getStaticPaths: GetStaticPaths = async () => { + if (!siteConfig.generateOgImages) { + return []; + } + + const allPosts = await getCollection("posts"); + const publishedPosts = allPosts.filter((post) => !post.data.draft); + + return publishedPosts.map((post) => { + // 将 id 转换为 slug(移除扩展名)以匹配路由参数 + const slug = removeFileExtension(post.id); + return { + params: { slug }, + props: { post }, + }; + }); +}; + +let fontCache: { regular: Buffer | null; bold: Buffer | null } | null = null; + +async function fetchNotoSansSCFonts() { + if (fontCache) return fontCache; + try { + const cssResp = await fetch( + "https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;700&display=swap", + ); + if (!cssResp.ok) throw new Error("Failed to fetch Google Fonts CSS"); + const cssText = await cssResp.text(); + + const getUrlForWeight = (weight: number) => { + const blockRe = new RegExp( + `@font-face\\s*{[^}]*font-weight:\\s*${weight}[^}]*}`, + "g", + ); + const match = cssText.match(blockRe); + if (!match || match.length === 0) return null; + const urlMatch = match[0].match(/url\((https:[^)]+)\)/); + return urlMatch ? urlMatch[1] : null; + }; + + const regularUrl = getUrlForWeight(400); + const boldUrl = getUrlForWeight(700); + + if (!regularUrl || !boldUrl) { + console.warn( + "Could not find font urls in Google Fonts CSS; falling back to no fonts.", + ); + fontCache = { regular: null, bold: null }; + return { regular: null, bold: null }; + } + + const [rResp, bResp] = await Promise.all([ + fetch(regularUrl), + fetch(boldUrl), + ]); + if (!rResp.ok || !bResp.ok) { + console.warn( + "Failed to download font files from Google; falling back to no fonts.", + ); + fontCache = { regular: null, bold: null }; + return { regular: null, bold: null }; + } + + const rBuf = Buffer.from(await rResp.arrayBuffer()); + const bBuf = Buffer.from(await bResp.arrayBuffer()); + fontCache = { regular: rBuf, bold: bBuf }; + return fontCache; + } catch (err) { + console.warn("Error fetching fonts:", err); + fontCache = { regular: null, bold: null }; + return { regular: null, bold: null }; + } +} + +export async function GET({ + props, +}: APIContext<{ post: CollectionEntry<"posts"> }>) { + const { post } = props; + + // Try to fetch fonts from Google Fonts (woff2) at runtime. + const { regular: fontRegular, bold: fontBold } = await fetchNotoSansSCFonts(); + + // Avatar + icon: still read from disk (small assets) + let avatarBase64: string; + + // 检查头像是否为 URL + if (profileConfig.avatar?.startsWith("http")) { + // 如果是 URL,直接使用 + avatarBase64 = profileConfig.avatar; + } else { + // 如果是本地路径,从 public 目录读取 + const avatarPath = profileConfig.avatar?.startsWith("/") + ? `./public${profileConfig.avatar}` + : `./src/${profileConfig.avatar}`; + const avatarBuffer = fs.readFileSync(avatarPath); + avatarBase64 = `data:image/png;base64,${avatarBuffer.toString("base64")}`; + } + + let iconPath = "./public/favicon/favicon-dark-192.png"; + if (siteConfig.favicon.length > 0) { + iconPath = `./public${siteConfig.favicon[0].src}`; + } + const iconBuffer = fs.readFileSync(iconPath); + const iconBase64 = `data:image/png;base64,${iconBuffer.toString("base64")}`; + + const hue = siteConfig.themeColor.hue; + const primaryColor = `hsl(${hue}, 90%, 65%)`; + const textColor = "hsl(0, 0%, 95%)"; + + const subtleTextColor = `hsl(${hue}, 10%, 75%)`; + const backgroundColor = `hsl(${hue}, 15%, 12%)`; + + const pubDate = post.data.published.toLocaleDateString("en-US", { + year: "numeric", + month: "short", + day: "numeric", + }); + + const description = post.data.description; + + const template = { + type: "div", + props: { + style: { + height: "100%", + width: "100%", + display: "flex", + flexDirection: "column", + backgroundColor: backgroundColor, + fontFamily: + '"Noto Sans SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif', + padding: "60px", + }, + children: [ + { + type: "div", + props: { + style: { + width: "100%", + display: "flex", + alignItems: "center", + gap: "20px", + }, + children: [ + { + type: "img", + props: { + src: iconBase64, + width: 48, + height: 48, + style: { borderRadius: "10px" }, + }, + }, + { + type: "div", + props: { + style: { + fontSize: "36px", + fontWeight: 600, + color: subtleTextColor, + }, + children: siteConfig.title, + }, + }, + ], + }, + }, + + { + type: "div", + props: { + style: { + display: "flex", + flexDirection: "column", + justifyContent: "center", + flexGrow: 1, + gap: "20px", + }, + children: [ + { + type: "div", + props: { + style: { + display: "flex", + alignItems: "flex-start", + }, + children: [ + { + type: "div", + props: { + style: { + width: "10px", + height: "68px", + backgroundColor: primaryColor, + borderRadius: "6px", + marginTop: "14px", + }, + }, + }, + { + type: "div", + props: { + style: { + fontSize: "72px", + fontWeight: 700, + lineHeight: 1.2, + color: textColor, + marginLeft: "25px", + display: "-webkit-box", + overflow: "hidden", + textOverflow: "ellipsis", + lineClamp: 3, + WebkitLineClamp: 3, + WebkitBoxOrient: "vertical", + }, + children: post.data.title, + }, + }, + ], + }, + }, + description && { + type: "div", + props: { + style: { + fontSize: "32px", + lineHeight: 1.5, + color: subtleTextColor, + paddingLeft: "35px", + display: "-webkit-box", + overflow: "hidden", + textOverflow: "ellipsis", + lineClamp: 2, + WebkitLineClamp: 2, + WebkitBoxOrient: "vertical", + }, + children: description, + }, + }, + ], + }, + }, + { + type: "div", + props: { + style: { + display: "flex", + justifyContent: "space-between", + alignItems: "center", + width: "100%", + }, + children: [ + { + type: "div", + props: { + style: { + display: "flex", + alignItems: "center", + gap: "20px", + }, + children: [ + { + type: "img", + props: { + src: avatarBase64, + width: 60, + height: 60, + style: { borderRadius: "50%" }, + }, + }, + { + type: "div", + props: { + style: { + fontSize: "28px", + fontWeight: 600, + color: textColor, + }, + children: profileConfig.name, + }, + }, + ], + }, + }, + { + type: "div", + props: { + style: { fontSize: "28px", color: subtleTextColor }, + children: pubDate, + }, + }, + ], + }, + }, + ], + }, + }; + + const fonts: FontOptions[] = []; + if (fontRegular) { + fonts.push({ + name: "Noto Sans SC", + data: fontRegular, + weight: 400, + style: "normal", + }); + } + if (fontBold) { + fonts.push({ + name: "Noto Sans SC", + data: fontBold, + weight: 700, + style: "normal", + }); + } + + const svg = await satori(template, { + width: 1200, + height: 630, + fonts, + }); + + const png = await sharp(Buffer.from(svg)).png().toBuffer(); + + return new Response(new Uint8Array(png), { + headers: { + "Content-Type": "image/png", + "Cache-Control": "public, max-age=31536000, immutable", + }, + }); +} diff --git a/src/pages/posts/[...slug].astro b/src/pages/posts/[...slug].astro new file mode 100644 index 0000000..2ddc4bb --- /dev/null +++ b/src/pages/posts/[...slug].astro @@ -0,0 +1,393 @@ +--- +import { render } from "astro:content"; +import * as path from "node:path"; +import Comment from "@components/comment/index.astro"; +import License from "@components/misc/License.astro"; +import Markdown from "@components/misc/Markdown.astro"; +import I18nKey from "@i18n/i18nKey"; +import { i18n } from "@i18n/translation"; +import MainGridLayout from "@layouts/MainGridLayout.astro"; +import { getSortedPosts } from "@utils/content-utils"; +import { + getFileDirFromPath, + getPostUrlBySlug, + removeFileExtension, +} from "@utils/url-utils"; +import { Icon } from "astro-icon/components"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import PostMetadata from "@/components/content/PostMeta.astro"; +import RandomCoverImage from "@/components/misc/RandomCoverImage.astro"; +import SharePoster from "@/components/misc/SharePoster.svelte"; +import { coverImageConfig } from "@/config/coverImageConfig"; +import { licenseConfig } from "@/config/licenseConfig"; +import { profileConfig } from "@/config/profileConfig"; +import { siteConfig } from "@/config/siteConfig"; +import { sponsorConfig } from "@/config/sponsorConfig"; +import { formatDateToYYYYMMDD } from "@/utils/date-utils"; +import { processCoverImageSync } from "@/utils/image-utils"; +import { url } from "@/utils/url-utils"; + +export async function getStaticPaths() { + const blogEntries = await getSortedPosts(); + return blogEntries.map((entry) => { + // 将 id 转换为 slug(移除扩展名)以匹配路由参数 + const slug = removeFileExtension(entry.id); + return { + params: { slug }, + props: { entry }, + }; + }); +} + +const { entry } = Astro.props; +const { Content, headings } = await render(entry); + +const { remarkPluginFrontmatter } = await render(entry); + +// 处理随机图:如果image为"api",则从配置的API获取随机图 +const processedImage = processCoverImageSync(entry.data.image, entry.id); + +let posterCoverUrl = processedImage; +if (processedImage) { + const isLocal = !( + processedImage.startsWith("/") || + processedImage.startsWith("http") || + processedImage.startsWith("https") || + processedImage.startsWith("data:") + ); + if (isLocal) { + const basePath = getFileDirFromPath(entry.filePath || ""); + const files = import.meta.glob("../../**", { + import: "default", + }); + let normalizedPath = path + .normalize(path.join("../../", basePath, processedImage)) + .replace(/\\/g, "/"); + const file = files[normalizedPath]; + if (file) { + const img = await file(); + posterCoverUrl = img.src; + } + } +} + +dayjs.extend(utc); + +const jsonLd = { + "@context": "https://schema.org", + "@type": "BlogPosting", + headline: entry.data.title, + description: entry.data.description || entry.data.title, + keywords: entry.data.tags, + author: { + "@type": "Person", + name: profileConfig.name, + url: Astro.site, + }, + datePublished: formatDateToYYYYMMDD(entry.data.published), + inLanguage: entry.data.lang + ? entry.data.lang.replace("_", "-") + : siteConfig.lang.replace("_", "-"), + // TODO include cover image here +}; +--- + + + + \ No newline at end of file diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts new file mode 100644 index 0000000..275488b --- /dev/null +++ b/src/pages/rss.xml.ts @@ -0,0 +1,50 @@ +import rss from "@astrojs/rss"; +import { getSortedPosts } from "@utils/content-utils"; +import { formatDateI18nWithTime } from "@utils/date-utils"; +import { url } from "@utils/url-utils"; +import type { APIContext } from "astro"; +import MarkdownIt from "markdown-it"; +import sanitizeHtml from "sanitize-html"; +import { profileConfig, siteConfig } from "@/config"; +import pkg from "../../package.json"; + +const parser = new MarkdownIt(); + +function stripInvalidXmlChars(str: string): string { + return str.replace( + // biome-ignore lint/suspicious/noControlCharactersInRegex: https://www.w3.org/TR/xml/#charsets + /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]/g, + "", + ); +} + +export async function GET(context: APIContext) { + const blog = await getSortedPosts(); + + return rss({ + title: siteConfig.title, + description: siteConfig.subtitle || "No description", + site: context.site ?? "https://firefly.cuteleaf.cn", + customData: ` + ${siteConfig.lang} + Firefly + ${pkg.version} + https://github.com/CuteLeaf/Firefly + ${formatDateI18nWithTime(new Date())}`, + items: blog.map((post) => { + const content = + typeof post.body === "string" ? post.body : String(post.body || ""); + const cleanedContent = stripInvalidXmlChars(content); + return { + title: post.data.title, + author: post.data?.author || profileConfig.name, + pubDate: post.data.published, + description: post.data.description || "", + link: url(`/posts/${post.id}/`), + content: sanitizeHtml(parser.render(cleanedContent), { + allowedTags: sanitizeHtml.defaults.allowedTags.concat(["img"]), + }), + }; + }), + }); +} diff --git a/src/pages/search.astro b/src/pages/search.astro new file mode 100644 index 0000000..c070fcf --- /dev/null +++ b/src/pages/search.astro @@ -0,0 +1,42 @@ +--- +import AdvancedSearch from "@components/pages/AdvancedSearch.svelte"; +import I18nKey from "@i18n/i18nKey"; +import { i18n } from "@i18n/translation"; +import MainGridLayout from "@layouts/MainGridLayout.astro"; +import { url } from "@/utils/url-utils"; + +const title = i18n(I18nKey.search); +const description = ""; +--- + + +
              + +
              +
              + +{import.meta.env.PROD && ( + +)} diff --git a/src/pages/sponsor.astro b/src/pages/sponsor.astro new file mode 100644 index 0000000..2feb61b --- /dev/null +++ b/src/pages/sponsor.astro @@ -0,0 +1,185 @@ +--- +import Icon from "@/components/misc/Icon.astro"; +import { siteConfig, sponsorConfig } from "@/config"; +import I18nKey from "@/i18n/i18nKey"; +import { i18n } from "@/i18n/translation"; +import MainGridLayout from "@/layouts/MainGridLayout.astro"; +import { url } from "@/utils/url-utils"; + +// 检查页面是否启用 +if (!siteConfig.pages.sponsor) { + return Astro.redirect("/404/"); +} + +const title = sponsorConfig.title || i18n(I18nKey.sponsorTitle); +const description = + sponsorConfig.description || i18n(I18nKey.sponsorDescription); +const enabledMethods = sponsorConfig.methods.filter((method) => method.enabled); +const sponsors = sponsorConfig.sponsors || []; +const showSponsorsList = sponsorConfig.showSponsorsList !== false; +--- + + +
              +
              + +
              +
              +
              + +
              +

              + {title} +

              +
              + {description && ( +

              + {description} +

              + )} + {sponsorConfig.usage && ( +
              +
              + +

              + + {sponsorConfig.usage} +

              +
              +
              + )} +
              + + +
              +
              + {enabledMethods.map((method) => ( +
              + +
              + {method.icon && ( + + )} +

              + {method.name} +

              +
              + + + {method.description && ( +

              + {method.description} +

              + )} + + + {method.qrCode && ( +
              + {`${method.name} +
              + )} + + {method.link && ( + + {i18n(I18nKey.sponsorGoTo)} + + + )} +
              + ))} +
              +
              + + + + {showSponsorsList && ( +
              +
              + +

              + {i18n(I18nKey.sponsorList)} +

              +
              + {sponsors.length > 0 ? ( +
              + {sponsors.map((sponsor) => ( +
              + +
              + +
              + + {sponsor.name} + + {sponsor.amount && ( + + {sponsor.amount} + + )} +
              + + + {sponsor.message && ( +

              + {sponsor.message} +

              + )} + + + {sponsor.date && ( +
              + + + + + {new Date(sponsor.date).toLocaleDateString()} + +
              + )} +
              +
              + ))} +
              + ) : ( +
              +

              {i18n(I18nKey.sponsorEmpty)}

              +
              + )} +
              + )} +
              +
              +
              + + + diff --git a/src/plugins/expressive-code/custom-copy-button.ts b/src/plugins/expressive-code/custom-copy-button.ts new file mode 100644 index 0000000..47e9cb7 --- /dev/null +++ b/src/plugins/expressive-code/custom-copy-button.ts @@ -0,0 +1,90 @@ +import { definePlugin } from "@expressive-code/core"; +import type { Element } from "hast"; + +export function pluginCustomCopyButton() { + return definePlugin({ + name: "Custom Copy Button", + hooks: { + postprocessRenderedBlock: (context) => { + function traverse(node: Element) { + if (node.type === "element" && node.tagName === "pre") { + processCodeBlock(node); + return; + } + if (node.children) { + for (const child of node.children) { + if (child.type === "element") traverse(child); + } + } + } + + function processCodeBlock(node: Element) { + const copyButton = { + type: "element" as const, + tagName: "button", + properties: { + className: ["copy-btn"], + "aria-label": "Copy code", + }, + children: [ + { + type: "element" as const, + tagName: "div", + properties: { + className: ["copy-btn-icon"], + }, + children: [ + { + type: "element" as const, + tagName: "svg", + properties: { + viewBox: "0 -960 960 960", + xmlns: "http://www.w3.org/2000/svg", + className: ["copy-btn-icon", "copy-icon"], + }, + children: [ + { + type: "element" as const, + tagName: "path", + properties: { + d: "M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z", + }, + children: [], + }, + ], + }, + { + type: "element" as const, + tagName: "svg", + properties: { + viewBox: "0 -960 960 960", + xmlns: "http://www.w3.org/2000/svg", + className: ["copy-btn-icon", "success-icon"], + }, + children: [ + { + type: "element" as const, + tagName: "path", + properties: { + d: "m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z", + }, + children: [], + }, + ], + }, + ], + }, + ], + } as Element; + + if (!node.children) { + node.children = []; + } + node.children.push(copyButton); + } + + traverse(context.renderData.blockAst); + }, + }, + }); +} diff --git a/src/plugins/expressive-code/language-badge.ts b/src/plugins/expressive-code/language-badge.ts new file mode 100644 index 0000000..5839428 --- /dev/null +++ b/src/plugins/expressive-code/language-badge.ts @@ -0,0 +1,49 @@ +/** + * Based on the discussion at https://github.com/expressive-code/expressive-code/issues/153#issuecomment-2282218684 + */ +import { definePlugin } from "@expressive-code/core"; + +export function pluginLanguageBadge() { + return definePlugin({ + name: "Language Badge", + baseStyles: () => ` + [data-language]::before { + position: absolute; + z-index: 2; + right: 0.5rem; + top: 0.5rem; + padding: 0.1rem 0.5rem; + content: attr(data-language); + font-family: "JetBrains Mono Variable", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 0.75rem; + font-weight: bold; + text-transform: uppercase; + color: oklch(0.75 0.1 var(--hue)); + background: oklch(0.33 0.035 var(--hue)); + border-radius: 0.5rem; + pointer-events: none; + transition: opacity 0.3s; + opacity: 0; + } + .frame:not(.has-title):not(.is-terminal) { + @media (hover: none) { + & [data-language]::before { + opacity: 1; + margin-right: 3rem; + } + & [data-language]:active::before { + opacity: 0; + } + } + @media (hover: hover) { + & [data-language]::before { + opacity: 1; + } + &:hover [data-language]::before { + opacity: 0; + } + } + } + `, + }); +} diff --git a/src/plugins/mermaid-render-script.js b/src/plugins/mermaid-render-script.js new file mode 100644 index 0000000..a0fed46 --- /dev/null +++ b/src/plugins/mermaid-render-script.js @@ -0,0 +1,344 @@ +(() => { + // 单例模式:检查是否已经初始化过 + if (window.mermaidInitialized) { + return; + } + + window.mermaidInitialized = true; + + // 记录当前主题状态,避免不必要的重新渲染 + let currentTheme = null; + let isRendering = false; // 防止并发渲染 + let retryCount = 0; + const MAX_RETRIES = 3; + const RETRY_DELAY = 1000; // 1秒 + + // 检查主题是否真的发生了变化 + function hasThemeChanged() { + const isDark = document.documentElement.classList.contains("dark"); + const newTheme = isDark ? "dark" : "default"; + + if (currentTheme !== newTheme) { + currentTheme = newTheme; + return true; + } + return false; + } + + // 等待 Mermaid 库加载完成 + function waitForMermaid(timeout = 10000) { + return new Promise((resolve, reject) => { + const startTime = Date.now(); + + function check() { + if (window.mermaid && typeof window.mermaid.initialize === "function") { + resolve(window.mermaid); + } else if (Date.now() - startTime > timeout) { + reject(new Error("Mermaid library failed to load within timeout")); + } else { + setTimeout(check, 100); + } + } + + check(); + }); + } + + // 设置 MutationObserver 监听 html 元素的 class 属性变化 + function setupMutationObserver() { + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if ( + mutation.type === "attributes" && + mutation.attributeName === "class" + ) { + // 检查是否是 dark 类的变化 + const target = mutation.target; + const wasDark = mutation.oldValue + ? mutation.oldValue.includes("dark") + : false; + const isDark = target.classList.contains("dark"); + + if (wasDark !== isDark) { + if (hasThemeChanged()) { + // 延迟渲染,避免主题切换时的闪烁 + setTimeout(() => renderMermaidDiagrams(), 150); + } + } + } + }); + }); + + // 开始观察 html 元素的 class 属性变化 + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ["class"], + attributeOldValue: true, + }); + } + + // 设置其他事件监听器 + function setupEventListeners() { + // 监听页面切换 + document.addEventListener("astro:page-load", () => { + // 重新初始化主题状态 + currentTheme = null; + retryCount = 0; // 重置重试计数 + if (hasThemeChanged()) { + setTimeout(() => renderMermaidDiagrams(), 100); + } + }); + + // 监听页面可见性变化,页面重新可见时重新渲染 + document.addEventListener("visibilitychange", () => { + if (!document.hidden) { + setTimeout(() => renderMermaidDiagrams(), 200); + } + }); + } + + async function initializeMermaid() { + try { + await waitForMermaid(); + + // 初始化 Mermaid 配置 + window.mermaid.initialize({ + startOnLoad: false, + theme: "default", + themeVariables: { + fontFamily: "inherit", + fontSize: "16px", + }, + securityLevel: "loose", + // 添加错误处理配置 + errorLevel: "warn", + logLevel: "error", + }); + + // 渲染所有 Mermaid 图表 + await renderMermaidDiagrams(); + } catch (error) { + console.error("Failed to initialize Mermaid:", error); + // 如果初始化失败,尝试重新加载 + if (retryCount < MAX_RETRIES) { + retryCount++; + setTimeout(() => initializeMermaid(), RETRY_DELAY * retryCount); + } + } + } + + async function renderMermaidDiagrams() { + // 防止并发渲染 + if (isRendering) { + return; + } + + // 检查 Mermaid 是否可用 + if (!window.mermaid || typeof window.mermaid.render !== "function") { + console.warn("Mermaid not available, skipping render"); + return; + } + + isRendering = true; + + try { + const mermaidElements = document.querySelectorAll( + ".mermaid[data-mermaid-code]", + ); + + if (mermaidElements.length === 0) { + isRendering = false; + return; + } + + // 延迟检测主题,确保 DOM 已经更新 + await new Promise((resolve) => setTimeout(resolve, 100)); + + const htmlElement = document.documentElement; + const isDark = htmlElement.classList.contains("dark"); + const theme = isDark ? "dark" : "default"; + + // 更新 Mermaid 主题(只需要更新一次) + window.mermaid.initialize({ + startOnLoad: false, + theme: theme, + themeVariables: { + fontFamily: "inherit", + fontSize: "16px", + // 强制应用主题变量 + primaryColor: isDark ? "#ffffff" : "#000000", + primaryTextColor: isDark ? "#ffffff" : "#000000", + primaryBorderColor: isDark ? "#ffffff" : "#000000", + lineColor: isDark ? "#ffffff" : "#000000", + secondaryColor: isDark ? "#333333" : "#f0f0f0", + tertiaryColor: isDark ? "#555555" : "#e0e0e0", + }, + securityLevel: "loose", + errorLevel: "warn", + logLevel: "error", + }); + + // 批量渲染所有图表,添加重试机制 + const renderPromises = Array.from(mermaidElements).map( + async (element, index) => { + let attempts = 0; + const maxAttempts = 3; + + while (attempts < maxAttempts) { + try { + const code = element.getAttribute("data-mermaid-code"); + + if (!code) { + break; + } + + // 显示加载状态 + element.innerHTML = + '
              Rendering diagram...
              '; + + // 渲染图表 + const { svg } = await window.mermaid.render( + `mermaid-${Date.now()}-${index}-${attempts}`, + code, + ); + + element.innerHTML = svg; + + // 添加响应式支持 + const svgElement = element.querySelector("svg"); + if (svgElement) { + svgElement.setAttribute("width", "100%"); + svgElement.removeAttribute("height"); + svgElement.style.maxWidth = "100%"; + svgElement.style.height = "auto"; + + // 强制应用样式 + if (isDark) { + svgElement.style.filter = "brightness(0.9) contrast(1.1)"; + } else { + svgElement.style.filter = "none"; + } + } + + // 渲染成功,跳出重试循环 + break; + } catch (error) { + attempts++; + console.warn( + `Mermaid rendering attempt ${attempts} failed for element ${index}:`, + error, + ); + + if (attempts >= maxAttempts) { + console.error( + `Failed to render Mermaid diagram after ${maxAttempts} attempts:`, + error, + ); + element.innerHTML = ` +
              +

              Failed to render diagram after ${maxAttempts} attempts.

              + +
              + `; + } else { + // 等待一段时间后重试 + await new Promise((resolve) => + setTimeout(resolve, 500 * attempts), + ); + } + } + } + }, + ); + + // 等待所有渲染完成 + await Promise.all(renderPromises); + retryCount = 0; // 重置重试计数 + } catch (error) { + console.error("Error in renderMermaidDiagrams:", error); + + // 如果渲染失败,尝试重新渲染 + if (retryCount < MAX_RETRIES) { + retryCount++; + setTimeout(() => renderMermaidDiagrams(), RETRY_DELAY * retryCount); + } + } finally { + isRendering = false; + } + } + + // 初始化主题状态 + function initializeThemeState() { + const isDark = document.documentElement.classList.contains("dark"); + currentTheme = isDark ? "dark" : "default"; + } + + // 加载 Mermaid 库 + async function loadMermaid() { + if (typeof window.mermaid !== "undefined") { + return Promise.resolve(); + } + + return new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = + "https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"; + + script.onload = () => { + console.log("Mermaid library loaded successfully"); + resolve(); + }; + + script.onerror = (error) => { + console.error("Failed to load Mermaid library:", error); + // 尝试备用 CDN + const fallbackScript = document.createElement("script"); + fallbackScript.src = "https://unpkg.com/mermaid@11/dist/mermaid.min.js"; + + fallbackScript.onload = () => { + console.log("Mermaid library loaded from fallback CDN"); + resolve(); + }; + + fallbackScript.onerror = () => { + reject( + new Error( + "Failed to load Mermaid from both primary and fallback CDNs", + ), + ); + }; + + document.head.appendChild(fallbackScript); + }; + + document.head.appendChild(script); + }); + } + + // 主初始化函数 + async function initialize() { + try { + // 设置监听器 + setupMutationObserver(); + setupEventListeners(); + + // 初始化主题状态 + initializeThemeState(); + + // 加载并初始化 Mermaid + await loadMermaid(); + await initializeMermaid(); + } catch (error) { + console.error("Failed to initialize Mermaid system:", error); + } + } + + // 启动初始化 + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", initialize); + } else { + initialize(); + } +})(); diff --git a/src/plugins/rehype-component-admonition.mjs b/src/plugins/rehype-component-admonition.mjs new file mode 100644 index 0000000..8421c5f --- /dev/null +++ b/src/plugins/rehype-component-admonition.mjs @@ -0,0 +1,33 @@ +/// +import { h } from "hastscript"; + +/** + * Creates an admonition component. + * + * @param {Object} properties - The properties of the component. + * @param {string} [properties.title] - An optional title. + * @param {('tip'|'note'|'important'|'caution'|'warning')} type - The admonition type. + * @param {import('mdast').RootContent[]} children - The children elements of the component. + * @returns {import('mdast').Parent} The created admonition component. + */ +export function AdmonitionComponent(properties, children, type) { + if (!Array.isArray(children) || children.length === 0) + return h( + "div", + { class: "hidden" }, + 'Invalid admonition directive. (Admonition directives must be of block type ":::note{name="name"} :::")', + ); + + let label = null; + if (Object.hasOwn(Object(properties), "has-directive-label")) { + label = children[0]; // The first child is the label + // biome-ignore lint/style/noParameterAssign: + children = children.slice(1); + label.tagName = "div"; // Change the tag

              to

              + } + + return h("blockquote", { class: `admonition bdm-${type}` }, [ + h("span", { class: "bdm-title" }, label ? label : type.toUpperCase()), + ...children, + ]); +} diff --git a/src/plugins/rehype-component-github-card.mjs b/src/plugins/rehype-component-github-card.mjs new file mode 100644 index 0000000..50d1851 --- /dev/null +++ b/src/plugins/rehype-component-github-card.mjs @@ -0,0 +1,95 @@ +/// +import { h } from "hastscript"; + +/** + * Creates a GitHub Card component. + * + * @param {Object} properties - The properties of the component. + * @param {string} properties.repo - The GitHub repository in the format "owner/repo". + * @param {import('mdast').RootContent[]} children - The children elements of the component. + * @returns {import('mdast').Parent} The created GitHub Card component. + */ +export function GithubCardComponent(properties, children) { + if (Array.isArray(children) && children.length !== 0) + return h("div", { class: "hidden" }, [ + 'Invalid directive. ("github" directive must be leaf type "::github{repo="owner/repo"}")', + ]); + + if (!properties.repo || !properties.repo.includes("/")) + return h( + "div", + { class: "hidden" }, + 'Invalid repository. ("repo" attributte must be in the format "owner/repo")', + ); + + const repo = properties.repo; + const cardUuid = `GC${Math.random().toString(36).slice(-6)}`; // Collisions are not important + + const nAvatar = h(`div#${cardUuid}-avatar`, { class: "gc-avatar" }); + const nLanguage = h( + `span#${cardUuid}-language`, + { class: "gc-language" }, + "Waiting...", + ); + + const nTitle = h("div", { class: "gc-titlebar" }, [ + h("div", { class: "gc-titlebar-left" }, [ + h("div", { class: "gc-owner" }, [ + nAvatar, + h("div", { class: "gc-user" }, repo.split("/")[0]), + ]), + h("div", { class: "gc-divider" }, "/"), + h("div", { class: "gc-repo" }, repo.split("/")[1]), + ]), + h("div", { class: "github-logo" }), + ]); + + const nDescription = h( + `div#${cardUuid}-description`, + { class: "gc-description" }, + "Waiting for api.github.com...", + ); + + const nStars = h(`div#${cardUuid}-stars`, { class: "gc-stars" }, "00K"); + const nForks = h(`div#${cardUuid}-forks`, { class: "gc-forks" }, "0K"); + const nLicense = h(`div#${cardUuid}-license`, { class: "gc-license" }, "0K"); + + const nScript = h( + `script#${cardUuid}-script`, + { type: "text/javascript", defer: true }, + ` + fetch('https://api.github.com/repos/${repo}', { referrerPolicy: "no-referrer" }).then(response => response.json()).then(data => { + document.getElementById('${cardUuid}-description').innerText = data.description?.replace(/:[a-zA-Z0-9_]+:/g, '') || "Description not set"; + document.getElementById('${cardUuid}-language').innerText = data.language; + document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks).replaceAll("\u202f", ''); + document.getElementById('${cardUuid}-stars').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.stargazers_count).replaceAll("\u202f", ''); + const avatarEl = document.getElementById('${cardUuid}-avatar'); + avatarEl.style.backgroundImage = 'url(' + data.owner.avatar_url + '&s=32' + ')'; + avatarEl.style.backgroundColor = 'transparent'; + document.getElementById('${cardUuid}-license').innerText = data.license?.spdx_id || "no-license"; + document.getElementById('${cardUuid}-card').classList.remove("fetch-waiting"); + console.log("[GITHUB-CARD] Loaded card for ${repo} | ${cardUuid}.") + }).catch(err => { + const c = document.getElementById('${cardUuid}-card'); + c?.classList.add("fetch-error"); + console.warn("[GITHUB-CARD] (Error) Loading card for ${repo} | ${cardUuid}.") + }) + `, + ); + + return h( + `a#${cardUuid}-card`, + { + class: "card-github fetch-waiting no-styling", + href: `https://github.com/${repo}`, + target: "_blank", + repo, + }, + [ + nTitle, + nDescription, + h("div", { class: "gc-infobar" }, [nStars, nForks, nLicense, nLanguage]), + nScript, + ], + ); +} diff --git a/src/plugins/rehype-email-protection.mjs b/src/plugins/rehype-email-protection.mjs new file mode 100644 index 0000000..e72841c --- /dev/null +++ b/src/plugins/rehype-email-protection.mjs @@ -0,0 +1,129 @@ +import { h } from "hastscript"; +import { visit } from "unist-util-visit"; + +// 来自霞葉: https://kasuha.com/posts/fuwari-enhance-ep1/ + +/** + * 加密 mailto 链接以保护邮箱地址免受爬虫抓取的 rehype 插件 + * + * @param {Object} options - 插件选项 + * @param {string} [options.method='base64'] - 编码方式: 'base64' or 'rot13' + * @returns {Function} A transformer function for the rehype plugin + */ +export default function rehypeEmailProtection(options = {}) { + const { method = "base64" } = options; + + // Base64 编码函数 + const base64Encode = (str) => { + return btoa(str); + }; + + // ROT13 编码函数 + const rot13Encode = (str) => { + return str.replace(/[a-zA-Z]/g, (char) => { + const start = char <= "Z" ? 65 : 97; + return String.fromCharCode( + ((char.charCodeAt(0) - start + 13) % 26) + start, + ); + }); + }; + + // 根据选择的方法进行编码 + const encode = (str) => { + return method === "rot13" ? rot13Encode(str) : base64Encode(str); + }; + + // 生成解码 JavaScript 代码 + const generateDecodeScript = () => { + if (method === "rot13") { + return ` + function decodeRot13(str) { + return str.replace(/[a-zA-Z]/g, function(char) { + const start = char <= 'Z' ? 65 : 97; + return String.fromCharCode(((char.charCodeAt(0) - start + 13) % 26) + start); + }); + } + const decodedEmail = decodeRot13(encodedEmail); + `; + } + return ` + const decodedEmail = atob(encodedEmail); + `; + }; + + return (tree) => { + let hasEmailLinks = false; + + visit(tree, "element", (node, index, parent) => { + // 只处理 a 元素 + if (node.tagName !== "a") { + return; + } + + // 检查是否是 mailto 链接 + const href = node.properties?.href; + if (!href || !href.startsWith("mailto:")) { + return; + } + + hasEmailLinks = true; + + // 提取邮箱地址 + const email = href.replace("mailto:", ""); + const encodedEmail = encode(email); + + // 创建加密的链接元素(移除原始的 href 属性,避免重复定义) + const otherProperties = { ...node.properties }; + delete otherProperties.href; + const protectedLink = h( + "a", + { + ...otherProperties, + href: "#", + "data-encoded-email": encodedEmail, + onclick: ` + (function() { + const encodedEmail = this.getAttribute('data-encoded-email'); + ${generateDecodeScript()} + this.href = 'mailto:' + decodedEmail; + this.removeAttribute('data-encoded-email'); + this.removeAttribute('onclick'); + this.click(); + return false; + }).call(this); + ` + .replace(/\s+/g, " ") + .trim(), + }, + node.children, + ); + + // 替换当前的 a 节点 + if (parent && typeof index === "number") { + parent.children[index] = protectedLink; + } + }); + + // 如果页面中有邮箱链接,添加样式 + if (hasEmailLinks) { + visit(tree, "element", (node) => { + if (node.tagName === "head") { + const style = h( + "style", + ` + a[data-encoded-email] { + cursor: pointer; + text-decoration: underline; + color: inherit; + } + a[data-encoded-email]:hover { + text-decoration: underline; + } + `.trim(), + ); + node.children.push(style); + } + }); + } + }; +} diff --git a/src/plugins/rehype-figure.mjs b/src/plugins/rehype-figure.mjs new file mode 100644 index 0000000..dc84ba4 --- /dev/null +++ b/src/plugins/rehype-figure.mjs @@ -0,0 +1,46 @@ +import { h } from "hastscript"; +import { visit } from "unist-util-visit"; + +// 来自霞葉: https://kasuha.com/posts/fuwari-enhance-ep1/ + +/** + * 将带有 alt 文本的图片转换为包含 figcaption 的 figure 元素的 rehype 插件 + * + * @returns {Function} A transformer function for the rehype plugin + */ +export default function rehypeFigure() { + return (tree) => { + visit(tree, "element", (node, index, parent) => { + // 只处理 img 元素 + if (node.tagName !== "img") { + return; + } + + // 获取 alt 属性 + const alt = node.properties?.alt; + + // 如果没有 alt 属性或 alt 为空字符串,则保持原样 + if (!alt || alt.trim() === "") { + return; + } + + // 创建 figure 元素,包含原始的 img 和居中的 figcaption + const figure = h("figure", [ + // 复制原始的 img 节点,但移除 alt 属性避免重复显示 + h("img", { + ...node.properties, + alt: "", // 清空 alt 属性,因为现在有 figcaption 了 + }), + h("figcaption", alt), + ]); + + // 居中显示 + const centerFigure = h("center", figure); + + // 替换当前的 img 节点为 figure 节点 + if (parent && typeof index === "number") { + parent.children[index] = centerFigure; + } + }); + }; +} diff --git a/src/plugins/rehype-mermaid.mjs b/src/plugins/rehype-mermaid.mjs new file mode 100644 index 0000000..4946afc --- /dev/null +++ b/src/plugins/rehype-mermaid.mjs @@ -0,0 +1,52 @@ +import { h } from "hastscript"; +import { visit } from "unist-util-visit"; +import mermaidRenderScript from "./mermaid-render-script.js?raw"; + +export function rehypeMermaid() { + return (tree) => { + visit(tree, "element", (node) => { + if ( + node.tagName === "div" && + node.properties && + node.properties.className && + node.properties.className.includes("mermaid-container") + ) { + const mermaidCode = node.properties["data-mermaid-code"] || ""; + const mermaidId = `mermaid-${Math.random().toString(36).slice(-6)}`; + + // 创建 Mermaid 容器 + const mermaidContainer = h( + "div", + { + class: "mermaid-wrapper", + id: mermaidId, + }, + [ + h( + "div", + { + class: "mermaid", + "data-mermaid-code": mermaidCode, + }, + mermaidCode, + ), + ], + ); + + // 创建客户端渲染脚本 + const renderScript = h( + "script", + { + type: "text/javascript", + }, + mermaidRenderScript, + ); + + // 替换原始节点 + node.tagName = "div"; + node.properties = { class: "mermaid-diagram-container" }; + node.children = [mermaidContainer, renderScript]; + } + }); + }; +} diff --git a/src/plugins/remark-directive-rehype.js b/src/plugins/remark-directive-rehype.js new file mode 100644 index 0000000..174cceb --- /dev/null +++ b/src/plugins/remark-directive-rehype.js @@ -0,0 +1,30 @@ +import { h } from "hastscript"; +import { visit } from "unist-util-visit"; + +export function parseDirectiveNode() { + return (tree, { _data }) => { + visit(tree, (node) => { + if ( + node.type === "containerDirective" || + node.type === "leafDirective" || + node.type === "textDirective" + ) { + // biome-ignore lint/suspicious/noAssignInExpressions: + const data = node.data || (node.data = {}); + node.attributes = node.attributes || {}; + if ( + node.children.length > 0 && + node.children[0].data && + node.children[0].data.directiveLabel + ) { + // Add a flag to the node to indicate that it has a directive label + node.attributes["has-directive-label"] = true; + } + const hast = h(node.name, node.attributes); + + data.hName = hast.tagName; + data.hProperties = hast.properties; + } + }); + }; +} diff --git a/src/plugins/remark-excerpt.js b/src/plugins/remark-excerpt.js new file mode 100644 index 0000000..360fe83 --- /dev/null +++ b/src/plugins/remark-excerpt.js @@ -0,0 +1,17 @@ +// biome-ignore lint/suspicious/noShadowRestrictedNames: +import { toString } from "mdast-util-to-string"; + +/* Use the post's first paragraph as the excerpt */ +export function remarkExcerpt() { + return (tree, { data }) => { + let excerpt = ""; + for (const node of tree.children) { + if (node.type !== "paragraph") { + continue; + } + excerpt = toString(node); + break; + } + data.astro.frontmatter.excerpt = excerpt; + }; +} diff --git a/src/plugins/remark-mermaid.js b/src/plugins/remark-mermaid.js new file mode 100644 index 0000000..b0c5dd2 --- /dev/null +++ b/src/plugins/remark-mermaid.js @@ -0,0 +1,19 @@ +import { visit } from "unist-util-visit"; + +export function remarkMermaid() { + return (tree) => { + visit(tree, "code", (node) => { + if (node.lang === "mermaid") { + // 将 mermaid 代码块转换为自定义节点类型 + node.type = "mermaid"; + node.data = { + hName: "div", + hProperties: { + className: ["mermaid-container"], + "data-mermaid-code": node.value, + }, + }; + } + }); + }; +} diff --git a/src/plugins/remark-reading-time.mjs b/src/plugins/remark-reading-time.mjs new file mode 100644 index 0000000..4813f03 --- /dev/null +++ b/src/plugins/remark-reading-time.mjs @@ -0,0 +1,15 @@ +// biome-ignore lint/suspicious/noShadowRestrictedNames: +import { toString } from "mdast-util-to-string"; +import getReadingTime from "reading-time"; + +export function remarkReadingTime() { + return (tree, { data }) => { + const textOnPage = toString(tree); + const readingTime = getReadingTime(textOnPage); + data.astro.frontmatter.minutes = Math.max( + 1, + Math.round(readingTime.minutes), + ); + data.astro.frontmatter.words = readingTime.words; + }; +} diff --git a/src/scripts/index-to-meilisearch.mts b/src/scripts/index-to-meilisearch.mts new file mode 100644 index 0000000..f42a4de --- /dev/null +++ b/src/scripts/index-to-meilisearch.mts @@ -0,0 +1,145 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; +import { glob } from "glob"; +import matter from "gray-matter"; +import { MeiliSearch } from "meilisearch"; +import { navBarSearchConfig } from "../config/index.ts"; + +class MeiliSearchIndexer { + private client: MeiliSearch; + + constructor( + private MEILI_HOST: string, + private MEILI_MASTER_KEY: string | undefined, + private INDEX_NAME: string, + private contentDir: string, + ) { + if (!MEILI_HOST || !INDEX_NAME || !contentDir) { + console.error( + "Error: MeiliSearch configuration is incomplete. Please check your settings.", + ); + process.exit(1); + } + if (!MEILI_MASTER_KEY) { + console.error( + "Error: MeiliSearch master key is missing. Please provide the MEILI_MASTER_KEY environment variable.", + ); + process.exit(1); + } + this.client = new MeiliSearch({ + host: this.MEILI_HOST, + apiKey: this.MEILI_MASTER_KEY, + }); + console.log("Running MeiliSearch Indexer:", MEILI_HOST); + } + + async getDocuments() { + // glob 模式以递归搜索所有子目录 + const files = await glob(`${this.contentDir}/**/*.{md,mdx}`); + + return await Promise.all( + files.map(async (file, idx) => { + const content = await fs.readFile(file, "utf-8"); + const { data, content: body } = matter(content); + + // 获取文件相对于 'src/content/posts' 的路径 + const relativePath = path.relative(this.contentDir, file); + + // 解析路径,得到目录(dir)和文件名(name) + const { dir, name } = path.parse(relativePath); + + // 根据 Astro 规则生成 slug: + // - 如果文件名是 'index', slug 就是它的父目录路径。 + // - 否则, slug 是 目录路径 + 文件名。 + const slugPart = name === "index" ? dir : path.join(dir, name); + + // 确保在 Windows 上也能正确生成 URL 路径(将 \ 替换为 /) + const finalSlug = slugPart.replace(/\\/g, "/"); + + const plainText = body + .replace(/```[\s\S]*?```/g, "") + .replace(/(^|\n)( {4,}|\t).*(\n|$)/g, "\n") + .replace(/`[^`]*`/g, "") + .replace(/---[\s\S]*?---/g, "") + .replace(/<[^>]+>/g, "") + .replace(/[#*_~[\]()\-+=>|{}]/g, "") + .replace(/\s+/g, " ") + .trim(); + + return { + id: idx, + slug: `/posts/${finalSlug}/`, // 完整的 URL 路径 + title: data.title, + description: data.description || "", + content: plainText, + pubDate: data.published + ? new Date(data.published).getTime() + : Date.now(), + }; + }), + ); + } + + async main() { + try { + // 删除旧索引 + await this.client.deleteIndexIfExists(this.INDEX_NAME); + console.log(`Index '${this.INDEX_NAME}' deleted.`); + + const documents = await this.getDocuments(); + if (documents.length === 0) { + console.log("No documents found to index."); + return; + } + console.log(`Found ${documents.length} documents to index.`); + + // 创建新索引 + const index = this.client.index(this.INDEX_NAME); + + // 更新配置 + await index.updateSettings({ + searchableAttributes: ["title", "content", "description"], + displayedAttributes: [ + "title", + "description", + "content", + "pubDate", + "slug", + ], + sortableAttributes: ["pubDate"], + }); + console.log("Index settings updated."); + + await index.addDocuments(documents, { primaryKey: "id" }); + console.log("MeiliSearch indexing completed successfully!"); + } catch (error) { + console.error("Error during indexing:", error); + process.exit(1); + } + } +} + +const isMain = import.meta.url === pathToFileURL(process.argv[1]).href; + +if (isMain) { + const { meiliSearchConfig } = navBarSearchConfig; + if (!meiliSearchConfig) { + console.error( + "Error: MeiliSearch configuration is missing in navBarConfig.", + ); + process.exit(1); + } + const MEILI_MASTER_KEY = process.env.MEILI_MASTER_KEY; + const indexer = new MeiliSearchIndexer( + meiliSearchConfig.MEILI_HOST, + MEILI_MASTER_KEY, + meiliSearchConfig.INDEX_NAME, + meiliSearchConfig.CONTENT_DIR, + ); + + await indexer.main(); + console.log("Indexing completed successfully."); +} + +export default MeiliSearchIndexer; diff --git a/src/scripts/theme-manager.js b/src/scripts/theme-manager.js new file mode 100644 index 0000000..0dc56b7 --- /dev/null +++ b/src/scripts/theme-manager.js @@ -0,0 +1,92 @@ +// 主题管理脚本 +export function initThemeManager() { + const _DEFAULT_THEME = "LIGHT_MODE"; + const LIGHT_MODE = "LIGHT_MODE"; + const DARK_MODE = "DARK_MODE"; + const SYSTEM_MODE = "SYSTEM_MODE"; + const BANNER_HEIGHT_EXTEND = 30; + const _PAGE_WIDTH = 80; + const configHue = 200; // 从配置中获取 + const defaultMode = "system"; // 从配置中获取 + + // Load the theme from local storage, use defaultMode from config if not set + const theme = localStorage.getItem("theme") || defaultMode; + + // Helper function to get system preference + function getSystemPreference() { + return window.matchMedia("(prefers-color-scheme: dark)").matches + ? DARK_MODE + : LIGHT_MODE; + } + + // Resolve theme (convert system to actual theme) + function resolveTheme(themeValue) { + if (themeValue === SYSTEM_MODE) { + return getSystemPreference(); + } + return themeValue; + } + + const resolvedTheme = resolveTheme(theme); + let isDark = false; + + switch (resolvedTheme) { + case LIGHT_MODE: + document.documentElement.classList.remove("dark"); + isDark = false; + break; + case DARK_MODE: + document.documentElement.classList.add("dark"); + isDark = true; + break; + } + + // Setup system theme change listener if using system mode + if (theme === SYSTEM_MODE) { + const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); + const handleSystemThemeChange = (e) => { + const currentStoredTheme = localStorage.getItem("theme"); + if (currentStoredTheme === SYSTEM_MODE) { + const newTheme = e.matches ? DARK_MODE : LIGHT_MODE; + const newIsDark = newTheme === DARK_MODE; + + if (newIsDark) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + + const expressiveTheme = newIsDark ? "github-dark" : "github-light"; + document.documentElement.setAttribute("data-theme", expressiveTheme); + } + }; + + // Add listener for system theme changes + mediaQuery.addListener(handleSystemThemeChange); + } + + // Set the theme for Expressive Code based on current mode + const expressiveTheme = isDark ? "github-dark" : "github-light"; + document.documentElement.setAttribute("data-theme", expressiveTheme); + + // 确保主题正确应用 - 解决代码块渲染问题 + // 使用 requestAnimationFrame 确保在下一帧检查主题状态 + requestAnimationFrame(() => { + const currentTheme = document.documentElement.getAttribute("data-theme"); + if (currentTheme !== expressiveTheme) { + document.documentElement.setAttribute("data-theme", expressiveTheme); + } + }); + + // Load the hue from local storage + const hue = localStorage.getItem("hue") || configHue; + document.documentElement.style.setProperty("--hue", hue); + + // calculate the --banner-height-extend, which needs to be a multiple of 4 to avoid blurry text + let offset = Math.floor(window.innerHeight * (BANNER_HEIGHT_EXTEND / 100)); + offset = offset - (offset % 4); + document.documentElement.style.setProperty( + "--banner-height-extend", + `${offset}px`, + ); +} diff --git a/src/styles/animation-enhancements.css b/src/styles/animation-enhancements.css new file mode 100644 index 0000000..7e22a9e --- /dev/null +++ b/src/styles/animation-enhancements.css @@ -0,0 +1,252 @@ +/* 页面切换状态类 */ +html.is-leaving .transition-leaving { + transform: translateY(-1rem); + opacity: 0; +} + +html.is-entering .transition-main { + transform: translateY(1.5rem); + opacity: 0; +} + +/* 离开动画类 */ +.animate-leave { + transform: translateY(-1rem) !important; + opacity: 0 !important; + transition: + transform 250ms cubic-bezier(0.4, 0, 0.6, 1), + opacity 250ms cubic-bezier(0.4, 0, 0.6, 1) !important; +} + +/* 增强的组件动画 */ +.enhanced-fade-in { + opacity: 0; + transform: translateY(1.5rem) scale(0.98); + transition: + opacity 350ms cubic-bezier(0.4, 0, 0.2, 1), + transform 350ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.enhanced-fade-in.animate { + opacity: 1; + transform: translateY(0) scale(1); +} + +/* 侧边栏动画 */ +.sidebar-animate { + opacity: 0; + transform: translateX(-2rem); + transition: + opacity 300ms cubic-bezier(0.4, 0, 0.2, 1), + transform 300ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.sidebar-animate.animate { + opacity: 1; + transform: translateX(0); +} + +/* 卡片动画 */ +.card-animate { + opacity: 0; + transform: translateY(2rem) scale(0.95); + transition: + opacity 400ms cubic-bezier(0.4, 0, 0.2, 1), + transform 400ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.card-animate.animate { + opacity: 1; + transform: translateY(0) scale(1); +} + +/* 文章内容动画 */ +.post-content-animate { + opacity: 0; + transform: translateY(1rem); + transition: + opacity 320ms cubic-bezier(0.4, 0, 0.2, 1), + transform 320ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.post-content-animate.animate { + opacity: 1; + transform: translateY(0); +} + +/* 导航栏动画增强 */ +.navbar-animate { + opacity: 0; + transform: translateY(-1rem); + transition: + opacity 280ms cubic-bezier(0.4, 0, 0.2, 1), + transform 280ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.navbar-animate.animate { + opacity: 1; + transform: translateY(0); +} + +/* 页脚动画 */ +.footer-animate { + opacity: 0; + transform: translateY(1rem); + transition: + opacity 300ms cubic-bezier(0.4, 0, 0.2, 1), + transform 300ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.footer-animate.animate { + opacity: 1; + transform: translateY(0); +} + +/* 按钮悬停动画增强 */ +.button-enhance { + transition: + transform 200ms cubic-bezier(0.4, 0, 0.2, 1), + box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.button-enhance:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} + +.button-enhance:active { + transform: translateY(0); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +/* 链接动画增强 */ +.link-enhance { + position: relative; + transition: color 200ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.link-enhance::after { + content: ''; + position: absolute; + bottom: -2px; + left: 0; + width: 0; + height: 2px; + background: currentColor; + transition: width 300ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.link-enhance:hover::after { + width: 100%; +} + +/* 图片加载动画 */ +.image-animate { + opacity: 0; + transform: scale(1.05); + transition: + opacity 400ms cubic-bezier(0.4, 0, 0.2, 1), + transform 400ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.image-animate.loaded { + opacity: 1; + transform: scale(1); +} + +/* 搜索框动画 */ +.search-animate { + transform: scale(0.95); + opacity: 0; + transition: + transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 250ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.search-animate.animate { + transform: scale(1); + opacity: 1; +} + +/* 标签云动画 */ +.tag-animate { + opacity: 0; + transform: translateY(0.5rem) scale(0.9); + transition: + opacity 200ms cubic-bezier(0.4, 0, 0.2, 1), + transform 200ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.tag-animate.animate { + opacity: 1; + transform: translateY(0) scale(1); +} + +/* 分页动画 */ +.pagination-animate { + opacity: 0; + transform: translateY(1rem); + transition: + opacity 300ms cubic-bezier(0.4, 0, 0.2, 1), + transform 300ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.pagination-animate.animate { + opacity: 1; + transform: translateY(0); +} + +/* 减少动画的媒体查询 */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } + + /* 保留TOC的平滑滚动,但减少其他滚动动画 */ + html { + scroll-behavior: auto !important; + } + + /* 确保TOC组件仍然有平滑滚动 */ + table-of-contents#toc { + scroll-behavior: smooth !important; + } +} + +/* 高对比度模式支持 */ +@media (prefers-contrast: high) { + .enhanced-fade-in, + .card-animate, + .post-content-animate { + border: 1px solid currentColor; + } +} + +/* 暗色模式动画调整 */ +@media (prefers-color-scheme: dark) { + .button-enhance:hover { + box-shadow: 0 4px 12px rgba(255, 255, 255, 0.1); + } + + .button-enhance:active { + box-shadow: 0 2px 4px rgba(255, 255, 255, 0.05); + } +} + +/* 性能优化 */ +.animate-gpu { + will-change: transform, opacity; + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + transform: translateZ(0); + -webkit-transform: translateZ(0); +} + +/* 动画完成后清理 */ +.animation-complete { + will-change: auto; +} \ No newline at end of file diff --git a/src/styles/expressive-code.css b/src/styles/expressive-code.css new file mode 100644 index 0000000..a5045e1 --- /dev/null +++ b/src/styles/expressive-code.css @@ -0,0 +1,9 @@ +.expressive-code { + .frame { + @apply !shadow-none; + } + + .title { + font-family: "JetBrains Mono Variable", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + } +} diff --git a/src/styles/fancybox-custom.css b/src/styles/fancybox-custom.css new file mode 100644 index 0000000..4b6b551 --- /dev/null +++ b/src/styles/fancybox-custom.css @@ -0,0 +1,121 @@ +/* Fancybox 自定义样式 */ +.fancybox__container { + --fancybox-bg: rgba(0, 0, 0, 0.9); + --fancybox-thumbs-width: 64px; + --fancybox-thumbs-ratio: 1; + --fancybox-thumbs-border-radius: 4px; +} + +.fancybox__toolbar { + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.7), transparent); + padding: 8px; + backdrop-filter: blur(4px); +} + +.fancybox__caption { + background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent); + color: white; + font-size: 1rem; + padding: 1rem; + text-align: center; + backdrop-filter: blur(4px); + border-radius: 8px; + margin: 0 1rem 1rem 1rem; +} + +.fancybox__nav { + --carousel-button-svg-width: 24px; + --carousel-button-svg-height: 24px; +} + +.fancybox__thumbs { + background: rgba(0, 0, 0, 0.7); + padding: 2px; + border-radius: 8px; + backdrop-filter: blur(4px); +} + +.fancybox__thumb { + border-radius: 4px; + overflow: hidden; + border: 2px solid transparent; + transition: all 0.2s ease; +} + +.fancybox__thumb.is-loading { + background: rgba(255, 255, 255, 0.1); +} + +.fancybox__thumb:hover { + border-color: rgba(255, 255, 255, 0.5); + transform: scale(1.05); +} + +.fancybox__thumb.is-active { + border-color: #fff; +} + +/* 按钮样式 */ +.fancybox__button { + background: rgba(0, 0, 0, 0.5); + border-radius: 50%; + width: 44px; + height: 44px; + transition: all 0.2s ease; + backdrop-filter: blur(4px); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.fancybox__button:hover { + background: rgba(0, 0, 0, 0.7); + transform: scale(1.1); + border-color: rgba(255, 255, 255, 0.3); +} + +.fancybox__button svg { + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5)); +} + +.fancybox__infobar { + color: white; + font-size: 0.9rem; + padding: 0 8px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .fancybox__toolbar { + padding: 4px; + } + + .fancybox__button { + width: 36px; + height: 36px; + } + + .fancybox__caption { + font-size: 0.9rem; + padding: 0.5rem; + margin: 0 0.5rem 0.5rem 0.5rem; + } + + .fancybox__thumbs { + --fancybox-thumbs-width: 48px; + } +} + +@media (max-width: 480px) { + .fancybox__button { + width: 32px; + height: 32px; + } + + .fancybox__caption { + font-size: 0.8rem; + padding: 0.4rem; + } + + .fancybox__thumbs { + --fancybox-thumbs-width: 40px; + } +} \ No newline at end of file diff --git a/src/styles/layout-styles.css b/src/styles/layout-styles.css new file mode 100644 index 0000000..a9387b0 --- /dev/null +++ b/src/styles/layout-styles.css @@ -0,0 +1,730 @@ +/* Layout specific styles */ + +/* Banner text styles */ +.banner-title { + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7); + animation: banner-fadeInUp 1s ease-out; + font-weight: bold; +} + +.banner-subtitle { + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.6); + animation: banner-fadeInUp 1s ease-out 0.3s both; +} + +@keyframes banner-fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* 移动端无侧边栏布局优化 */ +@media (max-width: 768px) { + .mobile-no-sidebar { + display: block !important; + width: 100% !important; + } + + .mobile-no-sidebar main { + width: 100% !important; + max-width: 100% !important; + margin: 0 !important; + padding-left: 0 !important; + padding-right: 0 !important; + } + + .mobile-no-sidebar #content-wrapper { + width: 100% !important; + max-width: 100% !important; + margin: 0 !important; + } +} + +/* 移动端横幅优化 - 小屏手机 (320px - 480px) */ +@media (max-width: 480px) { + /* Banner wrapper 高度优化 - 优先保持banner显示 - 仅在首页应用 */ + #banner-wrapper:not(.mobile-hide-banner) { + height: 70vh !important; /* 保持较大高度优先显示banner */ + min-height: 450px; + max-height: none; /* 移除最大高度限制 */ + top: 0 !important; /* 移动端从顶部开始,避免被导航栏覆盖 */ + } + + /* 主内容区域位置调整 - 向上移动以部分遮挡banner */ + /* 仅在 banner 模式下应用,其他模式(全屏壁纸/纯色)使用默认的 5.5rem */ + body.enable-banner .absolute.w-full.z-30:not(.no-banner-layout):not(.mobile-main-no-banner) { + top: 65vh !important; /* 向上移动5vh,部分遮挡banner */ + min-height: calc(100vh - 65vh) !important; + } + + /* 横幅文本覆盖层优化 */ + .banner-text-overlay { + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + padding: 1rem !important; + text-align: center !important; /* 文字居中对齐 */ + } + + /* 文本容器优化 */ + .banner-text-overlay > div { + margin-bottom: 0 !important; /* 移除底部边距,保持居中 */ + width: 95% !important; /* 增加文本宽度利用率 */ + text-align: center !important; /* 确保文字居中 */ + } + + /* 标题字体优化 */ + .banner-title { + font-size: 3.2rem !important; /* 增大字体大小 */ + line-height: 1.1 !important; + margin-bottom: 0.5rem !important; + text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.8) !important; /* 增强阴影 */ + } + + /* 副标题字体优化 */ + .banner-subtitle { + font-size: 1rem !important; + line-height: 1.3 !important; + text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.7) !important; + } + + /* 波浪效果高度调整 - 与文章列表提升同步 */ + .waves { + height: 13vh !important; + min-height: 100px !important; + max-height: 176px !important; + } +} + +/* 移动端横幅优化 - 大屏手机 (481px - 640px) */ +@media (min-width: 481px) and (max-width: 640px) { + /* Banner wrapper 高度优化 - 优先保持banner显示 - 仅在首页应用 */ + #banner-wrapper:not(.mobile-hide-banner) { + height: 75vh !important; + min-height: 500px; + max-height: none; /* 移除最大高度限制 */ + top: 0 !important; /* 移动端从顶部开始,避免被导航栏覆盖 */ + } + + /* 主内容区域位置调整 - 向上移动以部分遮挡banner */ + /* 仅在 banner 模式下应用,其他模式(全屏壁纸/纯色)使用默认的 5.5rem */ + body.enable-banner .absolute.w-full.z-30:not(.no-banner-layout):not(.mobile-main-no-banner) { + top: 70vh !important; /* 向上移动5vh,部分遮挡banner */ + min-height: calc(100vh - 70vh) !important; + } + + /* 横幅文本覆盖层优化 */ + .banner-text-overlay { + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + padding: 1.5rem !important; + text-align: center !important; /* 文字居中对齐 */ + } + + /* 文本容器优化 */ + .banner-text-overlay > div { + margin-bottom: 0 !important; /* 移除底部边距,保持居中 */ + width: 90% !important; + text-align: center !important; /* 确保文字居中 */ + } + + /* 标题字体优化 */ + .banner-title { + font-size: 3.8rem !important; /* 增大字体大小 */ + line-height: 1.1 !important; + margin-bottom: 0.75rem !important; + text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.8) !important; + } + + /* 副标题字体优化 */ + .banner-subtitle { + font-size: 1.125rem !important; + line-height: 1.4 !important; + text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.7) !important; + } + + /* 波浪效果高度调整 - 与文章列表提升同步 */ + .waves { + height: 15vh !important; + min-height: 110px !important; + max-height: 166px !important; + } +} + +/* 移动端横幅优化 - 超大屏手机/小平板 (641px - 767px) */ +@media (min-width: 641px) and (max-width: 767px) { + /* Banner wrapper 高度优化 - 仅在首页应用 */ + #banner-wrapper:not(.mobile-hide-banner) { + height: 72vh !important; + min-height: 520px; + max-height: none; /* 移除最大高度限制 */ + top: 0 !important; /* 移动端从顶部开始,避免被导航栏覆盖 */ + } + + /* 主内容区域位置调整 - 向上移动以部分遮挡banner */ + /* 仅在 banner 模式下应用,其他模式(全屏壁纸/纯色)使用默认的 5.5rem */ + body.enable-banner .absolute.w-full.z-30:not(.no-banner-layout):not(.mobile-main-no-banner) { + top: 67vh !important; /* 向上移动5vh,部分遮挡banner */ + min-height: calc(100vh - 67vh) !important; + } + + /* 横幅文本覆盖层优化 */ + .banner-text-overlay { + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + padding: 1.75rem !important; + text-align: center !important; /* 文字居中对齐 */ + } + + /* 文本容器优化 */ + .banner-text-overlay > div { + margin-bottom: 0 !important; /* 移除底部边距,保持居中 */ + width: 88% !important; + text-align: center !important; /* 确保文字居中 */ + } + + /* 标题字体优化 */ + .banner-title { + font-size: 3.9rem !important; + line-height: 1.1 !important; + margin-bottom: 0.85rem !important; + text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.8) !important; + } + + /* 副标题字体优化 */ + .banner-subtitle { + font-size: 1.25rem !important; + line-height: 1.4 !important; + text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.7) !important; + } + + /* 波浪效果高度调整 - 与文章列表提升同步 */ + .waves { + height: 16vh !important; + min-height: 115px !important; + max-height: 190px !important; + } +} + +/* 平板设备横幅优化 (768px - 1023px) - Tailwind md 断点 */ +@media (min-width: 768px) and (max-width: 1023px) { + /* Banner wrapper 高度优化 - 仅在首页应用 */ + #banner-wrapper:not(.mobile-hide-banner) { + height: 70vh !important; + min-height: 500px; + top: 0 !important; /* 移动端从顶部开始,避免被导航栏覆盖 */ + } + + /* 主内容区域位置调整 - 向上移动以部分遮挡banner */ + /* 仅在 banner 模式下应用,其他模式(全屏壁纸/纯色)使用默认的 5.5rem */ + body.enable-banner .absolute.w-full.z-30:not(.no-banner-layout):not(.mobile-main-no-banner) { + top: 65vh !important; /* 向上移动5vh,部分遮挡banner */ + min-height: calc(100vh - 65vh) !important; + } + + /* 横幅文本覆盖层优化 */ + .banner-text-overlay { + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + padding: 2rem !important; + text-align: center !important; /* 文字居中对齐 */ + } + + /* 文本容器优化 */ + .banner-text-overlay > div { + margin-bottom: 0 !important; /* 移除底部边距,保持居中 */ + width: 85% !important; + text-align: center !important; /* 确保文字居中 */ + } + + /* 标题字体优化 */ + .banner-title { + font-size: 4rem !important; + line-height: 1.1 !important; + margin-bottom: 1rem !important; + text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.8) !important; + } + + /* 副标题字体优化 */ + .banner-subtitle { + font-size: 1.5rem !important; + line-height: 1.4 !important; + text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.7) !important; + } + + /* 波浪效果高度调整 - 与文章列表提升同步 */ + .waves { + height: 17vh !important; + min-height: 120px !important; + max-height: 216px !important; + } +} + +/* 桌面端保持居中 (1024px+) - Tailwind lg 断点 */ +@media (min-width: 1024px) { + .banner-text-overlay { + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + padding: 2rem !important; + text-align: center !important; /* 文字居中对齐 */ + } + + .banner-text-overlay > div { + margin-bottom: 0 !important; + width: 75% !important; + text-align: center !important; /* 确保文字居中 */ + } + + /* 背景图片优化 */ + #banner img { + transition: transform 1s ease-out !important; + } + + /* 波浪效果恢复默认 */ + .waves { + height: 15vh !important; + min-height: 80px !important; + max-height: 150px !important; + } +} + +/* 移动端图片优化 */ +@media (max-width: 1023px) { + /* 移动端背景图片优化 */ + #banner img { + transition: transform 0.5s ease-out !important; + } + + /* 移动端banner加载动画优化 */ + .onload-animation-fade-in { + animation: mobile-fade-in 0.8s ease-out forwards !important; + } +} + +/* 移动端专用淡入动画 - 与电脑端保持一致 */ +@keyframes mobile-fade-in { + 0% { + opacity: 0; + transform: scale(1.1); + } + 100% { + opacity: 1; + transform: scale(1); /* 与电脑端当前图片缩放保持一致 */ + } +} + +/* 平板和手机端非首页隐藏banner - 改进的分阶段动画 (1024px以下) */ +@media (max-width: 1023px) { + #banner-wrapper { + transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity 0.3s ease-out; + transform-origin: top center; + /* 硬件加速优化 */ + will-change: transform, opacity; + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + transform: translateZ(0); + -webkit-transform: translateZ(0); + } + + .mobile-hide-banner { + transform: translateY(-100%) translateZ(0) !important; + opacity: 0 !important; + pointer-events: none !important; + /* 快速消失 */ + transition: transform 0.3s ease-in, opacity 0.2s ease-in !important; + } + + /* 手机端非首页时主内容区域从顶部开始 - 延迟出现的动画 */ + .absolute.w-full.z-30 { + transition: top 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.1s; + /* 硬件加速优化 */ + will-change: top; + /* 禁用transform以保证back to top 按钮可以显示 + transform: translateZ(0); + -webkit-transform: translateZ(0); + */ + } + + .absolute.w-full.z-30.mobile-main-no-banner { + top: 5.5rem !important; + min-height: calc(100vh - 5.5rem) !important; + /* 内容区域快速上移 */ + transition: top 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.2s !important; + } +} + +/* 移动端banner性能优化 */ +@media (max-width: 1023px) { + .banner-container { + /* 启用硬件加速 */ + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform, opacity; + + /* 优化渲染性能 */ + contain: layout style paint; + + /* 减少重绘 */ + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + } + + .carousel-item { + /* 硬件加速 */ + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform, opacity; + + /* 优化触摸响应 */ + touch-action: pan-y; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; + } + + .banner-text-overlay { + /* 文字渲染优化 */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + + /* 减少重排 */ + contain: layout style; + } + + /* 移动端图片优化 - 只针对装饰性图片 */ + .banner-container img:not(.interactive):not([onclick]):not([data-clickable]) { + /* 图片渲染优化 */ + image-rendering: -webkit-optimize-contrast; + image-rendering: crisp-edges; + + /* 防止图片拖拽 */ + -webkit-user-drag: none; + -khtml-user-drag: none; + -moz-user-drag: none; + -o-user-drag: none; + user-drag: none; + + /* 触摸优化 - 只针对装饰性图片 */ + pointer-events: none; + } + + /* 交互式图片保持可点击 */ + .banner-container img.interactive, + .banner-container img[onclick], + .banner-container img[data-clickable] { + pointer-events: auto; + cursor: pointer; + } +} + +/* 当banner被禁用时的布局样式 */ +.no-banner-layout { + top: 5.5rem !important; + min-height: calc(100vh - 5.5rem) !important; +} + +/* 移动端当banner被禁用时的布局样式 */ +@media (max-width: 1023px) { + .absolute.w-full.z-30.no-banner-layout { + top: 5.5rem !important; + min-height: calc(100vh - 5.5rem) !important; + transition: none !important; /* 移除过渡动画,立即应用位置 */ + } +} + +/* 小屏手机当banner被禁用时的布局样式 */ +@media (max-width: 480px) { + .absolute.w-full.z-30.no-banner-layout { + top: 5.5rem !important; + min-height: calc(100vh - 5.5rem) !important; + transition: none !important; + } +} + +/* 平板设备当banner被禁用时的布局样式 */ +@media (min-width: 768px) and (max-width: 1023px) { + .absolute.w-full.z-30.no-banner-layout { + top: 5.5rem !important; + min-height: calc(100vh - 5.5rem) !important; + transition: none !important; + } +} + +/* 移动端横屏优化 */ +@media (max-width: 1023px) and (orientation: landscape) { + #banner-wrapper:not(.mobile-hide-banner) { + top: 0 !important; /* 横屏模式从顶部开始,避免被导航栏覆盖 */ + height: 60vh !important; + } + + /* 主内容区域位置调整 - 确保在banner下面,但不影响非首页 */ + /* 仅在 banner 模式下应用,其他模式(全屏壁纸/纯色)使用默认的 5.5rem */ + body.enable-banner .absolute.w-full.z-30:not(.mobile-main-no-banner):not(.no-banner-layout) { + top: 60vh !important; /* 与banner高度对应 */ + min-height: calc(100vh - 60vh) !important; + } + + .banner-container { + height: 60vh; + min-height: 300px; + } + + .banner-text-overlay { + padding: 1rem 1.5rem; + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + text-align: center !important; /* 文字居中对齐 */ + } + + .banner-title { + font-size: 2.2rem !important; /* 增大字体大小 */ + line-height: 1.3; + } + + .banner-subtitle { + font-size: 0.9rem; + margin-top: 0.5rem; + } +} + +/* 移动端暗色模式优化 */ +@media (max-width: 1023px) and (prefers-color-scheme: dark) { + .banner-text-overlay { + background: linear-gradient( + to top, + rgba(0, 0, 0, 0.8) 0%, + rgba(0, 0, 0, 0.4) 50%, + transparent 100% + ); + } + + .banner-title { + text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.8); + } + + .banner-subtitle { + text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.7); + } +} + +/* 水波纹显示优化 */ +.waves { + /* 确保水波纹完整显示 */ + overflow: visible; + z-index: 5; + /* 硬件加速,确保与背景同步渲染 */ + transform: translateZ(0); + will-change: transform; + /* 移除contain属性,避免限制动画渲染范围 */ + contain: none; +} + +.waves svg { + /* 确保SVG完整渲染 */ + width: 100%; + height: 100%; + display: block; + /* SVG硬件加速 */ + transform: translateZ(0); + backface-visibility: hidden; +} + +/* 波浪填充色主题切换优化 */ +.waves use { + /* 确保填充色与页面背景同步更新 */ + will-change: fill; +} + +/* 波浪与背景同步切换优化 - 解决交界线闪烁 */ +#header-waves { + /* 确保波浪容器与页面背景在同一合成层 */ + isolation: isolate; + /* 移除contain属性,避免限制波浪动画 */ + contain: none; + /* 精确对齐 */ + margin-bottom: -1px; +} + +/* 主题切换时的额外保护 */ +.theme-changing #header-waves, +.theme-changing #header-waves svg, +.theme-changing #header-waves use { + /* 在主题切换期间禁用所有可能的渲染延迟 */ + will-change: auto; + transform: translateZ(0); + backface-visibility: hidden; +} + +/* 移动端水波纹特殊优化 */ +@media (max-width: 1023px) { + #header-waves { + /* 确保水波纹容器不被裁剪 */ + overflow: visible; + z-index: 5; + /* 水波纹快速消失动画 */ + transition: transform 0.3s ease-in, opacity 0.2s ease-in; + } + + /* 当banner隐藏时,水波纹也隐藏 */ + .mobile-hide-banner #header-waves { + display: none !important; + transform: translateY(-100%); + opacity: 0; + /* 水波纹比banner更快消失 */ + transition: transform 0.25s ease-in, opacity 0.15s ease-in; + } + + .waves svg { + /* 移动端SVG优化 */ + min-height: 60px; + } + + /* 确保水波纹在banner底部正确定位 */ + .waves { + bottom: -1px !important; + position: absolute !important; + } +} + +/* 超小屏幕水波纹优化 */ +@media (max-width: 360px) { + .waves { + height: 6vh !important; + min-height: 50px !important; + max-height: 70px !important; + } +} + +/* 基于屏幕高度的banner优化 - 优先显示banner */ +/* 极小高度屏幕 (高度 ≤ 500px) */ +@media (max-height: 500px) { + #banner-wrapper { + height: 85vh !important; /* 占用更多高度确保banner显示 */ + min-height: 350px !important; + } + + .banner-text-overlay { + padding: 1rem !important; + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + text-align: center !important; /* 文字居中对齐 */ + } + + .banner-title { + font-size: 2.8rem !important; /* 增大字体大小 */ + line-height: 1.1 !important; + margin-bottom: 0.5rem !important; + } + + .banner-subtitle { + font-size: 0.9rem !important; + line-height: 1.2 !important; + } + + .waves { + height: 5vh !important; + min-height: 40px !important; + max-height: 50px !important; + } +} + +/* 小高度屏幕 (高度 501px - 600px) */ +@media (min-height: 501px) and (max-height: 600px) { + #banner-wrapper { + height: 80vh !important; + min-height: 400px !important; + } + + .banner-text-overlay { + padding: 1.5rem !important; + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + text-align: center !important; /* 文字居中对齐 */ + } + + .banner-title { + font-size: 3.2rem !important; /* 增大字体大小 */ + line-height: 1.1 !important; + margin-bottom: 0.75rem !important; + } + + .banner-subtitle { + font-size: 1rem !important; + line-height: 1.3 !important; + } + + .waves { + height: 6vh !important; + min-height: 50px !important; + max-height: 60px !important; + } +} + +/* 中等高度屏幕 (高度 601px - 700px) */ +@media (min-height: 601px) and (max-height: 700px) { + #banner-wrapper { + height: 75vh !important; + min-height: 450px !important; + } + + .banner-text-overlay { + padding: 2rem !important; + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + text-align: center !important; /* 文字居中对齐 */ + } + + .banner-title { + font-size: 3.8rem !important; /* 增大字体大小 */ + line-height: 1.1 !important; + margin-bottom: 1rem !important; + } + + .banner-subtitle { + font-size: 1.125rem !important; + line-height: 1.4 !important; + } + + .waves { + height: 8vh !important; + min-height: 60px !important; + max-height: 80px !important; + } +} + +/* 横屏模式特殊处理 - 优先显示banner */ +@media (orientation: landscape) and (max-height: 500px) { + #banner-wrapper { + height: 90vh !important; /* 横屏时占用更多高度 */ + min-height: 300px !important; + } + + .banner-text-overlay { + padding: 1rem 2rem !important; + align-items: center !important; /* 垂直居中 */ + justify-content: center !important; /* 水平居中 */ + text-align: center !important; /* 文字居中对齐 */ + } + + .banner-title { + font-size: 2.8rem !important; /* 增大字体大小 */ + line-height: 1.1 !important; + margin-bottom: 0.5rem !important; + } + + .banner-subtitle { + font-size: 1rem !important; + line-height: 1.2 !important; + } + + .waves { + height: 4vh !important; + min-height: 30px !important; + max-height: 40px !important; + } +} diff --git a/src/styles/main.css b/src/styles/main.css new file mode 100644 index 0000000..c066676 --- /dev/null +++ b/src/styles/main.css @@ -0,0 +1,534 @@ +/* 导入统一变量 */ +@import './variables-unified.styl'; +/* 导入统一动画样式 */ +@import './animation-enhancements.css'; +@import './transition.css'; +/* 导入统一导航栏样式 */ +@import './navbar.css'; + + +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* 确保平滑滚动 */ +html { + scroll-behavior: smooth; +} + +/* 页面顶部渐变高光效果 */ +.top-gradient-highlight { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 180px; + background: linear-gradient(to bottom, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.3) 30%, rgba(255, 255, 255, 0.15) 60%, rgba(255, 255, 255, 0.05) 80%, transparent 100%); + pointer-events: none; + z-index: 20; + transition: all var(--duration-medium) var(--ease-standard); +} + +/* 暗色主题下的渐变高光效果 */ +:root.dark .top-gradient-highlight { + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.3) 30%, rgba(0, 0, 0, 0.15) 60%, rgba(0, 0, 0, 0.05) 80%, transparent 100%); +} + +@layer components { + /* View Transitions API 主题切换动画 */ + /* 为整个文档根元素设置视图过渡 */ + ::view-transition-old(root), + ::view-transition-new(root) { + animation-duration: 0.5s; + animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + /* 使用混合模式使颜色过渡更平滑 */ + mix-blend-mode: normal; + } + + /* 视图过渡组 - 使用交叉淡化效果 */ + ::view-transition-group(root) { + animation-duration: 0.5s; + animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + } + + /* 淡出旧视图 - 使用更平滑的曲线 */ + ::view-transition-old(root) { + animation-name: theme-fade-out; + /* 确保背景色同步切换 */ + z-index: 2; + } + + /* 淡入新视图 - 使用更平滑的曲线 */ + ::view-transition-new(root) { + animation-name: theme-fade-in; + /* 确保新视图在上层 */ + z-index: 1; + } + + /* 定义淡出动画 - 使用更平滑的缓动函数 */ + @keyframes theme-fade-out { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } + } + + /* 定义淡入动画 - 从下层淡入 */ + @keyframes theme-fade-in { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + + /* 确保边框和分隔线元素在主题切换时有更明确的过渡时长 */ + .transition, + [class*="border"], + [class*="transition"] { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 0.15s; + } + + /* 主题过渡保护类 - 仅在非 View Transitions 模式下使用 */ + /* 当使用 View Transitions API 时,浏览器会自动处理过渡,不需要禁用 transition */ + .is-theme-transitioning:not(.use-view-transition) *, + .is-theme-transitioning:not(.use-view-transition) *::before, + .is-theme-transitioning:not(.use-view-transition) *::after { + transition: none !important; + animation: none !important; + } + + /* 在主题切换时禁用代码块的复杂效果以提升性能 */ + /* 使用 View Transitions 时也需要禁用代码块动画,因为它们太多了 */ + .is-theme-transitioning .expressive-code, + .is-theme-transitioning .expressive-code * { + transition: none !important; + animation: none !important; + will-change: auto !important; + } + + /* 禁用复杂选择器元素的过渡 - 仅在非 View Transitions 模式下 */ + .is-theme-transitioning:not(.use-view-transition) .float-panel, + .is-theme-transitioning:not(.use-view-transition) .float-panel *, + .is-theme-transitioning:not(.use-view-transition) .music-player, + .is-theme-transitioning:not(.use-view-transition) .music-player *, + .is-theme-transitioning:not(.use-view-transition) .widget, + .is-theme-transitioning:not(.use-view-transition) .widget *, + .is-theme-transitioning:not(.use-view-transition) .dropdown-content, + .is-theme-transitioning:not(.use-view-transition) .dropdown-content * { + transition: none !important; + animation: none !important; + } + + /* 强制使用 contain 隔离渲染上下文 - 仅在非 View Transitions 模式下 */ + .is-theme-transitioning:not(.use-view-transition) .post-card, + .is-theme-transitioning:not(.use-view-transition) .widget, + .is-theme-transitioning:not(.use-view-transition) .float-panel { + contain: layout style paint !important; + } + + /* 波浪效果精确同步处理 - 仅在非 View Transitions 模式下 */ + .is-theme-transitioning:not(.use-view-transition) svg use { + /* 禁用过渡但保持动画 */ + transition: none; + /* 强制立即继承页面背景色 */ + fill: currentColor; + } + + /* 导航栏主题切换保护 - 仅在非 View Transitions 模式下禁用过渡 */ + .is-theme-transitioning:not(.use-view-transition) #navbar > div, + .is-theme-transitioning:not(.use-view-transition) #navbar[data-transparent-mode] > div, + .is-theme-transitioning:not(.use-view-transition) #navbar[data-transparent-mode].scrolled > div, + .is-theme-transitioning:not(.use-view-transition) body.wallpaper-transparent #navbar > div, + .is-theme-transitioning:not(.use-view-transition) body.wallpaper-transparent #navbar[data-transparent-mode] > div, + .is-theme-transitioning:not(.use-view-transition) body.wallpaper-transparent #navbar[data-transparent-mode].scrolled > div, + .is-theme-transitioning:not(.use-view-transition) #banner-wrapper ~ * #navbar > div, + .is-theme-transitioning:not(.use-view-transition) #banner-wrapper ~ * #navbar[data-transparent-mode] > div, + .is-theme-transitioning:not(.use-view-transition) body:has(#banner-wrapper) #navbar > div, + .is-theme-transitioning:not(.use-view-transition) body:has(#banner-wrapper) #navbar[data-transparent-mode] > div { + transition: none !important; + backdrop-filter: none !important; + } + + /* 导航栏相关浮动面板的过渡禁用 */ + .is-theme-transitioning .dropdown-content, + .is-theme-transitioning .float-panel, + .is-theme-transitioning #display-setting, + .is-theme-transitioning #nav-menu-panel, + .is-theme-transitioning #translate-panel, + .is-theme-transitioning #mobile-toc-panel, + .is-theme-transitioning #search-panel { + transition: none !important; + backdrop-filter: none !important; + } + + /* 波浪容器的颜色传递 */ + .is-theme-transitioning #header-waves { + /* 设置当前颜色为页面背景色,供SVG继承 */ + color: var(--page-bg); + /* 确保与页面在同一合成层 */ + isolation: isolate; + /* 优化渲染性能 */ + contain: layout style paint; + /* GPU层合成 */ + transform: translateZ(0); + /* 确保没有背景色 */ + background: transparent; + } + + .is-theme-transitioning #header-waves use { + /* 保持动画连续性 */ + will-change: transform; + /* GPU优化 */ + transform: translateZ(0); + } + + .card-base { + @apply rounded-[var(--radius-large)] overflow-hidden bg-[var(--card-bg)] transition-colors duration-150; + } + .card-base-transparent { + @apply rounded-[var(--radius-large)] overflow-hidden bg-[var(--card-bg-transparent)] backdrop-blur-sm transition-colors duration-150; + } + + /* 全屏壁纸模式下的半透明效果 */ + .wallpaper-transparent .card-base { + @apply bg-[var(--card-bg-transparent)]; + /* 移除高斯模糊以提升性能,大量重叠的 backdrop-filter 会导致 GPU 占用过高 */ + /* @apply backdrop-blur-sm; */ + } + + .wallpaper-transparent .float-panel { + @apply bg-[var(--card-bg-transparent)]; + /* 移除高斯模糊以提升性能 */ + /* @apply backdrop-blur-sm; */ + } + + .wallpaper-transparent #navbar > div { + @apply bg-[var(--card-bg-transparent)] backdrop-blur-sm; + border-radius: 0 0 var(--radius-large) var(--radius-large) !important; +} + + .wallpaper-transparent .btn-card { + @apply bg-[var(--card-bg-transparent)]; + /* 移除高斯模糊以提升性能 */ + /* @apply backdrop-blur-sm; */ + } + + h1, h2, h3, h4, h5, h6, p, a, span, li, ul, ol, blockquote, code, pre, table, th, td, strong { + @apply transition-colors duration-150; + } + .card-shadow { + @apply drop-shadow-[0_2px_4px_rgba(0,0,0,0.005)] + } + .expand-animation { + @apply relative before:ease-out before:transition active:bg-none hover:before:bg-[var(--btn-plain-bg-hover)] active:before:bg-[var(--btn-plain-bg-active)] z-0 + before:absolute before:rounded-[inherit] before:inset-0 before:scale-[0.85] hover:before:scale-100 before:-z-10 + } + .link { + @apply transition-colors duration-150 rounded-md p-1 -m-1 expand-animation; + } + .link-lg { + @apply transition-colors duration-150 rounded-md p-1.5 -m-1.5 expand-animation; + } + .float-panel { + @apply top-[5.25rem] rounded-[var(--radius-large)] overflow-hidden bg-[var(--float-panel-bg)] transition-colors duration-150 shadow-xl dark:shadow-none + } + .float-panel-closed { + @apply -translate-y-1 opacity-0 pointer-events-none + } + .float-panel-closed * { + @apply pointer-events-none + } + .search-panel mark { + @apply bg-transparent text-[var(--primary)] + } + + .btn-card { + @apply transition-colors duration-150 flex items-center justify-center bg-[var(--card-bg)] hover:bg-[var(--btn-card-bg-hover)] + active:bg-[var(--btn-card-bg-active)] + } + .btn-card.disabled { + @apply pointer-events-none text-black/10 dark:text-white/10 + } + .btn-plain { + @apply transition-colors duration-150 relative flex items-center justify-center bg-none + text-black/75 hover:text-[var(--primary)] dark:text-white/75 dark:hover:text-[var(--primary)]; + &:not(.scale-animation) { + @apply hover:bg-[var(--btn-plain-bg-hover)] active:bg-[var(--btn-plain-bg-active)] + } + &.scale-animation { + @apply expand-animation; + } + } + .current-theme-btn { + @apply bg-[var(--btn-plain-bg-hover)] text-[var(--primary)]; + } + .btn-regular { + @apply transition-colors duration-150 flex items-center justify-center bg-[var(--btn-regular-bg)] hover:bg-[var(--btn-regular-bg-hover)] active:bg-[var(--btn-regular-bg-active)] + text-[var(--btn-content)] dark:text-white/75 + } + + .link-underline { + @apply transition-colors duration-150 underline decoration-2 decoration-dashed decoration-[var(--link-underline)] + hover:decoration-[var(--link-hover)] active:decoration-[var(--link-active)] underline-offset-[0.25rem] + } + + .toc-hide, + .toc-not-ready { + @apply opacity-0 pointer-events-none + } + + /* #toc-inner-wrapper { + mask-image: linear-gradient(to bottom, transparent 0%, black 2rem, black calc(100% - 2rem), transparent 100%); + } */ + + .hide-scrollbar { + scrollbar-width: none; + -ms-overflow-style: none; + } + .hide-scrollbar::-webkit-scrollbar { + display: none; + } + + .text-90 { + @apply text-black/90 dark:text-white/90 + } + .text-75 { + @apply text-black/75 dark:text-white/75 + } + .text-50 { + @apply text-black/50 dark:text-white/50 + } + .text-30 { + @apply text-black/30 dark:text-white/30 + } + .text-25 { + @apply text-black/25 dark:text-white/25 + } + + /* 下拉菜单样式 */ + .dropdown-container { + @apply relative; + } + + .dropdown-menu { + @apply absolute top-full left-0 pt-2 opacity-0 invisible pointer-events-none transition-all duration-200 ease-out transform translate-y-[-8px] z-50; + } + + .dropdown-container:hover .dropdown-menu, + .dropdown-container:focus-within .dropdown-menu { + @apply opacity-100 visible pointer-events-auto translate-y-0; + } + + .dropdown-container:hover .dropdown-arrow, + .dropdown-container:focus-within .dropdown-arrow { + @apply rotate-180; + } + + .dropdown-content { + @apply bg-[var(--float-panel-bg)] rounded-[var(--radius-large)] shadow-xl dark:shadow-none border border-black/5 dark:border-white/10 py-2 min-w-[12rem]; + } + + .dropdown-item { + @apply flex items-center justify-between px-4 py-2.5 text-black/75 dark:text-white/75 hover:text-[var(--primary)] hover:bg-[var(--btn-plain-bg-hover)] transition-colors duration-150 font-medium; + } + + .dropdown-item:first-child { + @apply rounded-t-[calc(var(--radius-large)-0.5rem)]; + } + + .dropdown-item:last-child { + @apply rounded-b-[calc(var(--radius-large)-0.5rem)]; + } + + /* 移动端菜单样式 */ + .mobile-submenu { + @apply max-h-0 overflow-hidden transition-all duration-300 ease-in-out; + } + + .mobile-dropdown[data-expanded="true"] .mobile-submenu { + @apply max-h-96; + } + + .mobile-dropdown[data-expanded="true"] .mobile-dropdown-arrow { + @apply rotate-180; + } + + /* 响应式隐藏 */ + @media (max-width: 768px) { + .dropdown-container { + @apply hidden; + } + } + + /* 无障碍支持 */ + .dropdown-container:focus-within .dropdown-menu { + @apply opacity-100 visible pointer-events-auto translate-y-0; + } + + .dropdown-item:focus { + @apply outline-none; + } + + .mobile-dropdown button:focus { + @apply outline-none; + } + + .meta-icon { + @apply w-8 h-8 transition-colors duration-150 rounded-md flex items-center justify-center bg-[var(--btn-regular-bg)] + text-[var(--btn-content)] mr-2 + } + .with-divider { + @apply before:content-['/'] before:ml-1.5 before:mr-1.5 before:text-[var(--meta-divider)] before:text-sm + before:font-medium before:first-of-type:hidden before:transition-colors before:duration-150 + } + + .btn-regular-dark { + @apply flex items-center justify-center + bg-[oklch(0.45_0.01_var(--hue))] hover:bg-[oklch(0.50_0.01_var(--hue))] active:bg-[oklch(0.55_0.01_var(--hue))] + dark:bg-[oklch(0.30_0.02_var(--hue))] dark:hover:bg-[oklch(0.35_0.03_var(--hue))] dark:active:bg-[oklch(0.40_0.03_var(--hue))] + } + .btn-regular-dark.success { + @apply bg-[oklch(0.75_0.14_var(--hue))] dark:bg-[oklch(0.75_0.14_var(--hue))] + } +} + +.custom-md img, #post-cover img { + @apply cursor-zoom-in +} + +::selection { + background-color: var(--selection-bg) +} + +.dash-line { + position: relative; +} + +.dash-line::before { + content: ""; + position: absolute; + width: 10%; + height: 100%; + left: calc(50% - 1px); + border-left: 2px dashed var(--line-color); + pointer-events: none; + transition: all 0.3s; + transform: translateY(-50%); +} + + +/*剧透效果*/ +.custom-md spoiler { + --_spoiler-mask: var(--primary); + @apply hover:bg-transparent px-1 py-0.5 overflow-hidden rounded-md transition-all duration-150; + background-color: var(--_spoiler-mask); + box-decoration-break: clone; + &:not(:hover) { + color: var(--_spoiler-mask); + * { + color: var(--_spoiler-mask); + } + } +} + +/* 浅色模式:使用更浅的主题色且完全不透明 */ +:root:not(.dark) .custom-md spoiler { + --_spoiler-mask: color-mix(in oklch, var(--primary) 55%, white 45%); +} + +/* 文章列表布局切换样式 */ +.post-list-layout-switch { + @apply flex items-center gap-2 mb-6 p-3 bg-[var(--card-bg)] rounded-lg border border-[var(--line-divider)]; +} + +.post-list-layout-switch span { + @apply text-sm text-[var(--text-secondary)]; +} + +.post-list-layout-switch .layout-buttons { + @apply flex gap-1; +} + +.post-list-layout-switch button { + @apply px-3 py-1.5 text-sm rounded-md transition-colors; +} + +.post-list-layout-switch button.active { + @apply bg-[var(--primary)] text-white; +} + +.post-list-layout-switch button:not(.active) { + @apply bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]; +} + +/* 网格模式下的文章卡片样式调整 */ +.post-list-container.grid-mode .post-card-item { + @apply w-full; +} + +.post-list-container.grid-mode .post-card-item a[href] { + @apply text-xl before:h-4 before:top-[28px] before:left-[-18px] truncate; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + line-height: 1.4; + max-height: 2.8em; /* 2行的高度 */ +} + +.post-list-container.grid-mode .post-card-item a[aria-label] { + @apply hidden; +} + +.post-list-container.grid-mode .post-card-item .btn-regular { + @apply hidden; +} + +.post-list-container.grid-mode .post-card-item .line-clamp-1 { + @apply line-clamp-2; +} + +/* 网格模式下的卡片内容区域调整 */ +.post-list-container.grid-mode .post-card-item > div { + @apply p-4; +} + +/* 网格模式下的元数据样式调整 */ +.post-list-container.grid-mode .post-card-item .post-meta { + @apply mb-2; +} + +/* 网格模式下的描述文本调整 */ +.post-list-container.grid-mode .post-card-item .description { + @apply text-sm mb-2 line-clamp-2; +} + +/* 网格模式下的统计信息调整 */ +.post-list-container.grid-mode .post-card-item .stats { + @apply text-xs; +} + +/* 响应式分页样式 */ +.device-mobile .pagination-info { + @apply text-xs; +} + +.device-tablet .pagination-info { + @apply text-sm; +} + +.device-desktop .pagination-info { + @apply text-base; +} + +/* 分页信息样式 */ +.pagination-info { + @apply text-sm text-[var(--text-secondary)] text-center mb-2; +} \ No newline at end of file diff --git a/src/styles/markdown-extend.styl b/src/styles/markdown-extend.styl new file mode 100644 index 0000000..c792edb --- /dev/null +++ b/src/styles/markdown-extend.styl @@ -0,0 +1,331 @@ +.custom-md + + blockquote.admonition + .bdm-title + display: flex + align-items: center + margin-bottom: -.9rem + font-weight: bold + + &:before + content: ' ' + display: inline-block + font-size: inherit + overflow: visible + margin-right: .6rem + height: 1em + width: 1em + vertical-align: -.126em + mask-size: contain + mask-position: center + mask-repeat: no-repeat + transform: translateY(-0.0625rem) + &.bdm-tip + .bdm-title + color: var(--admonitions-color-tip) + + &:before + background: var(--admonitions-color-tip) + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z'%3E%3C/path%3E%3C/svg%3E") + + &:before + background: var(--admonitions-color-tip) + &.bdm-note + .bdm-title + color: var(--admonitions-color-note) + + &:before + background: var(--admonitions-color-note) + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath fill='var(--admonitions-color-tip)' d='M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z'%3E%3C/path%3E%3C/svg%3E") + + &:before + background: var(--admonitions-color-note) + &.bdm-important + .bdm-title + color: var(--admonitions-color-important) + + &:before + background: var(--admonitions-color-important) + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'%3E%3C/path%3E%3C/svg%3E") + + &:before + background: var(--admonitions-color-important) + &.bdm-warning + .bdm-title + color: var(--admonitions-color-warning) + + &:before + background: var(--admonitions-color-warning) + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'%3E%3C/path%3E%3C/svg%3E") + + &:before + background: var(--admonitions-color-warning) + &.bdm-caution + .bdm-title + color: var(--admonitions-color-caution) + + &:before + background: var(--admonitions-color-caution) + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z'%3E%3C/path%3E%3C/svg%3E") + + &:before + background: var(--admonitions-color-caution) + + img + border-radius: 0.75rem + + hr + border-color: var(--line-divider) + border-style: dashed + + iframe + border-radius: 0.75rem + margin-left: auto + margin-right: auto + max-width: 100% + +a.card-github + display: block + background: var(--license-block-bg) + position: relative + margin: 0.5rem 0 + padding: 1.1rem 1.5rem 1.1rem 1.5rem + color: var(--tw-prose-body) + border-radius: var(--radius-large) + text-decoration-thickness: 0px + text-decoration-line: none + + &:hover + background-color: var(--btn-regular-bg-hover) + + .gc-titlebar + color: var(--btn-content) + + .gc-stars, .gc-forks, .gc-license, .gc-description + color: var(--tw-prose-headings) + + &:before + background-color: var(--tw-prose-headings) + + &:active + scale: .98 + background-color: var(--btn-regular-bg-active); + + .gc-titlebar + display: flex + align-items: center + justify-content: space-between + margin-bottom: 0.5rem + color: var(--tw-prose-headings) + font-size: 1.25rem + font-weight: 500 + + .gc-titlebar-left + display: flex + flex-flow: row nowrap + gap: 0.5rem + + .gc-repo + font-weight: bold + + .gc-owner + font-weight: 300 + position: relative + display: flex + flex-flow: row nowrap + gap: 0.5rem + align-items: center + + .gc-avatar + display: block + overflow: hidden + width: 1.5rem + height: 1.5rem + margin-top: -0.1rem + background-color: var(--primary) + background-size: cover + border-radius: 50% + + .gc-description + margin-bottom: 0.7rem + font-size: 1rem + font-weight: 300 + line-height: 1.5rem + color: var(--tw-prose-body) + + .gc-infobar + display: flex + flex-flow: row nowrap + gap: 1.5rem + color: var(--tw-prose-body) + width: fit-content + + .gc-language + display: none + + .gc-stars, .gc-forks, .gc-license, .github-logo + font-weight: 500 + font-size: 0.875rem + opacity: 0.9; + + &:before + content: ' ' + display: inline-block + height: 1.3em + width: 1.3em + margin-right: .4rem + vertical-align: -.24em + font-size: inherit + background-color: var(--tw-prose-body) + overflow: visible + mask-size: contain + mask-position: center + mask-repeat: no-repeat + transition-property: background-color, background; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) + transition-duration: 0.15s + + .gc-stars + &:before + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' height='16' viewBox='0 0 16 16' version='1.1' width='16'%3E%3Cpath d='M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z'%3E%3C/path%3E%3C/svg%3E") + + .gc-license + &:before + margin-right: .5rem + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' height='16' viewBox='0 0 16 16' version='1.1' width='16'%3E%3Cpath d='M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z'%3E%3C/path%3E%3C/svg%3E") + + .gc-forks + &:before + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' height='16' viewBox='0 0 16 16' version='1.1' width='16'%3E%3Cpath d='M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z'%3E%3C/path%3E%3C/svg%3E") + + .github-logo + font-size: 1.25rem + + &:before + background-color: var(--tw-prose-headings) + margin-right: 0 + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='31' height='32' viewBox='0 0 496 512'%3E%3Cpath fill='%23a1f7cb' d='M165.9 397.4c0 2-2.3 3.6-5.2 3.6c-3.3.3-5.6-1.3-5.6-3.6c0-2 2.3-3.6 5.2-3.6c3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9c2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9c.3 2 2.9 3.3 5.9 2.6c2.9-.7 4.9-2.6 4.6-4.6c-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2c12.8 2.3 17.3-5.6 17.3-12.1c0-6.2-.3-40.4-.3-61.4c0 0-70 15-84.7-29.8c0 0-11.4-29.1-27.8-36.6c0 0-22.9-15.7 1.6-15.4c0 0 24.9 2 38.6 25.8c21.9 38.6 58.6 27.5 72.9 20.9c2.3-16 8.8-27.1 16-33.7c-55.9-6.2-112.3-14.3-112.3-110.5c0-27.5 7.6-41.3 23.6-58.9c-2.6-6.5-11.1-33.3 2.6-67.9c20.9-6.5 69 27 69 27c20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27c13.7 34.7 5.2 61.4 2.6 67.9c16 17.7 25.8 31.5 25.8 58.9c0 96.5-58.9 104.2-114.8 110.5c9.2 7.9 17 22.9 17 46.4c0 33.7-.3 75.4-.3 83.6c0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252C496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2c1.6 1.6 3.9 2.3 5.2 1c1.3-1 1-3.3-.7-5.2c-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9c1.6 1 3.6.7 4.3-.7c.7-1.3-.3-2.9-2.3-3.9c-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2c2.3 2.3 5.2 2.6 6.5 1c1.3-1.3.7-4.3-1.3-6.2c-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9c1.6 2.3 4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2c-1.4-2.3-4-3.3-5.6-2'/%3E%3C/svg%3E") + +a.card-github.fetch-waiting + pointer-events: none + opacity: 0.7 + transition: opacity 0.15s ease-in-out + + .gc-description, .gc-infobar, .gc-avatar + background-color: var(--tw-prose-body) + color: transparent + opacity: 0.5; + animation: pulsate 2s infinite linear + user-select: none + + &:before + background-color: transparent + + .gc-repo + margin-left: -0.1rem + + .gc-description, .gc-infobar + border-radius: 0.5rem + +a.card-github.fetch-error + pointer-events: all + opacity: 1 + +@keyframes pulsate + 0% + opacity: 0.15 + 50% + opacity: 0.25 + 100% + opacity: 0.15 + +.card-github, .gc-description, .gc-titlebar, .gc-stars, .gc-forks, .gc-license, .gc-avatar, .github-logo + transition-property: all + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) + transition-duration: 0.15s + +// Mermaid 图表样式 +.mermaid-diagram-container + margin: 1rem 0 + border-radius: 0.75rem + overflow: hidden + background: var(--card-bg) + transition: all 0.3s ease + + &:hover + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1) + +.mermaid-wrapper + padding: 1.5rem + text-align: center + +.mermaid + display: flex + justify-content: center + align-items: center + min-height: 100px + font-family: inherit + + svg + max-width: 100% + height: auto + border-radius: 0.5rem + +.mermaid-loading + display: flex + align-items: center + justify-content: center + padding: 2rem + color: var(--text-color-secondary) + font-style: italic + + &::before + content: "" + width: 20px + height: 20px + border: 2px solid var(--primary) + border-top: 2px solid transparent + border-radius: 50% + animation: spin 1s linear infinite + margin-right: 0.5rem + +@keyframes spin + 0% + transform: rotate(0deg) + 100% + transform: rotate(360deg) + +.mermaid-error + color: var(--admonitions-color-warning) + background: rgba(239, 68, 68, 0.1) + border: 1px solid var(--admonitions-color-warning) + border-radius: 0.5rem + padding: 1rem + margin: 1rem 0 + text-align: center + font-weight: 500 + + p + margin: 0 0 0.5rem 0 + + button + transition: all 0.2s ease + + &:hover + background: var(--primary-hover) !important + transform: translateY(-1px) + +// 深色模式下的 Mermaid 样式 +.dark .mermaid-diagram-container + background: var(--card-bg) + + svg + filter: brightness(0.9) contrast(1.1) + +// 响应式设计 +@media (max-width: 768px) + .mermaid-wrapper + padding: 1rem + + .mermaid svg + max-height: 400px diff --git a/src/styles/markdown.css b/src/styles/markdown.css new file mode 100644 index 0000000..5422014 --- /dev/null +++ b/src/styles/markdown.css @@ -0,0 +1,147 @@ +.custom-md { + h1 { + @apply text-3xl; + } + + h1, h2, h3, h4, h5, h6 { + .anchor { + @apply transition -m-0.5 ml-[0.2ch] p-0.5 select-none opacity-0 no-underline !important; + + .anchor-icon { + @apply mx-[0.45ch] !important; + } + } + + &:hover { + .anchor { + @apply opacity-100 !important; + } + } + } + + a:not(.no-styling) { + @apply relative bg-none font-medium text-[var(--primary)] + underline decoration-[var(--link-underline)] decoration-1 decoration-dashed underline-offset-4; + box-decoration-break: clone; + -webkit-box-decoration-break: clone; + + &:hover, &:active { + @apply decoration-transparent; + background: var(--btn-plain-bg-hover); + border-bottom: 1px dashed var(--link-hover); + text-decoration: none; + } + } + + code { + @apply bg-[var(--inline-code-bg)] text-[var(--inline-code-color)] px-1 py-0.5 rounded-md overflow-hidden; + + font-family: 'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + &:before { + content:none; + } + &:after { + content:none; + } + + counter-reset: line; + span.line { + &:before { + @apply text-white/25 mr-4 w-4 inline-block; + content: counter(line); + counter-increment: line; + direction: rtl; + } + &:last-child:empty, &:last-child:has(> span:empty:only-child) { + display: none; + } + } + } + + .copy-btn { + @apply opacity-0 shadow-md shadow-black/30 absolute active:scale-90 h-8 w-8 top-3 right-3 text-sm rounded-lg transition-all ease-in-out z-20 cursor-pointer border-0; + background: var(--btn-regular-bg); + } + .copy-btn:hover { + background: var(--btn-regular-bg-hover); + } + .frame:hover .copy-btn { + opacity: 1; + } + + .copy-btn-icon { + @apply absolute top-1/2 left-1/2 transition -translate-x-1/2 -translate-y-1/2 w-4 h-4 fill-white pointer-events-none; + fill: var(--btn-content); + } + .copy-btn .copy-icon { + @apply opacity-100 fill-white dark:fill-white/75; + fill: var(--btn-content); + } + .copy-btn.success .copy-icon { + @apply opacity-0 fill-[var(--deep-text)] + + } + .copy-btn .success-icon { + @apply opacity-0 fill-white; + fill: var(--btn-content); + + } + .copy-btn.success .success-icon { + @apply opacity-100 + + } + + .expressive-code { + @apply my-4; + } + + + ul, ol { + li::marker { + @apply text-[var(--primary)]; + } + } + + blockquote { + @apply not-italic border-transparent relative; + font-weight: inherit; + + &:before { + @apply content-[''] absolute -left-1 block transition bg-[var(--btn-regular-bg)] h-full w-1 rounded-full; + } + + /* Remove the double quotes from default styles */ + p:before, p:after { + @apply content-none; + } + + } + + .katex-display-container { + max-width: 100%; + overflow-x: auto; + margin: 1em 0; + } + +} + +/* 修复代码块内列表项标记颜色问题 */ +.custom-md .expressive-code ul li::marker, +.custom-md .expressive-code ol li::marker { + @apply text-inherit; +} + +/* 修复表格对齐问题 */ +.custom-md { + table { + th[align="left"], td[align="left"] { + text-align: left; + } + th[align="center"], td[align="center"] { + text-align: center; + } + th[align="right"], td[align="right"] { + text-align: right; + } + } +} \ No newline at end of file diff --git a/src/styles/navbar.css b/src/styles/navbar.css new file mode 100644 index 0000000..3c0398e --- /dev/null +++ b/src/styles/navbar.css @@ -0,0 +1,804 @@ +/** + * 统一导航栏样式 + * + * 模式说明: + * ============================================ + * 1. 壁纸模式 (backgroundWallpaper.mode): + * - "banner": 横幅壁纸模式 (有 #banner-wrapper) + * - "overlay": 全屏壁纸模式 (body.wallpaper-transparent) + * - "none": 纯色背景无壁纸 + * + * 2. 导航栏透明模式 (transparentMode): + * - "semi": 半透明加圆角 (始终半透明) + * - "full": 完全透明 (始终透明) + * - "semifull": 动态透明 (未滚动时透明,滚动后变半透明) + * + * 3. 其他条件: + * - 桌面端: min-width: 1024px + * - 移动端: max-width: 1023px + * - 首页: data-is-home="true" (移动端仅在首页生效) + * - 滚动状态: .scrolled (仅 semifull 模式) + * - 亮色/暗色主题: :root.dark + * ============================================ + */ + +/* ============================================ + * 基础导航栏样式 + * 适用: 所有模式,所有设备 + * ============================================ */ + #navbar > div { + background: var(--card-bg); + border: 1px solid transparent; + border-radius: 0 0 0.75rem 0.75rem; + transition: all var(--duration-medium) var(--ease-standard); +} + +/* ============================================ + * 桌面端 - 亮色主题 - Banner模式 + * 适用: 桌面端(≥1024px) + Banner模式 + 亮色主题 + * ============================================ */ +@media (min-width: 1024px) { + /* + * 透明模式: "semi" (半透明) + * 条件: Banner模式 + transparentMode="semi" + * 效果: 半透明背景 + 模糊 + 圆角 + 阴影 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="semi"] > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="semi"] > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "full" (完全透明) + * 条件: Banner模式 + transparentMode="full" + * 效果: 完全透明,无背景、无边框、无阴影 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="full"] > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="full"] > div { + backdrop-filter: none !important; + background: transparent !important; + border: none !important; + border-radius: 0 !important; + box-shadow: none !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) + * 条件: Banner模式 + transparentMode="semifull" + 未滚动 + * 效果: 完全透明,有圆角但无背景 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"] > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"] > div { + backdrop-filter: none !important; + background: transparent !important; + border: 1px solid transparent !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: none !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) + * 条件: Banner模式 + transparentMode="semifull" + .scrolled + * 效果: 滚动后变为半透明背景 + 模糊 + 圆角 + 阴影 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"].scrolled > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"].scrolled > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } +} + +/* ============================================ + * 桌面端 - 亮色主题 - 壁纸模式 (Overlay) + * 适用: 桌面端(≥1024px) + 壁纸模式 + 亮色主题 + * ============================================ */ +@media (min-width: 1024px) { + /* + * 透明模式: "semi" (半透明) + * 条件: 壁纸模式 (body.wallpaper-transparent) + transparentMode="semi" + * 效果: 半透明背景 + 模糊 + 圆角 + 阴影 + */ + body.wallpaper-transparent #navbar[data-transparent-mode="semi"] > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "full" (完全透明) + * 条件: 壁纸模式 + transparentMode="full" + * 效果: 完全透明,无背景、无边框、无阴影 + */ + body.wallpaper-transparent #navbar[data-transparent-mode="full"] > div { + backdrop-filter: none !important; + background: transparent !important; + border: none !important; + border-radius: 0 !important; + box-shadow: none !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) + * 条件: 壁纸模式 + transparentMode="semifull" + 未滚动 + * 效果: 半透明背景 + 模糊 (壁纸模式下始终半透明) + */ + body.wallpaper-transparent #navbar[data-transparent-mode="semifull"] > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) + * 条件: 壁纸模式 + transparentMode="semifull" + .scrolled + * 效果: 滚动后保持半透明 (与未滚动状态相同) + */ + body.wallpaper-transparent #navbar[data-transparent-mode="semifull"].scrolled > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } +} + +/* ============================================ + * 移动端 - 亮色主题 - Banner模式 + * 适用: 移动端(≤1023px) + Banner模式 + 亮色主题 + 仅首页生效 + * 注意: 移动端透明效果仅在首页 (data-is-home="true") 生效 + * ============================================ */ +@media (max-width: 1023px) { + /* + * 透明模式: "semi" (半透明) + * 条件: Banner模式 + transparentMode="semi" + 首页 + * 效果: 半透明背景 + 模糊 + 圆角 + 阴影 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="semi"][data-is-home="true"] > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="semi"][data-is-home="true"] > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "full" (完全透明) + * 条件: Banner模式 + transparentMode="full" + 首页 + * 效果: 完全透明,无背景、无边框、无阴影 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="full"][data-is-home="true"] > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="full"][data-is-home="true"] > div { + backdrop-filter: none !important; + background: transparent !important; + border: none !important; + border-radius: 0 !important; + box-shadow: none !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) + * 条件: Banner模式 + transparentMode="semifull" + 首页 + 未滚动 + * 效果: 完全透明,有圆角但无背景 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"][data-is-home="true"] > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"][data-is-home="true"] > div { + backdrop-filter: none !important; + background: transparent !important; + border: 1px solid transparent !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: none !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) + * 条件: Banner模式 + transparentMode="semifull" + 首页 + .scrolled + * 效果: 滚动后变为半透明背景 + 模糊 + 圆角 + 阴影 + */ + #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"][data-is-home="true"].scrolled > div, + body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"][data-is-home="true"].scrolled > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } +} + +/* ============================================ + * 移动端 - 亮色主题 - 壁纸模式 (Overlay) + * 适用: 移动端(≤1023px) + 壁纸模式 + 亮色主题 + 仅首页生效 + * ============================================ */ +@media (max-width: 1023px) { + /* + * 透明模式: "semi" (半透明) + * 条件: 壁纸模式 + transparentMode="semi" + 首页 + * 效果: 半透明背景 + 模糊 + 圆角 + 阴影 + */ + body.wallpaper-transparent #navbar[data-transparent-mode="semi"][data-is-home="true"] > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "full" (完全透明) + * 条件: 壁纸模式 + transparentMode="full" + 首页 + * 效果: 完全透明,无背景、无边框、无阴影 + */ + body.wallpaper-transparent #navbar[data-transparent-mode="full"][data-is-home="true"] > div { + backdrop-filter: none !important; + background: transparent !important; + border: none !important; + border-radius: 0 !important; + box-shadow: none !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) + * 条件: 壁纸模式 + transparentMode="semifull" + 首页 + 未滚动 + * 效果: 半透明背景 + 模糊 (壁纸模式下始终半透明) + */ + body.wallpaper-transparent #navbar[data-transparent-mode="semifull"][data-is-home="true"] > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) + * 条件: 壁纸模式 + transparentMode="semifull" + 首页 + .scrolled + * 效果: 滚动后保持半透明 (与未滚动状态相同) + */ + body.wallpaper-transparent #navbar[data-transparent-mode="semifull"][data-is-home="true"].scrolled > div { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-55)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-55)) !important; + border-radius: 0 0 0.75rem 0.75rem !important; + box-shadow: var(--shadow-navbar) !important; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } +} + +/* ============================================ + * 桌面端 - 暗色主题 - Banner模式 + * 适用: 桌面端(≥1024px) + Banner模式 + 暗色主题 (:root.dark) + * ============================================ */ +@media (min-width: 1024px) { + /* + * 透明模式: "semi" (半透明) - 暗色主题 + * 条件: Banner模式 + transparentMode="semi" + 暗色主题 + * 效果: 暗色半透明背景 + 模糊 + 圆角 + 阴影 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="semi"] > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="semi"] > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* + * 透明模式: "full" (完全透明) - 暗色主题 + * 条件: Banner模式 + transparentMode="full" + 暗色主题 + * 效果: 完全透明,无背景、无边框、无阴影 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="full"] > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="full"] > div { + background: transparent !important; + border: none !important; + box-shadow: none !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) - 暗色主题 + * 条件: Banner模式 + transparentMode="semifull" + 暗色主题 + 未滚动 + * 效果: 完全透明,有圆角但无背景 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"] > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"] > div { + background: transparent !important; + border: 1px solid transparent !important; + box-shadow: none !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) - 暗色主题 + * 条件: Banner模式 + transparentMode="semifull" + 暗色主题 + .scrolled + * 效果: 滚动后变为暗色半透明背景 + 模糊 + 圆角 + 阴影 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"].scrolled > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"].scrolled > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } +} + +/* ============================================ + * 桌面端 - 暗色主题 - 壁纸模式 (Overlay) + * 适用: 桌面端(≥1024px) + 壁纸模式 + 暗色主题 (:root.dark) + * ============================================ */ +@media (min-width: 1024px) { + /* + * 透明模式: "semi" (半透明) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="semi" + 暗色主题 + * 效果: 暗色半透明背景 + 模糊 + 圆角 + 阴影 + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="semi"] > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* + * 透明模式: "full" (完全透明) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="full" + 暗色主题 + * 效果: 完全透明,无背景、无边框、无阴影 + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="full"] > div { + background: transparent !important; + border: none !important; + box-shadow: none !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="semifull" + 暗色主题 + 未滚动 + * 效果: 暗色半透明背景 + 模糊 (壁纸模式下始终半透明) + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="semifull"] > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="semifull" + 暗色主题 + .scrolled + * 效果: 滚动后保持暗色半透明 (与未滚动状态相同) + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="semifull"].scrolled > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } +} + +/* ============================================ + * 移动端 - 暗色主题 - Banner模式 + * 适用: 移动端(≤1023px) + Banner模式 + 暗色主题 + 仅首页生效 + * ============================================ */ +@media (max-width: 1023px) { + /* + * 透明模式: "semi" (半透明) - 暗色主题 + * 条件: Banner模式 + transparentMode="semi" + 暗色主题 + 首页 + * 效果: 暗色半透明背景 + 模糊 + 圆角 + 阴影 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="semi"][data-is-home="true"] > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="semi"][data-is-home="true"] > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* + * 透明模式: "full" (完全透明) - 暗色主题 + * 条件: Banner模式 + transparentMode="full" + 暗色主题 + 首页 + * 效果: 完全透明,无背景、无边框、无阴影 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="full"][data-is-home="true"] > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="full"][data-is-home="true"] > div { + background: transparent !important; + border: none !important; + box-shadow: none !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) - 暗色主题 + * 条件: Banner模式 + transparentMode="semifull" + 暗色主题 + 首页 + 未滚动 + * 效果: 完全透明,有圆角但无背景 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"][data-is-home="true"] > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"][data-is-home="true"] > div { + background: transparent !important; + border: 1px solid transparent !important; + box-shadow: none !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) - 暗色主题 + * 条件: Banner模式 + transparentMode="semifull" + 暗色主题 + 首页 + .scrolled + * 效果: 滚动后变为暗色半透明背景 + 模糊 + 圆角 + 阴影 + */ + :root.dark #banner-wrapper ~ * #navbar[data-transparent-mode="semifull"][data-is-home="true"].scrolled > div, + :root.dark body:has(#banner-wrapper) #navbar[data-transparent-mode="semifull"][data-is-home="true"].scrolled > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } +} + +/* ============================================ + * 移动端 - 暗色主题 - 壁纸模式 (Overlay) + * 适用: 移动端(≤1023px) + 壁纸模式 + 暗色主题 + 仅首页生效 + * ============================================ */ +@media (max-width: 1023px) { + /* + * 透明模式: "semi" (半透明) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="semi" + 暗色主题 + 首页 + * 效果: 暗色半透明背景 + 模糊 + 圆角 + 阴影 + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="semi"][data-is-home="true"] > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* + * 透明模式: "full" (完全透明) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="full" + 暗色主题 + 首页 + * 效果: 完全透明,无背景、无边框、无阴影 + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="full"][data-is-home="true"] > div { + background: transparent !important; + border: none !important; + box-shadow: none !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 未滚动状态) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="semifull" + 暗色主题 + 首页 + 未滚动 + * 效果: 暗色半透明背景 + 模糊 (壁纸模式下始终半透明) + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="semifull"][data-is-home="true"] > div { + background: transparent !important; + border: none !important; + box-shadow: none !important; + } + + /* + * 透明模式: "semifull" (动态透明 - 滚动状态) - 暗色主题 + * 条件: 壁纸模式 + transparentMode="semifull" + 暗色主题 + 首页 + .scrolled + * 效果: 滚动后变为暗色半透明背景 + 模糊 + 圆角 + 阴影 + */ + :root.dark body.wallpaper-transparent #navbar[data-transparent-mode="semifull"][data-is-home="true"].scrolled > div { + background: rgba(0, 0, 0, var(--opacity-55)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-55)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } +} + +/* ============================================ + * 响应式优化 + * ============================================ */ + +/* 平板设备优化 (768px - 1279px) */ +@media (min-width: 768px) and (max-width: 1279px) { + #navbar > div { + border-radius: 0 0 1rem 1rem !important; + } + + /* 隐藏导航栏主导航项的图标,只显示文字 */ + /* 只隐藏主导航栏按钮和链接中的图标,保留下拉菜单中的图标 */ + #navbar .dropdown-container > .btn-plain .navbar-icon, + #navbar .dropdown-container > a.btn-plain .navbar-icon { + display: none !important; + } +} + +/* 小屏手机优化 (≤480px) */ +@media (max-width: 480px) { + #navbar > div { + border-radius: 0 0 0.5rem 0.5rem !important; + margin: 0 !important; + padding-left: 1rem !important; + padding-right: 1rem !important; + max-width: none !important; + width: 100% !important; + } +} + +/* 手机端导航栏全宽优化 (≤768px) */ +/* 修复768px断点问题:确保在≤768px时菜单隐藏,按钮显示 */ +@media (max-width: 768px) { + #navbar > div { + max-width: none !important; + width: 100% !important; + margin-left: 0 !important; + margin-right: 0 !important; + } + + /* 强制隐藏导航菜单(覆盖Tailwind的md:flex) */ + /* 直接选择包含导航链接的div容器(第二个直接子元素) */ + #navbar > div > div:nth-child(2) { + display: none !important; + } + + /* 强制显示菜单按钮(覆盖Tailwind的md:!hidden) */ + #navbar #nav-menu-switch { + display: flex !important; + } +} + +/* ============================================ + * 下拉菜单和面板样式 - 亮色主题 + * 适用: 所有模式、所有设备 + 亮色主题 + * 说明: 下拉菜单和面板在所有模式下样式统一,只需区分亮色/暗色主题 + * ============================================ */ +/* 桌面端 - 所有面板样式 */ +@media (min-width: 1024px) { + /* 二级菜单 (下拉菜单内容) */ + .dropdown-content { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 主题色设置面板 */ + #display-setting { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 壁纸模式切换面板 */ + #wallpaper-mode-panel .float-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 主题切换面板 */ + #theme-mode-panel .float-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 手机端导航菜单面板 */ + #nav-menu-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 手机端MD导航菜单面板 (目录) */ + #mobile-toc-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 搜索面板 */ + #search-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } +} + +/* 移动端 - 所有面板样式(仅在首页生效) */ +@media (max-width: 1023px) { + /* 二级菜单 (下拉菜单内容) - 仅在首页生效 */ + #navbar[data-is-home="true"] .dropdown-content { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 主题色设置面板 - 仅在首页生效 */ + #navbar[data-is-home="true"] ~ * #display-setting, + #navbar[data-is-home="true"] #display-setting { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 壁纸模式切换面板 - 仅在首页生效 */ + #navbar[data-is-home="true"] #wallpaper-mode-panel .float-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 主题切换面板 - 仅在首页生效 */ + #navbar[data-is-home="true"] #theme-mode-panel .float-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 手机端导航菜单面板 - 仅在首页生效 */ + #navbar[data-is-home="true"] #nav-menu-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 手机端MD导航菜单面板 (目录) - 仅在首页生效 */ + #navbar[data-is-home="true"] #mobile-toc-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } + + /* 搜索面板 - 仅在首页生效 */ + #navbar[data-is-home="true"] #search-panel { + backdrop-filter: blur(var(--blur-2xl)) !important; + background: rgba(255, 255, 255, var(--opacity-90)) !important; + border: 1px solid rgba(255, 255, 255, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar) !important; + } +} + +/* ============================================ + * 下拉菜单和面板样式 - 暗色主题 + * 适用: 所有模式、所有设备 + 暗色主题 (:root.dark) + * ============================================ */ + +/* 桌面端 - 所有面板样式 - 暗色主题 */ +@media (min-width: 1024px) { + /* 二级菜单 (下拉菜单内容) */ + :root.dark .dropdown-content { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 主题色设置面板 */ + :root.dark #display-setting { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 壁纸模式切换面板 */ + :root.dark #wallpaper-mode-panel .float-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 主题切换面板 */ + :root.dark #theme-mode-panel .float-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 手机端导航菜单面板 */ + :root.dark #nav-menu-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 手机端MD导航菜单面板 (目录) */ + :root.dark #mobile-toc-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 搜索面板 */ + :root.dark #search-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } +} + +/* 移动端 - 所有面板样式 - 暗色主题 (仅在首页生效) */ +@media (max-width: 1023px) { + /* 二级菜单 (下拉菜单内容) - 仅在首页生效 */ + :root.dark #navbar[data-is-home="true"] .dropdown-content { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 主题色设置面板 - 仅在首页生效 */ + :root.dark #navbar[data-is-home="true"] ~ * #display-setting, + :root.dark #navbar[data-is-home="true"] #display-setting { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 壁纸模式切换面板 - 仅在首页生效 */ + :root.dark #navbar[data-is-home="true"] #wallpaper-mode-panel .float-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 主题切换面板 - 仅在首页生效 */ + :root.dark #navbar[data-is-home="true"] #theme-mode-panel .float-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 手机端导航菜单面板 - 仅在首页生效 */ + :root.dark #navbar[data-is-home="true"] #nav-menu-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 手机端MD导航菜单面板 (目录) - 仅在首页生效 */ + :root.dark #navbar[data-is-home="true"] #mobile-toc-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } + + /* 搜索面板 - 仅在首页生效 */ + :root.dark #navbar[data-is-home="true"] #search-panel { + background: rgba(0, 0, 0, var(--opacity-90)) !important; + border: 1px solid rgba(0, 0, 0, var(--opacity-90)) !important; + box-shadow: var(--shadow-navbar-dark) !important; + } +} + +/* ============================================ + * 全宽导航栏适配 (Full Width Navbar) + * 确保在开启全宽模式时覆盖所有圆角和宽度限制 + * 针对所有模式(Banner模式、壁纸模式、透明模式)统一去除圆角 + * 使用高优先级选择器确保覆盖原主题样式 + * 仅在桌面端 (min-width: 1024px) 生效,移动端保留圆角 + * ============================================ */ +@media (min-width: 1024px) { + #navbar-wrapper #navbar[data-full-width="true"] > div, + body:has(#banner-wrapper) #navbar-wrapper #navbar[data-full-width="true"] > div, + body.wallpaper-transparent #navbar-wrapper #navbar[data-full-width="true"] > div, + #navbar-wrapper #navbar[data-full-width="true"].scrolled > div { + border-radius: 0 !important; + width: 100% !important; + max-width: none !important; + margin: 0 !important; + } +} \ No newline at end of file diff --git a/src/styles/photoswipe.css b/src/styles/photoswipe.css new file mode 100644 index 0000000..1b112b6 --- /dev/null +++ b/src/styles/photoswipe.css @@ -0,0 +1,15 @@ + + +/* PhotoSwipe 按钮样式 */ +.pswp__button { + @apply transition bg-black/40 hover:bg-black/50 active:bg-black/60 flex items-center justify-center mr-0 w-12 h-12 !important; +} +.pswp__button--zoom, .pswp__button--close { + @apply mt-4 rounded-xl active:scale-90 !important; +} +.pswp__button--zoom { + @apply mr-2.5 !important; +} +.pswp__button--close { + @apply mr-4 !important; +} diff --git a/src/styles/scrollbar.css b/src/styles/scrollbar.css new file mode 100644 index 0000000..c874683 --- /dev/null +++ b/src/styles/scrollbar.css @@ -0,0 +1,84 @@ +.scrollbar-base.os-scrollbar { + transition: + width 0.15s ease-in-out, + height 0.15s ease-in-out, + opacity 0.15s, + visibility 0.15s, + top 0.15s, + right 0.15s, + bottom 0.15s, + left 0.15s; + pointer-events: unset; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-horizontal { + padding-top: 4px; + padding-bottom: 4px; + height: 16px; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-horizontal + .os-scrollbar-track + .os-scrollbar-handle { + height: 4px; + border-radius: 4px; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-horizontal:hover + .os-scrollbar-track + .os-scrollbar-handle { + height: 8px; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-horizontal.px-2 { + padding-left: 8px; + padding-right: 8px; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-vertical { + padding-left: 4px; + padding-right: 4px; + width: 16px; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-vertical + .os-scrollbar-track + .os-scrollbar-handle { + width: 4px; + border-radius: 4px; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-vertical:hover + .os-scrollbar-track + .os-scrollbar-handle { + width: 8px; +} + +.scrollbar-base.os-scrollbar.os-scrollbar-vertical.py-1 { + padding-top: 4px; + padding-bottom: 4px; +} + +:root { + --os-handle-bg-custom: rgba(0, 0, 0, 0.3); + --os-handle-bg-custom-hover: rgba(0, 0, 0, 0.5); + --os-handle-bg-custom-active: rgba(0, 0, 0, 0.6); +} + +:root.dark { + --os-handle-bg-custom: rgba(255, 255, 255, 0.4); + --os-handle-bg-custom-hover: rgba(255, 255, 255, 0.6); + --os-handle-bg-custom-active: rgba(255, 255, 255, 0.7); +} + +.scrollbar-auto.os-scrollbar { + --os-handle-bg: var(--os-handle-bg-custom); + --os-handle-bg-hover: var(--os-handle-bg-custom-hover); + --os-handle-bg-active: var(--os-handle-bg-custom-active); +} + +.scrollbar-dark.os-scrollbar { + --os-handle-bg: rgba(255, 255, 255, 0.4); + --os-handle-bg-hover: rgba(255, 255, 255, 0.6); + --os-handle-bg-active: rgba(255, 255, 255, 0.7); +} \ No newline at end of file diff --git a/src/styles/transition.css b/src/styles/transition.css new file mode 100644 index 0000000..06d3fd9 --- /dev/null +++ b/src/styles/transition.css @@ -0,0 +1,270 @@ +/* Page transition animations with Swup*/ + +/* 主要内容区域的过渡动画 */ +.transition-main { + transition: + opacity 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94), + transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +/* 离开动画 - 内容向右上滑出并淡出 */ +.transition-leaving { + transition: + transform 300ms cubic-bezier(0.55, 0.055, 0.675, 0.19), + opacity 300ms cubic-bezier(0.55, 0.055, 0.675, 0.19); +} + +html.is-changing .transition-main { + transition: + opacity 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94), + transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +html.is-leaving .transition-main { + transition: + opacity 300ms cubic-bezier(0.55, 0.055, 0.675, 0.19), + transform 300ms cubic-bezier(0.55, 0.055, 0.675, 0.19); +} + +/* 进入动画 - 从右下角轻微滑入 */ +html.is-animating .transition-main { + opacity: 0; + transform: translateY(1.5rem) translateX(0.5rem); +} + +/* 离开动画 - 向左上角滑出 */ +html.is-animating.is-leaving .transition-leaving { + transform: translateY(-1rem) translateX(-0.5rem); + opacity: 0; +} + +/* Swup fade 动画 - 保持兼容性 */ +html.is-changing .transition-swup-fade { + transition: all 300ms ease-out; +} + +html.is-animating .transition-swup-fade { + opacity: 0; + transform: translateY(1.5rem); +} + +/* 增强的淡入动画 - 添加侧滑效果 */ +@keyframes fade-in-up { + from { + opacity: 0; + transform: translateY(1.5rem) translateX(0.5rem); + } + to { + opacity: 1; + transform: translateY(0) translateX(0); + } +} + +@keyframes fade-out-down { + from { + opacity: 1; + transform: translateY(0) translateX(0); + } + to { + opacity: 0; + transform: translateY(-1rem) translateX(-0.5rem); + } +} + +/* 页面加载动画 */ +.onload-animation { + opacity: 0; + animation: fade-in-up 300ms ease-out forwards; +} + +.onload-animation-fade-in { + opacity: 0; + animation: fade-in 300ms ease-in forwards; +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +/* 渐进式动画延迟 */ +.onload-animation:nth-child(1) { animation-delay: 0ms; } +.onload-animation:nth-child(2) { animation-delay: 50ms; } +.onload-animation:nth-child(3) { animation-delay: 100ms; } +.onload-animation:nth-child(4) { animation-delay: 150ms; } +.onload-animation:nth-child(5) { animation-delay: 200ms; } + +/* 特殊元素的动画 */ +.transition-slide-in { + opacity: 0; + transform: translateY(20px) translateX(8px); + transition: all 400ms cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.transition-slide-in.active { + opacity: 1; + transform: translateY(0) translateX(0); +} + +/* 卡片动画 */ +.card-animation { + opacity: 0; + transform: translateY(30px) translateX(10px) scale(0.98); + transition: all 350ms cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.card-animation.visible { + opacity: 1; + transform: translateY(0) translateX(0) scale(1); +} + +/* 导航动画 */ +.nav-animation { + opacity: 0; + transform: translateX(-20px); + transition: all 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.nav-animation.loaded { + opacity: 1; + transform: translateX(0); +} + +/* 性能优化 */ +.transition-main, +.transition-leaving, +.onload-animation, +.transition-slide-in, +.card-animation { + backface-visibility: hidden; + -webkit-font-smoothing: antialiased; +} + +/* 移动端页面切换性能优化 */ +@media (max-width: 768px) { + /* 为所有动画元素添加硬件加速 */ + .transition-main, + .transition-leaving, + .onload-animation, + .transition-slide-in, + .card-animation, + .nav-animation, + #dynamic-sidebar, + .widget-container { + -webkit-transform: translateZ(0); + transform: translateZ(0); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000; + perspective: 1000; + will-change: transform, opacity; + } + + /* 优化页面切换动画 */ + html.is-changing .transition-main { + transition: + opacity 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94), + transform 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); + } + + html.is-leaving .transition-main { + transition: + opacity 200ms cubic-bezier(0.55, 0.055, 0.675, 0.19), + transform 200ms cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + /* 减少移动端动画幅度 */ + html.is-animating .transition-main { + opacity: 0; + transform: translateY(0.5rem) translateX(0.2rem); + } + + html.is-animating.is-leaving .transition-leaving { + transform: translateY(-0.4rem) translateX(-0.2rem); + opacity: 0; + } + + /* 优化侧边栏动画 */ + #dynamic-sidebar { + transition: all 0.2s ease-in-out; + } + + .widget-container { + transition: all 0.2s ease-in-out; + } + + /* 防止页面加载时的闪烁 */ + body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + /* 优化网格布局切换 */ + #main-grid { + transition: all 0.3s ease-in-out; + } + + /* 防止图片加载时的闪烁 */ + img { + -webkit-transform: translateZ(0); + transform: translateZ(0); + } + + /* 优化滚动行为 */ + html { + scroll-behavior: smooth; + } + + /* 减少动画元素的数量 */ + .onload-animation { + animation-duration: 0.3s; + } + + /* 优化字体渲染 */ + * { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + } +} + +/* 超小屏幕设备优化 */ +@media (max-width: 480px) { + /* 进一步减少动画效果 */ + html.is-animating .transition-main { + transform: translateY(0.3rem) translateX(0.1rem); + } + + html.is-animating.is-leaving .transition-leaving { + transform: translateY(-0.2rem) translateX(-0.1rem); + } + + /* 简化侧边栏动画 */ + #dynamic-sidebar { + transition: all 0.15s ease-in-out; + } + + .widget-container { + transition: all 0.15s ease-in-out; + } +} + +/* 性能优化:为减少动画的用户提供支持 */ +@media (prefers-reduced-motion: reduce) { + .transition-main, + .transition-leaving, + .onload-animation, + .transition-slide-in, + .card-animation, + .nav-animation, + #dynamic-sidebar, + .widget-container { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} \ No newline at end of file diff --git a/src/styles/twikoo.css b/src/styles/twikoo.css new file mode 100644 index 0000000..ae62b1d --- /dev/null +++ b/src/styles/twikoo.css @@ -0,0 +1,297 @@ +:root { + --tk-text: black; + --code-block-text: #333; /* 调整为深色但在浅色背景下仍然舒适的值 */ +} + +html.dark { + --tk-text: #d1d5db; + --code-block-text: #d1d5db; /* 在深色模式下使用更亮的颜色 */ +} + +.tk-comments { + @apply text-[var(--tk-text)]; +} + +.tk-submit { + .tk-avatar { + @apply hidden; + } +} + +/* Text Area */ +.tk-row { + .tk-col { + @apply flex-col-reverse; + .tk-input { + textarea { + @apply rounded-[var(--radius-large)] py-4 px-6 !min-h-[150px] focus:border-[var(--primary)] + border-[var(--line-divider)] bg-[var(--card-bg)] text-[var(--btn-content)] + placeholder:text-[var(--content-meta)] transition-all duration-300 + focus:ring-2 focus:ring-[var(--primary)] focus:ring-opacity-20; + resize: vertical; + } + } + } +} + +/* 表情和图片按钮位置调整 */ +.tk-row .tk-col .tk-actions { + @apply order-1 mt-4 mb-2 flex gap-2; +} + +.tk-row .tk-col .tk-meta-input { + @apply order-2; +} + +/* 表情和图片按钮样式优化 */ +.tk-owo, +.tk-upload { + @apply rounded-lg p-2 hover:bg-[var(--btn-plain-bg-hover)] transition-colors duration-200 + border border-[var(--line-divider)] bg-[var(--card-bg)] text-[var(--btn-content)] + hover:border-[var(--primary)] hover:shadow-sm; +} + +.tk-owo:hover, +.tk-upload:hover { + @apply bg-[var(--btn-plain-bg-hover)] border-[var(--primary)] shadow-sm; +} + +/* Meta */ +.tk-meta-input { + @apply relative mt-4; + div { + @apply min-h-12 rounded-lg border border-[var(--line-divider)] bg-[var(--card-bg)] overflow-hidden + hover:border-[var(--primary)] hover:shadow-sm transition-all duration-200 flex items-center; + + .el-input-group__prepend { + @apply !bg-[var(--btn-regular-bg)] !text-[var(--btn-content)] px-4 font-medium text-sm + border-r border-[var(--line-divider)] flex items-center justify-center min-w-[80px] flex-shrink-0 + rounded-l-lg rounded-r-none; + min-height: inherit; + } + + input { + @apply px-4 bg-transparent text-[var(--btn-content)] placeholder:text-[var(--content-meta)] + focus:!border-[var(--primary)] transition-all duration-200 flex-1 + rounded-r-lg rounded-l-none; + min-height: inherit; + + &::placeholder { + @apply text-[var(--content-meta)] opacity-70; + } + + &:focus { + @apply outline-none; + } + } + + &:focus-within { + @apply border-[var(--primary)] shadow-md; + } + } +} + +/* Button */ +.tk-row.actions { + @apply w-full !ml-0 !mt-6 flex gap-3 justify-end; + .__markdown { + @apply !hidden; + } + .tk-send, + .tk-cancel { + @apply border-none rounded-lg px-6 py-2 h-10 font-medium transition-all duration-300 + !bg-[var(--btn-regular-bg)] hover:!bg-[var(--btn-regular-bg-hover)] + active:!bg-[var(--btn-regular-bg-active)] disabled:!bg-[var(--btn-regular-bg)] + !text-[var(--btn-content)] disabled:!text-[var(--content-meta)] + hover:scale-105 active:scale-95 shadow-sm hover:shadow-md; + } +} + +/* 隐藏预览按钮 */ +.tk-preview { + display: none !important; +} + +/* 强制统一按钮样式 */ +.tk-send, +.tk-cancel { + background: var(--btn-regular-bg) !important; + color: var(--btn-content) !important; + border: none !important; + border-radius: 0.5rem !important; + padding: 0.5rem 1.5rem !important; + height: 2.5rem !important; + font-weight: 500 !important; + transition: all 0.3s ease !important; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important; +} + +.tk-send:hover, +.tk-cancel:hover { + background: var(--btn-regular-bg-hover) !important; + transform: scale(1.05) !important; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1) !important; +} + +.tk-send:active, +.tk-cancel:active { + background: var(--btn-regular-bg-active) !important; + transform: scale(0.95) !important; +} + +.tk-send:disabled, +.tk-cancel:disabled { + background: var(--btn-regular-bg) !important; + color: var(--content-meta) !important; + transform: none !important; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important; +} + +/* Comment title */ +.tk-comments-title { + @apply hidden; /* 隐藏默认标题,使用自定义标题 */ + + .__comments svg { + @apply fill-[var(--primary)]; + } +} + +.tk-comment { + @apply border-[1px] border-[var(--line-divider)] p-4 rounded-2xl hover:shadow-lg hover:border-[var(--primary)] transition-all duration-300; + background: linear-gradient(135deg, var(--card-bg) 0%, rgba(var(--primary), 0.02) 100%); + + .tk-action-icon svg { + @apply fill-[var(--primary)] hover:scale-110 transition-transform duration-200; + } + + &:hover { + transform: translateY(-2px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); + z-index: 2; + } +} + +.tk-meta { + .tk-tag { + @apply border-none rounded-lg text-[var(--btn-content)]; + } + + .tk-tag-green { + @apply bg-[var(--btn-regular-bg)] dark:bg-[var(--primary)] dark:text-[var(--deep-text)]; + } +} + +/* Content & Preview */ +.tk-content, +.tk-preview-container { + /* by @microsic + Make the picture type emoticons display without wrapping + */ + img { + @apply inline !align-bottom; + } + + a { + @apply underline text-[var(--primary)] font-medium; + } + + .tk-ruser { + @apply no-underline; + } + + :not(pre) > code { + @apply bg-[var(--inline-code-bg)] rounded-md text-[--inline-code-color] px-1 py-0.5 font-semibold; + } + + li { + @apply before:content-["•"] before:text-[var(--primary)]; + } +} + +/* Replies */ +.tk-replies { + + + .tk-comment { + @apply border-l-4 border-l-[var(--btn-regular-bg)] p-3 border-opacity-30 hover:border-[var(--primary)] transition-all duration-300; + .tk-content { + > span:first-of-type { + @apply text-xs text-[var(--content-meta)]; + } + } + } + + /* 回复层级指示器 */ + &::before { + content: ''; + @apply absolute left-0 top-0 w-0.5 h-full bg-gradient-to-b to-transparent opacity-30; + } +} + +.twikoo .code-block { + pre { + @apply !rounded-xl; + } + + /* Code block fall back */ + pre:not([class]) { + @apply bg-[var(--codeblock-bg)] overflow-auto p-2 text-[var(--code-block-text)]; + } + + .copy-btn-icon { + width: inherit !important; + height: inherit !important; + } +} + +.tk-expand-wrap .tk-expand, +.tk-collapse-wrap .tk-expand { + @apply border-[1px] border-[var(--line-divider)] rounded-lg mt-1 bg-[var(--btn-regular-bg)] text-[var(--btn-content)] hover:text-[var(--primary)] hover:bg-[var(--btn-regular-bg-hover)]; +} + +/* by @SirTamago +Make the emoji component display correctly when there are too many emoji packs +*/ +.card-base { + overflow: visible; +} + +/* 防止 Twikoo 操作时的意外滚动 */ +.tk-action-icon, +.tk-owo, +.tk-submit, +.tk-cancel, +.tk-admin, +.tk-delete, +.tk-edit { + cursor: pointer; + transition: all 0.2s ease; +} + +/* 确保点击区域足够大 */ +.tk-action { + min-height: 24px; + display: flex; + align-items: center; +} + +/* 防止表单提交时的意外跳转 */ +.tk-submit-wrapper { + position: relative; +} + +/* 管理面板样式优化 */ +.tk-admin-panel { + position: relative; + z-index: 100; +} + + + +.el-loading-spinner { + display: flex !important; + justify-content: center !important; + +} + + diff --git a/src/styles/variables-unified.styl b/src/styles/variables-unified.styl new file mode 100644 index 0000000..0fbe5c1 --- /dev/null +++ b/src/styles/variables-unified.styl @@ -0,0 +1,366 @@ +/** + * 统一变量定义 - 合并所有重复的CSS变量和常量 + * Unified Variables - Merged all duplicate CSS variables and constants + */ + +/* ===== 基础变量定义 ===== */ +:root { + --radius-large: 1rem; + --content-delay: 150ms; +} + +/* ===== 主题相关变量 ===== */ +:root { + --primary: oklch(0.70 0.14 var(--hue)); + --page-bg: oklch(0.95 0.01 var(--hue)); + --card-bg: white; + --card-bg-transparent: rgba(255, 255, 255, 0.8); + + --btn-content: oklch(0.55 0.12 var(--hue)); + --btn-regular-bg: oklch(0.95 0.025 var(--hue)); + --btn-regular-bg-hover: oklch(0.9 0.05 var(--hue)); + --btn-regular-bg-active: oklch(0.85 0.08 var(--hue)); + + --btn-plain-bg-hover: oklch(0.95 0.025 var(--hue)); + --btn-plain-bg-active: oklch(0.98 0.01 var(--hue)); + + --btn-card-bg-hover: oklch(0.98 0.005 var(--hue)); + --btn-card-bg-active: oklch(0.9 0.03 var(--hue)); + + --enter-btn-bg: var(--btn-regular-bg); + --enter-btn-bg-hover: var(--btn-regular-bg-hover); + --enter-btn-bg-active: var(--btn-regular-bg-active); + + --deep-text: oklch(0.25 0.02 var(--hue)); + --title-active: oklch(0.6 0.1 var(--hue)); + + --line-divider: rgba(0, 0, 0, 0.08); + --line-color: rgba(0, 0, 0, 0.1); + --meta-divider: rgba(0, 0, 0, 0.2); + --content-meta: rgba(0, 0, 0, 0.7); + + --inline-code-bg: var(--btn-regular-bg); + --inline-code-color: var(--btn-content); + --selection-bg: oklch(0.90 0.05 var(--hue)); + --codeblock-bg: oklch(0.17 0.015 var(--hue)); + --codeblock-topbar-bg: oklch(0.3 0.02 var(--hue)); + + --license-block-bg: rgba(0, 0, 0, 0.03); + + --link-underline: oklch(0.93 0.04 var(--hue)); + --link-hover: oklch(0.95 0.025 var(--hue)); + --link-active: oklch(0.90 0.05 var(--hue)); + + --float-panel-bg: white; + + --scrollbar-bg-light: rgba(0, 0, 0, 0.4); + --scrollbar-bg-hover-light: rgba(0, 0, 0, 0.5); + --scrollbar-bg-active-light: rgba(0, 0, 0, 0.6); + + --scrollbar-bg-dark: rgba(255, 255, 255, 0.4); + --scrollbar-bg-hover-dark: rgba(255, 255, 255, 0.5); + --scrollbar-bg-active-dark: rgba(255, 255, 255, 0.6); + + --scrollbar-bg: var(--scrollbar-bg-light); + --scrollbar-bg-hover: var(--scrollbar-bg-hover-light); + --scrollbar-bg-active: var(--scrollbar-bg-active-light); + + --display-light-icon: 1; + --display-dark-icon: 0; + + --admonitions-color-tip: oklch(0.7 0.14 180); + --admonitions-color-note: oklch(0.7 0.14 250); + --admonitions-color-important: oklch(0.7 0.14 310); + --admonitions-color-warning: oklch(0.7 0.14 60); + --admonitions-color-caution: oklch(0.6 0.2 25); + + /* TOC相关变量 */ + --toc-badge-bg: oklch(0.9 0.045 var(--hue)); + --toc-btn-hover: oklch(0.92 0.015 var(--hue)); + --toc-btn-active: oklch(0.90 0.015 var(--hue)); + --toc-width: calc((100vw - var(--page-width)) / 2 - 1rem); + --toc-item-active: oklch(0.70 0.13 var(--hue)); + + /* 主题色选择条渐变 */ + --color-selection-bar: linear-gradient(to right, + oklch(0.80 0.10 0), + oklch(0.80 0.10 30), + oklch(0.80 0.10 60), + oklch(0.80 0.10 90), + oklch(0.80 0.10 120), + oklch(0.80 0.10 150), + oklch(0.80 0.10 180), + oklch(0.80 0.10 210), + oklch(0.80 0.10 240), + oklch(0.80 0.10 270), + oklch(0.80 0.10 300), + oklch(0.80 0.10 330), + oklch(0.80 0.10 360) + ); +} + +/* 暗色主题变量 */ +:root.dark { + --primary: oklch(0.75 0.14 var(--hue)); + --page-bg: oklch(0.16 0.014 var(--hue)); + --card-bg: oklch(0.23 0.015 var(--hue)); + --card-bg-transparent: rgba(23, 23, 23, 0.8); + + --btn-content: oklch(0.75 0.1 var(--hue)); + --btn-regular-bg: oklch(0.33 0.035 var(--hue)); + --btn-regular-bg-hover: oklch(0.38 0.04 var(--hue)); + --btn-regular-bg-active: oklch(0.43 0.045 var(--hue)); + + --btn-plain-bg-hover: oklch(0.30 0.035 var(--hue)); + --btn-plain-bg-active: oklch(0.27 0.025 var(--hue)); + + --btn-card-bg-hover: oklch(0.3 0.03 var(--hue)); + --btn-card-bg-active: oklch(0.35 0.035 var(--hue)); + + --line-divider: rgba(255, 255, 255, 0.08); + --line-color: rgba(255, 255, 255, 0.1); + --meta-divider: rgba(255, 255, 255, 0.2); + --content-meta: rgba(255, 255, 255, 0.6); + + --selection-bg: oklch(0.40 0.08 var(--hue)); + --codeblock-bg: oklch(0.17 0.015 var(--hue)); + --codeblock-topbar-bg: oklch(0.12 0.015 var(--hue)); + + --license-block-bg: var(--codeblock-bg); + + --link-underline: oklch(0.40 0.08 var(--hue)); + --link-hover: oklch(0.40 0.08 var(--hue)); + --link-active: oklch(0.35 0.07 var(--hue)); + + --float-panel-bg: oklch(0.19 0.015 var(--hue)); + + --scrollbar-bg: var(--scrollbar-bg-dark); + --scrollbar-bg-hover: var(--scrollbar-bg-hover-dark); + --scrollbar-bg-active: var(--scrollbar-bg-active-dark); + + --display-light-icon: 0; + --display-dark-icon: 1; + + --admonitions-color-tip: oklch(0.75 0.14 180); + --admonitions-color-note: oklch(0.75 0.14 250); + --admonitions-color-important: oklch(0.75 0.14 310); + --admonitions-color-warning: oklch(0.75 0.14 60); + --admonitions-color-caution: oklch(0.65 0.2 25); + + /* TOC相关变量 - 暗色主题 */ + --toc-badge-bg: var(--btn-regular-bg); + --toc-btn-hover: oklch(0.28 0.04 var(--hue)); + --toc-btn-active: oklch(0.32 0.05 var(--hue)); + --toc-item-active: oklch(0.35 0.07 var(--hue)); + + /* 主题色选择条渐变 - 暗色主题 */ + --color-selection-bar: linear-gradient(to right, + oklch(0.70 0.10 0), + oklch(0.70 0.10 30), + oklch(0.70 0.10 60), + oklch(0.70 0.10 90), + oklch(0.70 0.10 120), + oklch(0.70 0.10 150), + oklch(0.70 0.10 180), + oklch(0.70 0.10 210), + oklch(0.70 0.10 240), + oklch(0.70 0.10 270), + oklch(0.70 0.10 300), + oklch(0.70 0.10 330), + oklch(0.70 0.10 360) + ); +} + +/* ===== 响应式断点变量 ===== */ +:root { + /* 断点定义 */ + --breakpoint-xs: 320px; + --breakpoint-sm: 480px; + --breakpoint-md: 768px; + --breakpoint-lg: 1024px; + --breakpoint-xl: 1280px; + --breakpoint-2xl: 1536px; + + /* 容器宽度 */ + --container-xs: 100%; + --container-sm: 100%; + --container-md: 100%; + --container-lg: 1024px; + --container-xl: 1280px; + --container-2xl: 1536px; +} + +/* ===== 动画变量 ===== */ +:root { + /* 缓动函数 */ + --ease-standard: cubic-bezier(0.4, 0, 0.2, 1); + --ease-decelerate: cubic-bezier(0.25, 0.46, 0.45, 0.94); + --ease-accelerate: cubic-bezier(0.55, 0.055, 0.675, 0.19); + --ease-sharp: cubic-bezier(0.4, 0, 0.6, 1); + + /* 动画时长 */ + --duration-fast: 150ms; + --duration-normal: 200ms; + --duration-medium: 300ms; + --duration-slow: 400ms; + --duration-slower: 500ms; + + /* 动画延迟 */ + --delay-none: 0ms; + --delay-short: 50ms; + --duration-medium: 100ms; + --delay-long: 150ms; + --delay-longer: 200ms; +} + +/* ===== 间距变量 ===== */ +:root { + /* 基础间距 */ + --spacing-xs: 0.25rem; /* 4px */ + --spacing-sm: 0.5rem; /* 8px */ + --spacing-md: 0.75rem; /* 12px */ + --spacing-lg: 1rem; /* 16px */ + --spacing-xl: 1.25rem; /* 20px */ + --spacing-2xl: 1.5rem; /* 24px */ + --spacing-3xl: 2rem; /* 32px */ + --spacing-4xl: 2.5rem; /* 40px */ + --spacing-5xl: 3rem; /* 48px */ + + /* 组件间距 */ + --widget-gap-mobile: var(--spacing-md); + --widget-gap-tablet: var(--spacing-lg); + --widget-gap-desktop: var(--spacing-xl); + + /* 侧边栏宽度 */ + --sidebar-width-mobile: 100%; + --sidebar-width-tablet: 280px; + --sidebar-width-desktop: 320px; +} + +/* ===== 阴影变量 ===== */ +:root { + /* 基础阴影 */ + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); + --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1); + --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1); + --shadow-2xl: 0 25px 50px rgba(0, 0, 0, 0.25); + + /* 特殊阴影 */ + --shadow-navbar: 0 4px 16px rgba(0, 0, 0, 0.1); + --shadow-navbar-dark: 0 4px 16px rgba(0, 0, 0, 0.2); + --shadow-button: 0 4px 12px rgba(0, 0, 0, 0.15); + --shadow-button-dark: 0 4px 12px rgba(255, 255, 255, 0.1); +} + +/* ===== 边框半径变量 ===== */ +:root { + --radius-sm: 0.25rem; /* 4px */ + --radius-md: 0.375rem; /* 6px */ + --radius-lg: 0.5rem; /* 8px */ + --radius-xl: 0.75rem; /* 12px */ + --radius-2xl: 1rem; /* 16px */ + --radius-3xl: 1.5rem; /* 24px */ + --radius-full: 9999px; +} + +/* ===== 透明度变量 ===== */ +:root { + --opacity-0: 0; + --opacity-5: 0.05; + --opacity-10: 0.1; + --opacity-20: 0.2; + --opacity-25: 0.25; + --opacity-30: 0.3; + --opacity-40: 0.4; + --opacity-50: 0.5; + --opacity-55: 0.55; + --opacity-60: 0.6; + --opacity-70: 0.7; + --opacity-75: 0.75; + --opacity-80: 0.8; + --opacity-90: 0.9; + --opacity-95: 0.95; + --opacity-100: 1; +} + +/* ===== 模糊效果变量 ===== */ +:root { + --blur-sm: 4px; + --blur-md: 8px; + --blur-lg: 12px; + --blur-xl: 16px; + --blur-2xl: 20px; + --blur-3xl: 24px; +} + +/* ===== 变换变量 ===== */ +:root { + /* 平移 */ + --translate-xs: 0.125rem; /* 2px */ + --translate-sm: 0.25rem; /* 4px */ + --translate-md: 0.5rem; /* 8px */ + --translate-lg: 0.75rem; /* 12px */ + --translate-xl: 1rem; /* 16px */ + --translate-2xl: 1.5rem; /* 24px */ + --translate-3xl: 2rem; /* 32px */ + + /* 缩放 */ + --scale-95: 0.95; + --scale-98: 0.98; + --scale-100: 1; + --scale-105: 1.05; + --scale-110: 1.1; +} + +/* ===== 层级变量 ===== */ +:root { + --z-dropdown: 1000; + --z-sticky: 1020; + --z-fixed: 1030; + --z-modal-backdrop: 1040; + --z-modal: 1050; + --z-popover: 1060; + --z-tooltip: 1070; + --z-toast: 1080; + --z-navbar: 20; + --z-banner: 10; + --z-content: 30; +} + +/* ===== 性能优化变量 ===== */ +:root { + /* GPU加速 */ + --gpu-transform: translateZ(0); + --gpu-backface: hidden; + + /* 动画性能 */ + --animation-fill-mode: both; + --animation-timing: var(--ease-standard); + --animation-duration: var(--duration-medium); +} + +/* ===== 响应式工具类 ===== */ +@media (max-width: 767px) { + :root { + --container-width: var(--container-sm); + --widget-gap: var(--widget-gap-mobile); + --sidebar-width: var(--sidebar-width-mobile); + } +} + +@media (min-width: 768px) and (max-width: 1279px) { + :root { + --container-width: var(--container-md); + --widget-gap: var(--widget-gap-tablet); + --sidebar-width: var(--sidebar-width-tablet); + } +} + +@media (min-width: 1280px) { + :root { + --container-width: var(--container-lg); + --widget-gap: var(--widget-gap-desktop); + --sidebar-width: var(--sidebar-width-desktop); + } +} \ No newline at end of file diff --git a/src/styles/waves.css b/src/styles/waves.css new file mode 100644 index 0000000..501d5f4 --- /dev/null +++ b/src/styles/waves.css @@ -0,0 +1,80 @@ +/* Water waves animation - 恢复原始效果 */ +.waves > .parallax use { + animation: wave-default 25s cubic-bezier(0.5, 0.5, 0.45, 0.5) infinite; +} + +/* 性能优化:低质量模式 */ +[data-wave-quality="low"] .waves > .parallax use { + animation: wave-slow 30s linear infinite; + animation-fill-mode: both; +} + +/* 性能优化:中等质量模式 */ +[data-wave-quality="medium"] .waves > .parallax use { + animation: wave 20s cubic-bezier(0.4, 0.4, 0.6, 0.4) infinite; +} + +/* 性能优化:高质量模式 */ +[data-wave-quality="high"] .waves > .parallax use { + animation: wave 15s cubic-bezier(0.5, 0.5, 0.45, 0.5) infinite; +} + +/* 硬件加速控制 */ +[data-hardware-acceleration="true"] .waves > .parallax use { + transform: translateZ(0); + will-change: transform; + backface-visibility: hidden; +} + +[data-hardware-acceleration="false"] .waves > .parallax use { + will-change: auto; + backface-visibility: visible; +} + +@keyframes wave-default { + 0% { + transform: translate3d(-90px, 0, 0); + } + 100% { + transform: translate3d(85px, 0, 0); + } +} + +@keyframes wave-slow { + 0% { + transform: translate(-90px, 0); + } + 100% { + transform: translate(85px, 0); + } +} + +@keyframes wave { + 0% { + transform: translate3d(-90px, 0, 0); + } + 100% { + transform: translate3d(85px, 0, 0); + } +} + +/* 低质量模式的额外优化 */ +.wave-low-quality { + animation-timing-function: linear !important; + animation-iteration-count: infinite !important; +} + +/* 性能优化:减少重绘 */ +[data-wave-quality="low"] .waves { + /* 移除contain属性,避免限制波浪动画 */ + contain: none; +} + +[data-wave-quality="medium"] .waves { + /* 移除contain属性,避免限制波浪动画 */ + contain: none; +} + +[data-wave-quality="high"] .waves { + contain: none; +} diff --git a/src/styles/widget-responsive.css b/src/styles/widget-responsive.css new file mode 100644 index 0000000..e6c51f4 --- /dev/null +++ b/src/styles/widget-responsive.css @@ -0,0 +1,488 @@ +/** + * 组件响应式布局样式 + * Widget Responsive Layout Styles + */ + +/* CSS 自定义属性定义 */ +:root { + /* 断点变量 */ + --breakpoint-mobile: 768px; + --breakpoint-tablet: 1024px; + --breakpoint-desktop: 1025px; + + /* 间距变量 */ + --widget-gap-mobile: 0.75rem; + --widget-gap-tablet: 1rem; + --widget-gap-desktop: 1.25rem; + + /* 动画变量 */ + --widget-animation-duration: 0.3s; + --widget-animation-timing: ease-in-out; + + /* 侧边栏宽度 */ + --sidebar-width-mobile: 100%; + --sidebar-width-tablet: 280px; + --sidebar-width-desktop: 320px; + + /* 组件最小高度 */ + --widget-min-height: 60px; + --widget-max-height-mobile: 200px; + --widget-max-height-tablet: 300px; + --widget-max-height-desktop: 400px; +} + +/* 基础侧边栏样式 */ +#dynamic-sidebar { + width: var(--sidebar-width-desktop); + transition: all var(--widget-animation-duration) var(--widget-animation-timing); + position: relative; +} + +/* 组件容器基础样式 */ +.widget-container { + min-height: var(--widget-min-height); + transition: all var(--widget-animation-duration) var(--widget-animation-timing); + overflow: hidden; +} + +/* 组件悬停效果 */ +.widget-container:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.widget-container.widget-hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} + +/* 移动端样式 (< 768px) */ +@media (max-width: 767px) { + #dynamic-sidebar { + width: var(--sidebar-width-mobile); + padding: 0.5rem; + } + + .sidebar-top-section, + .sidebar-sticky-section { + gap: var(--widget-gap-mobile); + } + + .widget-container { + max-height: var(--widget-max-height-mobile); + } + + /* 移动端隐藏的组件 */ + .widget-container[data-mobile-hidden="true"] { + display: none; + } + + /* 移动端特殊布局 */ + .sidebar-sticky-section { + position: static !important; + top: auto !important; + } + + /* 移动端组件简化显示 */ + .widget-container[data-widget-type="announcement"] { + order: -1; /* 公告优先显示 */ + } + + .widget-container[data-widget-type="categories"], + .widget-container[data-widget-type="tags"] { + /* 分类和标签在移动端可折叠 */ + max-height: 120px; + overflow-y: auto; + } +} + +/* 平板端样式 (768px - 1023px) */ +@media (min-width: 768px) and (max-width: 1023px) { + #dynamic-sidebar { + width: var(--sidebar-width-tablet); + padding: 0.75rem; + } + + .sidebar-top-section, + .sidebar-sticky-section { + gap: var(--widget-gap-tablet); + } + + .widget-container { + max-height: var(--widget-max-height-tablet); + } + + /* 平板端隐藏的组件 */ + .widget-container[data-tablet-hidden="true"] { + display: none; + } + + +} + +/* 桌面端样式 (>= 1024px) */ +@media (min-width: 1024px) { + #dynamic-sidebar { + width: var(--sidebar-width-desktop); + padding: 1rem; + } + + .sidebar-top-section, + .sidebar-sticky-section { + gap: var(--widget-gap-desktop); + } + + .widget-container { + max-height: var(--widget-max-height-desktop); + } + + /* 桌面端隐藏的组件 */ + .widget-container[data-desktop-hidden="true"] { + display: none; + } + + /* 桌面端增强效果 */ + .widget-container:hover { + transform: translateY(-4px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); + } +} + +/* 超宽屏样式 (> 1440px) */ +@media (min-width: 1441px) { + #dynamic-sidebar { + width: 360px; + } + + .widget-container { + max-height: 500px; + } +} + +/* 组件位置特定样式 */ +.sidebar-top-section { + /* 顶部组件区域 */ + margin-bottom: 1rem; +} + +.sidebar-sticky-section { + /* 粘性组件区域 */ + position: sticky; + top: 1rem; + z-index: 10; +} + +/* 组件类型特定的响应式样式 */ + +/* Profile 组件 */ +.widget-container[data-widget-type="profile"] { + /* 用户资料组件始终保持固定高度 */ + min-height: 120px; +} + +@media (max-width: 767px) { + .widget-container[data-widget-type="profile"] { + min-height: 100px; + } +} + +/* Announcement 组件 */ +.widget-container[data-widget-type="announcement"] { + /* 公告组件可以动态调整高度 */ + min-height: 80px; +} + +@media (max-width: 767px) { + .widget-container[data-widget-type="announcement"] { + min-height: 60px; + font-size: 0.875rem; + } +} + +/* Categories 和 Tags 组件 */ +.widget-container[data-widget-type="categories"], +.widget-container[data-widget-type="tags"] { + /* 分类和标签组件支持滚动 */ + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: rgba(156, 163, 175, 0.5) transparent; +} + +.widget-container[data-widget-type="categories"]::-webkit-scrollbar, +.widget-container[data-widget-type="tags"]::-webkit-scrollbar { + width: 4px; +} + +.widget-container[data-widget-type="categories"]::-webkit-scrollbar-track, +.widget-container[data-widget-type="tags"]::-webkit-scrollbar-track { + background: transparent; +} + +.widget-container[data-widget-type="categories"]::-webkit-scrollbar-thumb, +.widget-container[data-widget-type="tags"]::-webkit-scrollbar-thumb { + background-color: rgba(156, 163, 175, 0.5); + border-radius: 2px; +} + +/* TOC 组件 */ +.widget-container[data-widget-type="toc"] { + /* 目录组件在移动端隐藏 */ + max-height: 400px; + overflow-y: auto; +} + +@media (max-width: 767px) { + .widget-container[data-widget-type="toc"] { + display: none; + } +} + + + +/* 动画效果 */ + +/* 淡入动画 */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* 滑入动画 */ +@keyframes slideIn { + from { + opacity: 0; + transform: translateX(-30px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +/* 缩放动画 */ +@keyframes scaleIn { + from { + opacity: 0; + transform: scale(0.8); + } + to { + opacity: 1; + transform: scale(1); + } +} + +/* 动画类 */ +.widget-animation-fade { + animation: fadeIn var(--widget-animation-duration) var(--widget-animation-timing) forwards; +} + +.widget-animation-slide { + animation: slideIn var(--widget-animation-duration) var(--widget-animation-timing) forwards; +} + +.widget-animation-scale { + animation: scaleIn var(--widget-animation-duration) var(--widget-animation-timing) forwards; +} + +/* 初始状态 */ +.widget-container { + opacity: 0; +} + +.widget-container.widget-animated { + opacity: 1; +} + +/* 加载状态 */ +.widget-loading { + position: relative; + overflow: hidden; +} + +.widget-loading::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient( + 90deg, + transparent, + rgba(255, 255, 255, 0.2), + transparent + ); + animation: shimmer 1.5s infinite; +} + +@keyframes shimmer { + 0% { + left: -100%; + } + 100% { + left: 100%; + } +} + +/* 错误状态 */ +.widget-error { + border: 2px dashed #ef4444; + background-color: #fef2f2; + color: #dc2626; + display: flex; + align-items: center; + justify-content: center; + min-height: 80px; + text-align: center; + font-size: 0.875rem; +} + +/* 空状态 */ +.widget-empty { + border: 2px dashed #d1d5db; + background-color: #f9fafb; + color: #6b7280; + display: flex; + align-items: center; + justify-content: center; + min-height: 80px; + text-align: center; + font-size: 0.875rem; +} + +/* 暗色主题适配 */ +@media (prefers-color-scheme: dark) { + .widget-container:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + } + + .widget-container.widget-hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); + } + + .widget-error { + border-color: #f87171; + background-color: #450a0a; + color: #fca5a5; + } + + .widget-empty { + border-color: #4b5563; + background-color: #111827; + color: #9ca3af; + } + + .widget-loading::before { + background: linear-gradient( + 90deg, + transparent, + rgba(255, 255, 255, 0.1), + transparent + ); + } +} + +/* 高对比度模式 */ +@media (prefers-contrast: high) { + .widget-container { + border: 2px solid currentColor; + } + + .widget-container:hover { + border-width: 3px; + } +} + +/* 减少动画模式 */ +@media (prefers-reduced-motion: reduce) { + .widget-container, + .widget-animation-fade, + .widget-animation-slide, + .widget-animation-scale { + animation: none; + transition: none; + } + + .widget-container { + opacity: 1; + transform: none; + } + + .widget-container:hover { + transform: none; + } +} + +/* 打印样式 */ +@media print { + #dynamic-sidebar { + display: none; + } +} + +/* 容器查询支持 (现代浏览器) */ +@supports (container-type: inline-size) { + #dynamic-sidebar { + container-type: inline-size; + } + + @container (max-width: 280px) { + .widget-container { + font-size: 0.875rem; + } + + .widget-container[data-widget-type="categories"], + .widget-container[data-widget-type="tags"] { + max-height: 150px; + } + } + + @container (min-width: 360px) { + .widget-container { + padding: 1.25rem; + } + } +} + +/* 工具类 */ +.widget-hidden { + display: none !important; +} + +.widget-visible { + display: block !important; +} + +.widget-compact { + padding: 0.5rem !important; + font-size: 0.875rem !important; +} + +.widget-expanded { + padding: 1.5rem !important; + font-size: 1rem !important; +} + +/* 调试样式 (开发环境) */ +[data-debug="true"] .widget-container { + border: 1px solid #3b82f6; + position: relative; +} + +[data-debug="true"] .widget-container::before { + content: attr(data-widget-type) ' [' attr(data-widget-order) ']'; + position: absolute; + top: -1px; + left: -1px; + background: #3b82f6; + color: white; + font-size: 10px; + padding: 2px 4px; + z-index: 1000; +} \ No newline at end of file diff --git a/src/types/bangumi.ts b/src/types/bangumi.ts new file mode 100644 index 0000000..2a98f74 --- /dev/null +++ b/src/types/bangumi.ts @@ -0,0 +1,56 @@ +export type UserSubjectCollectionResponse = { + data: UserSubjectCollection[]; + total: number; + limit: number; + offset: number; +}; + +export type UserSubjectCollection = { + subject_id: number; // 条目 ID + subject_type: SubjectType; // 条目类型 + rate: number; // 评分 + type: CollectionType; // 收藏类型 + comment?: string | null; // 评价 + tags: string[]; // 标签 + ep_status: number; // 章节进度 + vol_status: number; // 卷进度 + updated_at: string; // 更新时间(ISO 8601 格式) + private: boolean; // 是否私有 + subject: SlimSubject; // 条目信息 +}; + +// 1: 想看,2: 看过,3: 在看,4: 搁置,5: 抛弃 +export type CollectionType = 1 | 2 | 3 | 4 | 5; + +export type SlimSubject = { + id: number; // ID + type: SubjectType; // 类型 + name: string; // 名称 + name_cn: string; // 中文名 + short_summary: string; // 简介 + date?: string | null; // 日期 YYYY-MM-DD + images: SubjectImages; // 图片 + volumes: number; // 卷数 + eps: number; // 集数 + collection_total: number; // 收藏人数 + score: number; // 评分 + rank: number; // 排名 + tags: SubjectTag[]; // 标签 +}; + +// 1: 书籍,2: 动画,3: 音乐,4: 游戏,6: 三次元 +export type SubjectType = 1 | 2 | 3 | 4 | 6; + +export type SubjectTag = { + name: string; + count: number; + total_cont: number; +}; + +export type SubjectImages = { + large: string; + common: string; + medium: string; + small: string; + grid: string; +}; diff --git a/src/types/config.ts b/src/types/config.ts new file mode 100644 index 0000000..9c0665f --- /dev/null +++ b/src/types/config.ts @@ -0,0 +1,730 @@ +import type { + DARK_MODE, + LIGHT_MODE, + SYSTEM_MODE, + WALLPAPER_BANNER, + WALLPAPER_NONE, + WALLPAPER_OVERLAY, +} from "../constants/constants"; + +export type SiteConfig = { + title: string; + subtitle: string; + site_url: string; + description?: string; // 网站描述,用于生成 + keywords?: string[]; // 站点关键词,用于生成 + + lang: "en" | "zh_CN" | "zh_TW" | "ja" | "ru"; + + themeColor: { + hue: number; + fixed: boolean; + defaultMode?: LIGHT_DARK_MODE; // 默认模式:浅色、深色或跟随系统 + }; + + // 字体配置 + font: FontConfig; + + // 站点开始日期,用于计算运行天数 + siteStartDate?: string; // 格式: "YYYY-MM-DD" + + // 添加bangumi配置 + bangumi?: { + userId?: string; // Bangumi用户ID + }; + + generateOgImages: boolean; + favicon: Array<{ + src: string; + theme?: "light" | "dark"; + sizes?: string; + }>; + + navbar: { + /** 导航栏Logo图标,可选类型:icon库、图片链接、本地图片 */ + logo?: { + type: "icon" | "image"; + value: string; // icon名或图片url + alt?: string; // 图片alt文本 + }; + title?: string; // 导航栏标题,如果不设置则使用 title + widthFull?: boolean; // 导航栏是否占满屏幕宽度 + followTheme?: boolean; // 导航栏图标和标题是否跟随主题色 + }; + + showLastModified: boolean; // 控制"上次编辑"卡片显示的开关 + outdatedThreshold?: number; // 文章过期阈值(天数),超过此天数才显示"上次编辑"卡片 + sharePoster?: boolean; // 是否显示分享海报按钮 + + // 页面开关配置 + pages: { + sponsor: boolean; // 赞助页面开关 + guestbook: boolean; // 留言板页面开关 + bangumi: boolean; + }; + + // 文章列表布局配置 + postListLayout: { + defaultMode: "list" | "grid"; // 默认布局模式:list=列表模式,grid=网格模式 + allowSwitch: boolean; // 是否允许用户切换布局 + grid: { + // 网格布局配置,仅在 defaultMode 为 "grid" 或允许切换布局时生效 + // 是否开启瀑布流布局 + masonry: boolean; + // 网格模式列数:2 或 3,默认为 2。注意:3列模式仅在单侧边栏(或无侧边栏)且屏幕宽度足够时生效 + columns?: 2 | 3; + }; + }; + + // 分页配置 + pagination: { + postsPerPage: number; // 每页显示的文章数量 + }; + + // 统计分析 + analytics?: { + googleAnalyticsId?: string; // Google Analytics ID + microsoftClarityId?: string; // Microsoft Clarity ID + }; +}; + +export type Favicon = { + src: string; + theme?: "light" | "dark"; + sizes?: string; +}; + +export enum LinkPreset { + Home = 0, + Archive = 1, + About = 2, + Friends = 3, + Sponsor = 4, + Guestbook = 5, + Bangumi = 6, +} + +export type NavBarLink = { + name: string; + url: string; + external?: boolean; + icon?: string; // 菜单项图标 + children?: (NavBarLink | LinkPreset)[]; // 支持子菜单,可以是NavBarLink或LinkPreset +}; + +export enum NavBarSearchMethod { + PageFind = 0, + MeiliSearch = 1, +} + +/** + * MeiliSearch配置 + * + * @property INDEX_NAME MeiliSearch索引名称 + * @property CONTENT_DIR 需要被索引的内容目录 + * @property MEILI_HOST MeiliSearch服务器地址 + * @property PUBLIC_MEILI_HOST 公共MeiliSearch服务器地址(前端使用) + * @property PUBLIC_MEILI_SEARCH_KEY 公共MeiliSearch搜索密钥(前端使用) + */ +export type MeiliSearchConfig = { + INDEX_NAME: string; + CONTENT_DIR: string; + MEILI_HOST: string; + PUBLIC_MEILI_HOST: string; + PUBLIC_MEILI_SEARCH_KEY: string; +}; + +export type NavBarSearchConfig = { + method: NavBarSearchMethod; + meiliSearchConfig?: MeiliSearchConfig; +}; + +export type NavBarConfig = { + links: (NavBarLink | LinkPreset)[]; + searchMethod?: NavBarSearchMethod; + meiliSearchConfig?: MeiliSearchConfig; +}; + +export type ProfileConfig = { + avatar?: string; + name: string; + bio?: string; + links: { + name: string; + url: string; + icon: string; + showName?: boolean; + }[]; +}; + +export type LicenseConfig = { + enable: boolean; + name: string; + url: string; +}; +// 评论配置 + +export type CommentConfig = { + /** + * 当前启用的评论系统类型 + * "none" | "twikoo" | "waline" | "giscus" | "disqus" | 'artalk' + */ + type: "none" | "twikoo" | "waline" | "giscus" | "disqus" | "artalk"; + twikoo?: { + envId: string; + region?: string; + lang?: string; + visitorCount?: boolean; + }; + waline?: { + serverURL: string; + lang?: string; + login?: "enable" | "force" | "disable"; + visitorCount?: boolean; // 是否统计访问量,true 启用访问量,false 关闭 + }; + artalk?: { + // 后端程序 API 地址 + server: string; + /** + * 语言,支持语言如下: + * - "en" (English) + * - "zh-CN" (简体中文) + * - "zh-TW" (繁体中文) + * - "ja" (日本語) + * - "ko" (한국어) + * - "fr" (Français) + * - "ru" (Русский) + * */ + locale: string | "auto"; + // 是否统计访问量,true 启用访问量,false 关闭 + visitorCount?: boolean; + }; + giscus?: { + repo: string; + repoId: string; + category: string; + categoryId: string; + mapping: string; + strict: string; + reactionsEnabled: string; + emitMetadata: string; + inputPosition: string; + lang: string; + loading: string; + }; + disqus?: { + shortname: string; + }; +}; + +export type LIGHT_DARK_MODE = + | typeof LIGHT_MODE + | typeof DARK_MODE + | typeof SYSTEM_MODE; + +export type WALLPAPER_MODE = + | typeof WALLPAPER_BANNER + | typeof WALLPAPER_OVERLAY + | typeof WALLPAPER_NONE; + +export type BlogPostData = { + body: string; + title: string; + published: Date; + description: string; + tags: string[]; + draft?: boolean; + image?: string; + category?: string; + pinned?: boolean; + prevTitle?: string; + prevSlug?: string; + nextTitle?: string; + nextSlug?: string; +}; + +export type ExpressiveCodeConfig = { + /** @deprecated 使用 darkTheme 和 lightTheme 代替 */ + theme?: string; + /** 暗色主题名称(用于暗色模式) */ + darkTheme: string; + /** 亮色主题名称(用于亮色模式) */ + lightTheme: string; +}; + +export type AnnouncementConfig = { + // enable属性已移除,现在通过sidebarLayoutConfig统一控制 + title?: string; // 公告栏标题 + content: string; // 公告栏内容 + icon?: string; // 公告栏图标 + type?: "info" | "warning" | "success" | "error"; // 公告类型 + closable?: boolean; // 是否可关闭 + link?: { + enable: boolean; // 是否启用链接 + text: string; // 链接文字 + url: string; // 链接地址 + external?: boolean; // 是否外部链接 + }; +}; + +// 单个字体配置 +export type FontItem = { + id: string; // 字体唯一标识符 + name: string; // 字体显示名称 + src: string; // 字体文件路径或URL链接 + family: string; // CSS font-family 名称 + weight?: string | number; // 字体粗细,如 "normal", "bold", 400, 700 等 + style?: "normal" | "italic" | "oblique"; // 字体样式 + display?: "auto" | "block" | "swap" | "fallback" | "optional"; // font-display 属性 + unicodeRange?: string; // Unicode 范围,用于字体子集化 + format?: + | "woff" + | "woff2" + | "truetype" + | "opentype" + | "embedded-opentype" + | "svg"; // 字体格式,仅当 src 为本地文件时需要 +}; + +// 字体配置 +export type FontConfig = { + enable: boolean; // 是否启用自定义字体功能 + selected: string | string[]; // 当前选择的字体ID,支持单个或多个字体组合 + fonts: Record; // 字体库,以ID为键的对象 + fallback?: string[]; // 全局字体回退列表 + preload?: boolean; // 是否预加载字体文件以提高性能 +}; + +export type FooterConfig = { + enable: boolean; // 是否启用Footer HTML注入功能 + customHtml?: string; // 自定义HTML内容,用于添加备案号等信息 +}; + +export type CoverImageConfig = { + enableInPost: boolean; // 是否在文章详情页显示封面图 + randomCoverImage: { + enable: boolean; // 是否启用随机图功能 + apis: string[]; // 随机图API列表,支持 {seed} 占位符,会替换为文章slug或时间戳 + fallback?: string; // 当API请求失败时的备用图片路径 + // 加载指示器配置 + loading?: { + // 加载指示器开关 + enable: boolean; + image?: string; // 自定义加载图片路径(相对于public目录),默认 "/assets/images/loading.gif" + backgroundColor?: string; // 加载指示器背景颜色,默认与loading.gif背景色一致 (#fefefe) + }; + watermark?: { + enable: boolean; // 是否显示水印 + text?: string; // 水印文本,默认为"随机图" + position?: + | "top-left" + | "top-right" + | "bottom-left" + | "bottom-right" + | "center"; // 水印位置 + opacity?: number; // 水印透明度 0-1,默认0.6 + fontSize?: string; // 字体大小,默认"0.75rem" + color?: string; // 文字颜色,默认为白色 + backgroundColor?: string; // 背景颜色,默认为半透明黑色 + }; + }; +}; + +// 组件配置类型定义 +export type WidgetComponentType = + | "profile" + | "announcement" + | "categories" + | "tags" + | "sidebarToc" + | "advertisement" + | "stats" + | "calendar" + | "custom"; + +export type WidgetComponentConfig = { + type: WidgetComponentType; // 组件类型 + enable: boolean; // 是否启用该组件 + order: number; // 显示顺序,数字越小越靠前 + position: "top" | "sticky"; // 组件位置:top=固定在顶部,sticky=粘性定位(可滚动) + class?: string; // 自定义CSS类名 + style?: string; // 自定义内联样式 + animationDelay?: number; // 动画延迟时间(毫秒) + configId?: string; // 配置ID,用于广告组件指定使用哪个配置 + showOnPostPage?: boolean; // 是否在文章详情页显示(仅右侧边栏组件有效) + responsive?: { + hidden?: ("mobile" | "tablet" | "desktop")[]; // 在指定设备上隐藏 + collapseThreshold?: number; // 折叠阈值 + }; + customProps?: Record; // 自定义属性,用于扩展组件功能 +}; + +export type SidebarLayoutConfig = { + enable: boolean; // 是否启用侧边栏 + position: "left" | "both"; // 侧边栏位置:左侧或双侧 + showRightSidebarOnPostPage?: boolean; // 当position为left时,是否在文章详情页显示右侧边栏 + leftComponents: WidgetComponentConfig[]; // 左侧边栏组件配置列表 + rightComponents: WidgetComponentConfig[]; // 右侧边栏组件配置列表 + defaultAnimation: { + enable: boolean; // 是否启用默认动画 + baseDelay: number; // 基础延迟时间(毫秒) + increment: number; // 每个组件递增的延迟时间(毫秒) + }; + responsive: { + layout: { + mobile: "hidden" | "bottom" | "drawer" | "sidebar"; // 移动端布局模式 + tablet: "hidden" | "sidebar" | "bottom" | "drawer"; // 平板端布局模式 + desktop: "sidebar"; // 桌面端布局模式 + }; + }; +}; + +export type SakuraConfig = { + enable: boolean; // 是否启用樱花特效 + sakuraNum: number; // 樱花数量,默认21 + limitTimes: number; // 樱花越界限制次数,-1为无限循环 + size: { + min: number; // 樱花最小尺寸倍数 + max: number; // 樱花最大尺寸倍数 + }; + opacity: { + min: number; // 樱花最小不透明度 + max: number; // 樱花最大不透明度 + }; + speed: { + horizontal: { + min: number; // 水平移动速度最小值 + max: number; // 水平移动速度最大值 + }; + vertical: { + min: number; // 垂直移动速度最小值 + max: number; // 垂直移动速度最大值 + }; + rotation: number; // 旋转速度 + fadeSpeed: number; // 消失速度,不应大于最小不透明度 + }; + zIndex: number; // 层级,确保樱花在合适的层级显示 +}; + +// Spine 看板娘配置 +export type SpineModelConfig = { + enable: boolean; // 是否启用 Spine 看板娘 + model: { + path: string; // 模型文件路径 (.json) + scale?: number; // 模型缩放比例,默认1.0 + x?: number; // X轴偏移,默认0 + y?: number; // Y轴偏移,默认0 + }; + position: { + corner: "bottom-left" | "bottom-right" | "top-left" | "top-right"; // 显示位置 + offsetX?: number; // 水平偏移量,默认20px + offsetY?: number; // 垂直偏移量,默认20px + }; + size: { + width?: number; // 容器宽度,默认280px + height?: number; // 容器高度,默认400px + }; + interactive?: { + enabled?: boolean; // 是否启用交互功能,默认true + clickAnimations?: string[]; // 点击时随机播放的动画列表 + clickMessages?: string[]; // 点击时随机显示的文字消息 + messageDisplayTime?: number; // 文字显示时间(毫秒),默认3000 + idleAnimations?: string[]; // 待机动画列表 + idleInterval?: number; // 待机动画切换间隔(毫秒),默认10000 + }; + responsive?: { + hideOnMobile?: boolean; // 是否在移动端隐藏,默认false + mobileBreakpoint?: number; // 移动端断点,默认768px + }; + zIndex?: number; // 层级,默认1000 + opacity?: number; // 透明度,0-1,默认1.0 +}; + +// Live2D 看板娘配置 +export type Live2DModelConfig = { + enable: boolean; // 是否启用 Live2D 看板娘 + model: { + path: string; // 模型文件夹路径或model3.json文件路径 + }; + position?: { + corner?: "bottom-left" | "bottom-right" | "top-left" | "top-right"; // 显示位置,默认bottom-right + offsetX?: number; // 水平偏移量,默认20px + offsetY?: number; // 垂直偏移量,默认20px + }; + size?: { + width?: number; // 容器宽度,默认280px + height?: number; // 容器高度,默认250px + }; + interactive?: { + enabled?: boolean; // 是否启用交互功能,默认true + // motions 和 expressions 将从模型 JSON 文件中自动读取 + clickMessages?: string[]; // 点击时随机显示的文字消息 + messageDisplayTime?: number; // 文字显示时间(毫秒),默认3000 + }; + responsive?: { + hideOnMobile?: boolean; // 是否在移动端隐藏,默认false + mobileBreakpoint?: number; // 移动端断点,默认768px + }; +}; + +export type BackgroundWallpaperConfig = { + mode: "banner" | "overlay" | "none"; // 壁纸模式:banner横幅模式、overlay全屏透明覆盖模式或none纯色背景 + switchable?: boolean; // 是否允许用户通过导航栏切换壁纸模式,默认true + src: + | string + | string[] + | { + desktop?: string | string[]; + mobile?: string | string[]; + }; // 支持单个图片、图片数组或分别设置桌面端和移动端图片 + + // Banner模式特有配置 + banner?: { + position?: + | "top" + | "center" + | "bottom" + | "top left" + | "top center" + | "top right" + | "center left" + | "center center" + | "center right" + | "bottom left" + | "bottom center" + | "bottom right" + | "left top" + | "left center" + | "left bottom" + | "right top" + | "right center" + | "right bottom" + | string; // 壁纸位置,支持CSS object-position的所有值,包括百分比和像素值 + homeText?: { + enable: boolean; // 是否在首页显示自定义文字(全局开关) + title?: string; // 主标题 + subtitle?: string | string[]; // 副标题,支持单个字符串或字符串数组 + titleSize?: string; // 主标题字体大小,如 "3.5rem" + subtitleSize?: string; // 副标题字体大小,如 "1.5rem" + typewriter?: { + enable: boolean; // 是否启用打字机效果 + speed: number; // 打字速度(毫秒) + deleteSpeed: number; // 删除速度(毫秒) + pauseTime: number; // 完整显示后的暂停时间(毫秒) + }; + }; + credit?: { + enable: + | boolean + | { + desktop: boolean; // 桌面端是否显示横幅图片来源文本 + mobile: boolean; // 移动端是否显示横幅图片来源文本 + }; // 是否显示横幅图片来源文本,支持布尔值或分别设置桌面端和移动端 + text: + | string + | { + desktop: string; // 桌面端显示的来源文本 + mobile: string; // 移动端显示的来源文本 + }; // 横幅图片来源文本,支持字符串或分别设置桌面端和移动端 + url?: + | string + | { + desktop: string; // 桌面端原始艺术品或艺术家页面的 URL 链接 + mobile: string; // 移动端原始艺术品或艺术家页面的 URL 链接 + }; // 原始艺术品或艺术家页面的 URL 链接,支持字符串或分别设置桌面端和移动端 + }; + navbar?: { + transparentMode?: "semi" | "full" | "semifull"; // 导航栏透明模式 + }; + waves?: { + enable: + | boolean + | { + desktop: boolean; // 桌面端是否启用波浪动画效果 + mobile: boolean; // 移动端是否启用波浪动画效果 + }; // 是否启用波浪动画效果,支持布尔值或分别设置桌面端和移动端 + performance?: { + quality: "high" | "medium" | "low"; // 渲染质量:high=高质量,medium=中等质量,low=低质量 + hardwareAcceleration: boolean; // 是否启用硬件加速 + }; // 波浪效果性能优化配置 + }; + }; + // 全屏透明覆盖模式特有配置 + overlay?: { + zIndex?: number; // 层级,确保壁纸在合适的层级显示 + opacity?: number; // 壁纸透明度,0-1之间 + blur?: number; // 背景模糊程度,单位px + }; +}; + +// 广告栏配置 +export type AdConfig = { + title?: string; // 广告栏标题 + content?: string; // 广告栏文本内容 + image?: { + src: string; // 图片地址 + alt?: string; // 图片描述 + link?: string; // 图片点击链接 + external?: boolean; // 是否外部链接 + }; + link?: { + text: string; // 链接文本 + url: string; // 链接地址 + external?: boolean; // 是否外部链接 + }; + padding?: { + top?: string; // 上边距,如 "0", "1rem", "16px" + right?: string; // 右边距 + bottom?: string; // 下边距 + left?: string; // 左边距 + all?: string; // 统一边距,会覆盖单独设置 + }; + closable?: boolean; // 是否可关闭 + displayCount?: number; // 显示次数限制,-1为无限制 + expireDate?: string; // 过期时间 (ISO 8601 格式) +}; + +// 友链配置 +export type FriendLink = { + title: string; // 友链标题 + imgurl: string; // 头像图片URL + desc: string; // 友链描述 + siteurl: string; // 友链地址 + tags?: string[]; // 标签数组 + weight: number; // 权重,数字越大排序越靠前 + enabled: boolean; // 是否启用 +}; + +export type FriendsPageConfig = { + columns: 2 | 3; // 显示列数:2列或3列 +}; + +// 音乐播放器配置 +export type MusicPlayerConfig = { + // 基础功能开关 + enable: boolean; // 启用音乐播放器功能 + + // 使用方式:'meting' 或 'local' + mode?: "meting" | "local"; // "meting" 使用 Meting API,"local" 使用本地音乐列表 + + // Meting API 配置 + meting?: { + // Meting API 地址 + api?: string; + + // 音乐平台:netease=网易云音乐, tencent=QQ音乐, kugou=酷狗音乐, xiami=虾米音乐, baidu=百度音乐 + server?: "netease" | "tencent" | "kugou" | "xiami" | "baidu"; + + // 类型:song=单曲, playlist=歌单, album=专辑, search=搜索, artist=艺术家 + type?: "song" | "playlist" | "album" | "search" | "artist"; + + // 歌单/专辑/单曲 ID 或搜索关键词 + id?: string; + + // 认证 token(可选) + auth?: string; + + // 备用 API 配置(当主 API 失败时使用) + fallbackApis?: string[]; + + // MetingJS 脚本路径(默认使用 CDN,也可配置为本地路径) + jsPath?: string; + }; + + // 本地音乐配置(当 mode 为 'local' 时使用) + local?: { + playlist?: Array<{ + name: string; // 歌曲名称 + artist: string; // 艺术家 + url: string; // 音乐文件路径(相对于 public 目录) + cover?: string; // 封面图片路径(相对于 public 目录) + lrc?: string; // 歌词内容,支持 LRC 格式 + }>; + }; + + // APlayer 配置选项 + player?: { + // 是否固定模式(固定在页面底部) + fixed?: boolean; + + // 是否迷你模式 + mini?: boolean; + + // 是否自动播放 + autoplay?: boolean; + + // 主题色 + theme?: string; + + // 循环模式:'all'=列表循环, 'one'=单曲循环, 'none'=不循环 + loop?: "all" | "one" | "none"; + + // 播放顺序:'list'=列表顺序, 'random'=随机播放 + order?: "list" | "random"; + + // 预加载:'none'=不预加载, 'metadata'=预加载元数据, 'auto'=自动 + preload?: "none" | "metadata" | "auto"; + + // 默认音量 (0-1) + volume?: number; + + // 是否互斥播放(同时只能播放一个播放器) + mutex?: boolean; + + // 歌词类型:0=不显示, 1=显示(需要提供 lrc 字段), 2=显示(从 HTML 内容读取), 3=异步加载(从 API 获取) + lrcType?: 0 | 1 | 2 | 3; + + // 歌词是否默认隐藏(当 lrcType 不为 0 时,可以通过此选项控制初始显示状态) + lrcHidden?: boolean; + + // 播放列表是否默认折叠 + listFolded?: boolean; + + // 播放列表最大高度 + listMaxHeight?: string; + + // localStorage 存储键名 + storageName?: string; + }; + + // 响应式配置 + responsive?: { + // 移动端配置 + mobile?: { + // 在移动端是否隐藏 + hide?: boolean; + + // 移动端断点(小于此宽度时应用移动端配置) + breakpoint?: number; + }; + }; +}; + +// 赞助方式类型 +export type SponsorMethod = { + name: string; // 赞助方式名称,如 "支付宝"、"微信"、"PayPal" + icon?: string; // 图标名称(Iconify 格式),如 "fa6-brands:alipay" + qrCode?: string; // 收款码图片路径(相对于 public 目录),可选 + link?: string; // 赞助链接 URL,可选。如果提供,会显示跳转按钮 + description?: string; // 描述文本 + enabled: boolean; // 是否启用 +}; + +// 赞助者列表项 +export type SponsorItem = { + name: string; // 赞助者名称,如果想显示匿名,可以直接设置为"匿名"或使用 i18n + amount?: string; // 赞助金额(可选) + date?: string; // 赞助日期(可选,ISO 格式) + message?: string; // 留言(可选) +}; + +// 赞助配置 +export type SponsorConfig = { + title?: string; // 页面标题,默认使用 i18n + description?: string; // 页面描述文本 + usage?: string; // 赞助用途说明 + methods: SponsorMethod[]; // 赞助方式列表 + sponsors?: SponsorItem[]; // 赞助者列表(可选) + showSponsorsList?: boolean; // 是否显示赞助者列表,默认 true + showButtonInPost?: boolean; // 是否在文章详情页底部显示赞助按钮,默认 true +}; diff --git a/src/utils/code-copy-utils.ts b/src/utils/code-copy-utils.ts new file mode 100644 index 0000000..585f01d --- /dev/null +++ b/src/utils/code-copy-utils.ts @@ -0,0 +1,151 @@ +/** + * 代码复制工具函数 + */ + +/** + * 从代码块中提取代码文本 + * @param codeElement 代码元素 + * @returns 提取的代码文本 + */ +export function extractCodeText(codeElement: Element): string { + // 获取所有代码行元素 + const lineElements = codeElement.querySelectorAll("span.line"); + if (lineElements.length > 0) { + // 对于有行结构的代码块,精确处理每一行 + const lines: string[] = []; + for (let i = 0; i < lineElements.length; i++) { + const lineElement = lineElements[i]; + // 直接获取文本内容,不添加额外处理 + const lineText = lineElement.textContent || ""; + lines.push(lineText); + } + // 重要:使用 \n 连接行,而不是 \n\n 或其他方式 + return lines.join("\n"); + } + // 对于没有行结构的代码块 + const codeElements = codeElement.querySelectorAll(".code:not(summary *)"); + if (codeElements.length > 0) { + const lines: string[] = []; + for (let i = 0; i < codeElements.length; i++) { + const el = codeElements[i]; + const lineText = el.textContent || ""; + lines.push(lineText); + } + return lines.join("\n"); + } + // 最后回退到直接使用整个code元素的文本内容 + return codeElement.textContent || ""; +} + +/** + * 处理连续空行 + * @param code 原始代码文本 + * @returns 处理后的代码文本 + */ +export function processEmptyLines(code: string): string { + return code.replace(/\n\n\n+/g, (match) => { + // 计算连续换行符的数量 + const newlineCount = match.length; + // 计算空行数量(换行符数量减1) + const emptyLineCount = newlineCount - 1; + + // 偶数空行:除以2 + // 奇数空行:(空行数+1)/2 向下取整 + let resultEmptyLines: number; + if (emptyLineCount % 2 === 0) { + // 偶数 + resultEmptyLines = emptyLineCount / 2; + } else { + // 奇数 + resultEmptyLines = Math.floor((emptyLineCount + 1) / 2); + } + + // 至少保留一个空行 + if (resultEmptyLines < 1) resultEmptyLines = 1; + + // 返回对应数量的换行符 + return "\n".repeat(resultEmptyLines + 1); + }); +} + +/** + * 复制文本到剪贴板 + * @param text 要复制的文本 + * @returns Promise 复制是否成功 + */ +export async function copyToClipboard(text: string): Promise { + try { + // 优先使用 Clipboard API + await navigator.clipboard.writeText(text); + return true; + } catch (clipboardErr) { + console.warn("Clipboard API 失败,尝试备用方案:", clipboardErr); + + // 备用方案:使用 document.execCommand + const textArea = document.createElement("textarea"); + textArea.value = text; + textArea.style.position = "fixed"; + textArea.style.left = "-999999px"; + textArea.style.top = "-999999px"; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + + try { + // biome-ignore lint/suspicious/noExplicitAny: Deprecated API fallback + const successful = (document as any).execCommand("copy"); + if (!successful) { + throw new Error("execCommand 返回 false"); + } + return true; + } catch (execErr) { + console.error("execCommand 也失败了:", execErr); + throw new Error("所有复制方法都失败了"); + } finally { + document.body.removeChild(textArea); + } + } +} + +/** + * 处理代码复制按钮点击事件 + * @param target 点击的按钮元素 + */ +export async function handleCodeCopy(target: Element): Promise { + const preEle = target.closest("pre"); + const codeEle = preEle?.querySelector("code"); + + if (!codeEle) { + console.warn("未找到代码元素"); + return; + } + + // 提取代码文本 + let code = extractCodeText(codeEle); + + // 处理连续空行 + code = processEmptyLines(code); + + try { + // 复制到剪贴板 + await copyToClipboard(code); + + // 处理成功状态 + const timeoutId = target.getAttribute("data-timeout-id"); + if (timeoutId) { + clearTimeout(Number.parseInt(timeoutId, 10)); + } + + target.classList.add("success"); + + // 设置新的timeout并保存ID到按钮的自定义属性中 + const newTimeoutId = setTimeout(() => { + target.classList.remove("success"); + }, 1000); + + target.setAttribute("data-timeout-id", newTimeoutId.toString()); + } catch (err) { + console.error("复制失败:", err); + // 可以在这里添加用户提示 + } +} diff --git a/src/utils/content-utils.ts b/src/utils/content-utils.ts new file mode 100644 index 0000000..179eddd --- /dev/null +++ b/src/utils/content-utils.ts @@ -0,0 +1,119 @@ +import { type CollectionEntry, getCollection } from "astro:content"; +import I18nKey from "@i18n/i18nKey"; +import { i18n } from "@i18n/translation"; +import { getCategoryUrl } from "@utils/url-utils"; + +// // Retrieve posts and sort them by publication date +async function getRawSortedPosts() { + const allBlogPosts = await getCollection("posts", ({ data }) => { + return import.meta.env.PROD ? data.draft !== true : true; + }); + + const sorted = allBlogPosts.sort((a, b) => { + // 首先按置顶状态排序,置顶文章在前 + if (a.data.pinned && !b.data.pinned) return -1; + if (!a.data.pinned && b.data.pinned) return 1; + + // 如果置顶状态相同,则按发布日期排序 + const dateA = new Date(a.data.published); + const dateB = new Date(b.data.published); + return dateA > dateB ? -1 : 1; + }); + return sorted; +} + +export async function getSortedPosts() { + const sorted = await getRawSortedPosts(); + + for (let i = 1; i < sorted.length; i++) { + sorted[i].data.nextSlug = sorted[i - 1].id; + sorted[i].data.nextTitle = sorted[i - 1].data.title; + } + for (let i = 0; i < sorted.length - 1; i++) { + sorted[i].data.prevSlug = sorted[i + 1].id; + sorted[i].data.prevTitle = sorted[i + 1].data.title; + } + + return sorted; +} +export type PostForList = { + id: string; + data: CollectionEntry<"posts">["data"]; +}; +export async function getSortedPostsList(): Promise { + const sortedFullPosts = await getRawSortedPosts(); + + // delete post.body + const sortedPostsList = sortedFullPosts.map((post) => ({ + id: post.id, + data: post.data, + })); + + return sortedPostsList; +} +export type Tag = { + name: string; + count: number; +}; + +export async function getTagList(): Promise { + const allBlogPosts = await getCollection<"posts">("posts", ({ data }) => { + return import.meta.env.PROD ? data.draft !== true : true; + }); + + const countMap: { [key: string]: number } = {}; + allBlogPosts.forEach((post: { data: { tags: string[] } }) => { + post.data.tags.forEach((tag: string) => { + if (!countMap[tag]) countMap[tag] = 0; + countMap[tag]++; + }); + }); + + // sort tags + const keys: string[] = Object.keys(countMap).sort((a, b) => { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + + return keys.map((key) => ({ name: key, count: countMap[key] })); +} + +export type Category = { + name: string; + count: number; + url: string; +}; + +export async function getCategoryList(): Promise { + const allBlogPosts = await getCollection<"posts">("posts", ({ data }) => { + return import.meta.env.PROD ? data.draft !== true : true; + }); + const count: { [key: string]: number } = {}; + allBlogPosts.forEach((post: { data: { category: string | null } }) => { + if (!post.data.category) { + const ucKey = i18n(I18nKey.uncategorized); + count[ucKey] = count[ucKey] ? count[ucKey] + 1 : 1; + return; + } + + const categoryName = + typeof post.data.category === "string" + ? post.data.category.trim() + : String(post.data.category).trim(); + + count[categoryName] = count[categoryName] ? count[categoryName] + 1 : 1; + }); + + const lst = Object.keys(count).sort((a, b) => { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + + const ret: Category[] = []; + for (const c of lst) { + ret.push({ + name: c, + count: count[c], + url: getCategoryUrl(c), + }); + } + return ret; +} diff --git a/src/utils/date-utils.ts b/src/utils/date-utils.ts new file mode 100644 index 0000000..5794480 --- /dev/null +++ b/src/utils/date-utils.ts @@ -0,0 +1,55 @@ +import { siteConfig } from "../config"; + +export function formatDateToYYYYMMDD(date: Date): string { + return date.toISOString().substring(0, 10); +} + +// 国际化日期格式化函数 +export function formatDateI18n( + dateInput: Date | string, + includeTime?: boolean, +): string { + const date = typeof dateInput === "string" ? new Date(dateInput) : dateInput; + const lang = siteConfig.lang || "en"; + + // 根据语言设置不同的日期格式 + const options: Intl.DateTimeFormatOptions = { + year: "numeric", + month: "long", + day: "numeric", + }; + + if (includeTime) { + options.hour = "2-digit"; + options.minute = "2-digit"; + options.second = "2-digit"; + } + + // 语言代码映射 + const localeMap: Record = { + zh_CN: "zh-CN", + zh_TW: "zh-TW", + en: "en-US", + ja: "ja-JP", + ko: "ko-KR", + es: "es-ES", + th: "th-TH", + vi: "vi-VN", + tr: "tr-TR", + id: "id-ID", + fr: "fr-FR", + de: "de-DE", + ru: "ru-RU", + ar: "ar-SA", + }; + + const locale = localeMap[lang] || "en-US"; + return includeTime + ? date.toLocaleString(locale, options) + : date.toLocaleDateString(locale, options); +} + +// 国际化日期时间格式化函数(带时分秒) +export function formatDateI18nWithTime(dateInput: Date | string): string { + return formatDateI18n(dateInput, true); +} diff --git a/src/utils/icon-loader.ts b/src/utils/icon-loader.ts new file mode 100644 index 0000000..5efb56e --- /dev/null +++ b/src/utils/icon-loader.ts @@ -0,0 +1,121 @@ +/** + * 图标加载管理器 + * 负责处理图标的加载状态显示 + */ + +export function initIconLoader() { + // 初始化单个图标容器 + function initContainer(container: Element) { + if (container.hasAttribute("data-icon-initialized")) return; + container.setAttribute("data-icon-initialized", "true"); + + const loadingIndicator = container.querySelector( + "[data-loading-indicator]", + ) as HTMLElement; + const iconElement = container.querySelector( + "[data-icon-element]", + ) as HTMLElement; + const iconName = iconElement?.getAttribute("icon"); + + if (!loadingIndicator || !iconElement) return; + + // 检查图标是否已经加载 + function checkIconLoaded() { + const hasContent = + iconElement.shadowRoot && iconElement.shadowRoot.children.length > 0; + + if (hasContent) { + showIcon(); + return true; + } + return false; + } + + // 显示图标,隐藏加载指示器 + function showIcon() { + loadingIndicator.style.display = "none"; + iconElement.classList.remove("opacity-0"); + iconElement.classList.add("opacity-100"); + } + + // 显示加载指示器,隐藏图标 + function showLoading() { + loadingIndicator.style.display = "inline-flex"; + iconElement.classList.remove("opacity-100"); + iconElement.classList.add("opacity-0"); + } + + // 初始状态 + showLoading(); + + // 监听图标加载事件 + iconElement.addEventListener("load", () => { + showIcon(); + }); + + // 监听图标加载错误 + iconElement.addEventListener("error", () => { + // 保持显示fallback + if (iconName) { + console.warn(`Failed to load icon: ${iconName}`); + } + }); + + // 使用MutationObserver监听shadow DOM变化 + if (window.MutationObserver) { + const observer = new MutationObserver(() => { + if (checkIconLoaded()) { + observer.disconnect(); + } + }); + + // 监听iconify-icon元素的变化 + observer.observe(iconElement, { + childList: true, + subtree: true, + attributes: true, + }); + + // 设置超时,避免无限等待 + setTimeout(() => { + observer.disconnect(); + if (!checkIconLoaded()) { + // console.warn(`Icon load timeout: ${iconName}`); + } + }, 5000); + } + + // 立即检查一次(可能已经加载完成) + setTimeout(() => { + checkIconLoaded(); + }, 100); + } + + // 初始化页面上现有的图标 + document.querySelectorAll("[data-icon-container]").forEach(initContainer); + + // 监听新添加的图标 + if (window.MutationObserver) { + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((node) => { + if (node.nodeType === Node.ELEMENT_NODE) { + const el = node as Element; + if (el.hasAttribute?.("data-icon-container")) { + initContainer(el); + } else { + el.querySelectorAll("[data-icon-container]").forEach( + initContainer, + ); + } + } + }); + }); + }); + + observer.observe(document.body, { + childList: true, + subtree: true, + }); + } +} diff --git a/src/utils/image-utils.ts b/src/utils/image-utils.ts new file mode 100644 index 0000000..9aecb2e --- /dev/null +++ b/src/utils/image-utils.ts @@ -0,0 +1,164 @@ +import { coverImageConfig } from "@/config/coverImageConfig"; + +const { randomCoverImage } = coverImageConfig; + +/** + * 处理文章封面图 + * 当image字段为"api"时,从配置的随机图API获取图片 + * @param image - 文章frontmatter中的image字段值 + * @param seed - 用于生成随机图的种子(通常使用文章slug或id) + * @returns 处理后的图片URL + */ +export async function processCoverImage( + image: string | undefined, + seed?: string, +): Promise { + // 如果image不存在或为空,直接返回 + if (!image || image === "") { + return ""; + } + + // 如果image不是"api",直接返回原始值 + if (image !== "api") { + return image; + } + + // 如果未启用随机图功能,直接返回空字符串(不显示封面,也不显示备用图) + if ( + !randomCoverImage.enable || + !randomCoverImage.apis || + randomCoverImage.apis.length === 0 + ) { + return ""; + } + + try { + // 随机选择一个API + const randomApi = + randomCoverImage.apis[ + Math.floor(Math.random() * randomCoverImage.apis.length) + ]; + + // 生成seed值:使用文章slug或时间戳 + const seedValue = seed || Date.now().toString(); + + // 如果API中包含{seed}占位符,替换它 + let apiUrl = randomApi.replace(/{seed}/g, seedValue); + + // 如果API中没有{seed}占位符,需要添加随机参数确保每篇文章获取不同图片 + if (!randomApi.includes("{seed}")) { + // 将seed转换为数字hash(确保每个不同的slug产生不同的hash) + const hash = seedValue.split("").reduce((acc, char) => { + return ((acc << 5) - acc + char.charCodeAt(0)) | 0; + }, 0); + + // 添加查询参数来确保每篇文章获取不同的图片 + const separator = apiUrl.includes("?") ? "&" : "?"; + // 使用hash确保每篇文章有不同的URL(稳定且唯一,基于文章slug) + // 注意:如果API不支持查询参数来获取不同图片,可能需要配置支持seed占位符的API + apiUrl = `${apiUrl}${separator}v=${Math.abs(hash)}`; + } + + // 在构建时直接返回API URL(客户端会请求) + // 注意:如果API返回的是JSON格式,需要特殊处理 + return apiUrl; + } catch (error) { + console.warn("Failed to process random image API:", error); + // 即使出错,如果enable为false也不返回fallback,直接返回空字符串 + if (!randomCoverImage.enable) { + return ""; + } + return randomCoverImage.fallback || ""; + } +} + +/** + * 同步版本(用于不需要异步的场景) + * 当image字段为"api"时,返回第一个API URL,客户端会依次尝试所有API + */ +export function processCoverImageSync( + image: string | undefined, + seed?: string, +): string { + // 如果image不存在或为空,直接返回 + if (!image || image === "") { + return ""; + } + + // 如果image不是"api",直接返回原始值 + if (image !== "api") { + return image; + } + + // 如果未启用随机图功能,直接返回空字符串(不显示封面,也不显示备用图) + if ( + !randomCoverImage.enable || + !randomCoverImage.apis || + randomCoverImage.apis.length === 0 + ) { + return ""; + } + + try { + // 返回第一个API,客户端脚本会依次尝试所有API + const firstApi = randomCoverImage.apis[0]; + + // 生成seed值:使用文章slug或时间戳 + const seedValue = seed || Date.now().toString(); + + // 如果API中包含{seed}占位符,替换它 + let apiUrl = firstApi.replace(/{seed}/g, seedValue); + + // 如果API中没有{seed}占位符,需要添加随机参数确保每篇文章获取不同图片 + if (!firstApi.includes("{seed}")) { + // 将seed转换为数字hash(确保每个不同的slug产生不同的hash) + const hash = seedValue.split("").reduce((acc, char) => { + return ((acc << 5) - acc + char.charCodeAt(0)) | 0; + }, 0); + + // 添加查询参数来确保每篇文章获取不同的图片 + const separator = apiUrl.includes("?") ? "&" : "?"; + // 使用hash确保每篇文章有不同的URL(稳定且唯一,基于文章slug) + // 注意:如果API不支持查询参数来获取不同图片,可能需要配置支持seed占位符的API + apiUrl = `${apiUrl}${separator}v=${Math.abs(hash)}`; + } + + return apiUrl; + } catch (error) { + console.warn("Failed to process random image API:", error); + // 即使出错,如果enable为false也不返回fallback,直接返回空字符串 + if (!randomCoverImage.enable) { + return ""; + } + return randomCoverImage.fallback || ""; + } +} + +/** + * 生成所有API URL列表(用于客户端重试) + */ +export function generateApiUrls(seed?: string): string[] { + if ( + !randomCoverImage.enable || + !randomCoverImage.apis || + randomCoverImage.apis.length === 0 + ) { + return []; + } + + const seedValue = seed || Date.now().toString(); + const hash = seedValue.split("").reduce((acc, char) => { + return ((acc << 5) - acc + char.charCodeAt(0)) | 0; + }, 0); + + return randomCoverImage.apis.map((api) => { + let apiUrl = api.replace(/{seed}/g, seedValue); + + if (!api.includes("{seed}")) { + const separator = apiUrl.includes("?") ? "&" : "?"; + apiUrl = `${apiUrl}${separator}v=${Math.abs(hash)}`; + } + + return apiUrl; + }); +} diff --git a/src/utils/language-utils.ts b/src/utils/language-utils.ts new file mode 100644 index 0000000..8566012 --- /dev/null +++ b/src/utils/language-utils.ts @@ -0,0 +1,40 @@ +/** + * 获取语言的显示名称 + * @param langCode 语言代码(配置文件格式或翻译服务格式) + * @returns 语言的显示名称 + */ +export function getLanguageDisplayName(langCode: string): string { + const languageNames: Record = { + zh_CN: "简体中文", + zh_TW: "繁體中文", + en: "English", + ja: "日本語", + ko: "한국어", + es: "Español", + th: "ไทย", + vi: "Tiếng Việt", + tr: "Türkçe", + id: "Bahasa Indonesia", + fr: "Français", + de: "Deutsch", + ru: "Русский", + ar: "العربية", + // 翻译服务格式 + chinese_simplified: "简体中文", + chinese_traditional: "繁體中文", + english: "English", + japanese: "日本語", + korean: "한국어", + spanish: "Español", + thai: "ไทย", + vietnamese: "Tiếng Việt", + turkish: "Türkçe", + indonesian: "Bahasa Indonesia", + french: "Français", + german: "Deutsch", + russian: "Русский", + arabic: "العربية", + }; + + return languageNames[langCode] || langCode; +} diff --git a/src/utils/layout-utils.ts b/src/utils/layout-utils.ts new file mode 100644 index 0000000..081ce0d --- /dev/null +++ b/src/utils/layout-utils.ts @@ -0,0 +1,88 @@ +import { backgroundWallpaper } from "../config"; + +// 背景图片处理工具函数 +export const getBackgroundImages = () => { + const bgSrc = backgroundWallpaper.src; + + if ( + typeof bgSrc === "object" && + bgSrc !== null && + !Array.isArray(bgSrc) && + ("desktop" in bgSrc || "mobile" in bgSrc) + ) { + const srcObj = bgSrc as { + desktop?: string | string[]; + mobile?: string | string[]; + }; + return { + desktop: srcObj.desktop || srcObj.mobile || "", + mobile: srcObj.mobile || srcObj.desktop || "", + }; + } + // 如果是字符串,同时用于桌面端和移动端 + return { + desktop: bgSrc, + mobile: bgSrc, + }; +}; + +// 类型守卫函数 +export const isBannerSrcObject = ( + src: + | string + | string[] + | { desktop?: string | string[]; mobile?: string | string[] }, +): src is { desktop?: string | string[]; mobile?: string | string[] } => { + return ( + typeof src === "object" && + src !== null && + !Array.isArray(src) && + ("desktop" in src || "mobile" in src) + ); +}; + +// 获取默认背景图片 +export const getDefaultBackground = (): string => { + const src = backgroundWallpaper.src; + if (typeof src === "string") { + return src; + } + if (src && typeof src === "object" && !Array.isArray(src)) { + // 优先使用desktop,如果没有则使用mobile + const desktopSrc = src.desktop; + const mobileSrc = src.mobile; + if (typeof desktopSrc === "string") { + return desktopSrc; + } + if (typeof mobileSrc === "string") { + return mobileSrc; + } + } + return ""; +}; + +// 检查是否为首页 +export const isHomePage = (pathname: string): boolean => { + // 获取 base URL + const baseUrl = import.meta.env.BASE_URL || "/"; + const baseUrlNoSlash = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl; + + if (pathname === baseUrl) return true; + if (pathname === baseUrlNoSlash) return true; + if (pathname === "/") return true; + + return false; +}; + +// 获取横幅偏移量 +export const getBannerOffset = (position = "center") => { + const bannerOffsetByPosition = { + top: "100vh", + center: "50vh", + bottom: "0", + }; + return ( + bannerOffsetByPosition[position as keyof typeof bannerOffsetByPosition] || + "50vh" + ); +}; diff --git a/src/utils/navigation-utils.ts b/src/utils/navigation-utils.ts new file mode 100644 index 0000000..85a4a78 --- /dev/null +++ b/src/utils/navigation-utils.ts @@ -0,0 +1,172 @@ +/** + * 导航工具函数 + * 提供统一的页面导航功能,支持 Swup 无刷新跳转 + */ + +/** + * 导航到指定页面 + * @param url 目标页面URL + * @param options 导航选项 + */ +export function navigateToPage( + url: string, + options?: { + replace?: boolean; + force?: boolean; + }, +): void { + // 检查 URL 是否有效 + if (!url || typeof url !== "string") { + console.warn("navigateToPage: Invalid URL provided"); + return; + } + + // 如果是外部链接,直接跳转 + if ( + url.startsWith("http://") || + url.startsWith("https://") || + url.startsWith("//") + ) { + window.open(url, "_blank"); + return; + } + + // 如果是锚点链接,滚动到对应位置 + if (url.startsWith("#")) { + const element = document.getElementById(url.slice(1)); + if (element) { + element.scrollIntoView({ behavior: "smooth" }); + } + return; + } + + // 检查 Swup 是否可用 + if (typeof window !== "undefined" && window.swup) { + try { + // 使用 Swup 进行无刷新跳转 + if (options?.replace) { + window.swup.navigate(url, { history: false }); + } else { + window.swup.navigate(url); + } + } catch (error) { + console.error("Swup navigation failed:", error); + // 降级到普通跳转 + fallbackNavigation(url, options); + } + } else { + // Swup 不可用时的降级处理 + fallbackNavigation(url, options); + } +} + +/** + * 降级导航函数 + * 当 Swup 不可用时使用普通的页面跳转 + */ +function fallbackNavigation( + url: string, + options?: { + replace?: boolean; + force?: boolean; + }, +): void { + if (options?.replace) { + window.location.replace(url); + } else { + window.location.href = url; + } +} + +/** + * 检查 Swup 是否已准备就绪 + */ +export function isSwupReady(): boolean { + return typeof window !== "undefined" && !!window.swup; +} + +/** + * 等待 Swup 准备就绪 + * @param timeout 超时时间(毫秒) + */ +export function waitForSwup(timeout = 5000): Promise { + return new Promise((resolve) => { + if (isSwupReady()) { + resolve(true); + return; + } + + let timeoutId: NodeJS.Timeout; + + const checkSwup = () => { + if (isSwupReady()) { + clearTimeout(timeoutId); + document.removeEventListener("swup:enable", checkSwup); + resolve(true); + } + }; + + // 监听 Swup 启用事件 + document.addEventListener("swup:enable", checkSwup); + + // 设置超时 + timeoutId = setTimeout(() => { + document.removeEventListener("swup:enable", checkSwup); + resolve(false); + }, timeout); + }); +} + +/** + * 预加载页面 + * @param url 要预加载的页面URL + */ +export function preloadPage(url: string): void { + if (!url || typeof url !== "string") { + return; + } + + // 如果 Swup 可用,使用其预加载功能 + if (isSwupReady() && window.swup.preload) { + try { + window.swup.preload(url); + } catch (error) { + console.warn("Failed to preload page:", error); + } + } +} + +/** + * 获取当前页面路径 + */ +export function getCurrentPath(): string { + return typeof window !== "undefined" ? window.location.pathname : ""; +} + +/** + * 检查是否为首页 + */ +export function isHomePage(): boolean { + const path = getCurrentPath(); + return path === "/" || path === ""; +} + +/** + * 检查是否为文章页面 + */ +export function isPostPage(): boolean { + const path = getCurrentPath(); + return path.startsWith("/posts/"); +} + +/** + * 检查两个路径是否相等 + */ +export function pathsEqual(path1: string, path2: string): boolean { + // 标准化路径(移除末尾斜杠) + const normalize = (path: string) => { + return path.endsWith("/") && path.length > 1 ? path.slice(0, -1) : path; + }; + + return normalize(path1) === normalize(path2); +} diff --git a/src/utils/responsive-utils.ts b/src/utils/responsive-utils.ts new file mode 100644 index 0000000..2cffa7e --- /dev/null +++ b/src/utils/responsive-utils.ts @@ -0,0 +1,296 @@ +import { sidebarLayoutConfig } from "../config"; +import { widgetManager } from "./widget-manager"; + +// 响应式侧边栏配置 +export const getResponsiveSidebarConfig = (isPostPage = false) => { + const globalSidebarEnabled = sidebarLayoutConfig.enable; + let sidebarPosition = sidebarLayoutConfig.position || "left"; + + // 如果配置了在文章详情页显示右侧边栏,且当前是文章详情页,则强制使用双侧边栏模式 + if ( + sidebarPosition === "left" && + isPostPage && + sidebarLayoutConfig.showRightSidebarOnPostPage + ) { + sidebarPosition = "both"; + } + + const isBothSidebars = sidebarPosition === "both"; + + return { + globalSidebarEnabled, + sidebarPosition, + isBothSidebars, + mobileShowSidebar: + globalSidebarEnabled && widgetManager.shouldShowSidebar("mobile"), + tabletShowSidebar: + globalSidebarEnabled && widgetManager.shouldShowSidebar("tablet"), + desktopShowSidebar: + globalSidebarEnabled && widgetManager.shouldShowSidebar("desktop"), + // 检查左右侧边栏是否有组件 + hasLeftComponents: + isBothSidebars && widgetManager.hasComponentsInSidebar("left"), + hasRightComponents: + isBothSidebars && widgetManager.hasComponentsInSidebar("right"), + // 检查各设备上左右侧边栏是否有可见组件 + hasLeftComponentsMobile: + isBothSidebars && + widgetManager.hasVisibleComponentsInSidebar("left", "mobile"), + hasLeftComponentsTablet: + isBothSidebars && + widgetManager.hasVisibleComponentsInSidebar("left", "tablet"), + hasLeftComponentsDesktop: + isBothSidebars && + widgetManager.hasVisibleComponentsInSidebar("left", "desktop"), + hasRightComponentsMobile: + isBothSidebars && + widgetManager.hasVisibleComponentsInSidebar("right", "mobile"), + hasRightComponentsTablet: + isBothSidebars && + widgetManager.hasVisibleComponentsInSidebar("right", "tablet"), + hasRightComponentsDesktop: + isBothSidebars && + widgetManager.hasVisibleComponentsInSidebar("right", "desktop"), + }; +}; + +// 生成网格布局类名 +export const generateGridClasses = ( + config: ReturnType, +) => { + const { + mobileShowSidebar, + tabletShowSidebar, + desktopShowSidebar, + isBothSidebars, + hasLeftComponentsMobile, + hasLeftComponentsTablet, + hasLeftComponentsDesktop, + hasRightComponentsMobile, + hasRightComponentsTablet, + hasRightComponentsDesktop, + } = config; + + let gridCols = ""; + + if (isBothSidebars) { + // 双侧边栏布局 - 根据各设备上实际可见组件决定布局 + // 移动端 + let mobileGrid = "grid-cols-1"; + if ( + mobileShowSidebar && + hasLeftComponentsMobile && + hasRightComponentsMobile + ) { + mobileGrid = "grid-cols-1"; + } else if ( + mobileShowSidebar && + (hasLeftComponentsMobile || hasRightComponentsMobile) + ) { + mobileGrid = "grid-cols-1"; + } + + // 平板端 + let tabletGrid = "md:grid-cols-1"; + if ( + tabletShowSidebar && + hasLeftComponentsTablet && + hasRightComponentsTablet + ) { + tabletGrid = "md:grid-cols-[17.5rem_1fr_17.5rem]"; + } else if (tabletShowSidebar && hasLeftComponentsTablet) { + tabletGrid = "md:grid-cols-[17.5rem_1fr]"; + } else if (tabletShowSidebar && hasRightComponentsTablet) { + tabletGrid = "md:grid-cols-[1fr_17.5rem]"; + } + + // 桌面端 + let desktopGrid = "lg:grid-cols-1"; + if ( + desktopShowSidebar && + hasLeftComponentsDesktop && + hasRightComponentsDesktop + ) { + desktopGrid = "lg:grid-cols-[17.5rem_1fr_17.5rem]"; + } else if (desktopShowSidebar && hasLeftComponentsDesktop) { + desktopGrid = "lg:grid-cols-[17.5rem_1fr]"; + } else if (desktopShowSidebar && hasRightComponentsDesktop) { + desktopGrid = "lg:grid-cols-[1fr_17.5rem]"; + } + + gridCols = `${mobileGrid} ${tabletGrid} ${desktopGrid}`.trim(); + } else { + // 单侧边栏布局(左侧) + gridCols = ` + grid-cols-1 + ${tabletShowSidebar ? "md:grid-cols-[17.5rem_1fr]" : "md:grid-cols-1"} + ${desktopShowSidebar ? "lg:grid-cols-[17.5rem_1fr]" : "lg:grid-cols-1"} + ` + .trim() + .replace(/\s+/g, " "); + } + + return { gridCols }; +}; + +// 生成侧边栏类名(用于单侧边栏或双侧边栏中的左侧) +export const generateSidebarClasses = ( + config: ReturnType, +) => { + const { + mobileShowSidebar, + tabletShowSidebar, + desktopShowSidebar, + isBothSidebars, + } = config; + + if (isBothSidebars) { + // 左侧边栏 + return ` + mb-4 row-start-2 row-end-3 col-span-2 onload-animation + ${mobileShowSidebar ? "block" : "hidden"} + ${tabletShowSidebar ? "md:block md:row-start-1 md:row-end-2 md:max-w-[17.5rem] md:col-start-1 md:col-end-2" : "md:hidden"} + ${desktopShowSidebar ? "lg:block lg:row-start-1 lg:row-end-2 lg:max-w-[17.5rem] lg:col-start-1 lg:col-end-2" : "lg:hidden"} + ` + .trim() + .replace(/\s+/g, " "); + } + + // 单侧边栏(左侧) + return ` + mb-4 row-start-2 row-end-3 col-span-2 onload-animation + ${mobileShowSidebar ? "block" : "hidden"} + ${tabletShowSidebar ? "md:block md:row-start-1 md:row-end-2 md:max-w-[17.5rem] md:col-start-1 md:col-end-2" : "md:hidden"} + ${desktopShowSidebar ? "lg:block lg:row-start-1 lg:row-end-2 lg:max-w-[17.5rem] lg:col-start-1 lg:col-end-2" : "lg:hidden"} + ` + .trim() + .replace(/\s+/g, " "); +}; + +// 生成右侧边栏类名(仅用于双侧边栏) +export const generateRightSidebarClasses = ( + config: ReturnType, +) => { + const { + mobileShowSidebar, + tabletShowSidebar, + desktopShowSidebar, + hasLeftComponentsTablet, + hasLeftComponentsDesktop, + hasRightComponentsMobile, + hasRightComponentsTablet, + hasRightComponentsDesktop, + } = config; + + // 根据是否有左侧边栏决定列位置 + const tabletCol = hasLeftComponentsTablet + ? "md:col-start-3 md:col-end-4" + : "md:col-start-2 md:col-end-3"; + const desktopCol = hasLeftComponentsDesktop + ? "lg:col-start-3 lg:col-end-4" + : "lg:col-start-2 lg:col-end-3"; + + // 根据是否有可见组件决定显示 + const mobileDisplay = + mobileShowSidebar && hasRightComponentsMobile ? "block" : "hidden"; + const tabletDisplay = + tabletShowSidebar && hasRightComponentsTablet + ? `md:block md:row-start-1 md:row-end-2 md:max-w-[17.5rem] ${tabletCol}` + : "md:hidden"; + const desktopDisplay = + desktopShowSidebar && hasRightComponentsDesktop + ? `lg:block lg:row-start-1 lg:row-end-2 lg:max-w-[17.5rem] ${desktopCol}` + : "lg:hidden"; + + return ` + mb-4 row-start-3 row-end-4 col-span-2 onload-animation + ${mobileDisplay} + ${tabletDisplay} + ${desktopDisplay} + ` + .trim() + .replace(/\s+/g, " "); +}; + +// 生成主内容类名 +export const generateMainContentClasses = ( + config: ReturnType, +) => { + const { + mobileShowSidebar, + tabletShowSidebar, + desktopShowSidebar, + isBothSidebars, + hasLeftComponentsMobile, + hasLeftComponentsTablet, + hasLeftComponentsDesktop, + hasRightComponentsMobile, + hasRightComponentsTablet, + hasRightComponentsDesktop, + } = config; + + if (isBothSidebars) { + // 双侧边栏布局:主内容区位置根据各设备上实际可见组件调整 + let mobileCol = "col-span-1"; + let tabletCol = "md:col-span-1"; + let desktopCol = "lg:col-span-1"; + + // 移动端 + if ( + mobileShowSidebar && + hasLeftComponentsMobile && + hasRightComponentsMobile + ) { + mobileCol = "col-span-2"; + } else if ( + mobileShowSidebar && + (hasLeftComponentsMobile || hasRightComponentsMobile) + ) { + mobileCol = "col-span-2"; + } + + // 平板端 + if ( + tabletShowSidebar && + hasLeftComponentsTablet && + hasRightComponentsTablet + ) { + // 三栏布局:主内容在中间 + tabletCol = "md:col-start-2 md:col-end-3"; + } else if (tabletShowSidebar && hasLeftComponentsTablet) { + // 左侧边栏+主内容 + tabletCol = "md:col-start-2 md:col-end-3"; + } else if (tabletShowSidebar && hasRightComponentsTablet) { + // 主内容+右侧边栏 + tabletCol = "md:col-start-1 md:col-end-2"; + } + + // 桌面端 + if ( + desktopShowSidebar && + hasLeftComponentsDesktop && + hasRightComponentsDesktop + ) { + // 三栏布局:主内容在中间 + desktopCol = "lg:col-start-2 lg:col-end-3"; + } else if (desktopShowSidebar && hasLeftComponentsDesktop) { + // 左侧边栏+主内容 + desktopCol = "lg:col-start-2 lg:col-end-3"; + } else if (desktopShowSidebar && hasRightComponentsDesktop) { + // 主内容+右侧边栏 + desktopCol = "lg:col-start-1 lg:col-end-2"; + } + + return `transition-swup-fade overflow-hidden w-full ${mobileCol} ${tabletCol} ${desktopCol}`.trim(); + } + + // 单侧边栏(左侧):主内容在右边 + return ` + transition-swup-fade overflow-hidden w-full + ${mobileShowSidebar ? "col-span-2" : "col-span-1"} + ${tabletShowSidebar ? "md:col-start-2 md:col-end-3" : "md:col-span-1"} + ${desktopShowSidebar ? "lg:col-start-2 lg:col-end-3" : "lg:col-span-1"} + ` + .trim() + .replace(/\s+/g, " "); +}; diff --git a/src/utils/sakura-manager.ts b/src/utils/sakura-manager.ts new file mode 100644 index 0000000..4d71f18 --- /dev/null +++ b/src/utils/sakura-manager.ts @@ -0,0 +1,395 @@ +import type { SakuraConfig } from "../types/config"; + +// 樱花对象类 +class Sakura { + x: number; + y: number; + s: number; + r: number; + a: number; + fn: { + x: (x: number, y: number) => number; + y: (x: number, y: number) => number; + r: (r: number) => number; + a: (a: number) => number; + }; + idx: number; + img: HTMLImageElement; + limitArray: number[]; + config: SakuraConfig; + + constructor( + x: number, + y: number, + s: number, + r: number, + a: number, + fn: { + x: (x: number, y: number) => number; + y: (x: number, y: number) => number; + r: (r: number) => number; + a: (a: number) => number; + }, + idx: number, + img: HTMLImageElement, + limitArray: number[], + config: SakuraConfig, + ) { + this.x = x; + this.y = y; + this.s = s; + this.r = r; + this.a = a; + this.fn = fn; + this.idx = idx; + this.img = img; + this.limitArray = limitArray; + this.config = config; + } + + draw(cxt: CanvasRenderingContext2D) { + cxt.save(); + cxt.translate(this.x, this.y); + cxt.rotate(this.r); + cxt.globalAlpha = this.a; + cxt.drawImage(this.img, 0, 0, 40 * this.s, 40 * this.s); + cxt.restore(); + } + + update() { + this.x = this.fn.x(this.x, this.y); + this.y = this.fn.y(this.y, this.y); + this.r = this.fn.r(this.r); + this.a = this.fn.a(this.a); + + // 如果樱花越界或完全透明,重新调整位置 + if ( + this.x > window.innerWidth || + this.x < 0 || + this.y > window.innerHeight || + this.y < 0 || + this.a <= 0 + ) { + // 如果樱花不做限制 + if (this.limitArray[this.idx] === -1) { + this.resetPosition(); + } + // 否则樱花有限制 + else { + if (this.limitArray[this.idx] > 0) { + this.resetPosition(); + this.limitArray[this.idx]--; + } + } + } + } + + private resetPosition() { + this.fn.r = getRandom("fnr", this.config); + if (Math.random() > 0.4) { + this.x = getRandom("x", this.config); + this.y = 0; + this.s = getRandom("s", this.config); + this.r = getRandom("r", this.config); + this.a = getRandom("a", this.config); + } else { + this.x = window.innerWidth; + this.y = getRandom("y", this.config); + this.s = getRandom("s", this.config); + this.r = getRandom("r", this.config); + this.a = getRandom("a", this.config); + } + } +} + +// 樱花列表类 +class SakuraList { + list: Sakura[]; + + constructor() { + this.list = []; + } + + push(sakura: Sakura) { + this.list.push(sakura); + } + + update() { + for (let i = 0, len = this.list.length; i < len; i++) { + this.list[i].update(); + } + } + + draw(cxt: CanvasRenderingContext2D) { + for (let i = 0, len = this.list.length; i < len; i++) { + this.list[i].draw(cxt); + } + } + + get(i: number) { + return this.list[i]; + } + + size() { + return this.list.length; + } +} + +// 获取随机值的函数 +function getRandom( + option: "x" | "y" | "s" | "r" | "a", + config: SakuraConfig, +): number; +function getRandom( + option: "fnx" | "fny" | "fnr" | "fna", + config: SakuraConfig, +): (...args: number[]) => number; +function getRandom( + option: string, + config: SakuraConfig, +): number | ((...args: number[]) => number) { + let ret: number | ((...args: number[]) => number) = 0; + let random: number; + + switch (option) { + case "x": + ret = Math.random() * window.innerWidth; + break; + case "y": + ret = Math.random() * window.innerHeight; + break; + case "s": + ret = + config.size.min + Math.random() * (config.size.max - config.size.min); + break; + case "r": + ret = Math.random() * 6; + break; + case "a": + ret = + config.opacity.min + + Math.random() * (config.opacity.max - config.opacity.min); + break; + case "fnx": + random = + config.speed.horizontal.min + + Math.random() * + (config.speed.horizontal.max - config.speed.horizontal.min); + ret = (x: number, _y: number) => x + random; + break; + case "fny": + random = + config.speed.vertical.min + + Math.random() * (config.speed.vertical.max - config.speed.vertical.min); + ret = (_x: number, y: number) => y + random; + break; + case "fnr": + ret = (r: number) => r + config.speed.rotation; + break; + case "fna": + ret = (alpha: number) => alpha - config.speed.fadeSpeed * 0.01; + break; + } + return ret; +} + +// 樱花管理器类 +export class SakuraManager { + private config: SakuraConfig; + private canvas: HTMLCanvasElement | null = null; + private ctx: CanvasRenderingContext2D | null = null; + private sakuraList: SakuraList | null = null; + private animationId: number | null = null; + private img: HTMLImageElement | null = null; + private isRunning = false; + + constructor(config: SakuraConfig) { + this.config = config; + } + + // 初始化樱花特效 + async init(): Promise { + if (!this.config.enable || this.isRunning) { + return; + } + + // 创建图片对象 + this.img = new Image(); + this.img.src = "/sakura.png"; // 使用樱花图片 + + // 等待图片加载完成 + await new Promise((resolve, reject) => { + if (this.img) { + this.img.onload = () => resolve(); + this.img.onerror = () => + reject(new Error("Failed to load sakura image")); + } + }); + + this.createCanvas(); + this.createSakuraList(); + this.startAnimation(); + this.isRunning = true; + } + + // 创建画布 + private createCanvas(): void { + this.canvas = document.createElement("canvas"); + this.canvas.height = window.innerHeight; + this.canvas.width = window.innerWidth; + this.canvas.setAttribute( + "style", + `position: fixed; left: 0; top: 0; pointer-events: none; z-index: ${this.config.zIndex};`, + ); + this.canvas.setAttribute("id", "canvas_sakura"); + document.body.appendChild(this.canvas); + this.ctx = this.canvas.getContext("2d"); + + // 监听窗口大小变化 + window.addEventListener("resize", this.handleResize.bind(this)); + } + + // 创建樱花列表 + private createSakuraList(): void { + if (!this.img || !this.ctx) return; + + this.sakuraList = new SakuraList(); + const limitArray = new Array(this.config.sakuraNum).fill( + this.config.limitTimes, + ); + + for (let i = 0; i < this.config.sakuraNum; i++) { + const randomX = getRandom("x", this.config); + const randomY = getRandom("y", this.config); + const randomS = getRandom("s", this.config); + const randomR = getRandom("r", this.config); + const randomA = getRandom("a", this.config); + const randomFnx = getRandom("fnx", this.config); + const randomFny = getRandom("fny", this.config); + const randomFnR = getRandom("fnr", this.config); + const randomFnA = getRandom("fna", this.config); + + const sakura = new Sakura( + randomX, + randomY, + randomS, + randomR, + randomA, + { + x: randomFnx, + y: randomFny, + r: randomFnR, + a: randomFnA, + }, + i, + this.img, + limitArray, + this.config, + ); + + sakura.draw(this.ctx); + this.sakuraList.push(sakura); + } + } + + // 开始动画 + private startAnimation(): void { + if (!this.ctx || !this.canvas || !this.sakuraList) return; + + const animate = () => { + if (!this.ctx || !this.canvas || !this.sakuraList) return; + + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.sakuraList.update(); + this.sakuraList.draw(this.ctx); + this.animationId = requestAnimationFrame(animate); + }; + + this.animationId = requestAnimationFrame(animate); + } + + // 处理窗口大小变化 + private handleResize(): void { + if (this.canvas) { + this.canvas.width = window.innerWidth; + this.canvas.height = window.innerHeight; + } + } + + // 停止樱花特效 + stop(): void { + if (this.animationId) { + cancelAnimationFrame(this.animationId); + this.animationId = null; + } + + if (this.canvas) { + document.body.removeChild(this.canvas); + this.canvas = null; + } + + window.removeEventListener("resize", this.handleResize.bind(this)); + this.isRunning = false; + } + + // 切换樱花特效 + toggle(): void { + if (this.isRunning) { + this.stop(); + } else { + this.init(); + } + } + + // 更新配置 + updateConfig(newConfig: SakuraConfig): void { + const wasRunning = this.isRunning; + if (wasRunning) { + this.stop(); + } + this.config = newConfig; + if (wasRunning && newConfig.enable) { + this.init(); + } + } + + // 获取运行状态 + getIsRunning(): boolean { + return this.isRunning; + } +} + +// 创建全局樱花管理器实例 +let globalSakuraManager: SakuraManager | null = null; + +// 初始化樱花特效 +export function initSakura(config: SakuraConfig): void { + if (globalSakuraManager) { + globalSakuraManager.updateConfig(config); + } else { + globalSakuraManager = new SakuraManager(config); + if (config.enable) { + globalSakuraManager.init(); + } + } +} + +// 切换樱花特效 +export function toggleSakura(): void { + if (globalSakuraManager) { + globalSakuraManager.toggle(); + } +} + +// 停止樱花特效 +export function stopSakura(): void { + if (globalSakuraManager) { + globalSakuraManager.stop(); + globalSakuraManager = null; + } +} + +// 获取樱花特效运行状态 +export function getSakuraStatus(): boolean { + return globalSakuraManager ? globalSakuraManager.getIsRunning() : false; +} diff --git a/src/utils/setting-utils.ts b/src/utils/setting-utils.ts new file mode 100644 index 0000000..5b6a653 --- /dev/null +++ b/src/utils/setting-utils.ts @@ -0,0 +1,665 @@ +import { + DARK_MODE, + DEFAULT_THEME, + LIGHT_MODE, + SYSTEM_MODE, + WALLPAPER_BANNER, + WALLPAPER_NONE, + WALLPAPER_OVERLAY, +} from "@constants/constants"; +import type { LIGHT_DARK_MODE, WALLPAPER_MODE } from "@/types/config"; +import { + backgroundWallpaper, + expressiveCodeConfig, + siteConfig, +} from "../config"; +import { isHomePage as checkIsHomePage } from "./layout-utils"; + +// Declare global functions +declare global { + interface Window { + initSemifullScrollDetection?: () => void; + semifullScrollHandler?: () => void; + } +} + +export function getDefaultHue(): number { + const fallback = "250"; + // 检查是否在浏览器环境中 + if (typeof document === "undefined") { + return Number.parseInt(fallback, 10); + } + const configCarrier = document.getElementById("config-carrier"); + return Number.parseInt(configCarrier?.dataset.hue || fallback, 10); +} + +export function getDefaultTheme(): LIGHT_DARK_MODE { + // 如果配置文件中设置了 defaultMode,使用配置的值 + // 否则使用 DEFAULT_THEME(向后兼容) + return siteConfig.themeColor.defaultMode ?? DEFAULT_THEME; +} + +// 获取系统主题 +export function getSystemTheme(): LIGHT_DARK_MODE { + if (typeof window === "undefined") { + return LIGHT_MODE; + } + return window.matchMedia("(prefers-color-scheme: dark)").matches + ? DARK_MODE + : LIGHT_MODE; +} + +// 解析主题(如果是system模式,则获取系统主题) +export function resolveTheme(theme: LIGHT_DARK_MODE): LIGHT_DARK_MODE { + if (theme === SYSTEM_MODE) { + return getSystemTheme(); + } + return theme; +} + +export function getHue(): number { + // 先检查全局对象 + if (typeof window === "undefined" || !window.localStorage) { + return getDefaultHue(); + } + const stored = localStorage.getItem("hue"); + return stored ? Number.parseInt(stored, 10) : getDefaultHue(); +} + +export function setHue(hue: number): void { + // 先检查是否在浏览器环境 + if ( + typeof window === "undefined" || + !window.localStorage || + typeof document === "undefined" + ) { + return; + } + localStorage.setItem("hue", String(hue)); + const r = document.querySelector(":root") as HTMLElement; + if (!r) { + return; + } + r.style.setProperty("--hue", String(hue)); +} + +export function applyThemeToDocument(theme: LIGHT_DARK_MODE) { + // 检查是否在浏览器环境中 + if (typeof document === "undefined") { + return; + } + + // 解析主题 + const resolvedTheme = resolveTheme(theme); + + // 获取当前主题状态的完整信息 + const currentIsDark = document.documentElement.classList.contains("dark"); + const currentTheme = document.documentElement.getAttribute("data-theme"); + + // 计算目标主题状态 + let targetIsDark = false; // 初始化默认值 + switch (resolvedTheme) { + case LIGHT_MODE: + targetIsDark = false; + break; + case DARK_MODE: + targetIsDark = true; + break; + default: + // 处理默认情况,使用当前主题状态 + targetIsDark = currentIsDark; + break; + } + + // 检测是否真的需要主题切换: + // 1. dark类状态是否改变 + // 2. expressiveCode主题是否需要更新 + const needsThemeChange = currentIsDark !== targetIsDark; + const expectedTheme = targetIsDark + ? expressiveCodeConfig.darkTheme + : expressiveCodeConfig.lightTheme; + const needsCodeThemeUpdate = currentTheme !== expectedTheme; + + // 如果既不需要主题切换也不需要代码主题更新,直接返回 + if (!needsThemeChange && !needsCodeThemeUpdate) { + return; + } + + // 批量 DOM 操作,减少重绘 + if (needsThemeChange) { + // 添加过渡保护类(但会导致大量重绘,所以使用更轻量的方式) + // document.documentElement.classList.add("is-theme-transitioning"); + + // 直接切换主题,利用 CSS 变量的特性让浏览器优化过渡 + if (targetIsDark) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + } + + // Set the theme for Expressive Code based on current mode + if (needsCodeThemeUpdate) { + document.documentElement.setAttribute("data-theme", expectedTheme); + } +} + +// 系统主题监听器引用 +let systemThemeListener: + | ((e: MediaQueryListEvent | MediaQueryList) => void) + | null = null; + +export function setTheme(theme: LIGHT_DARK_MODE): void { + // 检查是否在浏览器环境中 + if ( + typeof localStorage === "undefined" || + typeof localStorage.setItem !== "function" + ) { + return; + } + + // 先应用主题 + applyThemeToDocument(theme); + + // 保存到localStorage + localStorage.setItem("theme", theme); + + // 如果切换到 system 模式,需要监听系统主题变化 + if (theme === SYSTEM_MODE) { + setupSystemThemeListener(); + } else { + // 如果切换其他模式,移除系统主题监听 + cleanupSystemThemeListener(); + } +} + +// 设置系统主题监听器 +export function setupSystemThemeListener() { + // 先清理之前的监听器 + cleanupSystemThemeListener(); + + if (typeof window === "undefined") { + return; + } + + const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); + + // 处理系统主题变化的回调 + const handleSystemThemeChange = (e: MediaQueryListEvent | MediaQueryList) => { + const isDark = e.matches; + const currentIsDark = document.documentElement.classList.contains("dark"); + + // 如果主题状态没有变化,直接返回 + if (currentIsDark === isDark) { + return; + } + + // 直接应用系统主题,不使用过渡保护类以避免大量重绘 + if (isDark) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + + // Set the theme for Expressive Code + const expressiveTheme = isDark + ? expressiveCodeConfig.darkTheme + : expressiveCodeConfig.lightTheme; + document.documentElement.setAttribute("data-theme", expressiveTheme); + + // 触发自定义事件通知其他组件(仅在真正切换时触发) + window.dispatchEvent(new CustomEvent("theme-change")); + }; + + // 立即调用一次以设置初始状态 + handleSystemThemeChange(mediaQuery); + + // 监听系统主题变化(现代浏览器) + if (mediaQuery.addEventListener) { + mediaQuery.addEventListener("change", handleSystemThemeChange); + } else { + // 兼容旧浏览器 + mediaQuery.addListener(handleSystemThemeChange); + } + + systemThemeListener = handleSystemThemeChange; +} + +// 清理系统主题监听器 +function cleanupSystemThemeListener() { + if (typeof window === "undefined" || !systemThemeListener) { + return; + } + + const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); + + if (mediaQuery.removeEventListener) { + mediaQuery.removeEventListener("change", systemThemeListener); + } else { + // 兼容旧浏览器 + mediaQuery.removeListener(systemThemeListener); + } + + systemThemeListener = null; +} + +export function getStoredTheme(): LIGHT_DARK_MODE { + // 检查是否在浏览器环境中 + if ( + typeof localStorage === "undefined" || + typeof localStorage.getItem !== "function" + ) { + return getDefaultTheme(); + } + return ( + (localStorage.getItem("theme") as LIGHT_DARK_MODE) || getDefaultTheme() + ); +} + +// 初始化主题监听器(用于页面加载后) +export function initThemeListener() { + if ( + typeof localStorage === "undefined" || + typeof localStorage.getItem !== "function" + ) { + return; + } + + const theme = getStoredTheme(); + + // 如果主题是 system 模式,需要监听系统主题变化 + if (theme === SYSTEM_MODE) { + setupSystemThemeListener(); + } +} + +// Wallpaper mode functions +export function applyWallpaperModeToDocument(mode: WALLPAPER_MODE) { + // 检查是否允许切换壁纸模式 + const isSwitchable = backgroundWallpaper.switchable ?? true; + if (!isSwitchable) { + // 如果不允许切换,直接返回,不执行任何操作 + return; + } + + // 获取当前的壁纸模式 + const currentMode = + (document.documentElement.getAttribute( + "data-wallpaper-mode", + ) as WALLPAPER_MODE) || backgroundWallpaper.mode; + + // 如果模式没有变化,直接返回 + if (currentMode === mode) { + // 即使是相同模式,也要确保UI状态正确 + ensureWallpaperState(mode); + return; + } + + // 添加过渡保护类 + document.documentElement.classList.add("is-wallpaper-transitioning"); + + // 更新数据属性 + document.documentElement.setAttribute("data-wallpaper-mode", mode); + + // 使用 requestAnimationFrame 确保在下一帧执行,避免闪屏 + requestAnimationFrame(() => { + const body = document.body; + + // 移除所有壁纸相关的CSS类 + body.classList.remove("enable-banner", "wallpaper-transparent"); + + // 根据模式添加相应的CSS类 + switch (mode) { + case WALLPAPER_BANNER: + body.classList.add("enable-banner"); + showBannerMode(); + break; + case WALLPAPER_OVERLAY: + body.classList.add("wallpaper-transparent"); + showOverlayMode(); + break; + case WALLPAPER_NONE: + hideAllWallpapers(); + break; + default: + hideAllWallpapers(); + break; + } + + // 更新导航栏透明模式 + updateNavbarTransparency(mode); + + // 在下一帧移除过渡保护类 + requestAnimationFrame(() => { + document.documentElement.classList.remove("is-wallpaper-transitioning"); + }); + }); +} + +// 确保壁纸状态正确 +function ensureWallpaperState(mode: WALLPAPER_MODE) { + const body = document.body; + + // 移除所有壁纸相关的CSS类 + body.classList.remove("enable-banner", "wallpaper-transparent"); + + // 根据模式添加相应的CSS类 + switch (mode) { + case WALLPAPER_BANNER: + body.classList.add("enable-banner"); + showBannerMode(); + break; + case WALLPAPER_OVERLAY: + body.classList.add("wallpaper-transparent"); + showOverlayMode(); + break; + case WALLPAPER_NONE: + hideAllWallpapers(); + break; + } + + // 更新导航栏透明模式 + updateNavbarTransparency(mode); +} + +function showBannerMode() { + // 隐藏全屏壁纸(通过CSS类和display控制) + const overlayContainer = document.querySelector( + "[data-overlay-wallpaper]", + ) as HTMLElement; + if (overlayContainer) { + overlayContainer.style.display = "none"; + overlayContainer.classList.add("hidden"); + overlayContainer.classList.add("opacity-0"); + overlayContainer.classList.remove("opacity-100"); + } + + // 显示banner壁纸(通过CSS类和display控制) + const bannerWrapper = document.getElementById("banner-wrapper"); + if (bannerWrapper) { + // 检查当前是否为首页 + const isHomePage = checkIsHomePage(window.location.pathname); + const isMobile = window.innerWidth < 1024; + + // 移动端非首页时,不显示banner;桌面端始终显示 + if (isMobile && !isHomePage) { + bannerWrapper.style.display = "none"; + bannerWrapper.classList.add("mobile-hide-banner"); + } else { + // 首页或桌面端:先设置display,然后使用requestAnimationFrame确保渲染 + bannerWrapper.style.display = "block"; + bannerWrapper.style.setProperty("display", "block", "important"); + requestAnimationFrame(() => { + bannerWrapper.classList.remove("hidden"); + bannerWrapper.classList.remove("opacity-0"); + bannerWrapper.classList.add("opacity-100"); + bannerWrapper.classList.remove("mobile-hide-banner"); + }); + } + } + + // 显示横幅图片来源文本 + const creditDesktop = document.getElementById("banner-credit-desktop"); + const creditMobile = document.getElementById("banner-credit-mobile"); + if (creditDesktop) creditDesktop.style.display = ""; + if (creditMobile) creditMobile.style.display = ""; + + // 显示横幅首页文本(如果启用且是首页) + const bannerTextOverlay = document.querySelector(".banner-text-overlay"); + if (bannerTextOverlay) { + // 检查是否启用 homeText + const homeTextEnabled = backgroundWallpaper.banner?.homeText?.enable; + + // 检查当前是否为首页 + const isHomePage = checkIsHomePage(window.location.pathname); + + // 只有在启用且在首页时才显示 + if (homeTextEnabled && isHomePage) { + bannerTextOverlay.classList.remove("hidden"); + } else { + bannerTextOverlay.classList.add("hidden"); + } + } + + // 调整主内容位置 + adjustMainContentPosition("banner"); + + // 处理移动端非首页主内容区域位置 + const mainContentWrapper = document.querySelector(".absolute.w-full.z-30"); + if (mainContentWrapper) { + const isHomePage = checkIsHomePage(window.location.pathname); + const isMobile = window.innerWidth < 1024; + // 只在移动端非首页时调整主内容位置 + if (isMobile && !isHomePage) { + mainContentWrapper.classList.add("mobile-main-no-banner"); + } else { + mainContentWrapper.classList.remove("mobile-main-no-banner"); + } + } + + // 移除透明效果(横幅模式不使用半透明) + adjustMainContentTransparency(false); + + // 调整导航栏透明度 + const navbar = document.getElementById("navbar"); + if (navbar) { + // 获取导航栏透明模式配置(banner模式) + const transparentMode = + backgroundWallpaper.banner?.navbar?.transparentMode || "semi"; + navbar.setAttribute("data-transparent-mode", transparentMode); + + // 重新初始化半透明模式滚动检测(如果需要) + if ( + transparentMode === "semifull" && + typeof window.initSemifullScrollDetection === "function" + ) { + window.initSemifullScrollDetection(); + } + } +} + +function showOverlayMode() { + // 显示全屏壁纸(通过CSS类和display控制) + const overlayContainer = document.querySelector( + "[data-overlay-wallpaper]", + ) as HTMLElement; + if (overlayContainer) { + // 先设置display,然后使用requestAnimationFrame确保渲染 + overlayContainer.style.display = "block"; + overlayContainer.style.setProperty("display", "block", "important"); + requestAnimationFrame(() => { + overlayContainer.classList.remove("hidden"); + overlayContainer.classList.remove("opacity-0"); + overlayContainer.classList.add("opacity-100"); + }); + } + + // 隐藏banner壁纸(通过CSS类和display控制) + const bannerWrapper = document.getElementById("banner-wrapper"); + if (bannerWrapper) { + bannerWrapper.style.display = "none"; + bannerWrapper.classList.add("hidden"); + bannerWrapper.classList.add("opacity-0"); + bannerWrapper.classList.remove("opacity-100"); + } + + // 隐藏横幅图片来源文本 + const creditDesktop = document.getElementById("banner-credit-desktop"); + const creditMobile = document.getElementById("banner-credit-mobile"); + if (creditDesktop) creditDesktop.style.display = "none"; + if (creditMobile) creditMobile.style.display = "none"; + + // 隐藏横幅首页文本 + const bannerTextOverlay = document.querySelector(".banner-text-overlay"); + if (bannerTextOverlay) { + bannerTextOverlay.classList.add("hidden"); + } + + // 调整主内容透明度 + adjustMainContentTransparency(true); + + // 调整布局为紧凑模式 + adjustMainContentPosition("overlay"); +} + +function hideAllWallpapers() { + // 隐藏所有壁纸(通过CSS类和display控制) + const bannerWrapper = document.getElementById("banner-wrapper"); + const overlayContainer = document.querySelector( + "[data-overlay-wallpaper]", + ) as HTMLElement; + + if (bannerWrapper) { + bannerWrapper.style.display = "none"; + bannerWrapper.classList.add("hidden"); + bannerWrapper.classList.add("opacity-0"); + } + + if (overlayContainer) { + overlayContainer.style.display = "none"; + overlayContainer.classList.add("hidden"); + overlayContainer.classList.add("opacity-0"); + overlayContainer.classList.remove("opacity-100"); + } + + // 隐藏横幅图片来源文本 + const creditDesktop = document.getElementById("banner-credit-desktop"); + const creditMobile = document.getElementById("banner-credit-mobile"); + if (creditDesktop) creditDesktop.style.display = "none"; + if (creditMobile) creditMobile.style.display = "none"; + + // 隐藏横幅首页文本 + const bannerTextOverlay = document.querySelector(".banner-text-overlay"); + if (bannerTextOverlay) { + bannerTextOverlay.classList.add("hidden"); + } + + // 调整主内容位置和透明度 + adjustMainContentPosition("none"); + adjustMainContentTransparency(false); +} + +function updateNavbarTransparency(mode: WALLPAPER_MODE) { + const navbar = document.getElementById("navbar"); + if (!navbar) return; + + let transparentMode: string; + + // 根据当前壁纸模式设置导航栏透明模式 + if (mode === WALLPAPER_OVERLAY) { + // 全屏壁纸模式:固定使用半透明 + transparentMode = "semi"; + } else if (mode === WALLPAPER_NONE) { + // 纯色背景模式:完全不透明,使用默认背景 + transparentMode = "none"; + } else { + // Banner模式:使用配置的透明模式 + transparentMode = + backgroundWallpaper.banner?.navbar?.transparentMode || "semi"; + } + + // 更新导航栏的透明模式属性 + navbar.setAttribute("data-transparent-mode", transparentMode); + + // 移除现有的透明模式类 + navbar.classList.remove( + "navbar-transparent-semi", + "navbar-transparent-full", + "navbar-transparent-semifull", + ); + + // 移除scrolled类 + navbar.classList.remove("scrolled"); + + // 滚动检测功能 + if ( + transparentMode === "semifull" && + mode === WALLPAPER_BANNER && + typeof window.initSemifullScrollDetection === "function" + ) { + // 仅在Banner模式的semifull下启用滚动检测 + window.initSemifullScrollDetection(); + } else if (window.semifullScrollHandler) { + // 移除滚动监听器 + window.removeEventListener("scroll", window.semifullScrollHandler); + delete window.semifullScrollHandler; + } +} + +function adjustMainContentPosition( + mode: WALLPAPER_MODE | "banner" | "none" | "overlay", +) { + const mainContent = document.querySelector( + ".absolute.w-full.z-30", + ) as HTMLElement; + if (!mainContent) return; + + // 移除现有的位置类 + mainContent.classList.remove("mobile-main-no-banner", "no-banner-layout"); + + switch (mode) { + case "banner": + // Banner模式:主内容在banner下方 + mainContent.style.top = "calc(var(--banner-height) - 3rem)"; + break; + case "overlay": + // Overlay模式:使用紧凑布局,主内容从导航栏下方开始 + mainContent.classList.add("no-banner-layout"); + mainContent.style.top = "5.5rem"; + break; + case "none": + // 无壁纸模式:主内容从导航栏下方开始 + mainContent.classList.add("no-banner-layout"); + mainContent.style.top = "5.5rem"; + break; + default: + mainContent.style.top = "5.5rem"; + break; + } +} + +function adjustMainContentTransparency(enable: boolean) { + const mainContent = document.querySelector(".absolute.w-full.z-30"); + const body = document.body; + + if (!mainContent || !body) return; + + if (enable) { + mainContent.classList.add("wallpaper-transparent"); + body.classList.add("wallpaper-transparent"); + } else { + mainContent.classList.remove("wallpaper-transparent"); + body.classList.remove("wallpaper-transparent"); + } +} + +export function setWallpaperMode(mode: WALLPAPER_MODE): void { + // 检查是否在浏览器环境中 + if ( + typeof localStorage === "undefined" || + typeof localStorage.setItem !== "function" + ) { + return; + } + localStorage.setItem("wallpaperMode", mode); + applyWallpaperModeToDocument(mode); +} + +export function initWallpaperMode(): void { + const storedMode = getStoredWallpaperMode(); + applyWallpaperModeToDocument(storedMode); +} + +export function getStoredWallpaperMode(): WALLPAPER_MODE { + // 检查是否在浏览器环境中 + if ( + typeof localStorage === "undefined" || + typeof localStorage.getItem !== "function" + ) { + return backgroundWallpaper.mode; + } + return ( + (localStorage.getItem("wallpaperMode") as WALLPAPER_MODE) || + backgroundWallpaper.mode + ); +} diff --git a/src/utils/tocUtils.ts b/src/utils/tocUtils.ts new file mode 100644 index 0000000..0e61d62 --- /dev/null +++ b/src/utils/tocUtils.ts @@ -0,0 +1,398 @@ +/** + * TOC (Table of Contents) 工具类 + * 用于 SidebarTOC 和 FloatingTOC 的共享逻辑 + */ + +export interface TOCConfig { + contentId: string; + indicatorId: string; + maxLevel?: number; + scrollOffset?: number; +} + +export class TOCManager { + private tocItems: HTMLElement[] = []; + private observer: IntersectionObserver | null = null; + private minDepth = 10; + private maxLevel: number; + private scrollTimeout: number | null = null; + private contentId: string; + private indicatorId: string; + private scrollOffset: number; + + constructor(config: TOCConfig) { + this.contentId = config.contentId; + this.indicatorId = config.indicatorId; + this.maxLevel = config.maxLevel || 3; + this.scrollOffset = config.scrollOffset || 80; + } + + /** + * 查找文章内容容器 + */ + private getContentContainer(): Element | null { + return ( + document.querySelector(".custom-md") || + document.querySelector(".prose") || + document.querySelector(".markdown-content") + ); + } + + /** + * 查找所有标题 + */ + private getAllHeadings(): NodeListOf { + const contentContainer = this.getContentContainer(); + if (contentContainer) { + return contentContainer.querySelectorAll("h1, h2, h3, h4, h5, h6"); + } + return document.querySelectorAll("h1, h2, h3, h4, h5, h6"); + } + + /** + * 计算最小深度 + */ + private calculateMinDepth(headings: NodeListOf): number { + let minDepth = 10; + headings.forEach((heading) => { + const depth = Number.parseInt(heading.tagName.charAt(1), 10); + minDepth = Math.min(minDepth, depth); + }); + return minDepth; + } + + /** + * 过滤标题 + */ + private filterHeadings(headings: NodeListOf): HTMLElement[] { + return Array.from(headings).filter((heading) => { + const depth = Number.parseInt(heading.tagName.charAt(1), 10); + return depth < this.minDepth + this.maxLevel; + }); + } + + /** + * 生成徽章内容 + */ + private generateBadgeContent(depth: number, heading1Count: number): string { + if (depth === this.minDepth) { + return heading1Count.toString(); + } + if (depth === this.minDepth + 1) { + return '
              '; + } + return '
              '; + } + + /** + * 生成TOC HTML + */ + public generateTOCHTML(): string { + const headings = this.getAllHeadings(); + + if (headings.length === 0) { + return '

              当前页面没有目录

              '; + } + + this.minDepth = this.calculateMinDepth(headings); + const filteredHeadings = this.filterHeadings(headings); + + if (filteredHeadings.length === 0) { + return '

              当前页面没有目录

              '; + } + + let tocHTML = ""; + let heading1Count = 1; + + filteredHeadings.forEach((heading) => { + const depth = Number.parseInt(heading.tagName.charAt(1), 10); + const depthClass = + depth === this.minDepth + ? "" + : depth === this.minDepth + 1 + ? "pl-4" + : "pl-8"; + + if (!heading.id) { + return; + } + + const badgeContent = this.generateBadgeContent(depth, heading1Count); + if (depth === this.minDepth) { + heading1Count++; + } + + const headingText = (heading.textContent || "").replace(/#+\s*$/, ""); + + tocHTML += ` + +
              + ${badgeContent} +
              +
              ${headingText}
              +
              + `; + }); + + tocHTML += `
              `; + + return tocHTML; + } + + /** + * 更新TOC内容 + */ + public updateTOCContent(): void { + const tocContent = document.getElementById(this.contentId); + if (!tocContent) return; + + tocContent.innerHTML = this.generateTOCHTML(); + this.tocItems = Array.from( + document.querySelectorAll(`#${this.contentId} a`), + ); + } + + /** + * 获取可见的标题ID + */ + private getVisibleHeadingIds(): string[] { + const headings = this.getAllHeadings(); + const visibleHeadingIds: string[] = []; + + headings.forEach((heading) => { + if (heading.id) { + const rect = heading.getBoundingClientRect(); + const isVisible = rect.top < window.innerHeight && rect.bottom > 0; + + if (isVisible) { + visibleHeadingIds.push(heading.id); + } + } + }); + + // 如果没有可见标题,选择最接近屏幕顶部的标题 + if (visibleHeadingIds.length === 0 && headings.length > 0) { + let closestHeading: string | null = null; + let minDistance = Number.POSITIVE_INFINITY; + + headings.forEach((heading) => { + if (heading.id) { + const rect = heading.getBoundingClientRect(); + const distance = Math.abs(rect.top); + + if (distance < minDistance) { + minDistance = distance; + closestHeading = heading.id; + } + } + }); + + if (closestHeading) { + visibleHeadingIds.push(closestHeading); + } + } + + return visibleHeadingIds; + } + + /** + * 更新活动状态 + */ + public updateActiveState(): void { + if (!this.tocItems || this.tocItems.length === 0) return; + + // 移除所有活动状态 + this.tocItems.forEach((item) => { + item.classList.remove("visible"); + }); + + const visibleHeadingIds = this.getVisibleHeadingIds(); + + // 找到对应的TOC项并添加活动状态 + const activeItems = this.tocItems.filter((item) => { + const headingId = item.dataset.headingId; + return headingId && visibleHeadingIds.includes(headingId); + }); + + // 添加活动状态 + activeItems.forEach((item) => { + item.classList.add("visible"); + }); + + // 更新活动指示器 + this.updateActiveIndicator(activeItems); + } + + /** + * 更新活动指示器 + */ + private updateActiveIndicator(activeItems: HTMLElement[]): void { + const indicator = document.getElementById(this.indicatorId); + if (!indicator || !this.tocItems.length) return; + + if (activeItems.length === 0) { + indicator.style.opacity = "0"; + return; + } + + const tocContent = document.getElementById(this.contentId); + if (!tocContent) return; + + const contentRect = tocContent.getBoundingClientRect(); + const firstActive = activeItems[0]; + const lastActive = activeItems[activeItems.length - 1]; + + const firstRect = firstActive.getBoundingClientRect(); + const lastRect = lastActive.getBoundingClientRect(); + + const top = firstRect.top - contentRect.top; + const height = lastRect.bottom - firstRect.top; + + indicator.style.top = `${top}px`; + indicator.style.height = `${height}px`; + indicator.style.opacity = "1"; + + // 自动滚动到活动项 + if (firstActive) { + this.scrollToActiveItem(firstActive); + } + } + + /** + * 滚动到活动项 + */ + private scrollToActiveItem(activeItem: HTMLElement): void { + if (!activeItem) return; + + const tocContainer = document + .querySelector(`#${this.contentId}`) + ?.closest(".toc-scroll-container"); + if (!tocContainer) return; + + // 清除之前的定时器 + if (this.scrollTimeout) { + clearTimeout(this.scrollTimeout); + } + + // 使用节流机制 + this.scrollTimeout = window.setTimeout(() => { + const containerRect = tocContainer.getBoundingClientRect(); + const itemRect = activeItem.getBoundingClientRect(); + + // 只在元素不在可视区域时才滚动 + const isVisible = + itemRect.top >= containerRect.top && + itemRect.bottom <= containerRect.bottom; + + if (!isVisible) { + const itemOffsetTop = (activeItem as HTMLElement).offsetTop; + const containerHeight = tocContainer.clientHeight; + const itemHeight = activeItem.clientHeight; + + // 计算目标滚动位置,将元素居中显示 + const targetScroll = + itemOffsetTop - containerHeight / 2 + itemHeight / 2; + + tocContainer.scrollTo({ + top: targetScroll, + behavior: "smooth", + }); + } + }, 100); + } + + /** + * 处理点击事件 + */ + public handleClick(event: Event): void { + event.preventDefault(); + const target = event.currentTarget as HTMLAnchorElement; + const id = decodeURIComponent( + target.getAttribute("href")?.substring(1) || "", + ); + const targetElement = document.getElementById(id); + + if (targetElement) { + const targetTop = + targetElement.getBoundingClientRect().top + + window.pageYOffset - + this.scrollOffset; + + window.scrollTo({ + top: targetTop, + behavior: "smooth", + }); + } + } + + /** + * 设置IntersectionObserver + */ + public setupObserver(): void { + const headings = this.getAllHeadings(); + + if (this.observer) { + this.observer.disconnect(); + } + + this.observer = new IntersectionObserver( + () => { + this.updateActiveState(); + }, + { + rootMargin: "0px 0px 0px 0px", + threshold: 0, + }, + ); + + headings.forEach((heading) => { + if (heading.id) { + this.observer?.observe(heading); + } + }); + } + + /** + * 绑定点击事件 + */ + public bindClickEvents(): void { + this.tocItems.forEach((item) => { + item.addEventListener("click", this.handleClick.bind(this)); + }); + } + + /** + * 清理 + */ + public cleanup(): void { + if (this.observer) { + this.observer.disconnect(); + this.observer = null; + } + if (this.scrollTimeout) { + clearTimeout(this.scrollTimeout); + this.scrollTimeout = null; + } + } + + /** + * 初始化 + */ + public init(): void { + this.updateTOCContent(); + this.bindClickEvents(); + this.setupObserver(); + this.updateActiveState(); + } +} + +/** + * 检查是否为文章页面 + */ +export function isPostPage(): boolean { + return window.location.pathname.includes("/posts/"); +} diff --git a/src/utils/url-utils.ts b/src/utils/url-utils.ts new file mode 100644 index 0000000..16ef16f --- /dev/null +++ b/src/utils/url-utils.ts @@ -0,0 +1,60 @@ +import I18nKey from "@i18n/i18nKey"; +import { i18n } from "@i18n/translation"; + +/** + * 移除文件扩展名(.md, .mdx, .markdown) + * 用于将 Astro v5 Content Layer API 的 id 转换为 URL 友好的 slug + */ +export function removeFileExtension(id: string): string { + return id.replace(/\.(md|mdx|markdown)$/i, ""); +} + +export function pathsEqual(path1: string, path2: string) { + const normalizedPath1 = path1.replace(/^\/|\/$/g, "").toLowerCase(); + const normalizedPath2 = path2.replace(/^\/|\/$/g, "").toLowerCase(); + return normalizedPath1 === normalizedPath2; +} + +function joinUrl(...parts: string[]): string { + const joined = parts.join("/"); + return joined.replace(/\/+/g, "/"); +} + +export function getPostUrlBySlug(slug: string): string { + // 移除文件扩展名(如 .md, .mdx 等) + const slugWithoutExt = removeFileExtension(slug); + return url(`/posts/${slugWithoutExt}/`); +} + +export function getTagUrl(tag: string): string { + if (!tag) return url("/archive/"); + return url(`/archive/?tag=${encodeURIComponent(tag.trim())}`); +} + +export function getCategoryUrl(category: string | null): string { + if ( + !category || + category.trim() === "" || + category.trim().toLowerCase() === i18n(I18nKey.uncategorized).toLowerCase() + ) + return url("/archive/?uncategorized=true"); + return url(`/archive/?category=${encodeURIComponent(category.trim())}`); +} + +export function getDir(path: string): string { + // 移除文件扩展名 + const pathWithoutExt = removeFileExtension(path); + const lastSlashIndex = pathWithoutExt.lastIndexOf("/"); + if (lastSlashIndex < 0) { + return "/"; + } + return pathWithoutExt.substring(0, lastSlashIndex + 1); +} + +export function getFileDirFromPath(filePath: string): string { + return filePath.replace(/^src\//, "").replace(/\/[^/]+$/, ""); +} + +export function url(path: string) { + return joinUrl("", import.meta.env.BASE_URL, path); +} diff --git a/src/utils/widget-manager.ts b/src/utils/widget-manager.ts new file mode 100644 index 0000000..59c9c84 --- /dev/null +++ b/src/utils/widget-manager.ts @@ -0,0 +1,378 @@ +import { sidebarLayoutConfig } from "../config"; +import type { + SidebarLayoutConfig, + WidgetComponentConfig, + WidgetComponentType, +} from "../types/config"; + +/** + * 组件映射表 - 将组件类型映射到实际的组件路径 + */ +export const WIDGET_COMPONENT_MAP = { + profile: "../components/content/Profile.astro", + announcement: "../components/widget/Announcement.astro", + categories: "../components/widget/Categories.astro", + tags: "../components/widget/Tags.astro", + sidebarToc: "../components/widget/SidebarTOC.astro", + advertisement: "../components/widget/Advertisement.astro", + stats: "../components/widget/SiteStats.astro", + calendar: "../components/widget/Calendar.astro", + custom: null, // 自定义组件需要在配置中指定路径 +} as const; + +/** + * 组件管理器类 + * 负责管理侧边栏组件的动态加载、排序和渲染 + */ +export class WidgetManager { + private config: SidebarLayoutConfig; + + constructor(config: SidebarLayoutConfig = sidebarLayoutConfig) { + this.config = config; + } + + /** + * 获取配置 + */ + getConfig(): SidebarLayoutConfig { + return this.config; + } + + /** + * 获取启用的组件列表 + * @param sidebar 侧边栏位置(可选) + */ + private getEnabledComponents( + sidebar?: "left" | "right", + ): WidgetComponentConfig[] { + let components: WidgetComponentConfig[]; + + if (sidebar) { + // 如果指定了侧边栏,只获取该侧的组件 + const targetComponents = + sidebar === "left" + ? this.config.leftComponents + : this.config.rightComponents; + components = targetComponents.filter((component) => component.enable); + } else { + // 如果没有指定,获取所有组件 + const allComponents = [ + ...this.config.leftComponents, + ...this.config.rightComponents, + ]; + components = allComponents.filter((component) => component.enable); + } + + return components.sort((a, b) => a.order - b.order); + } + + /** + * 根据位置获取组件列表 + * @param position 组件位置:'top' | 'sticky' + * @param sidebar 侧边栏位置(可选):'left' | 'right' + */ + getComponentsByPosition( + position: "top" | "sticky", + sidebar?: "left" | "right", + ): WidgetComponentConfig[] { + if (!sidebar) { + // 如果没有指定侧边栏,返回所有符合位置的组件 + const allComponents = this.getEnabledComponents(); + return allComponents.filter( + (component) => component.position === position, + ); + } + + // 获取指定侧边栏的启用组件 + const sidebarComponents = this.getEnabledComponents(sidebar); + return sidebarComponents.filter( + (component) => component.position === position, + ); + } + + /** + * 检查指定侧边栏是否有组件 + * @param sidebar 侧边栏位置:'left' | 'right' + */ + hasComponentsInSidebar(sidebar: "left" | "right"): boolean { + const components = + sidebar === "left" + ? this.config.leftComponents + : this.config.rightComponents; + + return components.some((component) => component.enable); + } + + /** + * 检查指定侧边栏在特定设备上是否有可见组件 + * @param sidebar 侧边栏位置:'left' | 'right' + * @param deviceType 设备类型:'mobile' | 'tablet' | 'desktop' + * 注:tablet 对应 Tailwind 的 md 到 lg 之间 (768px-1023px) + */ + hasVisibleComponentsInSidebar( + sidebar: "left" | "right", + deviceType: "mobile" | "tablet" | "desktop", + ): boolean { + // 双侧边栏模式下,右侧边栏在平板端隐藏 + if (deviceType === "tablet" && sidebar === "right") { + return false; + } + + const components = + sidebar === "left" + ? this.config.leftComponents + : this.config.rightComponents; + + return components.some((component) => { + if (!component.enable) { + return false; + } + + // 检查组件是否在该设备上隐藏 + const hiddenDevices = component.responsive?.hidden || []; + return !hiddenDevices.includes(deviceType); + }); + } + + /** + * 获取组件的动画延迟时间 + * @param component 组件配置 + * @param index 组件在列表中的索引 + */ + getAnimationDelay(component: WidgetComponentConfig, index: number): number { + if (component.animationDelay !== undefined) { + return component.animationDelay; + } + + if (this.config.defaultAnimation.enable) { + return ( + this.config.defaultAnimation.baseDelay + + index * this.config.defaultAnimation.increment + ); + } + + return 0; + } + + /** + * 获取组件的CSS类名 + * @param component 组件配置 + * @param sidebar 组件所在的侧边栏 + * @param index 组件在列表中的索引 + */ + getComponentClass( + component: WidgetComponentConfig, + sidebar: "left" | "right", + _index: number, + ): string { + const classes: string[] = []; + + // 添加基础类名 + if (component.class) { + classes.push(component.class); + } + + // 双侧边栏模式下,右侧边栏的组件在平板端自动隐藏 + // 使用 Tailwind 标准断点:lg(1024px) 以下全部隐藏 + if (sidebar === "right") { + classes.push("hidden", "lg:block"); + } + + return classes.join(" "); + } + + /** + * 获取组件的内联样式 + * @param component 组件配置 + * @param index 组件在列表中的索引 + */ + getComponentStyle(component: WidgetComponentConfig, index: number): string { + const styles: string[] = []; + + // 添加自定义样式 + if (component.style) { + styles.push(component.style); + } + + // 添加动画延迟样式 + const animationDelay = this.getAnimationDelay(component, index); + if (animationDelay > 0) { + styles.push(`animation-delay: ${animationDelay}ms`); + } + + return styles.join("; "); + } + + /** + * 检查组件是否应该折叠 + * @param component 组件配置 + * @param itemCount 组件内容项数量 + */ + isCollapsed(component: WidgetComponentConfig, itemCount: number): boolean { + if (!component.responsive?.collapseThreshold) { + return false; + } + return itemCount >= component.responsive.collapseThreshold; + } + + /** + * 获取组件的路径 + * @param componentType 组件类型 + */ + getComponentPath(componentType: WidgetComponentType): string | null { + return WIDGET_COMPONENT_MAP[componentType]; + } + + /** + * 检查当前设备是否应该显示侧边栏 + * @param deviceType 设备类型 + */ + shouldShowSidebar(deviceType: "mobile" | "tablet" | "desktop"): boolean { + if (!this.config.enable) { + return false; + } + + const layoutMode = this.config.responsive.layout[deviceType]; + return layoutMode === "sidebar"; + } + + /** + * 更新组件配置 + * @param newConfig 新的配置 + */ + updateConfig(newConfig: Partial): void { + this.config = { ...this.config, ...newConfig }; + } + + /** + * 添加新组件 + * @param component 组件配置 + * @param sidebar 侧边栏位置 + */ + addComponent( + component: WidgetComponentConfig, + sidebar: "left" | "right" = "left", + ): void { + if (sidebar === "left") { + this.config.leftComponents.push(component); + } else { + this.config.rightComponents.push(component); + } + } + + /** + * 移除组件 + * @param componentType 组件类型 + * @param sidebar 侧边栏位置(可选,如果不指定则从两侧都移除) + */ + removeComponent( + componentType: WidgetComponentType, + sidebar?: "left" | "right", + ): void { + if (!sidebar || sidebar === "left") { + this.config.leftComponents = this.config.leftComponents.filter( + (component) => component.type !== componentType, + ); + } + if (!sidebar || sidebar === "right") { + this.config.rightComponents = this.config.rightComponents.filter( + (component) => component.type !== componentType, + ); + } + } + + /** + * 启用/禁用组件 + * @param componentType 组件类型 + * @param enable 是否启用 + * @param sidebar 侧边栏位置(可选) + */ + toggleComponent( + componentType: WidgetComponentType, + enable: boolean, + _sidebar?: "left" | "right", + ): void { + const allComponents = [ + ...this.config.leftComponents, + ...this.config.rightComponents, + ]; + + const component = allComponents.find((c) => c.type === componentType); + if (component) { + component.enable = enable; + } + } + + /** + * 重新排序组件 + * @param componentType 组件类型 + * @param newOrder 新的排序值 + */ + reorderComponent(componentType: WidgetComponentType, newOrder: number): void { + const allComponents = [ + ...this.config.leftComponents, + ...this.config.rightComponents, + ]; + + const component = allComponents.find((c) => c.type === componentType); + if (component) { + component.order = newOrder; + } + } + + /** + * 检查组件是否应该在侧边栏中渲染 + * @param componentType 组件类型 + */ + isSidebarComponent(_componentType: WidgetComponentType): boolean { + // 过滤组件 + return true; + } +} + +/** + * 默认组件管理器实例 + */ +export const widgetManager = new WidgetManager(); + +/** + * 工具函数:根据组件类型获取组件配置 + * @param componentType 组件类型 + * @param sidebar 侧边栏位置(可选) + */ +export function getComponentConfig( + componentType: WidgetComponentType, + sidebar?: "left" | "right", +): WidgetComponentConfig | undefined { + const config = widgetManager.getConfig(); + const allComponents = [...config.leftComponents, ...config.rightComponents]; + + if (sidebar) { + const components = + sidebar === "left" ? config.leftComponents : config.rightComponents; + return components.find((c) => c.type === componentType); + } + + return allComponents.find((c) => c.type === componentType); +} + +/** + * 工具函数:检查组件是否启用 + * @param componentType 组件类型 + */ +export function isComponentEnabled( + componentType: WidgetComponentType, +): boolean { + const config = getComponentConfig(componentType); + return config?.enable ?? false; +} + +/** + * 工具函数:获取所有启用的组件类型 + */ +export function getEnabledComponentTypes(): WidgetComponentType[] { + const enabledComponents = widgetManager + .getComponentsByPosition("top") + .concat(widgetManager.getComponentsByPosition("sticky")); + return enabledComponents.map((c) => c.type); +} diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..d8f72ef --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from "@astrojs/svelte"; + +export default { + preprocess: [vitePreprocess({ script: true })], +}; diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100644 index 0000000..c2e0ed8 --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,16 @@ +/** @type {import('tailwindcss').Config} */ +const defaultTheme = require("tailwindcss/defaultTheme") +module.exports = { + content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue,mjs}"], + darkMode: "class", // allows toggling dark mode manually + theme: { + extend: { + fontFamily: { + sans: ["Roboto", "sans-serif", ...defaultTheme.fontFamily.sans], + }, + }, + }, + plugins: [ + require("@tailwindcss/typography"), + ], +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..df3ab4c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,45 @@ +{ + "extends": "astro/tsconfigs/base", + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "jsxImportSource": "react", + "baseUrl": ".", + "strictNullChecks": true, + "allowJs": false, + "declaration": true, + "plugins": [ + { + "name": "@astrojs/ts-plugin" + } + ], + "paths": { + "@components/*": [ + "src/components/*" + ], + "@assets/*": [ + "src/assets/*" + ], + "@constants/*": [ + "src/constants/*" + ], + "@utils/*": [ + "src/utils/*" + ], + "@i18n/*": [ + "src/i18n/*" + ], + "@layouts/*": [ + "src/layouts/*" + ], + "@/*": [ + "src/*" + ] + } + }, + "include": [ + "src/**/*" + ] +} diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..e9dcee2 --- /dev/null +++ b/vercel.json @@ -0,0 +1,39 @@ +{ + "buildCommand": "pnpm build", + "outputDirectory": "dist", + "installCommand": "pnpm install", + "framework": "astro", + "headers": [ + { + "source": "/(.*)", + "headers": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "X-XSS-Protection", + "value": "1; mode=block" + }, + { + "key": "Referrer-Policy", + "value": "strict-origin-when-cross-origin" + } + ] + }, + { + "source": "/_astro/(.*)", + "headers": [ + { + "key": "Cache-Control", + "value": "public, max-age=31536000, immutable" + } + ] + } + ], + "cleanUrls": true +} diff --git a/wrangler.jsonc b/wrangler.jsonc new file mode 100644 index 0000000..d119ade --- /dev/null +++ b/wrangler.jsonc @@ -0,0 +1,7 @@ +{ + "name": "my-astro-app", + "compatibility_date": "2026-01-07", // 更新为你部署当天的日期 + "assets": { + "directory": "./dist", + } +} \ No newline at end of file