From 69dd1be70280e17e6a4e154293ea8f274d87efd5 Mon Sep 17 00:00:00 2001 From: Jack Yao <151671689+jack-yao91@users.noreply.github.com> Date: Wed, 12 Jun 2024 13:25:09 -0500 Subject: [PATCH] Refactored Repo Docs and Tests (#10) * Refactored Repo Docs and Tests (#10) --------- Signed-off-by: dependabot[bot] Co-authored-by: JoshQuake Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .github/ISSUE_TEMPLATE/question.md | 2 +- .github/workflows/docs.yml | 66 + .github/workflows/re-use-tests.yml | 75 + .github/workflows/release.yml | 35 + .github/workflows/tests.yml | 37 + .gitignore | 14 + README.md | 29 +- docs/.dockerignore | 3 - docs/.gitignore | 12 - docs/{main => }/contributing/development.md | 23 +- docs/contributing/documentation.md | 42 + .../contributing/images/development/1.jpg | Bin .../contributing/images/development/2.jpg | Bin .../contributing/images/development/3.png | Bin .../contributing/images/development/4.png | Bin .../contributing/images/documentation/1.png | Bin .../contributing/images/documentation/2.jpg | Bin .../contributing/images/documentation/3.jpg | Bin .../contributing/images/documentation/4.jpg | Bin docs/{main => }/contributing/testing.md | 0 docs/docker-compose.yml | 13 - docs/{main => }/images/1.png | Bin docs/{main => }/images/send2ue/1.gif | Bin docs/{main => }/images/send2ue/2.png | Bin docs/{main => }/images/send2ue/4.gif | Bin docs/{main => }/images/ue2rigify/1.gif | Bin docs/{main => }/images/ue2rigify/2.png | Bin docs/index.md | 22 + docs/main/.vuepress/config.ts | 50 - docs/main/.vuepress/styles/index.scss | 9 - docs/main/contributing/documentation.md | 63 - docs/main/index.md | 36 - docs/package-lock.json | 6661 ----------------- docs/package.json | 26 - docs/path.js | 21 - docs/send2ue/.vuepress/config.ts | 96 - .../.vuepress/public/images/overview.svg | 288 - .../.vuepress/public/images/unreal.png | Bin 10406 -> 0 bytes docs/send2ue/.vuepress/styles/index.scss | 10 - .../send2ue/asset-types/animation-sequence.md | 67 +- docs/send2ue/asset-types/groom.md | 45 +- docs/send2ue/asset-types/skeletal-mesh.md | 24 +- docs/send2ue/asset-types/static-mesh.md | 31 +- docs/send2ue/customize/extensions.md | 95 +- docs/send2ue/customize/python-api.md | 49 +- docs/send2ue/customize/templates.md | 8 +- docs/send2ue/extensions/affixes.md | 7 +- docs/send2ue/extensions/combine-assets.md | 31 +- .../create-post-import-groom-assets.md | 18 +- docs/send2ue/extensions/instance-assets.md | 1 + .../extensions/use-collections-as-folders.md | 6 +- .../extensions/use-immediate-parent-name.md | 13 +- docs/send2ue/extras/addon-preferences.md | 8 +- docs/send2ue/index.md | 34 +- docs/send2ue/introduction/quickstart.md | 14 +- docs/send2ue/mkdocs.yml | 33 + docs/send2ue/settings/import.md | 10 +- docs/send2ue/settings/paths.md | 14 +- docs/send2ue/trouble-shooting/errors.md | 4 +- docs/ue2rigify/.vuepress/config.ts | 76 - docs/ue2rigify/.vuepress/styles/index.scss | 9 - docs/ue2rigify/advanced/relink-constraints.md | 4 - docs/ue2rigify/concepts/modes.md | 8 +- docs/ue2rigify/index.md | 32 +- docs/ue2rigify/introduction/quickstart.md | 7 +- docs/ue2rigify/mkdocs.yml | 17 + docs/ue2rigify/usage/animation.md | 11 +- mkdocs.yml | 56 + requirements.txt | 15 +- send2ue/__init__.py | 7 +- send2ue/core/export.py | 28 +- send2ue/core/io/__init__.py | 5 +- send2ue/core/io/{fbx.py => fbx_b3.py} | 2 +- send2ue/core/io/fbx_b4.py | 652 ++ send2ue/core/utilities.py | 16 +- send2ue/core/validations.py | 2 +- send2ue/dependencies/rpc/base_server.py | 17 + send2ue/dependencies/rpc/client.py | 29 +- send2ue/properties.py | 1 + send2ue/release_notes.md | 2 +- tests/.gitignore | 4 + tests/run_tests.py | 22 +- ...ion_create_post_import_assets_for_groom.py | 4 + tests/utils/container_test_manager.py | 21 +- ue2rigify/__init__.py | 6 +- 87 files changed, 1475 insertions(+), 7727 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/re-use-tests.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/tests.yml delete mode 100644 docs/.dockerignore delete mode 100644 docs/.gitignore rename docs/{main => }/contributing/development.md (91%) create mode 100644 docs/contributing/documentation.md rename docs/{main => }/contributing/images/development/1.jpg (100%) rename docs/{main => }/contributing/images/development/2.jpg (100%) rename docs/{main => }/contributing/images/development/3.png (100%) rename docs/{main => }/contributing/images/development/4.png (100%) rename docs/{main => }/contributing/images/documentation/1.png (100%) rename docs/{main => }/contributing/images/documentation/2.jpg (100%) rename docs/{main => }/contributing/images/documentation/3.jpg (100%) rename docs/{main => }/contributing/images/documentation/4.jpg (100%) rename docs/{main => }/contributing/testing.md (100%) delete mode 100644 docs/docker-compose.yml rename docs/{main => }/images/1.png (100%) rename docs/{main => }/images/send2ue/1.gif (100%) rename docs/{main => }/images/send2ue/2.png (100%) rename docs/{main => }/images/send2ue/4.gif (100%) rename docs/{main => }/images/ue2rigify/1.gif (100%) rename docs/{main => }/images/ue2rigify/2.png (100%) create mode 100644 docs/index.md delete mode 100644 docs/main/.vuepress/config.ts delete mode 100644 docs/main/.vuepress/styles/index.scss delete mode 100644 docs/main/contributing/documentation.md delete mode 100644 docs/main/index.md delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json delete mode 100644 docs/path.js delete mode 100644 docs/send2ue/.vuepress/config.ts delete mode 100644 docs/send2ue/.vuepress/public/images/overview.svg delete mode 100644 docs/send2ue/.vuepress/public/images/unreal.png delete mode 100644 docs/send2ue/.vuepress/styles/index.scss create mode 100644 docs/send2ue/mkdocs.yml delete mode 100644 docs/ue2rigify/.vuepress/config.ts delete mode 100644 docs/ue2rigify/.vuepress/styles/index.scss create mode 100644 docs/ue2rigify/mkdocs.yml create mode 100644 mkdocs.yml rename send2ue/core/io/{fbx.py => fbx_b3.py} (99%) create mode 100644 send2ue/core/io/fbx_b4.py diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 26a7c7aa..0a84c9a1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ assignees: '' --- # Before creating an issue DO THIS FIRST! -Search the existing [issues](https://github.com/EpicGamesExt/BlenderTools/issues?q=) +Search the existing [issues](https://github.com/poly-hammer/BlenderTools/issues?q=) ## Bug ### IMPORTANT: Do this before you create a bug ticket! diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index d1de6706..6f3ccd49 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,7 +8,7 @@ assignees: '' --- # Before creating an issue DO THIS FIRST! -Search the existing [issues](https://github.com/EpicGamesExt/BlenderTools/issues?q=) +Search the existing [issues](https://github.com/poly-hammer/BlenderTools/issues?q=) ## Feature ### IMPORTANT: Do this before you create a feature ticket! diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index d2b7173a..21a1ec7c 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -8,7 +8,7 @@ assignees: '' --- # Before creating an issue DO THIS FIRST! -Search the existing [issues](https://github.com/EpicGamesExt/BlenderTools/issues?q=) +Search the existing [issues](https://github.com/poly-hammer/BlenderTools/issues?q=) ## Questions ### IMPORTANT: Do this before you create a question ticket! diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..2c14f66a --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,66 @@ +name: Docs + +on: + # Runs on pushes targeting the main branch + push: + branches: + - "main" + paths: + - "docs/**/*" + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Install Python Dependencies + shell: bash + run: | + python3 -m venv .linux-venv + source .linux-venv/bin/activate + pip install --upgrade -r requirements.txt + + - name: Build Mkdocs + shell: bash + run: | + export GA_ID=${{ secrets.GA_ID }} + source .linux-venv/bin/activate + mkdocs build + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload Built Docs + uses: actions/upload-pages-artifact@v3 + with: + path: './site' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/re-use-tests.yml b/.github/workflows/re-use-tests.yml new file mode 100644 index 00000000..6a2f2392 --- /dev/null +++ b/.github/workflows/re-use-tests.yml @@ -0,0 +1,75 @@ +name: re-use-tests + +on: + workflow_call: + inputs: + title: + required: true + type: string + blender-version: + required: true + type: string + unreal-version: + required: true + type: string + secrets: + GH_USER: + required: true + GH_PAT: + required: true + +jobs: + tests: + name: ${{ inputs.title }} + runs-on: poly-hammer-runner + if: github.repository == 'poly-hammer/BlenderTools' + timeout-minutes: 120 + permissions: + contents: read + checks: write + id-token: write + + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Install Python Dependencies + shell: bash + run: | + python -m venv .venv + source .venv/bin/activate + pip install --upgrade -r requirements.txt + + - name: Run All Tests + shell: bash + run: | + source .venv/bin/activate + + export GITHUB_TOKEN=${{ secrets.GH_PAT }} + export TEST_ENVIRONMENT=1 + export UNREAL_VERSION=${{ inputs.unreal-version }} + export BLENDER_VERSION=${{ inputs.blender-version }} + + echo $GITHUB_TOKEN | docker login ghcr.io -u ${{ secrets.GH_USER }} --password-stdin + + cd ./tests + python run_tests.py + + + - name: Publish ${{ inputs.title }} Report + uses: mikepenz/action-junit-report@v4 + # always run even if the previous step fails + if: success() || failure() + with: + check_name: ${{ inputs.title }} Results (Unreal ${{ inputs.unreal-version }} Blender ${{ inputs.blender-version }}) + include_passed: True + fail_on_failure: True + require_tests: True + require_passed_tests: True + detailed_summary: True + report_paths: './tests/results/*.xml' \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..de67e83a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,35 @@ +name: Create Release +on: + workflow_dispatch: + inputs: + addons: + type: choice + description: Make a choice + default: 'send2ue,ue2rigify' + options: + - 'ue2rigify' + - 'send2ue' + - 'send2ue,ue2rigify' +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install Requirements + run: | + pip3 install -r requirements.txt + + - name: Create Release + run: | + export REPO=${{ github.repository }} + export GITHUB_TOKEN=${{ secrets.GH_PAT }} + export BLENDER_ADDONS=${{ github.event.inputs.addons }} + + python3 scripts/create_release.py \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..b36a9c9a --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,37 @@ +name: Tests + +on: + push: + branches: + - main + - ci-testing + paths: + - 'send2ue/**/*' + - 'ue2rigify/**/*' + - 'tests/**/*' + - '.github/workflows/**' + +permissions: + contents: read + checks: write + id-token: write + +jobs: + test-lts: + name: Test LTS + uses: poly-hammer/BlenderTools/.github/workflows/re-use-tests.yml@main + secrets: inherit + with: + title: Test LTS + unreal-version: 5.3 + blender-version: 3.6 + + test-latest: + needs: test-lts + name: Test Latest + uses: poly-hammer/BlenderTools/.github/workflows/re-use-tests.yml@main + secrets: inherit + with: + title: Test Latest + unreal-version: 5.3 + blender-version: 4.1 diff --git a/.gitignore b/.gitignore index 319c4cce..4a3d6856 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,18 @@ *~ *.swp /venv/* +.vscode release/* +venv +.env +.venv +.*-venv +results +release +site +scratches +scripts/resources +launch.py +tests/test_files/data +tests/test_files/unreal_projects/**/DefaultInput.ini +tests/test_files/blender_files/textures \ No newline at end of file diff --git a/README.md b/README.md index 1c236c77..8581bf3a 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,48 @@

- icon + icon

Blender Tools



+[![Docs](https://github.com/poly-hammer/BlenderTools/actions/workflows/docs.yml/badge.svg)](https://github.com/poly-hammer/BlenderTools/actions/workflows/docs.yml) +[![Tests](https://github.com/poly-hammer/BlenderTools/actions/workflows/tests.yml/badge.svg)](https://github.com/poly-hammer/BlenderTools/actions/workflows/tests.yml) + + + +### NOTE: This is a fork of the original [repository by Epic](https://github.com/EpicGamesExt/BlenderTools). +### This is now maintained by volunteers from the community and is not affiliated with Epic Games. + A repository of blender addons that improve the game development workflow between Blender and Unreal Engine. + ## Send to Unreal -![4](docs/main/images/send2ue/4.gif) +![4](docs/images/send2ue/4.gif) A one-click solution for sending assets from Blender to Unreal Engine. -* [Read Docs](https://epicgamesext.github.io/BlenderTools/send2ue/) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=Send+to+Unreal&expanded=true) +* [Read Docs](https://poly-hammer.github.io/BlenderTools/send2ue/) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=Send+to+Unreal&expanded=true) ## UE to Rigify -![2](./docs/main/images/ue2rigify/2.png) +![2](./docs/images/ue2rigify/2.png) A node based retargeting system for Blender's [Rigify](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/index.html) addon. Quickly retarget and author new animation on unreal marketplace assets and more! -* [Read Docs](https://epicgamesext.github.io/BlenderTools/ue2rigify/) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=UE+to+Rigify&expanded=true) +* [Read Docs](https://poly-hammer.github.io/BlenderTools/ue2rigify/) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=UE+to+Rigify&expanded=true) ## Help Contribute Contributions are encouraged! Find out how you can contribute to this repo in one of the following ways: -* [Help Develop](https://epicgamesext.github.io/BlenderTools/contributing/development.html) -* [Help Document](https://epicgamesext.github.io/BlenderTools/contributing/documentation.html) -* [Help Test](https://epicgamesext.github.io/BlenderTools/contributing/testing.html) +* [Help Develop](https://poly-hammer.github.io/BlenderTools/contributing/development.html) +* [Help Document](https://poly-hammer.github.io/BlenderTools/contributing/documentation.html) +* [Help Test](https://poly-hammer.github.io/BlenderTools/contributing/testing.html) ## Get Notified on a New Release diff --git a/docs/.dockerignore b/docs/.dockerignore deleted file mode 100644 index 0e4f06c8..00000000 --- a/docs/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -.git -node_modules -dist diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 595e2151..00000000 --- a/docs/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -pids -logs -node_modules -npm-debug.log -coverage/ -run -dist -.DS_Store -.nyc_output -.basement -config.local.js -basement_dist diff --git a/docs/main/contributing/development.md b/docs/contributing/development.md similarity index 91% rename from docs/main/contributing/development.md rename to docs/contributing/development.md index 3581bf46..d654f255 100644 --- a/docs/main/contributing/development.md +++ b/docs/contributing/development.md @@ -11,9 +11,10 @@ with the owners of this repository, before making a change. Each pull request mu 1. Include the updated documentation in the pull request. 1. The pull request will be reviewed, then merged into `dev` if all tests pass, the changes will be pushed to the `master` branch and a new versioned build will be made. -::: tip Note - Any new features require an accompanying unit test for it to be approved. -::: +!!! note + + Any new features require an accompanying unit test for it to be approved. + ## Getting Setup Fork the `BlenderTools` repository. @@ -35,10 +36,9 @@ git checkout some-task-branch While developing, you will want to be able to rapidly test your new changes. You can do this by running this script in the Blender Script Editor. -::: tip Note - You need to change `` to match the absolute path to the scripts folder in your local project. -Running this script installs and reloads the tool. -::: +!!! note + + You need to change `` to match the absolute path to the scripts folder in your local project. Running this script installs and reloads the tool. ```python @@ -72,12 +72,13 @@ you want to run the unittests on the open app instances. These steps must be completed in-order for the addons to hot-reload while you type in PyCharm. 1. If you have the addons already installed, uninstall them and shutdown Blender and PyCharm. 1. You must symlink the addon folders into the blender addon installation location. Then enable the addons - ::: tip Windows + +!!! Windows Run this from a commandline launched as administrator. Swapping out the last path with your own. - ```commandline:no-line-numbers - mklink /D "%APPDATA%\Blender Foundation\Blender\3.4\scripts\addons\send2ue" "D:\repos\BlenderTools\send2ue" + ```shell + mklink /D "%APPDATA%\Blender Foundation\Blender\3.6\scripts\addons\send2ue" "D:\repos\BlenderTools\send2ue" ``` - ::: + 1. You must install the `./scripts/addon-watcher.xml` in Pycharm by going to `Settings > Tools > File Watchers > Import` 1. And finally blender has to be running with the send2ue addon enabled and clicking `Pipeline > Utilities > Start RPC Servers` Now PyCharm should reload your addons on file save events. diff --git a/docs/contributing/documentation.md b/docs/contributing/documentation.md new file mode 100644 index 00000000..e22ad4eb --- /dev/null +++ b/docs/contributing/documentation.md @@ -0,0 +1,42 @@ +# Help Document +Having accurate and up to date documentation is important, so that is why we have made it easy to submit changes to our documentation. All the documentation pages are written in markdown, but html tags are supported. + +## Editing a Page +To edit an existing page, click the link "Help us improve this page!" in the footer of the page you want to edit. + +![1](./images/documentation/1.png) + +You will then be prompted to make your own fork of the repository. Click 'Fork this repository'. + +![2](./images/documentation/2.jpg) + +Edit the markdown file and click 'Propose changes'. + +![3](./images/documentation/3.jpg) + +Then create a pull request. + +![4](./images/documentation/4.jpg) + +After your pull request is merged in a new deployment of the site will be made. + +## Testing Locally +The documentation sites are static html sites that are generated using [mkdocs](https://www.mkdocs.org/). To get the docs working locally run these commands: + +``` shell +pip install -r requirements.txt +mkdocs serve +``` + +The site should now be available to preview at: + +[http://localhost:8080/](http://localhost:8000/) + + +# Building +The can be built into a single static html site by running: +```shell +mkdocs build +``` + +They are built and deployed using this [workflow](https://github.com/poly-hammer/BlenderTools/.github/workflows/docs.yml) diff --git a/docs/main/contributing/images/development/1.jpg b/docs/contributing/images/development/1.jpg similarity index 100% rename from docs/main/contributing/images/development/1.jpg rename to docs/contributing/images/development/1.jpg diff --git a/docs/main/contributing/images/development/2.jpg b/docs/contributing/images/development/2.jpg similarity index 100% rename from docs/main/contributing/images/development/2.jpg rename to docs/contributing/images/development/2.jpg diff --git a/docs/main/contributing/images/development/3.png b/docs/contributing/images/development/3.png similarity index 100% rename from docs/main/contributing/images/development/3.png rename to docs/contributing/images/development/3.png diff --git a/docs/main/contributing/images/development/4.png b/docs/contributing/images/development/4.png similarity index 100% rename from docs/main/contributing/images/development/4.png rename to docs/contributing/images/development/4.png diff --git a/docs/main/contributing/images/documentation/1.png b/docs/contributing/images/documentation/1.png similarity index 100% rename from docs/main/contributing/images/documentation/1.png rename to docs/contributing/images/documentation/1.png diff --git a/docs/main/contributing/images/documentation/2.jpg b/docs/contributing/images/documentation/2.jpg similarity index 100% rename from docs/main/contributing/images/documentation/2.jpg rename to docs/contributing/images/documentation/2.jpg diff --git a/docs/main/contributing/images/documentation/3.jpg b/docs/contributing/images/documentation/3.jpg similarity index 100% rename from docs/main/contributing/images/documentation/3.jpg rename to docs/contributing/images/documentation/3.jpg diff --git a/docs/main/contributing/images/documentation/4.jpg b/docs/contributing/images/documentation/4.jpg similarity index 100% rename from docs/main/contributing/images/documentation/4.jpg rename to docs/contributing/images/documentation/4.jpg diff --git a/docs/main/contributing/testing.md b/docs/contributing/testing.md similarity index 100% rename from docs/main/contributing/testing.md rename to docs/contributing/testing.md diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml deleted file mode 100644 index 19a47fe5..00000000 --- a/docs/docker-compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '3.9' - -services: - builds-docs: - image: node:18-alpine - volumes: - - ./:/tmp/docs - environment: - PROD: 1 - GA_ID: $GA_ID - working_dir: /tmp/docs - entrypoint: npm - command: run build diff --git a/docs/main/images/1.png b/docs/images/1.png similarity index 100% rename from docs/main/images/1.png rename to docs/images/1.png diff --git a/docs/main/images/send2ue/1.gif b/docs/images/send2ue/1.gif similarity index 100% rename from docs/main/images/send2ue/1.gif rename to docs/images/send2ue/1.gif diff --git a/docs/main/images/send2ue/2.png b/docs/images/send2ue/2.png similarity index 100% rename from docs/main/images/send2ue/2.png rename to docs/images/send2ue/2.png diff --git a/docs/main/images/send2ue/4.gif b/docs/images/send2ue/4.gif similarity index 100% rename from docs/main/images/send2ue/4.gif rename to docs/images/send2ue/4.gif diff --git a/docs/main/images/ue2rigify/1.gif b/docs/images/ue2rigify/1.gif similarity index 100% rename from docs/main/images/ue2rigify/1.gif rename to docs/images/ue2rigify/1.gif diff --git a/docs/main/images/ue2rigify/2.png b/docs/images/ue2rigify/2.png similarity index 100% rename from docs/main/images/ue2rigify/2.png rename to docs/images/ue2rigify/2.png diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..fe6fe501 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,22 @@ +# Addons + +## Send to Unreal + +![1](./images/send2ue/1.gif) + +A one-click solution for sending assets from Blender to Unreal Engine. + +* [Read Docs](./send2ue) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=Send+to+Unreal&expanded=true) + + +## UE to Rigify + +![1](./images/ue2rigify/1.gif) + +A node based retargeting system for Blender's +[Rigify](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/index.html) addon. Quickly retarget and author +new animation on unreal marketplace assets and more! + +* [Read Docs](./ue2rigify) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=UE+to+Rigify&expanded=true) \ No newline at end of file diff --git a/docs/main/.vuepress/config.ts b/docs/main/.vuepress/config.ts deleted file mode 100644 index 45deb441..00000000 --- a/docs/main/.vuepress/config.ts +++ /dev/null @@ -1,50 +0,0 @@ -const {description, repository} = require('../../package') -const { getRootPath } = require('../../path') -import { defaultTheme } from '@vuepress/theme-default' -import { defineUserConfig } from '@vuepress/cli' -import { palettePlugin } from '@vuepress/plugin-palette' -// @ts-ignore -import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics' - - -export default defineUserConfig({ - title: 'Documentation', - description: description, - base: getRootPath(), - theme: defaultTheme({ - repo: repository, - docsDir: 'docs/main', - editLinkText: 'Help us improve this page!', - lastUpdated: false, - - navbar: [ - { - text: 'Home', - link: '/', - } - ], - sidebar: { - '/': [ - { - text: 'Blender', - children: [ - '/' - ] - }, - { - text: 'Contributing', - children: [ - '/contributing/development', - '/contributing/documentation', - '/contributing/testing', - ] - } - ], - } - }), - - plugins: [ - palettePlugin({preset: 'sass'}), - googleAnalyticsPlugin({id: process.env.GA_ID}) - ] -}) diff --git a/docs/main/.vuepress/styles/index.scss b/docs/main/.vuepress/styles/index.scss deleted file mode 100644 index 3fa2aaa0..00000000 --- a/docs/main/.vuepress/styles/index.scss +++ /dev/null @@ -1,9 +0,0 @@ -:root { - // brand colors - --c-brand: #4289b9 !important; - --c-brand-light: #469fcd !important; - - // custom container colors - --c-tip: #469fcd !important; - --c-text-accent: #4289b9 !important; -} diff --git a/docs/main/contributing/documentation.md b/docs/main/contributing/documentation.md deleted file mode 100644 index 5317d1ff..00000000 --- a/docs/main/contributing/documentation.md +++ /dev/null @@ -1,63 +0,0 @@ -# Help Document -Having accurate and up to date documentation is important, so that is why we have made it easy to submit changes to our documentation. All the documentation pages are written in markdown, but html tags are supported. - -## Editing a Page -To edit an existing page, click the link "Help us improve this page!" in the footer of the page you want to edit. - -![1](./images/documentation/1.png) - -You will then be prompted to make your own fork of the repository. Click 'Fork this repository'. - -![2](./images/documentation/2.jpg) - -Edit the markdown file and click 'Propose changes'. - -![3](./images/documentation/3.jpg) - -Then create a pull request. - -![4](./images/documentation/4.jpg) - -After your pull request is merged in a new deployment of the site will be made. - -## Testing Locally -The documentation sites are static html sites that are generated using vuepress. To get up and running with vuepress. -packages are managed by `npm`. So first install the latest version of [node](https://nodejs.org/en/) -Once you have node and npm installed switch to the `/docs` folder and start the server for the site you want to preview by -running these commands: - -``` shell -cd ./docs -npm install -npm run dev-main -``` - -The site should now be available to preview at: - -[http://localhost:8080/](http://localhost:8080/) - -There are multiple sites in the `docs` folder each site can be run like so: -* `npm run dev-main` -* `npm run dev-send2ue` -* `npm run dev-ue2rigify` - -For further information on how to customize this site check out -the [vuepress documentation](https://v2.vuepress.vuejs.org/) - -::: tip Note -If you notice a local site taking longer than expected to load, the issue may be caused by browser plugins -(ex: adblock). Disable browser plugins that may block .gif content to resolve the issue. -::: - -# Building -All the sites get built into a single static html site when running: -```shell -cd ./docs -docker-compose up -``` - -If successful, a `dist` folder should get generated in the `docs` folder. These files are what is deployed to the server. -You can serve them locally with: -```shell -python -m http.server --directory ./dist -``` diff --git a/docs/main/index.md b/docs/main/index.md deleted file mode 100644 index 5c340cf2..00000000 --- a/docs/main/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -home: false ---- -# Addons - -## Send to Unreal - -![1](./images/send2ue/1.gif) - -A one-click solution for sending assets from Blender to Unreal Engine. - -* [Read Docs](./send2ue) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=Send+to+Unreal&expanded=true) - -::: tip Note - If you get a 404 error when you click the `Download Addon` link above, then you will need to sign in to your github account and link it with your Epic Games account. -Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) on how to link your accounts. -::: - - -## UE to Rigify - -![1](./images/ue2rigify/1.gif) - -A node based retargeting system for Blender's -[Rigify](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/index.html) addon. Quickly retarget and author -new animation on unreal marketplace assets and more! - -* [Read Docs](./ue2rigify) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=UE+to+Rigify&expanded=true) - - -::: tip Note - If you get a 404 error when you click the `Download Addon` link above, then you will need to sign in to your github account and link it with your Epic Games account. -Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) on how to link your accounts. -::: diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 667d4420..00000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,6661 +0,0 @@ -{ - "name": "BlenderTools", - "version": "0.0.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "BlenderTools", - "version": "0.0.1", - "license": "MIT", - "dependencies": { - "vuepress": "^2.0.0-rc.0" - }, - "devDependencies": { - "@vuepress/cli": "^2.0.0-beta.66", - "@vuepress/plugin-google-analytics": "^2.0.0-rc.0", - "@vuepress/plugin-palette": "^2.0.0-beta.66" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.6.tgz", - "integrity": "sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz", - "integrity": "sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.6.tgz", - "integrity": "sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz", - "integrity": "sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz", - "integrity": "sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz", - "integrity": "sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz", - "integrity": "sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz", - "integrity": "sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz", - "integrity": "sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz", - "integrity": "sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz", - "integrity": "sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz", - "integrity": "sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz", - "integrity": "sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz", - "integrity": "sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz", - "integrity": "sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz", - "integrity": "sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz", - "integrity": "sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz", - "integrity": "sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz", - "integrity": "sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz", - "integrity": "sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz", - "integrity": "sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz", - "integrity": "sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@mdit-vue/plugin-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-1.0.0.tgz", - "integrity": "sha512-ZXsJwxkG5yyTHARIYbR74cT4AZ0SfMokFFjiHYCbypHIeYWgJhso4+CZ8+3V9EWFG3EHlGoKNGqKp9chHnqntQ==", - "dependencies": { - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-1.0.0.tgz", - "integrity": "sha512-MMA7Ny+YPZA7eDOY1t4E+rKuEWO39mzDdP/M68fKdXJU6VfcGkPr7gnpnJfW2QBJ5qIvMrK/3lDAA2JBy5TfpA==", - "dependencies": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "gray-matter": "^4.0.3", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-headers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-1.0.0.tgz", - "integrity": "sha512-0rK/iKy6x13d/Pp5XxdLBshTD0+YjZvtHIaIV+JO+/H2WnOv7oaRgs48G5d44z3XJVUE2u6fNnTlI169fef0/A==", - "dependencies": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-sfc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-1.0.0.tgz", - "integrity": "sha512-agMUe0fY4YHxsZivSvplBwRwrFvsIf/JNUJCAYq1+2Sg9+2hviTBZwjZDxYqHDHOVLtiNr+wuo68tE24mAx3AQ==", - "dependencies": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-title": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-1.0.0.tgz", - "integrity": "sha512-8yC60fCZ95xcJ/cvJH4Lv43Rs4k+33UGyKrRWj5J8TNyMwUyGcwur0XyPM+ffJH4/Bzq4myZLsj/TTFSkXRxvw==", - "dependencies": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-toc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-1.0.0.tgz", - "integrity": "sha512-WN8blfX0X/5Nolic0ClDWP7eVo9IB+U4g0jbycX3lolIZX5Bai1UpsD3QYZr5VVsPbQJMKMGvTrCEtCNTGvyWQ==", - "dependencies": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/shared": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-1.0.0.tgz", - "integrity": "sha512-nbYBfmEi+pR2Lm0Z6TMVX2/iBjfr/kGEsHW8CC0rQw+3+sG5dY6VG094HuFAkiAmmvZx9DZZb+7ZMWp9vkwCRw==", - "dependencies": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-1.0.0.tgz", - "integrity": "sha512-xeF5+sHLzRNF7plbksywKCph4qli20l72of2fMlZQQ7RECvXYrRkE9+bjRFQCyULC7B8ydUYbpbkux5xJlVWyw==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz", - "integrity": "sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz", - "integrity": "sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz", - "integrity": "sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz", - "integrity": "sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz", - "integrity": "sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz", - "integrity": "sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz", - "integrity": "sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz", - "integrity": "sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz", - "integrity": "sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz", - "integrity": "sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz", - "integrity": "sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz", - "integrity": "sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", - "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==" - }, - "node_modules/@types/jsonfile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", - "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "node_modules/@types/markdown-it": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.6.tgz", - "integrity": "sha512-0VqpvusJn1/lwRegCxcHVdmLfF+wIsprsKMC9xW8UPcTxhFcQtoN/fBU1zMe8pH7D/RuueMh2CaBaNv+GrLqTw==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/markdown-it-emoji": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.4.tgz", - "integrity": "sha512-H6ulk/ZmbDxOayPwI/leJzrmoW1YKX1Z+MVSCHXuYhvqckV4I/c+hPTf6UiqJyn2avWugfj30XroheEb6/Ekqg==", - "dependencies": { - "@types/markdown-it": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "18.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.4.tgz", - "integrity": "sha512-WdlVphvfR/GJCLEMbNA8lJ0lhFNBj4SW3O+O5/cEGw9oYrv0al9zTwuQsq+myDUXgNx2jgBynoVgZ2MMJ6pbow==" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.0.tgz", - "integrity": "sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0 || ^5.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz", - "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz", - "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==", - "dependencies": { - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz", - "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-ssr": "3.3.8", - "@vue/reactivity-transform": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.31", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz", - "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==", - "dependencies": { - "@vue/compiler-dom": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", - "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" - }, - "node_modules/@vue/reactivity": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz", - "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==", - "dependencies": { - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz", - "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz", - "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==", - "dependencies": { - "@vue/reactivity": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz", - "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==", - "dependencies": { - "@vue/runtime-core": "3.3.8", - "@vue/shared": "3.3.8", - "csstype": "^3.1.2" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz", - "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==", - "dependencies": { - "@vue/compiler-ssr": "3.3.8", - "@vue/shared": "3.3.8" - }, - "peerDependencies": { - "vue": "3.3.8" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz", - "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==" - }, - "node_modules/@vuepress/bundler-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-rX8S8IYpqqlJfNPstS/joorpxXx/4WuE7+gDM31i2HUrxOKGZVzq8ZsRRRU2UdoTwHZSd3LpUS4sMtxE5xLK1A==", - "dependencies": { - "@vitejs/plugin-vue": "^4.5.0", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "autoprefixer": "^10.4.16", - "connect-history-api-fallback": "^2.0.0", - "postcss": "^8.4.31", - "postcss-load-config": "^4.0.1", - "rollup": "^4.4.1", - "vite": "~5.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/cli": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-rc.0.tgz", - "integrity": "sha512-XWSIFO9iOR7N4O2lXIwS5vZuLjU9WU/aGAtmhMWEMxrdMx7TQaJbgrfpTUEbHMf+cPI1DXBbUbtmkqIvtfOV0w==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "cac": "^6.7.14", - "chokidar": "^3.5.3", - "envinfo": "^7.11.0", - "esbuild": "~0.19.5" - }, - "bin": { - "vuepress-cli": "bin/vuepress.js" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-active-header-links": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.0.tgz", - "integrity": "sha512-UJdXLYNGL5Wjy5YGY8M2QgqT75bZ95EHebbqGi8twBdIJE9O+bM+dPJyYtAk2PIVqFORiw3Hj+PchsNSxdn9+g==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-back-to-top": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.0.tgz", - "integrity": "sha512-6GPfuzV5lkAnR00BxRUhqMXwMWt741alkq2R6bln4N8BneSOwEpX/7vi19MGf232aKdS/Va4pF5p0/nJ8Sed/g==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-container": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-rc.0.tgz", - "integrity": "sha512-b7vrLN11YE7qiUDPfA3N9P7Z8fupe9Wbcr9KAE/bmfZ9VT4d6kzpVyoU7XHi99XngitsmnkaXP4aBvBF1c2AnA==", - "dependencies": { - "@types/markdown-it": "^13.0.6", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-container": "^3.0.0" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-external-link-icon": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-rc.0.tgz", - "integrity": "sha512-o8bk0oIlj/BkKc02mq91XLDloq1VOz/8iNcRwKAeqBE6svXzdYiyoTGet0J/4iPuAetsCn75S57W6RioDJHMnQ==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-git": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.0.tgz", - "integrity": "sha512-r7UF77vZxaYeJQLygzodKv+15z3/dTLuGp4VcYO21W6BlJZvd4u9zqgiV7A//bZQvK4+3Hprylr0G3KgXqMewA==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "execa": "^8.0.1" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-google-analytics": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-google-analytics/-/plugin-google-analytics-2.0.0-rc.0.tgz", - "integrity": "sha512-rkYW2LGkLAfRFtaFWVPr1V2mS6hwgYhn2hLeJAF5xHlC3PcjCiSV0cqH7ooeCo+FBJUlCtMQ9N8iSNl63vd7VQ==", - "dev": true, - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dev": true, - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dev": true, - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dev": true, - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dev": true, - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dev": true, - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-medium-zoom": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.0.tgz", - "integrity": "sha512-peU1lYKsmKikIe/0pkJuHzD/k6xW2TuqdvKVhV4I//aOE1WxsREKJ4ACcldmoIsnysoDydAUqKT6xDPGyDsH2g==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "medium-zoom": "^1.1.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-nprogress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.0.tgz", - "integrity": "sha512-rI+eK0Pg1KiZE+7hGmDUeSbgdWCid8Vnw0hFKNmjinDzGVmx4m03M6qfvclsI0SryH+lR7itZGLaR4gbTlrz/w==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-palette": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.0.tgz", - "integrity": "sha512-wW70SCp3/K7s1lln5YQsBGTog2WXaQv5piva5zhXcQ47YGf4aAJpThDa5C/ot4HhkPOKn8Iz5s0ckxXZzW8DIg==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "chokidar": "^3.5.3" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-prismjs": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.0.tgz", - "integrity": "sha512-c5WRI7+FhVjdbymOKQ8F2KY/Bnv7aQtWScVk8vCMUimNi7v7Wff/A/i3KSFNz/tge3LxiAeH/Dc2WS/OnQXwCg==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "prismjs": "^1.29.0" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-theme-data": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-rc.0.tgz", - "integrity": "sha512-FXY3/Ml+rM6gNKvwdBF6vKAcwnSvtXCzKgQwJAw3ppQTKUkLcbOxqM+h4d8bzHWAAvdnEvQFug5uEZgWllBQbA==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/theme-default": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.0.tgz", - "integrity": "sha512-I8Y08evDmMuD1jh3NftPpFFSlCWOizQDJLjN7EQwcg7jiAP4A7c2REo6nBN2EmP24Mi7UrRM+RnytHR5V+pElA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/plugin-active-header-links": "2.0.0-rc.0", - "@vuepress/plugin-back-to-top": "2.0.0-rc.0", - "@vuepress/plugin-container": "2.0.0-rc.0", - "@vuepress/plugin-external-link-icon": "2.0.0-rc.0", - "@vuepress/plugin-git": "2.0.0-rc.0", - "@vuepress/plugin-medium-zoom": "2.0.0-rc.0", - "@vuepress/plugin-nprogress": "2.0.0-rc.0", - "@vuepress/plugin-palette": "2.0.0-rc.0", - "@vuepress/plugin-prismjs": "2.0.0-rc.0", - "@vuepress/plugin-theme-data": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "sass": "^1.69.5", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "peerDependencies": { - "sass-loader": "^13.3.2" - }, - "peerDependenciesMeta": { - "sass-loader": { - "optional": true - } - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vueuse/core": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", - "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", - "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.6.1", - "@vueuse/shared": "10.6.1", - "vue-demi": ">=0.14.6" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", - "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", - "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", - "dependencies": { - "vue-demi": ">=0.14.6" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001563", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", - "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.588", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", - "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==" - }, - "node_modules/emoji-regex": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", - "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" - }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esbuild": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.6.tgz", - "integrity": "sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.6", - "@esbuild/android-arm64": "0.19.6", - "@esbuild/android-x64": "0.19.6", - "@esbuild/darwin-arm64": "0.19.6", - "@esbuild/darwin-x64": "0.19.6", - "@esbuild/freebsd-arm64": "0.19.6", - "@esbuild/freebsd-x64": "0.19.6", - "@esbuild/linux-arm": "0.19.6", - "@esbuild/linux-arm64": "0.19.6", - "@esbuild/linux-ia32": "0.19.6", - "@esbuild/linux-loong64": "0.19.6", - "@esbuild/linux-mips64el": "0.19.6", - "@esbuild/linux-ppc64": "0.19.6", - "@esbuild/linux-riscv64": "0.19.6", - "@esbuild/linux-s390x": "0.19.6", - "@esbuild/linux-x64": "0.19.6", - "@esbuild/netbsd-x64": "0.19.6", - "@esbuild/openbsd-x64": "0.19.6", - "@esbuild/sunos-x64": "0.19.6", - "@esbuild/win32-arm64": "0.19.6", - "@esbuild/win32-ia32": "0.19.6", - "@esbuild/win32-x64": "0.19.6" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", - "dependencies": { - "@sindresorhus/merge-streams": "^1.0.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", - "engines": { - "node": ">=14" - } - }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it-container": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", - "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==" - }, - "node_modules/markdown-it-emoji": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", - "integrity": "sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==" - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/medium-zoom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.0.tgz", - "integrity": "sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.5.0", - "@rollup/rollup-android-arm64": "4.5.0", - "@rollup/rollup-darwin-arm64": "4.5.0", - "@rollup/rollup-darwin-x64": "4.5.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.5.0", - "@rollup/rollup-linux-arm64-gnu": "4.5.0", - "@rollup/rollup-linux-arm64-musl": "4.5.0", - "@rollup/rollup-linux-x64-gnu": "4.5.0", - "@rollup/rollup-linux-x64-musl": "4.5.0", - "@rollup/rollup-win32-arm64-msvc": "4.5.0", - "@rollup/rollup-win32-ia32-msvc": "4.5.0", - "@rollup/rollup-win32-x64-msvc": "4.5.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-debounce": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", - "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/vite": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.5.tgz", - "integrity": "sha512-OekeWqR9Ls56f3zd4CaxzbbS11gqYkEiBtnWFFgYR2WV8oPJRRKq0mpskYy/XaoCL3L7VINDhqqOMNDiYdGvGg==", - "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz", - "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==", - "dependencies": { - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-sfc": "3.3.8", - "@vue/runtime-dom": "3.3.8", - "@vue/server-renderer": "3.3.8", - "@vue/shared": "3.3.8" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", - "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", - "dependencies": { - "@vue/devtools-api": "^6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/vuepress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.0.tgz", - "integrity": "sha512-sydt/B7+pIw926G5PntYmptLkC5o2buXKh+WR1+P2KnsvkXU+UGnQrJJ0FBvu/4RNuY99tkUZd59nyPhEmRrCg==", - "dependencies": { - "vuepress-vite": "2.0.0-rc.0" - }, - "bin": { - "vuepress": "bin/vuepress.js" - }, - "engines": { - "node": ">=18.16.0" - } - }, - "node_modules/vuepress/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/vuepress/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/vuepress/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/vuepress/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/vuepress/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/vuepress/node_modules/vuepress-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress-vite/-/vuepress-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-+2XBejeiskPyr2raBeA2o4uDFDsjtadpUVmtio3qqFtQpOhidz/ORuiTLr2UfLtFn1ASIHP6Vy2YjQ0e/TeUVw==", - "dependencies": { - "@vuepress/bundler-vite": "2.0.0-rc.0", - "@vuepress/cli": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/theme-default": "2.0.0-rc.0", - "vue": "^3.3.8" - }, - "bin": { - "vuepress": "bin/vuepress.js", - "vuepress-vite": "bin/vuepress.js" - }, - "engines": { - "node": ">=18.16.0" - }, - "peerDependencies": { - "@vuepress/client": "2.0.0-rc.0", - "vue": "^3.3.4" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", - "engines": { - "node": ">= 14" - } - } - }, - "dependencies": { - "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==" - }, - "@esbuild/android-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.6.tgz", - "integrity": "sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz", - "integrity": "sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.6.tgz", - "integrity": "sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz", - "integrity": "sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz", - "integrity": "sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz", - "integrity": "sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz", - "integrity": "sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz", - "integrity": "sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz", - "integrity": "sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz", - "integrity": "sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz", - "integrity": "sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz", - "integrity": "sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz", - "integrity": "sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz", - "integrity": "sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz", - "integrity": "sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz", - "integrity": "sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz", - "integrity": "sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz", - "integrity": "sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz", - "integrity": "sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz", - "integrity": "sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz", - "integrity": "sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz", - "integrity": "sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==", - "optional": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@mdit-vue/plugin-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-1.0.0.tgz", - "integrity": "sha512-ZXsJwxkG5yyTHARIYbR74cT4AZ0SfMokFFjiHYCbypHIeYWgJhso4+CZ8+3V9EWFG3EHlGoKNGqKp9chHnqntQ==", - "requires": { - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-1.0.0.tgz", - "integrity": "sha512-MMA7Ny+YPZA7eDOY1t4E+rKuEWO39mzDdP/M68fKdXJU6VfcGkPr7gnpnJfW2QBJ5qIvMrK/3lDAA2JBy5TfpA==", - "requires": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "gray-matter": "^4.0.3", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-headers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-1.0.0.tgz", - "integrity": "sha512-0rK/iKy6x13d/Pp5XxdLBshTD0+YjZvtHIaIV+JO+/H2WnOv7oaRgs48G5d44z3XJVUE2u6fNnTlI169fef0/A==", - "requires": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-sfc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-1.0.0.tgz", - "integrity": "sha512-agMUe0fY4YHxsZivSvplBwRwrFvsIf/JNUJCAYq1+2Sg9+2hviTBZwjZDxYqHDHOVLtiNr+wuo68tE24mAx3AQ==", - "requires": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-title": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-1.0.0.tgz", - "integrity": "sha512-8yC60fCZ95xcJ/cvJH4Lv43Rs4k+33UGyKrRWj5J8TNyMwUyGcwur0XyPM+ffJH4/Bzq4myZLsj/TTFSkXRxvw==", - "requires": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-toc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-1.0.0.tgz", - "integrity": "sha512-WN8blfX0X/5Nolic0ClDWP7eVo9IB+U4g0jbycX3lolIZX5Bai1UpsD3QYZr5VVsPbQJMKMGvTrCEtCNTGvyWQ==", - "requires": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/shared": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-1.0.0.tgz", - "integrity": "sha512-nbYBfmEi+pR2Lm0Z6TMVX2/iBjfr/kGEsHW8CC0rQw+3+sG5dY6VG094HuFAkiAmmvZx9DZZb+7ZMWp9vkwCRw==", - "requires": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-1.0.0.tgz", - "integrity": "sha512-xeF5+sHLzRNF7plbksywKCph4qli20l72of2fMlZQQ7RECvXYrRkE9+bjRFQCyULC7B8ydUYbpbkux5xJlVWyw==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/rollup-android-arm-eabi": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz", - "integrity": "sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==", - "optional": true - }, - "@rollup/rollup-android-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz", - "integrity": "sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==", - "optional": true - }, - "@rollup/rollup-darwin-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz", - "integrity": "sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==", - "optional": true - }, - "@rollup/rollup-darwin-x64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz", - "integrity": "sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==", - "optional": true - }, - "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz", - "integrity": "sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==", - "optional": true - }, - "@rollup/rollup-linux-arm64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz", - "integrity": "sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==", - "optional": true - }, - "@rollup/rollup-linux-arm64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz", - "integrity": "sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==", - "optional": true - }, - "@rollup/rollup-linux-x64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz", - "integrity": "sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==", - "optional": true - }, - "@rollup/rollup-linux-x64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz", - "integrity": "sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==", - "optional": true - }, - "@rollup/rollup-win32-arm64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz", - "integrity": "sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==", - "optional": true - }, - "@rollup/rollup-win32-ia32-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz", - "integrity": "sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==", - "optional": true - }, - "@rollup/rollup-win32-x64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz", - "integrity": "sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==", - "optional": true - }, - "@sindresorhus/merge-streams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", - "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==" - }, - "@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "requires": { - "@types/ms": "*" - } - }, - "@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "requires": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "@types/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==" - }, - "@types/jsonfile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", - "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", - "requires": { - "@types/node": "*" - } - }, - "@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "@types/markdown-it": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.6.tgz", - "integrity": "sha512-0VqpvusJn1/lwRegCxcHVdmLfF+wIsprsKMC9xW8UPcTxhFcQtoN/fBU1zMe8pH7D/RuueMh2CaBaNv+GrLqTw==", - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/markdown-it-emoji": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.4.tgz", - "integrity": "sha512-H6ulk/ZmbDxOayPwI/leJzrmoW1YKX1Z+MVSCHXuYhvqckV4I/c+hPTf6UiqJyn2avWugfj30XroheEb6/Ekqg==", - "requires": { - "@types/markdown-it": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "18.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.4.tgz", - "integrity": "sha512-WdlVphvfR/GJCLEMbNA8lJ0lhFNBj4SW3O+O5/cEGw9oYrv0al9zTwuQsq+myDUXgNx2jgBynoVgZ2MMJ6pbow==" - }, - "@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "@vitejs/plugin-vue": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.0.tgz", - "integrity": "sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==", - "requires": {} - }, - "@vue/compiler-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz", - "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==", - "requires": { - "@babel/parser": "^7.23.0", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz", - "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==", - "requires": { - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/compiler-sfc": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz", - "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==", - "requires": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-ssr": "3.3.8", - "@vue/reactivity-transform": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.31", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-ssr": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz", - "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==", - "requires": { - "@vue/compiler-dom": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/devtools-api": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", - "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" - }, - "@vue/reactivity": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz", - "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==", - "requires": { - "@vue/shared": "3.3.8" - } - }, - "@vue/reactivity-transform": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz", - "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==", - "requires": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, - "@vue/runtime-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz", - "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==", - "requires": { - "@vue/reactivity": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/runtime-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz", - "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==", - "requires": { - "@vue/runtime-core": "3.3.8", - "@vue/shared": "3.3.8", - "csstype": "^3.1.2" - } - }, - "@vue/server-renderer": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz", - "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==", - "requires": { - "@vue/compiler-ssr": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/shared": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz", - "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==" - }, - "@vuepress/bundler-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-rX8S8IYpqqlJfNPstS/joorpxXx/4WuE7+gDM31i2HUrxOKGZVzq8ZsRRRU2UdoTwHZSd3LpUS4sMtxE5xLK1A==", - "requires": { - "@vitejs/plugin-vue": "^4.5.0", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "autoprefixer": "^10.4.16", - "connect-history-api-fallback": "^2.0.0", - "postcss": "^8.4.31", - "postcss-load-config": "^4.0.1", - "rollup": "^4.4.1", - "vite": "~5.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/cli": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-rc.0.tgz", - "integrity": "sha512-XWSIFO9iOR7N4O2lXIwS5vZuLjU9WU/aGAtmhMWEMxrdMx7TQaJbgrfpTUEbHMf+cPI1DXBbUbtmkqIvtfOV0w==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "cac": "^6.7.14", - "chokidar": "^3.5.3", - "envinfo": "^7.11.0", - "esbuild": "~0.19.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-active-header-links": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.0.tgz", - "integrity": "sha512-UJdXLYNGL5Wjy5YGY8M2QgqT75bZ95EHebbqGi8twBdIJE9O+bM+dPJyYtAk2PIVqFORiw3Hj+PchsNSxdn9+g==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-back-to-top": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.0.tgz", - "integrity": "sha512-6GPfuzV5lkAnR00BxRUhqMXwMWt741alkq2R6bln4N8BneSOwEpX/7vi19MGf232aKdS/Va4pF5p0/nJ8Sed/g==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-container": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-rc.0.tgz", - "integrity": "sha512-b7vrLN11YE7qiUDPfA3N9P7Z8fupe9Wbcr9KAE/bmfZ9VT4d6kzpVyoU7XHi99XngitsmnkaXP4aBvBF1c2AnA==", - "requires": { - "@types/markdown-it": "^13.0.6", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-container": "^3.0.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-external-link-icon": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-rc.0.tgz", - "integrity": "sha512-o8bk0oIlj/BkKc02mq91XLDloq1VOz/8iNcRwKAeqBE6svXzdYiyoTGet0J/4iPuAetsCn75S57W6RioDJHMnQ==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-git": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.0.tgz", - "integrity": "sha512-r7UF77vZxaYeJQLygzodKv+15z3/dTLuGp4VcYO21W6BlJZvd4u9zqgiV7A//bZQvK4+3Hprylr0G3KgXqMewA==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "execa": "^8.0.1" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-google-analytics": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-google-analytics/-/plugin-google-analytics-2.0.0-rc.0.tgz", - "integrity": "sha512-rkYW2LGkLAfRFtaFWVPr1V2mS6hwgYhn2hLeJAF5xHlC3PcjCiSV0cqH7ooeCo+FBJUlCtMQ9N8iSNl63vd7VQ==", - "dev": true, - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dev": true, - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dev": true, - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dev": true, - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dev": true, - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dev": true, - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-medium-zoom": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.0.tgz", - "integrity": "sha512-peU1lYKsmKikIe/0pkJuHzD/k6xW2TuqdvKVhV4I//aOE1WxsREKJ4ACcldmoIsnysoDydAUqKT6xDPGyDsH2g==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "medium-zoom": "^1.1.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-nprogress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.0.tgz", - "integrity": "sha512-rI+eK0Pg1KiZE+7hGmDUeSbgdWCid8Vnw0hFKNmjinDzGVmx4m03M6qfvclsI0SryH+lR7itZGLaR4gbTlrz/w==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-palette": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.0.tgz", - "integrity": "sha512-wW70SCp3/K7s1lln5YQsBGTog2WXaQv5piva5zhXcQ47YGf4aAJpThDa5C/ot4HhkPOKn8Iz5s0ckxXZzW8DIg==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "chokidar": "^3.5.3" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-prismjs": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.0.tgz", - "integrity": "sha512-c5WRI7+FhVjdbymOKQ8F2KY/Bnv7aQtWScVk8vCMUimNi7v7Wff/A/i3KSFNz/tge3LxiAeH/Dc2WS/OnQXwCg==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "prismjs": "^1.29.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-theme-data": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-rc.0.tgz", - "integrity": "sha512-FXY3/Ml+rM6gNKvwdBF6vKAcwnSvtXCzKgQwJAw3ppQTKUkLcbOxqM+h4d8bzHWAAvdnEvQFug5uEZgWllBQbA==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/theme-default": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.0.tgz", - "integrity": "sha512-I8Y08evDmMuD1jh3NftPpFFSlCWOizQDJLjN7EQwcg7jiAP4A7c2REo6nBN2EmP24Mi7UrRM+RnytHR5V+pElA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/plugin-active-header-links": "2.0.0-rc.0", - "@vuepress/plugin-back-to-top": "2.0.0-rc.0", - "@vuepress/plugin-container": "2.0.0-rc.0", - "@vuepress/plugin-external-link-icon": "2.0.0-rc.0", - "@vuepress/plugin-git": "2.0.0-rc.0", - "@vuepress/plugin-medium-zoom": "2.0.0-rc.0", - "@vuepress/plugin-nprogress": "2.0.0-rc.0", - "@vuepress/plugin-palette": "2.0.0-rc.0", - "@vuepress/plugin-prismjs": "2.0.0-rc.0", - "@vuepress/plugin-theme-data": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "sass": "^1.69.5", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vueuse/core": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", - "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", - "requires": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.6.1", - "@vueuse/shared": "10.6.1", - "vue-demi": ">=0.14.6" - }, - "dependencies": { - "vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "requires": {} - } - } - }, - "@vueuse/metadata": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", - "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==" - }, - "@vueuse/shared": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", - "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", - "requires": { - "vue-demi": ">=0.14.6" - }, - "dependencies": { - "vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "requires": {} - } - } - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==" - }, - "caniuse-lite": { - "version": "1.0.30001563", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", - "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==" - }, - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "requires": { - "restore-cursor": "^4.0.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==" - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "electron-to-chromium": { - "version": "1.4.588", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", - "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==" - }, - "emoji-regex": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", - "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==" - }, - "esbuild": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.6.tgz", - "integrity": "sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==", - "requires": { - "@esbuild/android-arm": "0.19.6", - "@esbuild/android-arm64": "0.19.6", - "@esbuild/android-x64": "0.19.6", - "@esbuild/darwin-arm64": "0.19.6", - "@esbuild/darwin-x64": "0.19.6", - "@esbuild/freebsd-arm64": "0.19.6", - "@esbuild/freebsd-x64": "0.19.6", - "@esbuild/linux-arm": "0.19.6", - "@esbuild/linux-arm64": "0.19.6", - "@esbuild/linux-ia32": "0.19.6", - "@esbuild/linux-loong64": "0.19.6", - "@esbuild/linux-mips64el": "0.19.6", - "@esbuild/linux-ppc64": "0.19.6", - "@esbuild/linux-riscv64": "0.19.6", - "@esbuild/linux-s390x": "0.19.6", - "@esbuild/linux-x64": "0.19.6", - "@esbuild/netbsd-x64": "0.19.6", - "@esbuild/openbsd-x64": "0.19.6", - "@esbuild/sunos-x64": "0.19.6", - "@esbuild/win32-arm64": "0.19.6", - "@esbuild/win32-ia32": "0.19.6", - "@esbuild/win32-x64": "0.19.6" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" - } - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "optional": true - }, - "get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==" - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", - "requires": { - "@sindresorhus/merge-streams": "^1.0.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - } - }, - "hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, - "human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==" - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==" - }, - "linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "requires": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - } - }, - "magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "requires": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - } - } - }, - "markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "requires": {} - }, - "markdown-it-container": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", - "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==" - }, - "markdown-it-emoji": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", - "integrity": "sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "medium-zoom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - } - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", - "requires": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "requires": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rollup": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.0.tgz", - "integrity": "sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==", - "requires": { - "@rollup/rollup-android-arm-eabi": "4.5.0", - "@rollup/rollup-android-arm64": "4.5.0", - "@rollup/rollup-darwin-arm64": "4.5.0", - "@rollup/rollup-darwin-x64": "4.5.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.5.0", - "@rollup/rollup-linux-arm64-gnu": "4.5.0", - "@rollup/rollup-linux-arm64-musl": "4.5.0", - "@rollup/rollup-linux-x64-gnu": "4.5.0", - "@rollup/rollup-linux-x64-musl": "4.5.0", - "@rollup/rollup-win32-arm64-msvc": "4.5.0", - "@rollup/rollup-win32-ia32-msvc": "4.5.0", - "@rollup/rollup-win32-x64-msvc": "4.5.0", - "fsevents": "~2.3.2" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "requires": { - "bl": "^5.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-debounce": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", - "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "vite": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.5.tgz", - "integrity": "sha512-OekeWqR9Ls56f3zd4CaxzbbS11gqYkEiBtnWFFgYR2WV8oPJRRKq0mpskYy/XaoCL3L7VINDhqqOMNDiYdGvGg==", - "requires": { - "esbuild": "^0.19.3", - "fsevents": "~2.3.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" - } - }, - "vue": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz", - "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==", - "requires": { - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-sfc": "3.3.8", - "@vue/runtime-dom": "3.3.8", - "@vue/server-renderer": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "vue-router": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", - "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", - "requires": { - "@vue/devtools-api": "^6.5.0" - } - }, - "vuepress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.0.tgz", - "integrity": "sha512-sydt/B7+pIw926G5PntYmptLkC5o2buXKh+WR1+P2KnsvkXU+UGnQrJJ0FBvu/4RNuY99tkUZd59nyPhEmRrCg==", - "requires": { - "vuepress-vite": "2.0.0-rc.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "vuepress-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress-vite/-/vuepress-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-+2XBejeiskPyr2raBeA2o4uDFDsjtadpUVmtio3qqFtQpOhidz/ORuiTLr2UfLtFn1ASIHP6Vy2YjQ0e/TeUVw==", - "requires": { - "@vuepress/bundler-vite": "2.0.0-rc.0", - "@vuepress/cli": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/theme-default": "2.0.0-rc.0", - "vue": "^3.3.8" - } - } - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==" - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 6b0305c5..00000000 --- a/docs/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "BlenderTools", - "version": "0.0.1", - "description": "Blender addons that improve the game development workflow between Blender and Unreal.", - "main": "index.js", - "authors": { - "name": "Epic Games Inc.", - "email": "" - }, - "repository": "https://github.com/EpicGamesExt/BlenderTools", - "scripts": { - "dev-main": "vuepress dev main", - "dev-send2ue": "vuepress dev send2ue", - "dev-ue2rigify": "vuepress dev ue2rigify", - "build": "npm install && rm -f -r dist && vuepress build main && vuepress build send2ue && vuepress build ue2rigify && cp -r ./main/.vuepress/dist ./dist && cp -r ./ue2rigify/.vuepress/dist ./dist/ue2rigify && cp -r ./send2ue/.vuepress/dist ./dist/send2ue" - }, - "license": "MIT", - "dependencies": { - "vuepress": "^2.0.0-rc.0" - }, - "devDependencies": { - "@vuepress/cli": "^2.0.0-beta.66", - "@vuepress/plugin-google-analytics": "^2.0.0-rc.0", - "@vuepress/plugin-palette": "^2.0.0-beta.66" - } -} diff --git a/docs/path.js b/docs/path.js deleted file mode 100644 index 4a10bbcb..00000000 --- a/docs/path.js +++ /dev/null @@ -1,21 +0,0 @@ -const {name} = require('./package') - -export const getRootPath = (addon_name='') => { - if (process.env.PROD === '1') { - if (addon_name !== '') - { - return `/${name}/${addon_name}/` - } else { - return `/${name}/` - } - } - if (process.env.TEST === '1') { - if (addon_name !== '') - { - return `/${addon_name}/` - } else { - return '/' - } - } - return '/' -} diff --git a/docs/send2ue/.vuepress/config.ts b/docs/send2ue/.vuepress/config.ts deleted file mode 100644 index ad4c4e00..00000000 --- a/docs/send2ue/.vuepress/config.ts +++ /dev/null @@ -1,96 +0,0 @@ -const {description, repository} = require('../../package') -const { getRootPath } = require('../../path') -import { defaultTheme } from '@vuepress/theme-default' -import { defineUserConfig } from '@vuepress/cli' -import { palettePlugin } from '@vuepress/plugin-palette' -// @ts-ignore -import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics' - - -export default defineUserConfig({ - title: 'Send to Unreal', - description: description, - base: getRootPath('send2ue'), - theme: defaultTheme({ - repo: repository, - docsDir: 'docs/send2ue', - editLinkText: 'Help us improve this page!', - lastUpdated: false, - - navbar: [ - { - text: 'Home', - link: process.env.PROD === '1' ? 'https://epicgamesext.github.io/BlenderTools/' : '/', - target:'_self' - } - ], - sidebar: { - '/': [ - { - text: 'Introduction', - children: [ - '/introduction/quickstart' - ] - }, - { - text: 'Asset Types', - children: [ - '/asset-types/skeletal-mesh', - '/asset-types/static-mesh', - '/asset-types/animation-sequence', - '/asset-types/groom' - ] - }, - { - text: 'Settings', - children: [ - '/settings/paths', - '/settings/export', - '/settings/import', - '/settings/validations', - ] - }, - { - text: 'Customize', - children: [ - '/customize/templates', - '/customize/python-api', - '/customize/extensions' - ] - }, - { - text: 'Supported Extensions', - children: [ - '/extensions/affixes', - '/extensions/combine-assets', - '/extensions/create-post-import-groom-assets', - '/extensions/ue2rigify', - '/extensions/use-immediate-parent-name', - '/extensions/use-collections-as-folders', - '/extensions/instance-assets' - ] - }, - { - text: 'Extras', - children: [ - '/extras/pipeline-menu', - '/extras/addon-preferences', - '/extras/community-extensions', - ] - }, - { - text: 'Trouble Shooting', - children: [ - '/trouble-shooting/faq', - '/trouble-shooting/errors', - ] - } - ], - } - }), - plugins: [ - palettePlugin({preset: 'sass'}), - googleAnalyticsPlugin({id: process.env.GA_ID}) - ] -}) - diff --git a/docs/send2ue/.vuepress/public/images/overview.svg b/docs/send2ue/.vuepress/public/images/overview.svg deleted file mode 100644 index e4264f13..00000000 --- a/docs/send2ue/.vuepress/public/images/overview.svg +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/send2ue/.vuepress/public/images/unreal.png b/docs/send2ue/.vuepress/public/images/unreal.png deleted file mode 100644 index cc9cf783ffa5751ba2f7db4e9b9f582750d66262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10406 zcmYLvc~p{H_rGQ3Z7?fev&^C4mNzvgA{+qUt~b4{H?z1C-+bJ>q(piunfme~-m<^NG*@uJ^yG(_mpKg*uJ#d^Jna(l-O%KV=rAbJh|iP zk%Gf|zy8|sXTIK(Q#R&rU3cVrtmu$i*-BqYU9Zw_kxEFAJl;uIWJrb^s|dnDOtKJ< zWl-(pmEH#HOKrS=RyW7!d_=|LeCW6Gs5XM>3ET7&@vMaG+A87TOi%nIPc<{^_Ttmr zd`G^~@ahv%6=T#?r`2ah%gr{EilxLXcP|=4AGP>{gRrVwOtyGtjc zYjvV{Hij`VgJ(ATKM+@+tf(t{(nGa$nz>J7d?SK2l~r-%6c`a1@r54?oQ*7tE6O>5 zg-^l~(N@A+64pe4Ug{8S@wb+;kY-)8@ZTwptWq*tRT4xD%rV62qs{0X&hJU17nF`u zb=al2-fstDK2SaIiuE|0y-Z~Ngk;v~4g8@`Y(GjmOBx#T$*To;qycI5Yno3>46rR! zlztN}SFlE7$$dPT;8`H%;&T>qaShh(Tji6Y7%x=1Zmssc={(?2>_}GpmZEQO%Cm3*gIN{;TU;-0@P!QJ%diyD-HIFcsr9$jT62 zRqobPaNY%)CK`A)vRqdRwF?G{43(p1h%mDoQ|Eh7RX&dYrQ=r&2fGgOw-)WOfb@#v zU6MkkHfbfGUKAe8_V1l;57Cle6&O>!CH3&Z{d?@^`?Id(RnB&--pM;%a%v3$$bbs1 zz7#?tU@q*YEO! zBrbE-z1b#7Wi8Z{o8nb-miFnADPQZT`4CQja^-C{xD-%zI<+Gy66z)Uz$7fEN~jN( z@?e9dI$P>2gtn*P@q)*lbK3Q!*(TBzj*w5s}uuHBXw3FCC zbd$`3&Ufw}>Z*&dz~aubFNp7g;h%)(#46-n^BS@-k2S3#XjO=NtP)E67+FkRPc8Ig z=U0qLcXWF3&7`f&s;7RM+6CzBZei*pIQOxw+o$jVkXzr}MYFsm(B~RUhf58*a^>@v zkbiKRz1(lAeQp>cl2=~w)hdGdHyt~cxO)osI$GKE2c4gl!}}Vqp>nn1Kkq0=CzH7g zWhX$9xz|$6qH{ZlpcNl!ae2Kyqjs3`3OBZbCdXX)r6V#=Gi6!@-~0ZrXTVg z-0hch-38t#Lp3<6i9Nouf09uX-R!6XU4po3f|WU{lwO++1i)p6*bsRyKSmI}=$pM* z_jAIa(e0>V7E)kHqz}j{fIfT8x~DTzD`bB3(HcD*STj%VEN%epsi?jaZUdw65+o zxv_>ps)^S^pz*bd2gyN5_|R zTn-PwPZp@#C;^wQ>hv5Y9P*Hy74QBdxqYU8e1CQH%DLh63L;8yO=s~#>BcV1K77M$ zuICyf2bxQSS9S^18rZQA;`b*LXWG_YK*XVsk7I!6`Tf32^7qN@In@#nMSMwQo^5RYt~!T&&fAkV&I3FCDSs&_r_3xQXGnM zA=Oq5tJe0lALFeCI|;1q3Bn>CnnGy?PL_BGPL{xovES&rEY8baIC+1X&?l zdl(Z1Skzq83i+=YXJic+8eaQk&LIts6?OG04h7AcpkzT@Z7{1|-swX;Xt55nSde?( zG^r&Rrh7&|o;sJ@mNy~0+{%3ObSy)Ast!NsXo5gKRZ3?BJ<(JC=B);5 zvH?y3ssu9yH(0}$Bo0gSMu|(s;WwS}1B$U_K8ZJ9PM>Jd+V&yX694 z0B*~ECU~c58)1`0i}SQ5)yhl_pg@IRr?8T)F(HEtm$%#@(CWIgd| zU7yVkHFM+V?zj3TSvEXv)YUgxJU`Rob*;0YXh8J}5jkoIn?H7&@q5ykAHp=LzUXN! z(@pxE`Jv7bKpLB;rt?J-Q4I<7ynhJ2iGOo@$o%QVS;rru18|u|DpRP0X6!AFx{iwx7{(T z7RxoTIA$(6`)wKaPq=Nu_FmLvo(A{XTLL1My-6Sbs)#7zx$-;- zU2SxxYDzaehs}(8KVX+_2#OChP0Gt+%rX`$a;he-H}j7?7&AZ=)6~+{g$`3^!+WRA zl5wgqLBC-%k zPy;{rI(JSaJ`}FycJS4w?YC*yTyFw{mfRn8+p?h=vF+wXA8R(;d5JU#-IJ96Wd_zV zPM*Ox)gXks;K!vyHGqU6+*8By$Qo)nwv{|lsAr5(5j3qupN+{QVI0KhCl$Nk`K^Iy zNUxTsy25DedoFOpVZy2$5swJk@rf$`ti_E5nW6+O!Ul1^U}g=ciDdbrIskKXF=`%- znaV|aR?wL|39?-QpPDXwc<8+6HU(_=NB9aLOtgah6=?sW_WhGpdwOqq0u=|k5)zp~ z&7$VOJdWM^{`(^+0^7^9jhGXNe9)Ie-)ogCIYoAh-%0F#lc>=U+{N_^0H_N8K=8sa zrF-D>TJ@o@Jhe5f#t;oZShkhnRf%+0k5~2cUPr*e+iiCHUf*4?J~VnayzfrEsle_HTSrZAIbTn$JrUwr z%Nhf@?PmHfGyjHbG}HnuRyi4ll^K~#f7YPTgov0-`WW!sftlmYKBszyq4(^?k!NED zkSlV_Af1|+V;wKuQrANf^u3cslARQ7|M32f+=nd4hkNxcxXA$dm4Tvd&U_;YYM(a1 zE-Ji4l?nn$zsC@*L$2t~&S_i+(r!_N23i zBT-n07@W|EWBhW%3^=Ait7vw*RE!^2RCVuppz6(Fmb}-JOeqS9X09!awC7cfLk`Ox z7&>I`1e+o2;Qj_cENebZxmBuIUMN9`F_S>$KSzohqrR#DemKXosB4gToRbFo^@?08 zNPlE%$1cKB_&bzW(aA}Uh|*4NK`PlhL&{X*vxTuhtjW< zV+^whd`gt8!b>!-Tez(JHBMy%z9n0pZK+~Rxe`D#(|6}p;yAWoV0eS}6ngP1@(0F^ z8B&Dp!sY5?NC%lux;t=YY&--RIm0#o;fHyoL!XT~Rh8n*xFGfWve#lwv#Z(squUA2Hv33^?X;t&*$n|HW1H{-Sh@I%$GOa|{ZZJ=yAH%NYOtxm|p|UU#RRIfSD*EUg!}BwS<>CZo+z;4uw584Z7OY;*?`K+O z&J95dKYc2eTaz@M8ud><0py-z-}6#!`|#AQ9+sxS1KbFr3)khd;_XAU$-v}i8zy&j zL8B+ZjkOT{rkX9-tF@X*5_-(&VuU_S2g7KIbu0I2?kSgx*XKvt3mu7xig6C68aj;P zwgYm1Lfw^|5|5Z(&ie7HG1aECm3Onp%eGmt&EEv>1r-S91i6L!dUP+A{N<*PnaZE> zg`N#liZU-cpw2&h_~)dT>aCQF>*2h2!+`9qSq)f`rLB_hh~+j$Hm+%^ya>U73ZDAN zI4jLhUdxwvck-E)JQ%Q%$2`~eXU0KnQZc~>uz(Mz5stgOhbmfTG8{8@s)M!ZgcfdY z!8S0Ra#K(ee5TFcYOW(j6>~?;lnsmcuq`Whg~$I&$f2jaspH!k^V^Mk0iE9+fouY< zkcYY>J!e|UJdf9htekY3@k;!2-GwQG&p6gXTQEv`jV$vCB` zOjL54Lzv}s6?jN!JM@QJHhbB>u1R0tV*cAgDlL+E zfsF50Fl$7?jFmHcDh{bX3bkI`fvELJ!?8ReOn49_v;V54Ap$6lA}qD58H#;4i@Nid zDW7jCt6^q5;o;rE_>{| zwDkA_R09Oe%C#Tk0>#@|mi1m%8quDtJj9tFCL5JOy!-xI{IZ5%*+}E90~0;!{NDmo z47IFe)7U~IDolMk7`x85NAx~DXlJ>|dlq$I!klO&!!F>2d zYa!n#=NLZ9e64SB134K`0`z*WbqWs#_`@TMX_qrl3%Gu3z&=Nc#*p;g`$faFe)ok* zoFch2MtLr1vT^&*b9X-P+LTbZ-&qex4=D0X0|V*vzubCOZ}a`0qhrA)%WVs{xn@P6 zDBdrx<}%_CR#O#`XD$#v9C{ce2 zoGQ#6FcbMS?##Zs?wjustf84uFgdKhTmNRbPq#=Ld4__K-2|^Luu8O%8pgGBbfhUg z=&I~7aV65ykd7|RRzmt>EY`>2GJiv$DgooI=5a z=DQshsgvx;{n`3aag!Fr934#Q!KIeY7u2VI-MPUU2s5?JgYzRan{varFIj6jZHw^D zY-CyEzVcxaoHeF;=d8-ze0Scs;|<y|v9jT62F@p9k*H$=K( zys5J6T~wJl#i>-A36o@M$geQBQct>>78<8JIGpTY5WW zw7q?-(eIb+R+>*F8a{uU>w^$WKP69x4o~S%=F#kq37{-=*~pk`P;`a9%MNtl`&V|X zw`}z?^oZo+)vgZPDJ1O0|6# z-y$#K0rT|FqzvP$t5GJCUWUEG^o%xc{1j|6keRk_Lrt+dKuiFn zL9AA9gkM}fWBA;(N}Q(yh|@ryHq6WRAS%c8uf9rgQyW_543P5Ua7WV9kFRIzBk>a& z`{84Z_2z0son!29uA&LDSWDw4tRCI-0@$8h_IJb9bz+webmfzxE29!2FqhyStkq%M&xu`ox7v^+nGO2vn$wdPgtE5R99~KGk zQPmReP8}NFb#Kqtp*?AIk*i~TyLF=n*RAt>nGy-R8Cfsh?SHq67jtE5lf^7t;!NKIsdsc075B_tg)Bc&A%jsQEjVvo&r7-s8v-jR zgnszKc5-*@Jr?4=RyA7{6S=X!A$~@`;4=Q25^nuZrWz~hdc&U)LzR7oaviMLZSNF7 z$G?1x)ebBBhI)N#&qf7ky?!YzYxU_NZ_k^NnnjY^L~eGlR?U7f?P{A*ba4J5OlA-% zvcyz57qi7;+;Q7#3$*3N=&lPc*9HB48$o4eFbfw}m{pK4Nxjto20wngsI=!v|7^|$ zztxv_n_@#Y;z15h)batUr-a;_+S$3Dp7fFM+LxDwsRoCjGjnzp1r-nM^beRqZ1ZS@ zs(yWjvMxegpKjQ~{oO&5v-I`UHEum)!O8x)DWz#g5_Ff6HasEGb}WF&aJsC1tGhV0Io_K zj(&49$^a87pD{^wN)++Zc+TsqS6zI9P=zcgw!c0mL>`v_jOS9MnMr;be(d*O$1o2} zy@+Z;hh2_mSNTn!hX+g+eXwj~wdqfOF1BIEfP9O@n>AR(7@Ms0nsV0aAp+wQ=n57w z&JBQFFRAEIy6RR$E^F z`;LPpL$-XYB~GfJj3^LyT4Vb&GU|G!;hw8>=-cwfTisr=xl0D0HwlrOic#P@;0)z1 zd%AA&p{skijAwRd>}9)MF8cE;eGF}+c)Azd(#n*7%j|Z7$uOr zarYJJqHqyjLU@Gc^^c`>V8;;?2sH|1(#@7#0X>)j(_2#fc6a2G=iiyq)8&-SNO;O) z)N1U+Ny*C#)5yjr88ZJ>tk^MTUFe-6rLO)(_gyt}mp z!g%ApK^Mz=Y?y@=wRiRtL=#C@eIoUHLS57oJCnB!VKKcN?Uh6q5g_X~0q3X86103y z=Sp6#&Eb-&`3(z$6H=k%lwmwDkkloye7cbAbgx?j)_7`oG5Fl6@zoZnx6(c+i z5f}Mu?oR7^@o7Sjl~VG047$Ch=*!C1IPV11p{&ugpyJm@G_C}NN=JKhz4)KQDJ#{P z>m7<>LI2_o%EnVgo3%y^)1U=;%TqCPy$wSvqX*mGdckByaSI%j zIyM=%wiVFmZ+N$_Y-$g%9z~f77oRbfWXLKwoj+?smsbTrjD9?Up?h z-yEc87d$;#xOTe3hwFVvY|u8Z0V5-et3=iw7FC?jrC__UHgg26-C*%|KwL6-Ro+7! zyKVQC4e5OmBtLO_OkR=dhn$q&XeOZg?OFVZBOR$Grh>9jPZT0*RL+_1KG7@C;VG!x z>x(E5f`EB=3nG0D&i#JkBddhx4-kUE=#u_Je+U}ZE*Jl|cg5qaL-N)q<>tK=zejKD z8%G6=c@>JdA8kH!@Rpqs44`PMmF&s~^cmmE1uf69v0#^#DAfZeCCRbFaVx@wjCL-s zr7v+c5>EEvv{Qs95OBq(g|6o7PIp9wO+FV#xs>PMN81o;T;ru+K=Y2j4WxnPNfW=+ zoVuUwsa8=@OZ%4#uu|?wF^rPq;)~2Kx@J+;uZ{jd?eGI&;Yhn{p)Y5+mDa=IT8&~e z_G7kltc8*BoOj7chZ~HJ z>uF?p4cv?7-AcclCtrsQUP0Z(UC*mKRZs!UGF2Xd#mE6sGe4cr)qLE&GkfzxA8HIE zw&HW|Ca3z~I2!w;S*2*b)|&n*E2}}t?;KH}?S!%$7ZN60%OLl!RhD)PD|`I==3iy_ z^k+pUs%7r-jIHsA{!Os6?@>a~u~1d}I{k(UnE(;U**GX|5ANUH4fwHQI7cv@4;Mrb zQyuBAnX@qnBeCUu+Bd|HMR;K0T}!S7;Zhn}ntVbyNs#|YJ$`O; zXwoZZ&wkg_&=7kJh!)*vq zpc!e?$$cF;pGJEC(Qhi^k39@TFQL>A9fZ>oB;B>8!)t%jW`BV6O)2wl^;|t4P3L`5 z9CwT_2^L#Nmd>9VoWU0k5`0+PEg*3_Vn&8s43 z*2M0{CdZOivh~XD6zNZ&0xv)9PfGQc)}2>;FYjl}&e<1#Z8uTEo$NAesqv#LSE!8P zKsWnySqBra=pj*Ow#<-35GUl3=Bo*b0Dfw})0)dMB3wz<399gT*#M}DYPk$hN>0wy z&gCf8)2&gbr32Ax9}SkDAcn2O_iqp>QZ>%fZ;~4r;}dl?0)syWCm1^yp;_$+a(rTZ!a)oC#O1*Ig@#Z#$ai4ot~)DicW04eO`MAf-v~$38EOa|sx(AnVhjiv zCj%t+OUDR18~MYB`fOn02sRXsq?|pTIWXPLFSq?3MB2of?0^Sw<^o!Bcxv{OUS>)6 z(;Bl5_>i!n?29R9Wc|j|I*LjB z+^v^&`_WT3s+U_I`oBetP;0MkL-z>8tqbKt!WHt>t~y6~NN+pVuXBtbj+{)7fi5*X z*6FxrWQ?dh%ha|Y;h}=@eFg)&-}P0L1rT+yiW$r)9EhRsA7Sdv(-U+gZP;|jy$;gO zx*B$gnfUgQZ9~HkwNIQ?6Wnxjm|f2DD|~}*Ja)fVa@lr4&5lpXn*E;?Aw6RI0uU-b z?q#dJF32nkY88vl1Yw$zi>@XmD(YDe%Mmn?E@{r7cg3-<=I0MSjd?Jioz*e?Hq-LH z^$%O#ZZH4LkCE zHr0c_1HQU6+*Mi*su_`~U?}1T9fKa=8>p~!hUR-iz_i=2avob(KDTQlu^YE}U+on? ziaQeSL2^jMxNUXY^?s6GODL0vTe$@wi4;$I!<=DR;t#c*IT>QDO#E64zu73EbkI&H zA=MG6ix*~Yvlfa91?eCj`n$UGQ4%(qUx}Z=U^|{O0w-~+OO8gRfiZEYUbROMu09#t zJM9)K*E>N-Qs4uxlwnLdMI9Zro~-_3LE>zO*eH>#-I|nNPSk$!hVCF(OH~V3ooK<& zX^ZWIv4gpQ;&7&KKKkl5$#$O#stM{@iFXsiMQ{;pZAQ6WwKJ6bhRm1&Inppdlg91!|C8UjFP0+lT- zngt0^S%@c~n8sA0@-n1(h@VflD)39jdN%TOPkFeZ@u# zAwNR|))-Ud@F5%zViInF z5vGjJ4OBvNUvuFzB~Kx@tnCb}rE%4UZB7B Engine > Rendering > Optimizations for grooms to render properly when bound to a skeletal mesh. ![3](./images/groom/4.png) -::: warning Required UE Project Setting -Make sure to have the setting "Support Compute Skin Cache" turned on in Project Settings > Engine > Rendering > Optimizations for grooms to render properly when bound to a skeletal mesh. -![3](./images/groom/4.png) -::: The tool infers an Unreal groom asset based strictly on the content of your `Export` collection. By default, each particle system of type 'Hair' on each mesh in the collection is exported as an individual alembic file, which is @@ -16,19 +17,21 @@ imported to unreal as a groom asset. ![1](./images/groom/1.png) -::: tip Combining Groom Assets -To gain more control over how particle systems are exported, use the [_combine assets_](https://epicgamesext.github.io/BlenderTools/send2ue/extensions/combine-assets.html) -extension that has options such as _combine groom for each mesh_ and more. -::: +!!! tip + + To gain more control over how particle systems are exported, use the [_combine assets_](https://poly-hammer.github.io/BlenderTools/send2ue/extensions/combine-assets.html) + extension that has options such as _combine groom for each mesh_ and more. + + +!!! warning + + Please give each particle system and curves object a unique name across all meshes. While Blender lets particles on + different meshes share the same name, the addon requires each name to be unique to prevent assets getting overwritten + in Unreal. This is because multiple groom assets can be imported into the same directory in unreal, and any + asset with duplicate names will get overwritten. -::: warning -Please give each particle system and curves object a unique name across all meshes. While Blender lets particles on -different meshes share the same name, the addon requires each name to be unique to prevent assets getting overwritten -in Unreal. This is because multiple groom assets can be imported into the same directory in unreal, and any -asset with duplicate names will get overwritten. + ![2](./images/groom/2.png){: style="width:200px"} -drawing -::: ## Curves Objects @@ -40,12 +43,12 @@ the curves object into a hair particle system on the mesh that it’s surfaced t By default, the groom asset will import along with the mesh asset that it is surfaced to. To run a strictly groom asset import (meaning no other asset types will be exported from blender and imported to unreal), all import options (mesh, -animation, textures) must be turned off in your [import settings](https://epicgamesext.github.io/BlenderTools/send2ue/settings/import.html) except for `Groom`. Alternatively, +animation, textures) must be turned off in your [import settings](https://poly-hammer.github.io/BlenderTools/send2ue/settings/import.html) except for `Groom`. Alternatively, the blender `Curves` objects can be placed in the `Export` collection (without their surface mesh objects) which denotes an exclusive groom workflow as well. ## Binding Assets and More -The addon provides an extension called [create post import assets for groom](https://epicgamesext.github.io/BlenderTools/send2ue/extensions/create-post-import-groom-assets.html) +The addon provides an extension called [create post import assets for groom](https://poly-hammer.github.io/BlenderTools/send2ue/extensions/create-post-import-groom-assets.html) to automatically create unreal assets (such as a binding asset) for the imported groom asset. See the extensions section for more information on its usage. diff --git a/docs/send2ue/asset-types/skeletal-mesh.md b/docs/send2ue/asset-types/skeletal-mesh.md index 765a9461..bcf2dadb 100644 --- a/docs/send2ue/asset-types/skeletal-mesh.md +++ b/docs/send2ue/asset-types/skeletal-mesh.md @@ -6,10 +6,10 @@ it is doing: ![overview](./images/skeletal-mesh/overview.svg) -::: tip Note - The armature placed in the `Export` collection must be responsible for deformation, meaning only bones that are -skinned to a mesh. No bones used for control schemes should be put in the `Export` collection. -::: +!!! note + + The armature placed in the `Export` collection must be responsible for deformation, meaning only bones that are + skinned to a mesh. No bones used for control schemes should be put in the `Export` collection. ![1](./images/skeletal-mesh/1.gif) @@ -42,20 +42,20 @@ mesh lod settings. ![5](./images/skeletal-mesh/5.png) -::: tip Note - If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For -example -`SK_Mannequin_LOD0 = SK_Mannequin` -::: +!!! note + + If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For + example + `SK_Mannequin_LOD0 = SK_Mannequin` Also notice that the LOD build settings can be set under the `Import > Editor Settings > Skeletal Mesh LOD Build Settings` group. ![6](./images/skeletal-mesh/6.png) -::: tip Note - The Editor Settings corresponds to what is available in the [EditorSkeletalMeshLibrary](https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EditorSkeletalMeshLibrary.html) in the Unreal Python API: -::: +!!! note + + The Editor Settings corresponds to what is available in the [EditorSkeletalMeshLibrary](https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EditorSkeletalMeshLibrary.html) in the Unreal Python API. ## Only Mesh diff --git a/docs/send2ue/asset-types/static-mesh.md b/docs/send2ue/asset-types/static-mesh.md index f83d891d..4658947d 100644 --- a/docs/send2ue/asset-types/static-mesh.md +++ b/docs/send2ue/asset-types/static-mesh.md @@ -19,27 +19,28 @@ Unreal will handle exporting and importing each LOD. ![3](./images/static-mesh/3.png) -::: tip Note - If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For -example: +!!! note -`pCube1_LOD0 = pCube1` + If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For + example: -`pCube2_lod0_mesh = pCube2` -::: + `pCube1_LOD0 = pCube1` + + `pCube2_lod0_mesh = pCube2` Also notice that the LOD build settings can be set under the `Import > Editor Settings > Static Mesh LOD Build Settings` group. ![4](./images/static-mesh/4.png) -::: tip Note - The Editor Settings corresponds to what is available in the [EditorStaticMeshLibrary](https://docs.unrealengine.com/5.0/en-US/PythonAPI/class/EditorStaticMeshLibrary.html) in the Unreal Python API: -::: +!!! note + + The Editor Settings corresponds to what is available in the [EditorStaticMeshLibrary](https://docs.unrealengine.com/5.0/en-US/PythonAPI/class/EditorStaticMeshLibrary.html) in the Unreal Python API. ## Collisions Simple collision workflows for static meshes are supported by prefixing your collision names with their respective identifiers and making them a child of the mesh. + | Mesh Prefix and Name | Description | | -------------- | ----------------------- | | `UBX_[RenderMeshName]_##` | A Box must be created using a regular rectangular 3D object. You cannot move the vertices around or deform it in any way to make it something other than a rectangular prism, or else it will not work. | @@ -56,9 +57,9 @@ Collisions are imported with the asset that matches the `[RenderMeshName]` after ![6](./images/static-mesh/6.png) -::: tip Note - Collisions must be in the `Export` collection to be exported. -::: +!!! note + + Collisions must be in the `Export` collection to be exported. ## Sockets @@ -70,9 +71,9 @@ Any child mesh that has the pre fix `SOCKET_` in its name will be separately imp ![9](./images/static-mesh/8.png) -::: tip Note - Socket names have the `SOCKET_` prefix stripped out. `SOCKET_socket_01` in blender becomes `socket_01` in unreal. -::: +!!! note + + Socket names have the `SOCKET_` prefix stripped out. `SOCKET_socket_01` in blender becomes `socket_01` in unreal. ## Only Mesh diff --git a/docs/send2ue/customize/extensions.md b/docs/send2ue/customize/extensions.md index 9be43f1f..bd6209a2 100644 --- a/docs/send2ue/customize/extensions.md +++ b/docs/send2ue/customize/extensions.md @@ -1,13 +1,14 @@ # Extensions -::: warning -This feature set is still very new and could be subject to change. -::: +!!! warning -::: tip Supported Extensions -See the Supported Extensions section for details on extensions that ship with the Send to Unreal addon -and are supported by this repository. -::: + This feature set is still very new and could be subject to change. + + +!!! tip + + See the Supported Extensions section for details on extensions that ship with the Send to Unreal addon + and are supported by this repository. Extensions provide a python interface for Send to Unreal users to quickly and cleanly extend its functionality with a minimal amount of code. Within an extension class several things can be defined: @@ -20,10 +21,10 @@ with a minimal amount of code. Within an extension class several things can be d In this diagram each blue arrow that plugs into a blue block represents how the extension factory takes pieces of your extension class and plugs in its logic within the send to unreal operation. -::: tip Note - The queue can run many asset tasks, therefore the extension logic added in the asset task area will be fired as many -times as there are assets. However, anything outside the asset task will be run once per send to unreal operation. -::: +!!! note + + The queue can run many asset tasks, therefore the extension logic added in the asset task area will be fired as many + times as there are assets. However, anything outside the asset task will be run once per send to unreal operation. ## Example Here is a simple example @@ -59,11 +60,11 @@ that prints out the asset data of the mesh, and a validation that checks to ensu equal to "Hello world", otherwise it returns False which terminates the send to unreal operation execution. -::: tip Note - At minimum, an extension must have the class attribute `name` defined. Everything else is optional. A more -advanced extension example is available -[here](https://github.com/EpicGamesExt/BlenderTools/blob/master/tests/test_files/send2ue_extensions/example_extension.py). -::: +!!! note + + At minimum, an extension must have the class attribute `name` defined. Everything else is optional. A more + advanced extension example is available + [here](https://github.com/poly-hammer/BlenderTools/blob/master/tests/test_files/send2ue_extensions/example_extension.py). ### Installation Save the extension code in a folder. This folder is know as the `Extensions Repo Folder`. You can place as many extensions @@ -74,14 +75,14 @@ in this folder as needed. In this example, the file is saved to`C:\extension_rep Then in the Send to Unreal addon preferences set the `Extensions Repo Folder` to `C:\extension_repo`. Then click the `Reload Extensions` button. -::: tip Note - Alternatively, this can be installed with python: -```python -# this is handy for reloading your changes as you develop extensions -bpy.context.preferences.addons['send2ue'].preferences.extensions_repo_path = 'C:\extension_repo' -bpy.ops.send2ue.reload_extensions() -``` -::: +!!! note + + Alternatively, this can be installed with python: + ```python + # this is handy for reloading your changes as you develop extensions + bpy.context.preferences.addons['send2ue'].preferences.extensions_repo_path = 'C:\extension_repo' + bpy.ops.send2ue.reload_extensions() + ``` ### Test Now when we use Send to Unreal to with the default cube, we can see the `asset_data` dictionary printing in the @@ -91,7 +92,7 @@ console and that the cube got sent to the `/Game/example_extension/test/` folder This same approach can be applied to many other use cases where you need to extend the Send to Unreal operation. For practical examples check out the -[send2ue/resources](https://github.com/EpicGamesExt/BlenderTools/tree/master/send2ue/resources/extensions) folder. +[send2ue/resources](https://github.com/poly-hammer/BlenderTools/tree/master/send2ue/resources/extensions) folder. ## Tasks Tasks contain logic for key points within the runtime of the send to unreal @@ -208,9 +209,9 @@ class ExampleExtension(ExtensionBase): name = 'example' hello_property: bpy.props.StringProperty(default='Hello world') ``` -::: tip Note - Properties can be any property type in `bpy.props` -::: +!!! note + + Properties can be any property type in `bpy.props` All properties defined in the extension class get registered as a sub property group within the `send2ue` scene data hierarchy. In the above example, the `hello_property` could be accessed within an @@ -223,10 +224,10 @@ Or globally like: bpy.context.scene.send2ue.extensions.example.hello_property ``` -::: tip Note - Extension properties get saved when the blend file is saved, and can have their values saved to templates -just like the default properties that exist in the Send to Unreal tool. -::: +!!! note + + Extension properties get saved when the blend file is saved, and can have their values saved to templates + just like the default properties that exist in the Send to Unreal tool. ## Asset Data Dictionary During the life cycle of the Send to Unreal operation a dictionary `asset_data` is created that contains all assets @@ -234,10 +235,10 @@ that will be sent in the operation. Per asset, data gets fetched and passed into param in certain extension task methods. i.e `pre_mesh_export(self, asset_data, properties)`. -::: tip Note - Any `asset_data` dictionary value that is prefixed with `_` i.e. `_asset_type` etc. has no effect on how Send to Unreal uses -that data. However, changing values not prefixed with an underscore will change the Send to Unreal behavior. -::: +!!! note + + Any `asset_data` dictionary value that is prefixed with `_` i.e. `_asset_type` etc. has no effect on how Send to Unreal uses + that data. However, changing values not prefixed with an underscore will change the Send to Unreal behavior. Here is an example of a potential renaming use case. ```python @@ -257,9 +258,9 @@ class ExampleExtension(ExtensionBase): Here you can see that we forced a rename of the asset by changing the fbx name, then we updated the asset path so that Send to Unreal would still have a reference to the imported asset. -::: tip Note - In order for the `asset_data` to be updated you must call `self.update_asset_data(asset_data)` like shown above. -::: +!!! note + + In order for the `asset_data` to be updated you must call `self.update_asset_data(asset_data)` like shown above. This is what the Mesh's `asset_data` looks like from the example above after being modified: ```python @@ -276,10 +277,10 @@ This is what the Mesh's `asset_data` looks like from the example above after bei 'sockets': {} } ``` -::: warning -Modifying this dictionary incorrectly will produce errors. You must implement your own validations to ensure this -is modified correctly. -::: +!!! warning + + Modifying this dictionary incorrectly will produce errors. You must implement your own validations to ensure this + is modified correctly. ## Draws Defining draws for your extension is a way to make your extension properties available to be edited by the user. @@ -348,9 +349,9 @@ Notice how you can define remote unreal functions on the fly by just wrapping yo with the `remote_unreal_decorator`. The RPC library has a factory that takes care of teleporting your code and imports over to the open unreal editor. -::: tip Note - RPC calls must be defined as function or a staticmethod of a class, and only basic python data types -can be marshalled through the function parameters. No object params or kwargs are excepted. -::: +!!! note + + RPC calls must be defined as function or a staticmethod of a class, and only basic python data types + can be marshalled through the function parameters. No object params or kwargs are excepted. diff --git a/docs/send2ue/customize/python-api.md b/docs/send2ue/customize/python-api.md index 1fe0eb5a..c3e7ea75 100644 --- a/docs/send2ue/customize/python-api.md +++ b/docs/send2ue/customize/python-api.md @@ -9,10 +9,10 @@ All of the properties can be accessed directly on the following scene data objec bpy.context.scene.send2ue ``` -::: tip Note - This scene property data is persistent and stored within your blend file. If your blend file is saved, -then the state of your scene properties gets saved into the file as well. -::: +!!! note + + This scene property data is persistent and stored within your blend file. If your blend file is saved, + then the state of your scene properties gets saved into the file as well. To find the name of the property you want to read or edit, you can use the blender python console and the tab key to list the properties, or open the Send to Unreal Settings Dialog and hover on a property. Under the tool tip you will see the API reference for @@ -84,33 +84,32 @@ bpy.ops.send2ue.start_rpc_servers() ## Examples -::: tip Change Template Example - Here is how you could automate loading a settings template from a file and making it the active template. -```python -import bpy +!!! tip -# load the file into the template folder location -bpy.ops.send2ue.load_template(filepath=r'C:/some/file/path/my_template.json') + Here is how you could automate loading a settings template from a file and making it the active template. + ```python + import bpy -# set the active template which modifies the state of the properties -bpy.context.scene.send2ue.active_settings_template = 'my_template.json' -``` -::: + # load the file into the template folder location + bpy.ops.send2ue.load_template(filepath=r'C:/some/file/path/my_template.json') -::: tip Change Properties Example - Here is how you could use Python to dynamically change the mesh import folder of your asset. -```python -import bpy + # set the active template which modifies the state of the properties + bpy.context.scene.send2ue.active_settings_template = 'my_template.json' + ``` -# set the mesh import folder -folder_name = some_custom_function_that_gets_a_folder_name() -bpy.context.scene.send2ue.unreal_mesh_folder_path = f'/Game/{folder_name}/' +!!! tip -# run send to unreal -bpy.ops.wm.send2ue() -``` -::: + Here is how you could use Python to dynamically change the mesh import folder of your asset. + ```python + import bpy + + # set the mesh import folder + folder_name = some_custom_function_that_gets_a_folder_name() + bpy.context.scene.send2ue.unreal_mesh_folder_path = f'/Game/{folder_name}/' + # run send to unreal + bpy.ops.wm.send2ue() + ``` The same process can be used to dynamically set any property on the Send to Unreal tool. diff --git a/docs/send2ue/customize/templates.md b/docs/send2ue/customize/templates.md index f148104b..e51d9335 100644 --- a/docs/send2ue/customize/templates.md +++ b/docs/send2ue/customize/templates.md @@ -21,7 +21,7 @@ template that has been configured to for LODs. Click `Load` then choose the loca ![2](./images/templates/2.gif) -::: tip Note - The properties won't change until the active template is selected from the dropdown. Loading the template -makes the template available in the dropdown, but does not modify the properties. -::: +!!! note + + The properties won't change until the active template is selected from the dropdown. Loading the template + makes the template available in the dropdown, but does not modify the properties. diff --git a/docs/send2ue/extensions/affixes.md b/docs/send2ue/extensions/affixes.md index 6e9643bd..cac9ef61 100644 --- a/docs/send2ue/extensions/affixes.md +++ b/docs/send2ue/extensions/affixes.md @@ -2,6 +2,7 @@ The Affixes extension provides a convenient way to enforce prefix or postfix naming conventions on assets of a particular type. Currently, supported asset types are: + * `Static Mesh` * `Skeletal Mesh` * `Animation Sequence` @@ -18,9 +19,9 @@ If true, this will automatically remove the affixes (prefix/suffix) by renaming `Export` collection after the Send to Unreal operation runs. -::: tip Note - This will rename the objects in Blender, like Meshes, Textures, Materials and Actions. Be aware that this will also rename the texture image files on your hard-disk. -::: +!!! note + + This will rename the objects in Blender, like Meshes, Textures, Materials and Actions. Be aware that this will also rename the texture image files on your hard-disk. ## UI The settings can be found under the `Export` tab diff --git a/docs/send2ue/extensions/combine-assets.md b/docs/send2ue/extensions/combine-assets.md index f74b1c9d..878224a2 100644 --- a/docs/send2ue/extensions/combine-assets.md +++ b/docs/send2ue/extensions/combine-assets.md @@ -11,23 +11,23 @@ options, each provides a different way to customize your export. #### _off_ This exports each object and particle system in the `Export` collection as individual assets. -off +![](./images/combine-assets/off.png){style: "width: 400;"} #### _child meshes_ For each empty object or armature parent, this combines its child meshes into a single mesh when exported. -child_meshes +![](./images/combine-assets/child_meshes.png){style: "width: 400;"} #### _groom per mesh_ For each mesh in the Export collection, this combines every hair objects/systems surfaced on the mesh as a single groom asset. -groom_per_mesh +![](./images/combine-assets/groom_per_mesh.png){style: "width: 400;"} #### _groom per combined mesh_ For each empty object or armature parent, this combines its child meshes into a single mesh when exported. For each combined mesh, all hair objects/systems surfaced on it export as a single groom asset. -groom_per_combined_mesh +![](./images/combine-assets/groom_per_combined_mesh.png){style: "width: 400;"} ## UI The settings can be found under the `Export` tab @@ -40,27 +40,26 @@ will be combined into one static mesh using the name of the empty. In this example the name of the combine static mesh in unreal would be `CombinedCubes` -::: tip Note - When using this with custom collisions, each collision name must correspond to each mesh name, not the final -combined Static Mesh asset name. +!!! note -In this example the final name of the combined asset is `S_Boards_Platform_1x1` and all the collisions below match -to each mesh within the combined asset. + When using this with custom collisions, each collision name must correspond to each mesh name, not the final + combined Static Mesh asset name. -![3](./images/combine-assets/3.png) + In this example the final name of the combined asset is `S_Boards_Platform_1x1` and all the collisions below match + to each mesh within the combined asset. -::: + ![3](./images/combine-assets/3.png) ## Skeletal Meshes For options _**child meshes**_, and **_groom per combined mesh_**, all child meshes under an armature will be combined into one skeletal mesh using the name of the first child mesh in alphanumerical order by object name (the default order of objects in the blender outliner). -::: tip Note - This might not give you enough control over the skeletal mesh name, so using the -[immediate parent name](https://epicgamesext.github.io/BlenderTools/send2ue/extensions/use-immediate-parent-name.html) -extension can be useful. -::: +!!! note + + This might not give you enough control over the skeletal mesh name, so using the + [immediate parent name](https://poly-hammer.github.io/BlenderTools/send2ue/extensions/use-immediate-parent-name.html) + extension can be useful. ![2](./images/combine-assets/2.png) diff --git a/docs/send2ue/extensions/create-post-import-groom-assets.md b/docs/send2ue/extensions/create-post-import-groom-assets.md index e9399a61..41564a6f 100644 --- a/docs/send2ue/extensions/create-post-import-groom-assets.md +++ b/docs/send2ue/extensions/create-post-import-groom-assets.md @@ -8,7 +8,7 @@ imported groom asset. ### Groom Binding Asset This creates a binding asset for the imported groom asset. The target skeletal mesh is the hair's surface mesh in blender that is part of the same import. For this option to work correctly, the _import mesh_ and _import groom_ options in the -[import settings](https://epicgamesext.github.io/BlenderTools/send2ue/settings/import.html) must be turned on. +[import settings](https://poly-hammer.github.io/BlenderTools/send2ue/settings/import.html) must be turned on. The binding asset will use the name of the groom asset and the name of the target skeletal mesh post fixed with `_Binding`. Note this is the unreal convention of naming binding assets. @@ -16,9 +16,9 @@ Note this is the unreal convention of naming binding assets. For example, a groom asset sourced from a particle system named `hair` with a surface mesh named `SK_Mannequin_Female` will yield a binding asset named `hair_SK_Mannequin_Female_Binding`. -::: tip Note -A binding asset can only be created when the groom's surface mesh is a [skeletal mesh](https://epicgamesext.github.io/BlenderTools/send2ue/asset-types/skeletal-mesh.html). -::: +!!! note + + A binding asset can only be created when the groom's surface mesh is a [skeletal mesh](https://poly-hammer.github.io/BlenderTools/send2ue/asset-types/skeletal-mesh.html). ### Blueprint Asset with Groom This creates a blueprint asset for each imported skeletal mesh and its surface hairs. The blueprint asset will have @@ -31,11 +31,11 @@ blueprint asset uses the name of the skeletal mesh asset with a postfix `_BP`. 2 -::: tip Note -Each groom component is automatically populated with a groom asset and a binding asset that connects the groom to the -skeletal mesh in the skeletal mesh component. For this reason, the _**binding asset**_ option must be turned -on for the _**blueprint asset with groom binding**_ option to work correctly. -::: +!!! note + + Each groom component is automatically populated with a groom asset and a binding asset that connects the groom to the + skeletal mesh in the skeletal mesh component. For this reason, the _**binding asset**_ option must be turned + on for the _**blueprint asset with groom binding**_ option to work correctly. ## UI The settings can be found under the `Import` tab diff --git a/docs/send2ue/extensions/instance-assets.md b/docs/send2ue/extensions/instance-assets.md index b3e75956..1006954f 100644 --- a/docs/send2ue/extensions/instance-assets.md +++ b/docs/send2ue/extensions/instance-assets.md @@ -7,6 +7,7 @@ the object in the blender scene. Spawns assets in the active level at the same location they are positioned in the blender scene. This is only supported for the following asset types: + * `StaticMesh` * `SkeletalMesh` * `AnimSequence` diff --git a/docs/send2ue/extensions/use-collections-as-folders.md b/docs/send2ue/extensions/use-collections-as-folders.md index 84a2df23..f7314928 100644 --- a/docs/send2ue/extensions/use-collections-as-folders.md +++ b/docs/send2ue/extensions/use-collections-as-folders.md @@ -8,6 +8,6 @@ When active, this uses the collection hierarchy in your scene as sub folders fro ## UI The settings can be found under the `Paths` tab -::: warning Exclusive Usage Extension -_Use Collections as Folders_ is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. -::: +!!! warning + + Exclusive Usage Extension. Use `Collections as Folders` is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. diff --git a/docs/send2ue/extensions/use-immediate-parent-name.md b/docs/send2ue/extensions/use-immediate-parent-name.md index a2e818ba..58a6a4e0 100644 --- a/docs/send2ue/extensions/use-immediate-parent-name.md +++ b/docs/send2ue/extensions/use-immediate-parent-name.md @@ -5,21 +5,20 @@ Gives the user more control over the naming of the assets sent to unreal with th ### use immediate parent name When active, this makes the immediate parent the name of the asset if the immediate parent is a collection or an empty type object. This setting can be used concurrently with import LODs or combine meshes. -0 +![](./images/use-immediate-parent-name/0.png){style: "width: 250;"} In the outliner pictured above, the imported static mesh would be named `Empty_Parent` -::: tip Note +!!! note A mesh under an armature will take the name of the armature's immediate parent if the immediate parent is an empty type object or a collection. -1 +![](./images/use-immediate-parent-name/1.png){style: "width: 250;"} In the outliner pictured above, the imported skeletal mesh would be named `SK_Collection` -::: ### UI The settings can be found under the `Paths` tab -::: warning Exclusive Usage Extension -_Use Immediate Parent Name_ is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. -::: +!!! warning + + Exclusive Usage Extension. `Use Immediate Parent Name` is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. diff --git a/docs/send2ue/extras/addon-preferences.md b/docs/send2ue/extras/addon-preferences.md index d27f0d8c..038fa59c 100644 --- a/docs/send2ue/extras/addon-preferences.md +++ b/docs/send2ue/extras/addon-preferences.md @@ -10,10 +10,10 @@ The amount of seconds that blender stops waiting for an unreal response after it need to be increased if you plan on importing really large assets, where the import could be longer then the timeout value. -::: warning -It is not recommended to set the timeout too high. The timeout is a safeguard against freezing blender and unreal -indefinitely. -::: +!!! warning + + It is not recommended to set the timeout too high. The timeout is a safeguard against freezing blender and unreal + indefinitely. ### Extensions Repo Path Set this path to the folder that contains your Send to Unreal python extensions. All extensions in this folder diff --git a/docs/send2ue/index.md b/docs/send2ue/index.md index d5836264..e12197ea 100644 --- a/docs/send2ue/index.md +++ b/docs/send2ue/index.md @@ -1,26 +1,20 @@ ---- -home: true -heroText: Send to Unreal -tagline: A one-click solution for sending data from Blender to Unreal Engine. -actions: - - text: Quick Start - link: /introduction/quickstart -features: -- title: Static Meshes - details: Supports static mesh workflows with lods, mesh origins, and batched exports. -- title: Skeletal Meshes - details: Bring a skeletal mesh into unreal with its lods and customized lod build settings. -- title: Animation Sequences - details: Batch export or send individual animations directly to the editor. -- title: Grooms - details: Batch export or send individual hair systems as alembic files to the editor as groom assets. -footer: Copyright © Epic Games Inc. ---- -## Overview +# Send to Unreal +A one-click solution for sending data from Blender to Unreal Engine. -overview +[Quick Start](./introduction/quickstart.md) + +## Features +* ### Static Meshes + Supports static mesh workflows with lods, mesh origins, and batched exports. +* ### Skeletal Meshes + Bring a skeletal mesh into unreal with its lods and customized lod build settings. +* ### Animation Sequences + Batch export or send individual animations directly to the editor. +* ### Grooms + Batch export or send individual hair systems as alembic files to the editor as groom assets. +## Overview The reason our tool can provide a "one-click" solution for these assets is because it can automatically infer the correct unreal asset type based on just the contents of a single `Export` collection. That, along with giving the user the ability to customize and share settings templates, allows assets and scenes to be completely configured ahead of time. A saved file can be opened by an artist and in one-click they can have their assets in unreal engine. The main purpose of this tool diff --git a/docs/send2ue/introduction/quickstart.md b/docs/send2ue/introduction/quickstart.md index d8923267..43798299 100644 --- a/docs/send2ue/introduction/quickstart.md +++ b/docs/send2ue/introduction/quickstart.md @@ -1,15 +1,9 @@ # Quickstart This quick start guide will help you get up and running with Send to Unreal. -First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/EpicGamesExt/BlenderTools/releases?q=Send+to+unreal&expanded=true) +First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/poly-hammer/BlenderTools/releases?q=Send+to+unreal&expanded=true) under the `Assets` dropdown. The zip file name will start with `send2ue`. -::: tip Note - If you get a 404 error when you click the link above, then you will need to sign in to your github account and link -it with your Epic Games account. Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) -on how to link your accounts. -::: - Next install the addon in Blender. Go to `Edit > Preferences` then to the addons tab. Click `install`. ![1](./images/1.png) @@ -78,9 +72,9 @@ Click `Pipeline > Export > Send to Unreal`. ![13](./images/13.png) -::: tip Note - On Windows, if you see a security alert, go ahead and allow Blender on your private network. -::: +!!! note + + On Windows, if you see a security alert, go ahead and allow Blender on your private network. You should now see the cube in unreal under `/untitled category/untitled asset/Cube`. diff --git a/docs/send2ue/mkdocs.yml b/docs/send2ue/mkdocs.yml new file mode 100644 index 00000000..555542db --- /dev/null +++ b/docs/send2ue/mkdocs.yml @@ -0,0 +1,33 @@ +site_name: Send to Unreal +docs_dir: '.' +nav: + - Quick Start: "./introduction/quickstart.md" + - Asset Types: + - Static Mesh: "./asset-types/static-mesh.md" + - Skeletal Mesh: "./asset-types/skeletal-mesh.md" + - Anim Sequence: "./asset-types/animation-sequence.md" + - Groom: "./asset-types/groom.md" + - Settings: + - Paths: "./settings/paths.md" + - Export: "./settings/export.md" + - Import: "./settings/import.md" + - Validations: "./settings/validations.md" + - Customize: + - Templates: "./customize/templates.md" + - Python API: "./customize/python-api.md" + - Extensions: "./customize/extensions.md" + - Supported Extensions: + - Affixes: "./extensions/affixes.md" + - Combine Assets: "./extensions/combine-assets.md" + - Create Post Import Groom Assets: "./extensions/create-post-import-groom-assets.md" + - UE to Rigify: "./extensions/ue2rigify.md" + - Use Immediate Parent Name: "./extensions/use-immediate-parent-name.md" + - Use Collections as Folders: "./extensions/use-collections-as-folders.md" + - Instance Assets: "./extensions/instance-assets.md" + - Extras: + - Pipeline Menu: "./extras/pipeline-menu.md" + - Addon Preferences: "./extras/addon-preferences.md" + - Community Extensions: "./extras/community-extensions.md" + - Trouble Shooting: + - Community Extensions: "./trouble-shooting/faq.md" + - Errors: "./trouble-shooting/errors.md" \ No newline at end of file diff --git a/docs/send2ue/settings/import.md b/docs/send2ue/settings/import.md index 86a91970..b9c6df67 100644 --- a/docs/send2ue/settings/import.md +++ b/docs/send2ue/settings/import.md @@ -17,11 +17,11 @@ Whether or not to export groom as an alembic file and import to unreal. #### Launch Import UI When enabled this option launches the import UI in Unreal. -::: tip Note - This will launch the Import UI on the first import of the asset, however it will not launch the UI again on a -reimport. If you want to reimport an asset with new custom settings, the recommendation is to delete the asset in your -unreal project and then just run Send to Unreal again. -::: +!!! note + + This will launch the Import UI on the first import of the asset, however it will not launch the UI again on a + reimport. If you want to reimport an asset with new custom settings, the recommendation is to delete the asset in your + unreal project and then just run Send to Unreal again. ## LOD Settings The section contains the settings related to LOD workflows. You can read more about these under the diff --git a/docs/send2ue/settings/paths.md b/docs/send2ue/settings/paths.md index 60777829..15244002 100644 --- a/docs/send2ue/settings/paths.md +++ b/docs/send2ue/settings/paths.md @@ -10,30 +10,30 @@ Sends the intermediate files to a temporary location on disk and then imports th the Unreal Project. This doesn't require any extra configuration, but might not be ideal if your intermediate files need to be under source control. -1 +![](./images/paths/1.png){style: "width: 500;"} ### Send to Disk Sends the intermediate files to a specified location on disk and does not import them. -2 +![](./images/paths/2.png){style: "width: 500;"} ### Send to Disk then Project Sends the intermediate files to a specified location on disk and then imports them into the Unreal Project. This requires extra paths to be configured, but is ideal if your intermediate files need to be under source control. -3 +![](./images/paths/3.png){style: "width: 500;"} ## Relative Paths When specifying a location on disk with either the `Send to Disk` or `Send to Disk then Project`, relative paths can be used if the blender file is saved. The paths are relative to the currently open blender file. -4 +![](./images/paths/4.png){style: "width: 500;"} -::: tip Note - A relative disk path is relative to where the blend file is saved on disk. -::: +!!! note + + A relative disk path is relative to where the blend file is saved on disk. ## Path Properties #### Mesh Folder (Unreal): diff --git a/docs/send2ue/trouble-shooting/errors.md b/docs/send2ue/trouble-shooting/errors.md index 8e10c953..8becd7e7 100644 --- a/docs/send2ue/trouble-shooting/errors.md +++ b/docs/send2ue/trouble-shooting/errors.md @@ -8,9 +8,9 @@ if it is blocked by another application. ### You do not have a collection "Export" in your outliner. Please create it. You will receive this error if you do not have an "Export" set in your outliner. To fix this go to -`Pipeline > Utilites > Create Pre-Defined Collections`. +`Pipeline > Utilities > Create Pre-Defined Collections`. ### NoOptionError: No option 'r.skincache.compileshaders' The option "Support Compute Skin Cache" is required for groom imports. If you have this project setting on but consistently receive this error, consider turning off the "Check project settings" validation in -send to unreal validations settings. This issue has been reported by users in [#533](https://github.com/EpicGamesExt/BlenderTools/issues/533). +send to unreal validations settings. \ No newline at end of file diff --git a/docs/ue2rigify/.vuepress/config.ts b/docs/ue2rigify/.vuepress/config.ts deleted file mode 100644 index 0b2d2424..00000000 --- a/docs/ue2rigify/.vuepress/config.ts +++ /dev/null @@ -1,76 +0,0 @@ -const {description, repository} = require('../../package') -const { getRootPath } = require('../../path') -import { defaultTheme } from '@vuepress/theme-default' -import { defineUserConfig } from '@vuepress/cli' -import { palettePlugin } from '@vuepress/plugin-palette' -// @ts-ignore -import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics' - - -export default defineUserConfig({ - title: 'UE to Rigify', - description: description, - base: getRootPath('ue2rigify'), - theme: defaultTheme({ - repo: repository, - docsDir: 'docs/ue2rigify', - editLinkText: 'Help us improve this page!', - lastUpdated: false, - - navbar: [ - { - text: 'Home', - link: process.env.PROD === '1' ? 'https://epicgamesext.github.io/BlenderTools/' : '/', - target:'_self' - } - ], - sidebar: { - '/': [ - { - text: 'Introduction', - children: [ - '/introduction/quickstart' - ] - }, - { - text: 'Concepts', - children: [ - '/concepts/modes', - '/concepts/templates' - ] - }, - { - text: 'Usage', - children: [ - '/usage/animation', - '/usage/new-template-example' - ] - }, - { - text: 'Advanced', - children: [ - '/advanced/relink-constraints' - ] - }, - { - text: 'Extras', - children: [ - '/extras/community-templates' - ] - }, - { - text: 'Trouble Shooting', - children: [ - '/trouble-shooting/faq', - '/trouble-shooting/errors', - ] - } - ], - } - }), - plugins: [ - palettePlugin({preset: 'sass'}), - googleAnalyticsPlugin({id: process.env.GA_ID}) - ] -}) - diff --git a/docs/ue2rigify/.vuepress/styles/index.scss b/docs/ue2rigify/.vuepress/styles/index.scss deleted file mode 100644 index 3fa2aaa0..00000000 --- a/docs/ue2rigify/.vuepress/styles/index.scss +++ /dev/null @@ -1,9 +0,0 @@ -:root { - // brand colors - --c-brand: #4289b9 !important; - --c-brand-light: #469fcd !important; - - // custom container colors - --c-tip: #469fcd !important; - --c-text-accent: #4289b9 !important; -} diff --git a/docs/ue2rigify/advanced/relink-constraints.md b/docs/ue2rigify/advanced/relink-constraints.md index 66352232..fd822520 100644 --- a/docs/ue2rigify/advanced/relink-constraints.md +++ b/docs/ue2rigify/advanced/relink-constraints.md @@ -1,9 +1,5 @@ # Relink Constraints -
- -
- [UE to Rigify Customization](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/rig_types/basic.html) allows retargeting constraints belonging to the bone to point at bones created in the process of generating the rig, thus allowing custom rigging to integrate with generated bones. diff --git a/docs/ue2rigify/concepts/modes.md b/docs/ue2rigify/concepts/modes.md index 4743c2e5..5df4dc1d 100644 --- a/docs/ue2rigify/concepts/modes.md +++ b/docs/ue2rigify/concepts/modes.md @@ -14,10 +14,10 @@ These modes become available as soon as you select a "Source" rig. ![2](./images/modes/2.jpg) -::: tip Note -Your "Source" rig is the rig that you create in blender or the rig that you import into blender that has the skinned -to mesh attached to it. The idea of UE to Rigify is that you want to drive the "Source" rig with your "Control" rig. -::: +!!! note + + Your "Source" rig is the rig that you create in blender or the rig that you import into blender that has the skinned + to mesh attached to it. The idea of UE to Rigify is that you want to drive the "Source" rig with your "Control" rig. ## Source diff --git a/docs/ue2rigify/index.md b/docs/ue2rigify/index.md index a8dde803..d2286482 100644 --- a/docs/ue2rigify/index.md +++ b/docs/ue2rigify/index.md @@ -1,21 +1,17 @@ ---- -home: true -heroText: UE to Rigify -tagline: A node based retargeting system for Blender's Rigify addon. -actions: - - text: Quick Start - link: /introduction/quickstart -features: -- title: Retarget Animation - details: Use nodes and operators to create relationships between your rig and the rigify controls. -- title: Use Marketplace Assets - details: Contains templates for the Unreal Mannequins, but any custom template can be built for any rig from any app. -- title: Share Templates +# UE to Rigify +A node based retargeting system for Blender's Rigify addon. + + +* [Quick Start](./introduction/quickstart) + +## Features +* ### Retarget Animation + Use nodes and operators to create relationships between your rig and the rigify controls. +* ### Use Marketplace Assets + Contains templates for the Unreal Mannequins, but any custom template can be built for any rig from any app. +* ### Share Templates details: Build a template to retarget any rig, then share with your team and never retarget the same rig again. -footer: Copyright © Epic Games Inc. ---- + ## Help us document -Our goal is for this documentation to be completely comprehensive so that it can be fully self-serving. If you notice -any part of it to be incorrect, unclear, outdated, or missing -information please consider contributing to our documentation. +Our goal is for this documentation to be completely comprehensive so that it can be fully self-serving. If you notice any part of it to be incorrect, unclear, outdated, or missing information please consider contributing to our documentation. diff --git a/docs/ue2rigify/introduction/quickstart.md b/docs/ue2rigify/introduction/quickstart.md index 2f8fcf26..90d61fa8 100644 --- a/docs/ue2rigify/introduction/quickstart.md +++ b/docs/ue2rigify/introduction/quickstart.md @@ -2,14 +2,9 @@ This quick start guide will help you get up and running with the UE to Rigify addon. -First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/EpicGamesExt/BlenderTools/releases?q=UE+to+Rigify&expanded=true) +First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/poly-hammer/BlenderTools/releases?q=UE+to+Rigify&expanded=true) under the `Assets` dropdown. The zip file name will start with `ue2rigify`. -::: tip Note - If you get a 404 error when you click the link above, then you will need to sign in to your github account and link -it with your Epic Games account. Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) -on how to link your accounts. -::: Open Blender and install the add on. Go to `Edit > Preferences` then to addons. Click `install`. diff --git a/docs/ue2rigify/mkdocs.yml b/docs/ue2rigify/mkdocs.yml new file mode 100644 index 00000000..a2b929a7 --- /dev/null +++ b/docs/ue2rigify/mkdocs.yml @@ -0,0 +1,17 @@ +site_name: UE to Rigify +docs_dir: '.' +nav: + - Quick Start: "./introduction/quickstart.md" + - Concepts: + - Modes: "./concepts/modes.md" + - Templates: "/concepts/templates.md" + - Usage: + - Animation: "./usage/animation.md" + - New Template Example: "./usage/new-template-example.md" + - Advanced: + - Relink Constraints: "./advanced/relink-constraints.md" + - Extras: + - Community Templates: "./extras/community-templates.md" + - Trouble Shooting: + - FAQ: "./trouble-shooting/faq.md" + - Errors: "./trouble-shooting/errors.md" \ No newline at end of file diff --git a/docs/ue2rigify/usage/animation.md b/docs/ue2rigify/usage/animation.md index 5bc6afc8..b50380c3 100644 --- a/docs/ue2rigify/usage/animation.md +++ b/docs/ue2rigify/usage/animation.md @@ -17,11 +17,12 @@ When I hit `Convert`. It converts that action over to the Rigify rig. ![2](./images/animation/2.jpg) -::: tip Note - UE to Rigify renames the original action to have `SOURCE_` in front of it. It prefixes every action from -the "Source" rig so it does not overwrite any bone animations just in case the Rigify "Control" rig and the "Source" -rig happen to have matching bone names. -::: +!!! note + + UE to Rigify renames the original action to have `SOURCE_` in front of it. It prefixes every action from + the "Source" rig so it does not overwrite any bone animations just in case the Rigify "Control" rig and the "Source" + rig happen to have matching bone names. + Then I would click `Bake`, and confirm. diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..bc03831d --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,56 @@ +site_name: Documentation + +nav: + - Addons: + - Send to Unreal: '!include ./docs/send2ue/mkdocs.yml' + - UE to Rigify: '!include ./docs/ue2rigify/mkdocs.yml' + - Contributing: + - Help Develop: contributing/development.md + - Help Document: contributing/documentation.md + - Help Test: contributing/testing.md + + +markdown_extensions: +- pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true +- pymdownx.inlinehilite +- pymdownx.snippets +- pymdownx.superfences +- attr_list +- admonition + +plugins: + monorepo: + termynal: + buttons: macos + prompt_literal_start: [$, '>', '>>>'] + title: shell + search: + separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])' + +theme: + features: + - navigation.instant + favicon: images/icons/favicon.ico + icon: + repo: fontawesome/brands/github + language: en + name: material + palette: + - scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - accent: blue + primary: black + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to light mode + +extra: + analytics: + provider: google + property: !ENV GA_ID \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c13a5eba..e3693173 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,16 @@ -docker==6.1.3 +docker==7.1.0 unittest-xml-reporting==3.2.0 fake-bpy-module-latest==20231010 PyGithub==2.1.1 -pydevd-pycharm~=223.7571.203 +debugpy==1.8.1 +numpy==1.26.4 +websocket==0.2.1 + +# documenation +mkdocs<=1.5.3 +mkdocs-material<=9.5.13 +mkdocs-material-extensions<=1.3.1 +mkdocs-mermaid2-plugin<=1.1.1 +mkdocs-monorepo-plugin<=1.1.0 +termynal<=0.12.1 +mkdocstrings[python]<=1.9.0 \ No newline at end of file diff --git a/send2ue/__init__.py b/send2ue/__init__.py index 7f398f0d..9732e7c5 100644 --- a/send2ue/__init__.py +++ b/send2ue/__init__.py @@ -12,13 +12,13 @@ bl_info = { "name": "Send to Unreal", - "author": "Epic Games Inc.", + "author": "Epic Games Inc (now a community fork)", "version": (2, 4, 3), "blender": (3, 3, 0), "location": "Header > Pipeline > Send to Unreal", "description": "Sends an asset to the first open Unreal Editor instance on your machine.", "warning": "", - "wiki_url": "https://epicgamesext.github.io/BlenderTools/send2ue", + "wiki_url": "https://poly-hammer.github.io/BlenderTools/send2ue", "category": "Pipeline", } @@ -38,7 +38,8 @@ remote_execution, addon_preferences, extension, - io.fbx + io.fbx_b3, + io.fbx_b4 ] diff --git a/send2ue/core/export.py b/send2ue/core/export.py index 4987c132..dcbe595a 100644 --- a/send2ue/core/export.py +++ b/send2ue/core/export.py @@ -80,14 +80,26 @@ def export_fbx_file(file_path, export_settings): :param str file_path: A file path where the file will be exported. :param dict export_settings: A dictionary of blender export settings for the specific file type. """ - io.fbx.export( - filepath=file_path, - use_selection=True, - bake_anim_use_nla_strips=True, - bake_anim_use_all_actions=False, - object_types={'ARMATURE', 'MESH', 'EMPTY'}, - **export_settings - ) + major_version = bpy.app.version[0] # type: ignore + + if major_version <= 3: + io.fbx_b3.export( + filepath=file_path, + use_selection=True, + bake_anim_use_nla_strips=True, + bake_anim_use_all_actions=False, + object_types={'ARMATURE', 'MESH', 'EMPTY'}, + **export_settings + ) + elif major_version >= 4: + io.fbx_b4.export( + filepath=file_path, + use_selection=True, + bake_anim_use_nla_strips=True, + bake_anim_use_all_actions=False, + object_types={'ARMATURE', 'MESH', 'EMPTY'}, + **export_settings + ) def export_alembic_file(file_path, export_settings): diff --git a/send2ue/core/io/__init__.py b/send2ue/core/io/__init__.py index 3447da60..adf1d7de 100644 --- a/send2ue/core/io/__init__.py +++ b/send2ue/core/io/__init__.py @@ -1,5 +1,6 @@ -from . import fbx +from . import fbx_b3, fbx_b4 __all__ = [ - fbx + 'fbx_b3' + 'fbx_b4' ] diff --git a/send2ue/core/io/fbx.py b/send2ue/core/io/fbx_b3.py similarity index 99% rename from send2ue/core/io/fbx.py rename to send2ue/core/io/fbx_b3.py index fc843bf6..f425879a 100644 --- a/send2ue/core/io/fbx.py +++ b/send2ue/core/io/fbx_b3.py @@ -564,4 +564,4 @@ def fbx_data_bindpose_element(root, me_obj, me, scene_data, arm_obj=None, mat_wo export_fbx_bin.fbx_animations_do = original_fbx_animations_do export_fbx_bin.fbx_data_armature_elements = original_fbx_data_armature_elements export_fbx_bin.fbx_data_object_elements = original_fbx_data_object_elements - export_fbx_bin.fbx_data_bindpose_element = original_fbx_data_bindpose_element + export_fbx_bin.fbx_data_bindpose_element = original_fbx_data_bindpose_element \ No newline at end of file diff --git a/send2ue/core/io/fbx_b4.py b/send2ue/core/io/fbx_b4.py new file mode 100644 index 00000000..a68f6e46 --- /dev/null +++ b/send2ue/core/io/fbx_b4.py @@ -0,0 +1,652 @@ +import os +import bpy +import numpy as np +from ..utilities import report_error +from mathutils import Vector +from importlib.machinery import SourceFileLoader + +SCALE_FACTOR = 100 + + +def export(**keywords): + """ + Note that this function imports the blender FBX addon's module and monkey patches + some functions to fix the scale factor and world origins of the objects, so that they import + nicely into unreal engine. + + The functions below have been tweaked from their originals here: + https://github.com/blender/blender-addons/blob/master/io_scene_fbx/export_fbx_bin.py + """ + import addon_utils + addons = {os.path.basename(os.path.dirname(module.__file__)): module.__file__ for module in addon_utils.modules()} + addon_folder_path = os.path.dirname(addons.get('io_scene_fbx')) + + # this load the io_scene_fbx module from the blender FBX addon + try: + SourceFileLoader('io_scene_fbx', os.path.join(addon_folder_path, '__init__.py')).load_module() + except RuntimeError as error: + print(error) + + import io_scene_fbx.export_fbx_bin as export_fbx_bin + from io_scene_fbx.export_fbx_bin import ( + fbx_data_bindpose_element, + AnimationCurveNodeWrapper + ) + from bpy_extras.io_utils import axis_conversion + from io_scene_fbx.fbx_utils import ( + FBX_MODELS_VERSION, + FBX_POSE_BIND_VERSION, + FBX_DEFORMER_SKIN_VERSION, + FBX_DEFORMER_CLUSTER_VERSION, + BLENDER_OBJECT_TYPES_MESHLIKE, + FBX_KTIME, + units_convertor_iter, + matrix4_to_array, + get_fbx_uuid_from_key, + get_blenderID_name, + get_blender_bindpose_key, + get_blender_anim_stack_key, + get_blender_anim_layer_key, + elem_empty, + elem_data_single_bool, + elem_data_single_int32, + elem_data_single_int64, + elem_data_single_float64, + elem_data_single_string, + elem_data_single_int32_array, + elem_data_single_float64_array, + elem_properties, + elem_props_template_init, + elem_props_template_set, + elem_props_template_finalize, + fbx_name_class + ) + + # Added version check to import new elem data type added in 4.0. Shading element was updated to use char instead of bool + if bpy.app.version >= (4,0,0): + from io_scene_fbx.fbx_utils import ( + elem_data_single_char + ) + + convert_rad_to_deg_iter = units_convertor_iter("radian", "degree") + + from io_scene_fbx.export_fbx_bin import fbx_data_element_custom_properties + + def fbx_animations_do(scene_data, ref_id, f_start, f_end, start_zero, objects=None, force_keep=False): + """ + Generate animation data (a single AnimStack) from objects, for a given frame range. + """ + bake_step = scene_data.settings.bake_anim_step + simplify_fac = scene_data.settings.bake_anim_simplify_factor + scene = scene_data.scene + depsgraph = scene_data.depsgraph + force_keying = scene_data.settings.bake_anim_use_all_bones + force_sek = scene_data.settings.bake_anim_force_startend_keying + gscale = scene_data.settings.global_scale + + if objects is not None: + # Add bones and duplis! + for ob_obj in tuple(objects): + if not ob_obj.is_object: + continue + if ob_obj.type == 'ARMATURE': + objects |= {bo_obj for bo_obj in ob_obj.bones if bo_obj in scene_data.objects} + for dp_obj in ob_obj.dupli_list_gen(depsgraph): + if dp_obj in scene_data.objects: + objects.add(dp_obj) + else: + objects = scene_data.objects + + back_currframe = scene.frame_current + animdata_ob = {} + p_rots = {} + + for ob_obj in objects: + if ob_obj.parented_to_armature: + continue + ACNW = AnimationCurveNodeWrapper + loc, rot, scale, _m, _mr = ob_obj.fbx_object_tx(scene_data) + rot_deg = tuple(convert_rad_to_deg_iter(rot)) + force_key = (simplify_fac == 0.0) or (ob_obj.is_bone and force_keying) + + animdata_ob[ob_obj] = (ACNW(ob_obj.key, 'LCL_TRANSLATION', force_key, force_sek, loc), + ACNW(ob_obj.key, 'LCL_ROTATION', force_key, force_sek, rot_deg), + ACNW(ob_obj.key, 'LCL_SCALING', force_key, force_sek, scale)) + p_rots[ob_obj] = rot + + force_key = (simplify_fac == 0.0) + animdata_shapes = {} + + for me, (me_key, _shapes_key, shapes) in scene_data.data_deformers_shape.items(): + # Ignore absolute shape keys for now! + if not me.shape_keys.use_relative: + continue + for shape, (channel_key, geom_key, _shape_verts_co, _shape_verts_idx) in shapes.items(): + acnode = AnimationCurveNodeWrapper(channel_key, 'SHAPE_KEY', force_key, force_sek, (0.0,)) + # Sooooo happy to have to twist again like a mad snake... Yes, we need to write those curves twice. :/ + acnode.add_group(me_key, shape.name, shape.name, (shape.name,)) + animdata_shapes[channel_key] = (acnode, me, shape) + + animdata_cameras = {} + for cam_obj, cam_key in scene_data.data_cameras.items(): + cam = cam_obj.bdata.data + acnode_lens = AnimationCurveNodeWrapper(cam_key, 'CAMERA_FOCAL', force_key, force_sek, (cam.lens,)) + acnode_focus_distance = AnimationCurveNodeWrapper(cam_key, 'CAMERA_FOCUS_DISTANCE', force_key, + force_sek, (cam.dof.focus_distance,)) + animdata_cameras[cam_key] = (acnode_lens, acnode_focus_distance, cam) + + # Get all parent bdata of animated dupli instances, so that we can quickly identify which instances in + # `depsgraph.object_instances` are animated and need their ObjectWrappers' matrices updated each frame. + dupli_parent_bdata = {dup.get_parent().bdata for dup in animdata_ob if dup.is_dupli} + has_animated_duplis = bool(dupli_parent_bdata) + + # Initialize keyframe times array. Each AnimationCurveNodeWrapper will share the same instance. + # `np.arange` excludes the `stop` argument like when using `range`, so we use np.nextafter to get the next + # representable value after f_end and use that as the `stop` argument instead. + currframes = np.arange(f_start, np.nextafter(f_end, np.inf), step=bake_step) + + # Convert from Blender time to FBX time. + fps = scene.render.fps / scene.render.fps_base + real_currframes = currframes - f_start if start_zero else currframes + real_currframes = (real_currframes / fps * FBX_KTIME).astype(np.int64) + + # Generator that yields the animated values of each frame in order. + def frame_values_gen(): + # Precalculate integer frames and subframes. + int_currframes = currframes.astype(int) + subframes = currframes - int_currframes + + # Create simpler iterables that return only the values we care about. + animdata_shapes_only = [shape for _anim_shape, _me, shape in animdata_shapes.values()] + animdata_cameras_only = [camera for _anim_camera_lens, _anim_camera_focus_distance, camera + in animdata_cameras.values()] + # Previous frame's rotation for each object in animdata_ob, this will be updated each frame. + animdata_ob_p_rots = p_rots.values() + + # Iterate through each frame and yield the values for that frame. + # Iterating .data, the memoryview of an array, is faster than iterating the array directly. + for int_currframe, subframe in zip(int_currframes.data, subframes.data): + scene.frame_set(int_currframe, subframe=subframe) + + if has_animated_duplis: + # Changing the scene's frame invalidates existing dupli instances. To get the updated matrices of duplis + # for this frame, we must get the duplis from the depsgraph again. + for dup in depsgraph.object_instances: + if (parent := dup.parent) and parent.original in dupli_parent_bdata: + # ObjectWrapper caches its instances. Attempting to create a new instance updates the existing + # ObjectWrapper instance with the current frame's matrix and then returns the existing instance. + ObjectWrapper(dup) + next_p_rots = [] + for ob_obj, p_rot in zip(animdata_ob, animdata_ob_p_rots): + + + # + # send2ue: Scale shennanigans + # + location_multiple = 100 + scale_factor = 1 + # if this curve is the object root then keep its scale at 1 + if len(str(ob_obj).split('|')) == 1: + location_multiple = 1 + # Todo add to FBX addon + scale_factor = SCALE_FACTOR + + + + # We compute baked loc/rot/scale for all objects (rot being euler-compat with previous value!). + loc, rot, scale, _m, _mr = ob_obj.fbx_object_tx(scene_data, rot_euler_compat=p_rot) + + + # + # send2ue: Make location keyframes relative to the armature object + # + # Todo add to FBX addon + # the armature object's position is the reference we use to offset all location keyframes + if ob_obj.type == 'ARMATURE': + location_offset = loc + # subtract the location offset from each location keyframe if the use_object_origin is on + if bpy.context.scene.send2ue.use_object_origin: + loc = Vector( + (loc[0] - location_offset[0], loc[1] - location_offset[1], loc[2] - location_offset[2])) + + + + next_p_rots.append(rot) + yield from loc * location_multiple # send2ue: Apply translation scalar + yield from rot + yield from scale / scale_factor # send2ue: Apply scale factor + animdata_ob_p_rots = next_p_rots + for shape in animdata_shapes_only: + yield shape.value + for camera in animdata_cameras_only: + yield camera.lens + yield camera.dof.focus_distance + + # Providing `count` to np.fromiter pre-allocates the array, avoiding extra memory allocations while iterating. + num_ob_values = len(animdata_ob) * 9 # Location, rotation and scale, each of which have x, y, and z components + num_shape_values = len(animdata_shapes) # Only 1 value per shape key + num_camera_values = len(animdata_cameras) * 2 # Focal length (`.lens`) and focus distance + num_values_per_frame = num_ob_values + num_shape_values + num_camera_values + num_frames = len(real_currframes) + all_values_flat = np.fromiter(frame_values_gen(), dtype=float, count=num_frames * num_values_per_frame) + + # Restore the scene's current frame. + scene.frame_set(back_currframe, subframe=0.0) + + # View such that each column is all values for a single frame and each row is all values for a single curve. + all_values = all_values_flat.reshape(num_frames, num_values_per_frame).T + # Split into views of the arrays for each curve type. + split_at = [num_ob_values, num_shape_values, num_camera_values] + # For unequal sized splits, np.split takes indices to split at, which can be acquired through a cumulative sum + # across the list. + # The last value isn't needed, because the last split is assumed to go to the end of the array. + split_at = np.cumsum(split_at[:-1]) + all_ob_values, all_shape_key_values, all_camera_values = np.split(all_values, split_at) + + all_anims = [] + + # Set location/rotation/scale curves. + # Split into equal sized views of the arrays for each object. + split_into = len(animdata_ob) + per_ob_values = np.split(all_ob_values, split_into) if split_into > 0 else () + for anims, ob_values in zip(animdata_ob.values(), per_ob_values): + # Split again into equal sized views of the location, rotation and scaling arrays. + loc_xyz, rot_xyz, sca_xyz = np.split(ob_values, 3) + # In-place convert from Blender rotation to FBX rotation. + np.rad2deg(rot_xyz, out=rot_xyz) + + anim_loc, anim_rot, anim_scale = anims + anim_loc.set_keyframes(real_currframes, loc_xyz) + anim_rot.set_keyframes(real_currframes, rot_xyz) + anim_scale.set_keyframes(real_currframes, sca_xyz) + all_anims.extend(anims) + + # Set shape key curves. + # There's only one array per shape key, so there's no need to split `all_shape_key_values`. + for (anim_shape, _me, _shape), shape_key_values in zip(animdata_shapes.values(), all_shape_key_values): + # In-place convert from Blender Shape Key Value to FBX Deform Percent. + shape_key_values *= 100.0 + anim_shape.set_keyframes(real_currframes, shape_key_values) + all_anims.append(anim_shape) + + # Set camera curves. + # Split into equal sized views of the arrays for each camera. + split_into = len(animdata_cameras) + per_camera_values = np.split(all_camera_values, split_into) if split_into > 0 else () + zipped = zip(animdata_cameras.values(), per_camera_values) + for (anim_camera_lens, anim_camera_focus_distance, _camera), (lens_values, focus_distance_values) in zipped: + # In-place convert from Blender focus distance to FBX. + focus_distance_values *= (1000 * gscale) + anim_camera_lens.set_keyframes(real_currframes, lens_values) + anim_camera_focus_distance.set_keyframes(real_currframes, focus_distance_values) + all_anims.append(anim_camera_lens) + all_anims.append(anim_camera_focus_distance) + + animations = {} + + # And now, produce final data (usable by FBX export code) + for anim in all_anims: + anim.simplify(simplify_fac, bake_step, force_keep) + if not anim: + continue + for obj_key, group_key, group, fbx_group, fbx_gname in anim.get_final_data(scene, ref_id, force_keep): + anim_data = animations.setdefault(obj_key, ("dummy_unused_key", {})) + anim_data[1][fbx_group] = (group_key, group, fbx_gname) + + astack_key = get_blender_anim_stack_key(scene, ref_id) + alayer_key = get_blender_anim_layer_key(scene, ref_id) + name = (get_blenderID_name(ref_id) if ref_id else scene.name).encode() + + if start_zero: + f_end -= f_start + f_start = 0.0 + + return (astack_key, animations, alayer_key, name, f_start, f_end) if animations else None + + def fbx_data_armature_elements(root, arm_obj, scene_data): + """ + Write: + * Bones "data" (NodeAttribute::LimbNode, contains pretty much nothing!). + * Deformers (i.e. Skin), bind between an armature and a mesh. + ** SubDeformers (i.e. Cluster), one per bone/vgroup pair. + * BindPose. + Note armature itself has no data, it is a mere "Null" Model... + """ + mat_world_arm = arm_obj.fbx_object_matrix(scene_data, global_space=True) + bones = tuple(bo_obj for bo_obj in arm_obj.bones if bo_obj in scene_data.objects) + + bone_radius_scale = 33.0 + + # Bones "data". + for bo_obj in bones: + bo = bo_obj.bdata + bo_data_key = scene_data.data_bones[bo_obj] + fbx_bo = elem_data_single_int64(root, b"NodeAttribute", get_fbx_uuid_from_key(bo_data_key)) + fbx_bo.add_string(fbx_name_class(bo.name.encode(), b"NodeAttribute")) + fbx_bo.add_string(b"LimbNode") + elem_data_single_string(fbx_bo, b"TypeFlags", b"Skeleton") + + tmpl = elem_props_template_init(scene_data.templates, b"Bone") + props = elem_properties(fbx_bo) + elem_props_template_set(tmpl, props, "p_double", b"Size", bo.head_radius * bone_radius_scale * SCALE_FACTOR) + elem_props_template_finalize(tmpl, props) + + # Custom properties. + if scene_data.settings.use_custom_props: + fbx_data_element_custom_properties(props, bo) + + # Store Blender bone length - XXX Not much useful actually :/ + # (LimbLength can't be used because it is a scale factor 0-1 for the parent-child distance: + # http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/cpp_ref/class_fbx_skeleton.html#a9bbe2a70f4ed82cd162620259e649f0f ) + # elem_props_set(props, "p_double", "BlenderBoneLength".encode(), (bo.tail_local - bo.head_local).length, custom=True) + + # Skin deformers and BindPoses. + # Note: we might also use Deformers for our "parent to vertex" stuff??? + deformer = scene_data.data_deformers_skin.get(arm_obj, None) + if deformer is not None: + for me, (skin_key, ob_obj, clusters) in deformer.items(): + # BindPose. + mat_world_obj, mat_world_bones = fbx_data_bindpose_element(root, ob_obj, me, scene_data, + arm_obj, mat_world_arm, bones) + + # Deformer. + fbx_skin = elem_data_single_int64(root, b"Deformer", get_fbx_uuid_from_key(skin_key)) + fbx_skin.add_string(fbx_name_class(arm_obj.name.encode(), b"Deformer")) + fbx_skin.add_string(b"Skin") + + elem_data_single_int32(fbx_skin, b"Version", FBX_DEFORMER_SKIN_VERSION) + elem_data_single_float64(fbx_skin, b"Link_DeformAcuracy", 50.0) # Only vague idea what it is... + + # Pre-process vertex weights (also to check vertices assigned ot more than four bones). + ob = ob_obj.bdata + bo_vg_idx = {bo_obj.bdata.name: ob.vertex_groups[bo_obj.bdata.name].index + for bo_obj in clusters.keys() if bo_obj.bdata.name in ob.vertex_groups} + valid_idxs = set(bo_vg_idx.values()) + vgroups = {vg.index: {} for vg in ob.vertex_groups} + verts_vgroups = ( + sorted(((vg.group, vg.weight) for vg in v.groups if vg.weight and vg.group in valid_idxs), + key=lambda e: e[1], reverse=True) + for v in me.vertices) + for idx, vgs in enumerate(verts_vgroups): + for vg_idx, w in vgs: + vgroups[vg_idx][idx] = w + + for bo_obj, clstr_key in clusters.items(): + bo = bo_obj.bdata + # Find which vertices are affected by this bone/vgroup pair, and matching weights. + # Note we still write a cluster for bones not affecting the mesh, to get 'rest pose' data + # (the TransformBlah matrices). + vg_idx = bo_vg_idx.get(bo.name, None) + indices, weights = ((), ()) if vg_idx is None or not vgroups[vg_idx] else zip( + *vgroups[vg_idx].items()) + + # Create the cluster. + fbx_clstr = elem_data_single_int64(root, b"Deformer", get_fbx_uuid_from_key(clstr_key)) + fbx_clstr.add_string(fbx_name_class(bo.name.encode(), b"SubDeformer")) + fbx_clstr.add_string(b"Cluster") + + elem_data_single_int32(fbx_clstr, b"Version", FBX_DEFORMER_CLUSTER_VERSION) + # No idea what that user data might be... + fbx_userdata = elem_data_single_string(fbx_clstr, b"UserData", b"") + fbx_userdata.add_string(b"") + if indices: + elem_data_single_int32_array(fbx_clstr, b"Indexes", indices) + elem_data_single_float64_array(fbx_clstr, b"Weights", weights) + # Transform, TransformLink and TransformAssociateModel matrices... + # They seem to be doublons of BindPose ones??? Have armature (associatemodel) in addition, though. + # WARNING! Even though official FBX API presents Transform in global space, + # **it is stored in bone space in FBX data!** See: + # http://area.autodesk.com/forum/autodesk-fbx/fbx-sdk/why-the-values-return- + # by-fbxcluster-gettransformmatrix-x-not-same-with-the-value-in-ascii-fbx-file/ + # test_data[bo_obj.name] = matrix4_to_array(mat_world_bones[bo_obj].inverted_safe() @ mat_world_obj) + + # Todo add to FBX addon + transform_matrix = mat_world_bones[bo_obj].inverted_safe() @ mat_world_obj + transform_link_matrix = mat_world_bones[bo_obj] + transform_associate_model_matrix = mat_world_arm + + transform_matrix = transform_matrix.LocRotScale( + [i * SCALE_FACTOR for i in transform_matrix.to_translation()], + transform_matrix.to_quaternion(), + [i * SCALE_FACTOR for i in transform_matrix.to_scale()], + ) + + elem_data_single_float64_array(fbx_clstr, b"Transform", matrix4_to_array(transform_matrix)) + elem_data_single_float64_array(fbx_clstr, b"TransformLink", matrix4_to_array(transform_link_matrix)) + elem_data_single_float64_array(fbx_clstr, b"TransformAssociateModel", + matrix4_to_array(transform_associate_model_matrix)) + + def fbx_data_object_elements(root, ob_obj, scene_data): + """ + Write the Object (Model) data blocks. + Note this "Model" can also be bone or dupli! + """ + obj_type = b"Null" # default, sort of empty... + if ob_obj.is_bone: + obj_type = b"LimbNode" + elif (ob_obj.type == 'ARMATURE'): + if scene_data.settings.armature_nodetype == 'ROOT': + obj_type = b"Root" + elif scene_data.settings.armature_nodetype == 'LIMBNODE': + obj_type = b"LimbNode" + else: # Default, preferred option... + obj_type = b"Null" + elif (ob_obj.type in BLENDER_OBJECT_TYPES_MESHLIKE): + obj_type = b"Mesh" + elif (ob_obj.type == 'LIGHT'): + obj_type = b"Light" + elif (ob_obj.type == 'CAMERA'): + obj_type = b"Camera" + + if ob_obj.type == 'ARMATURE': + if bpy.context.scene.send2ue.export_object_name_as_root: + # if the object is already named armature this forces the object name to root + if 'armature' == ob_obj.name.lower(): + ob_obj.name = 'root' + + # otherwise don't use the armature objects name as the root in unreal + else: + # Rename the armature object to 'Armature'. This is important, because this is a special + # reserved keyword for the Unreal FBX importer that will be ignored when the bone hierarchy + # is imported from the FBX file. That way there is not an additional root bone in the Unreal + # skeleton hierarchy. + ob_obj.name = 'Armature' + + model = elem_data_single_int64(root, b"Model", ob_obj.fbx_uuid) + model.add_string(fbx_name_class(ob_obj.name.encode(), b"Model")) + model.add_string(obj_type) + + elem_data_single_int32(model, b"Version", FBX_MODELS_VERSION) + + # Object transform info. + loc, rot, scale, matrix, matrix_rot = ob_obj.fbx_object_tx(scene_data) + rot = tuple(convert_rad_to_deg_iter(rot)) + + # Todo add to FBX addon + if ob_obj.type == 'ARMATURE': + scale = Vector((scale[0] / SCALE_FACTOR, scale[1] / SCALE_FACTOR, scale[2] / SCALE_FACTOR)) + if bpy.context.scene.send2ue.use_object_origin: + loc = Vector((0, 0, 0)) + + elif ob_obj.type == 'Ellipsis': + loc = Vector((loc[0] * SCALE_FACTOR, loc[1] * SCALE_FACTOR, loc[2] * SCALE_FACTOR)) + elif ob_obj.type == 'MESH': + # centers mesh object by their object origin + if bpy.context.scene.send2ue.use_object_origin: + asset_id = bpy.context.window_manager.send2ue.asset_id + asset_data = bpy.context.window_manager.send2ue.asset_data.get(asset_id) + + # if this is a static mesh then check that all other mesh objects in this export are + # centered relative the asset object + if asset_data['_asset_type'] == 'StaticMesh': + asset_object = bpy.data.objects.get(asset_data['_mesh_object_name']) + current_object = bpy.data.objects.get(ob_obj.name) + # get the world location of the current mesh + object_world_location = current_object.matrix_world.to_translation() + + # if this is using the empty from the combined meshes option + # https://github.com/EpicGamesExt/BlenderTools/issues/627 + empty_object_name = asset_data.get('empty_object_name') + if empty_object_name: + empty_object = bpy.data.objects.get(empty_object_name) + empty_world_location = empty_object.matrix_world.to_translation() + loc = Vector(( + (object_world_location[0] - empty_world_location[0]) * SCALE_FACTOR, + (object_world_location[1] - empty_world_location[1]) * SCALE_FACTOR, + (object_world_location[2] - empty_world_location[2]) * SCALE_FACTOR + )) + rot = (0, 0, 0) + else: + asset_world_location = asset_object.matrix_world.to_translation() + loc = Vector(( + (object_world_location[0] - asset_world_location[0]), + (object_world_location[1] - asset_world_location[1]), + (object_world_location[2] - asset_world_location[2]) + )) + # only adjust the asset object so collisions and lods are not effected + # https://github.com/EpicGamesExt/BlenderTools/issues/587 + if asset_object == current_object: + # clear rotation and scale only if spawning actor + # https://github.com/EpicGamesExt/BlenderTools/issues/610 + rot = (0, 0, 0) + scale = (1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR) + else: + loc = Vector((0, 0, 0)) + + tmpl = elem_props_template_init(scene_data.templates, b"Model") + # For now add only loc/rot/scale... + props = elem_properties(model) + elem_props_template_set(tmpl, props, "p_lcl_translation", b"Lcl Translation", loc, + animatable=True, animated=((ob_obj.key, "Lcl Translation") in scene_data.animated)) + elem_props_template_set(tmpl, props, "p_lcl_rotation", b"Lcl Rotation", rot, + animatable=True, animated=((ob_obj.key, "Lcl Rotation") in scene_data.animated)) + elem_props_template_set(tmpl, props, "p_lcl_scaling", b"Lcl Scaling", scale, + animatable=True, animated=((ob_obj.key, "Lcl Scaling") in scene_data.animated)) + elem_props_template_set(tmpl, props, "p_visibility", b"Visibility", float(not ob_obj.hide)) + + # Absolutely no idea what this is, but seems mandatory for validity of the file, and defaults to + # invalid -1 value... + elem_props_template_set(tmpl, props, "p_integer", b"DefaultAttributeIndex", 0) + + elem_props_template_set(tmpl, props, "p_enum", b"InheritType", 1) # RSrs + + # Custom properties. + if scene_data.settings.use_custom_props: + # Here we want customprops from the 'pose' bone, not the 'edit' bone... + bdata = ob_obj.bdata_pose_bone if ob_obj.is_bone else ob_obj.bdata + fbx_data_element_custom_properties(props, bdata) + + # Those settings would obviously need to be edited in a complete version of the exporter, may depends on + # object type, etc. + elem_data_single_int32(model, b"MultiLayer", 0) + elem_data_single_int32(model, b"MultiTake", 0) + if (bpy.app.version >= (4,0,0)): + elem_data_single_char(model, b"Shading", b"\x01") # Shading was changed to a char from bool in blender 4 + else: + elem_data_single_bool(model, b"Shading", True) + elem_data_single_string(model, b"Culling", b"CullingOff") + + if obj_type == b"Camera": + # Why, oh why are FBX cameras such a mess??? + # And WHY add camera data HERE??? Not even sure this is needed... + render = scene_data.scene.render + width = render.resolution_x * 1.0 + height = render.resolution_y * 1.0 + elem_props_template_set(tmpl, props, "p_enum", b"ResolutionMode", 0) # Don't know what it means + elem_props_template_set(tmpl, props, "p_double", b"AspectW", width) + elem_props_template_set(tmpl, props, "p_double", b"AspectH", height) + elem_props_template_set(tmpl, props, "p_bool", b"ViewFrustum", True) + elem_props_template_set(tmpl, props, "p_enum", b"BackgroundMode", 0) # Don't know what it means + elem_props_template_set(tmpl, props, "p_bool", b"ForegroundTransparent", True) + + elem_props_template_finalize(tmpl, props) + + def fbx_data_bindpose_element(root, me_obj, me, scene_data, arm_obj=None, mat_world_arm=None, bones=[]): + """ + Helper, since bindpose are used by both meshes shape keys and armature bones... + """ + if arm_obj is None: + arm_obj = me_obj + # We assume bind pose for our bones are their "Editmode" pose... + # All matrices are expected in global (world) space. + bindpose_key = get_blender_bindpose_key(arm_obj.bdata, me) + fbx_pose = elem_data_single_int64(root, b"Pose", get_fbx_uuid_from_key(bindpose_key)) + fbx_pose.add_string(fbx_name_class(me.name.encode(), b"Pose")) + fbx_pose.add_string(b"BindPose") + + elem_data_single_string(fbx_pose, b"Type", b"BindPose") + elem_data_single_int32(fbx_pose, b"Version", FBX_POSE_BIND_VERSION) + elem_data_single_int32(fbx_pose, b"NbPoseNodes", 1 + (1 if (arm_obj != me_obj) else 0) + len(bones)) + + # First node is mesh/object. + mat_world_obj = me_obj.fbx_object_matrix(scene_data, global_space=True) + fbx_posenode = elem_empty(fbx_pose, b"PoseNode") + elem_data_single_int64(fbx_posenode, b"Node", me_obj.fbx_uuid) + elem_data_single_float64_array(fbx_posenode, b"Matrix", matrix4_to_array(mat_world_obj)) + + # Second node is armature object itself. + if arm_obj != me_obj: + fbx_posenode = elem_empty(fbx_pose, b"PoseNode") + elem_data_single_int64(fbx_posenode, b"Node", arm_obj.fbx_uuid) + + # Todo merge into blenders FBX addon + mat_world_arm = mat_world_arm.LocRotScale( + mat_world_arm.to_translation(), + mat_world_arm.to_quaternion(), + [i / SCALE_FACTOR for i in mat_world_arm.to_scale()], + ) + + elem_data_single_float64_array(fbx_posenode, b"Matrix", matrix4_to_array(mat_world_arm)) + + # And all bones of armature! + mat_world_bones = {} + for bo_obj in bones: + bomat = bo_obj.fbx_object_matrix(scene_data, rest=True, global_space=True) + mat_world_bones[bo_obj] = bomat + fbx_posenode = elem_empty(fbx_pose, b"PoseNode") + elem_data_single_int64(fbx_posenode, b"Node", bo_obj.fbx_uuid) + + # Todo merge into blenders FBX addon + bomat = bomat.LocRotScale( + bomat.to_translation(), + bomat.to_quaternion(), + [i / SCALE_FACTOR for i in bomat.to_scale()] + ) + + elem_data_single_float64_array(fbx_posenode, b"Matrix", matrix4_to_array(bomat)) + + return mat_world_obj, mat_world_bones + + keywords["global_matrix"] = ( + axis_conversion( + to_forward=keywords['axis_forward'], + to_up=keywords['axis_up'], + ).to_4x4() + ) + + # save a copy of the original export bin + original_fbx_animations_do = export_fbx_bin.fbx_animations_do + original_fbx_data_armature_elements = export_fbx_bin.fbx_data_armature_elements + original_fbx_data_object_elements = export_fbx_bin.fbx_data_object_elements + original_fbx_data_bindpose_element = export_fbx_bin.fbx_data_bindpose_element + + # here is where we patch in our tweaked functions + export_fbx_bin.fbx_animations_do = fbx_animations_do + export_fbx_bin.fbx_data_armature_elements = fbx_data_armature_elements + export_fbx_bin.fbx_data_object_elements = fbx_data_object_elements + export_fbx_bin.fbx_data_bindpose_element = fbx_data_bindpose_element + + # patch in a report method on self to fake the fbx export operator class + self = type( + 'Send2UeExportFBX', + (object,), + {'report': report_error} + ) + export_fbx_bin.save(self, bpy.context, **keywords) + + # now re-patch back the export bin module so that the existing fbx addon still has its original code + # https://github.com/EpicGamesExt/BlenderTools/issues/598 + export_fbx_bin.fbx_animations_do = original_fbx_animations_do + export_fbx_bin.fbx_data_armature_elements = original_fbx_data_armature_elements + export_fbx_bin.fbx_data_object_elements = original_fbx_data_object_elements + export_fbx_bin.fbx_data_bindpose_element = original_fbx_data_bindpose_element \ No newline at end of file diff --git a/send2ue/core/utilities.py b/send2ue/core/utilities.py index 98f72f7d..1fc50ddc 100644 --- a/send2ue/core/utilities.py +++ b/send2ue/core/utilities.py @@ -88,13 +88,13 @@ def get_lod0_name(asset_name, properties): :param PropertyData properties: A property data instance that contains all property values of the tool. :return str: The full name for lod0. """ - result = re.search(rf"({properties.lod_regex})", asset_name) + result = re.search(properties.lod_regex, asset_name) + if result: lod = result.groups()[-1] return asset_name.replace(lod, f'{lod[:-1]}0') return asset_name - def get_lod_index(asset_name, properties): """ Gets the lod index from the given asset name. @@ -103,7 +103,7 @@ def get_lod_index(asset_name, properties): :param PropertyData properties: A property data instance that contains all property values of the tool. :return int: The lod index """ - result = re.search(rf"({properties.lod_regex})", asset_name) + result = re.search(properties.lod_regex, asset_name) if result: lod = result.groups()[-1] return int(lod[-1]) @@ -411,9 +411,9 @@ def get_asset_name(asset_name, properties, lod=False): if properties.import_lods: # remove the lod name from the asset - result = re.search(rf"({properties.lod_regex})", asset_name) + result = re.search(properties.lod_regex, asset_name) if result and not lod: - asset_name = asset_name.replace(result.groups()[0], '') + asset_name = asset_name.split(result.groups()[0])[0] return asset_name @@ -825,12 +825,16 @@ def is_collision_of(asset_name, mesh_object_name, properties): # note we strip whitespace out of the collision name since whitespace is already striped out of the asset name # https://github.com/EpicGamesExt/BlenderTools/issues/397#issuecomment-1333982590 mesh_object_name = mesh_object_name.strip() + + # fixes error re.error: global flags not at the start of the expression + lod_regex = properties.lod_regex.replace('(?i)', '') + return bool( re.fullmatch( r"U(BX|CP|SP|CX)_" + asset_name + r"(_\d+)?", mesh_object_name ) or re.fullmatch( - r"U(BX|CP|SP|CX)_" + asset_name + rf"{properties.lod_regex}(_\d+)?", mesh_object_name + r"(?i)U(BX|CP|SP|CX)_" + asset_name + rf"{lod_regex}(_\d+)?", mesh_object_name ) ) diff --git a/send2ue/core/validations.py b/send2ue/core/validations.py index 8943bed7..b34027be 100644 --- a/send2ue/core/validations.py +++ b/send2ue/core/validations.py @@ -229,7 +229,7 @@ def validate_lod_names(self): """ if self.properties.import_lods: for mesh_object in self.mesh_objects: - result = re.search(rf"({self.properties.lod_regex})", mesh_object.name) + result = re.search(self.properties.lod_regex, mesh_object.name) if not result: utilities.report_error( f'Object "{mesh_object.name}" does not follow the correct lod naming convention defined in the ' diff --git a/send2ue/dependencies/rpc/base_server.py b/send2ue/dependencies/rpc/base_server.py index 4bd3e042..512189b4 100644 --- a/send2ue/dependencies/rpc/base_server.py +++ b/send2ue/dependencies/rpc/base_server.py @@ -5,7 +5,9 @@ import time import logging import threading +import tempfile from http import HTTPStatus +from pathlib import Path from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler # importlib machinery needs to be available for importing client modules @@ -16,6 +18,7 @@ EXECUTION_QUEUE = queue.Queue() RETURN_VALUE_NAME = 'RPC_SERVER_RETURN_VALUE' ERROR_VALUE_NAME = 'RPC_SERVER_ERROR_VALUE' +TRACEBACK_FILE = Path(os.environ.get('RPC_TRACEBACK_FILE', Path(tempfile.gettempdir(), 'rpc', 'traceback.log'))) def run_in_main_thread(callable_instance, *args): @@ -99,6 +102,20 @@ def do_POST(self): else: self.report_401() + def _dispatch(self, method, params): + try: + return self.server.funcs[method](*params) # type: ignore + except Exception as error: + import traceback + traceback.print_exc() + + # dump the traceback to a file so that the client can read it. + os.makedirs(TRACEBACK_FILE.parent, exist_ok=True) + with open(TRACEBACK_FILE, 'w') as file: + file.write(f'Error from server:\n{traceback.format_exc()}') + + raise error + class BaseServer(SimpleXMLRPCServer): def __init__(self, *args, **kwargs): diff --git a/send2ue/dependencies/rpc/client.py b/send2ue/dependencies/rpc/client.py index 5f6dcba8..32838dd2 100644 --- a/send2ue/dependencies/rpc/client.py +++ b/send2ue/dependencies/rpc/client.py @@ -2,6 +2,9 @@ import re import logging import inspect +import tempfile +from typing import Optional, List +from pathlib import Path from xmlrpc.client import ( ServerProxy, Unmarshaller, @@ -12,6 +15,8 @@ ) logger = logging.getLogger(__package__) +TRACEBACK_FILE = Path(os.environ.get('RPC_TRACEBACK_FILE', Path(tempfile.gettempdir(), 'rpc', 'traceback.log'))) + class RPCUnmarshaller(Unmarshaller): def __init__(self, *args, **kwargs): @@ -20,15 +25,19 @@ def __init__(self, *args, **kwargs): self.builtin_exceptions = self._get_built_in_exceptions() @staticmethod - def _get_built_in_exceptions(): - """ - Gets a list of the built-in exception classes in python. + def _show_server_traceback() -> Optional[str]: + if TRACEBACK_FILE.exists(): + with open(TRACEBACK_FILE, 'r') as file: + logger.error(file.read()) - :return list[BaseException] A list of the built in exception classes in python: + @staticmethod + def _get_built_in_exceptions() -> List: + """ + Gets a list of the built in exception classes in python. """ builtin_exceptions = [] - for builtin_name, builtin_class in globals().get('__builtins__').items(): - if builtin_class and inspect.isclass(builtin_class) and issubclass(builtin_class, BaseException): + for _, builtin_class in globals().get('__builtins__', {}).items(): + if inspect.isclass(builtin_class) and issubclass(builtin_class, BaseException): builtin_exceptions.append(builtin_class) return builtin_exceptions @@ -36,15 +45,13 @@ def _get_built_in_exceptions(): def close(self): """ Override so we redefine the unmarshaller. - - :return tuple: A tuple of marshallables. """ if self._type is None or self._marks: raise ResponseError() if self._type == 'fault': marshallables = self._stack[0] - match = self.error_pattern.match(marshallables.get('faultString', '')) + match = self.error_pattern.match(marshallables.get('faultString', '')) # type: ignore if match: exception_name = match.group('exception').strip("") exception_message = match.group('exception_message') @@ -52,10 +59,12 @@ def close(self): if exception_name: for exception in self.builtin_exceptions: if exception.__name__ == exception_name: + self._show_server_traceback() raise exception(exception_message) # if all else fails just raise the fault - raise Fault(**marshallables) + self._show_server_traceback() + raise Fault(**marshallables) # type: ignore return tuple(self._stack) diff --git a/send2ue/properties.py b/send2ue/properties.py index e48ffde0..3b75cd1d 100644 --- a/send2ue/properties.py +++ b/send2ue/properties.py @@ -321,6 +321,7 @@ class Send2UeSceneProperties(property_class): description=( "Set a regular expression to determine an asset's lod identifier. The remaining unmatched string will " "be used as the asset name. The first matched group's last character should be the LOD index." + "Global modifier flags will NOT work in 4.0+. For example: (?i)" ) ) unreal_skeletal_mesh_lod_settings_path: bpy.props.StringProperty( diff --git a/send2ue/release_notes.md b/send2ue/release_notes.md index 7eb717f9..d837a2f6 100644 --- a/send2ue/release_notes.md +++ b/send2ue/release_notes.md @@ -14,4 +14,4 @@ ## Tests Passing On * Blender `3.3`, `3.6` (installed from blender.org) -* Unreal `5.3` +* Unreal `5.3` \ No newline at end of file diff --git a/tests/.gitignore b/tests/.gitignore index e62c26a7..9d49df04 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,7 +1,11 @@ *.blend1 results/* data/* +node_modules/* test_files/unreal_projects/test01/Content/* test_files/unreal_projects/test01/DerivedDataCache/* test_files/unreal_projects/test01/Intermediate/* test_files/unreal_projects/test01/Saved/* +test_files/data/* +package.json +package-lock.json \ No newline at end of file diff --git a/tests/run_tests.py b/tests/run_tests.py index bf39c5d4..b16b9267 100644 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -12,6 +12,9 @@ BLENDER_ADDONS = os.environ.get('BLENDER_ADDONS', 'send2ue,ue2rigify') +BLENDER_VERSION = os.environ.get('BLENDER_VERSION', '4.1') +UNREAL_VERSION = os.environ.get('UNREAL_VERSION', '5.4') + # switch ports depending on whether in test environment or not BLENDER_PORT = os.environ.get('BLENDER_PORT', '9997') UNREAL_PORT = os.environ.get('UNREAL_PORT', '9998') @@ -26,6 +29,7 @@ CONTAINER_TEST_FOLDER = os.environ.get('CONTAINER_TEST_FOLDER', f'{CONTAINER_REPO_FOLDER}tests') EXCLUSIVE_TEST_FILES = list(filter(None, os.environ.get('EXCLUSIVE_TEST_FILES', '').split(','))) or None EXCLUSIVE_TESTS = list(filter(None, os.environ.get('EXCLUSIVE_TESTS', '').split(','))) or None +ALWAYS_PULL = bool(int(os.environ.get('ALWAYS_PULL', '0'))) if __name__ == '__main__': @@ -40,11 +44,13 @@ 'CONTAINER_REPO_FOLDER': CONTAINER_REPO_FOLDER, 'HOST_TEST_FOLDER': HOST_TEST_FOLDER, 'CONTAINER_TEST_FOLDER': CONTAINER_TEST_FOLDER, + 'RPC_TRACEBACK_FILE': '/tmp/blender/send2ue/data/traceback.log', 'RPC_TIME_OUT': '60' } # add the test environment variable if specified if TEST_ENVIRONMENT: os.environ['TEST_ENVIRONMENT'] = TEST_ENVIRONMENT + os.environ['RPC_TRACEBACK_FILE'] = os.path.join(HOST_TEST_FOLDER, 'data', 'traceback.log') # make sure this is set in the current environment os.environ.update(environment) @@ -65,16 +71,17 @@ f'{host_temp_folder}:/tmp/blender/send2ue/data' ] - logging.debug(f'Launching ContainerTestManager...') + logging.debug('Launching ContainerTestManager...') # instance the container test manager with the blender and unreal containers container_test_manager = ContainerTestManager( images={ 'blender': { 'connects_to': 'unreal', 'refresh': True, - 'always_pull': False, - 'tag': 'blender:3.3.1-cpu-ubuntu18.04', - 'repository': 'nytimes', + 'always_pull': ALWAYS_PULL, + 'tag': f'blender-linux:{BLENDER_VERSION}', + 'repository': 'ghcr.io/poly-hammer', + 'user': 'root', 'rpc_port': BLENDER_PORT, 'environment': environment, 'volumes': volumes, @@ -90,15 +97,18 @@ }, 'unreal': { 'refresh': False, - 'always_pull': False, + 'always_pull': ALWAYS_PULL, 'rpc_port': UNREAL_PORT, 'environment': environment, 'volumes': volumes, - 'tag': 'unreal-engine:dev-slim-5.3', + # 'tag': 'unreal-linux:5.4', + # 'repository': 'ghcr.io/poly-hammer', + 'tag': f'unreal-engine:dev-slim-{UNREAL_VERSION}', 'repository': 'ghcr.io/epicgames', 'user': 'ue4', 'command': [ '/home/ue4/UnrealEngine/Engine/Binaries/Linux/UnrealEditor-Cmd', + # '/tmp/unreal_projects/test01/test01.uproject', f'{CONTAINER_TEST_FOLDER}/test_files/unreal_projects/test01/test01.uproject', '-stdout', '-unattended', diff --git a/tests/test_send2ue_extension_create_post_import_assets_for_groom.py b/tests/test_send2ue_extension_create_post_import_assets_for_groom.py index d92ad6bd..145ae7c0 100644 --- a/tests/test_send2ue_extension_create_post_import_assets_for_groom.py +++ b/tests/test_send2ue_extension_create_post_import_assets_for_groom.py @@ -1,3 +1,4 @@ +import sys from utils.base_test_case import BaseSend2ueTestCaseCore, BaseSend2ueTestCase, SkipSend2UeTests from test_send2ue_mannequins import TestSend2UeMannequins @@ -87,6 +88,9 @@ def test_create_post_import_assets_for_groom_option(self): """ Runs several test cases with the create post import assets extension for groom on the mannequin meshes. """ + if sys.platform == 'linux': + self.skipTest(reason='#TODO Skipping on linux') + self.move_to_collection([ 'male_root', 'SK_Mannequin_LOD1' diff --git a/tests/utils/container_test_manager.py b/tests/utils/container_test_manager.py index dc870b34..e376807a 100644 --- a/tests/utils/container_test_manager.py +++ b/tests/utils/container_test_manager.py @@ -7,6 +7,7 @@ import threading import unittest import docker +import docker.errors import xmlrunner import shutil import inspect @@ -99,8 +100,13 @@ def __init__( if os.environ.get('TEST_ENVIRONMENT'): try: - self.docker_client = docker.from_env() - self.docker_api_client = docker.APIClient() + if sys.platform == 'linux': + self.docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock') + self.docker_api_client = docker.APIClient(base_url='unix://var/run/docker.sock') + else: + self.docker_client = docker.from_env() + self.docker_api_client = docker.APIClient() + except docker.errors.DockerException: raise docker.errors.DockerException('Can not talk to the docker API. Is docker installed and running?') @@ -381,7 +387,7 @@ def run_containers(self): command = data.get('command', []) user = data.get('user') ports = data.get('ports', {}) - ports.update({f'{rpc_port}/tcp': rpc_port}) + ports.update({f'{rpc_port}/tcp': ('127.0.0.1', rpc_port)}) entrypoint = data.get('entrypoint') environment = data.get('environment', {}) environment.update({ @@ -453,7 +459,7 @@ def await_service(self, service_name, rpc_client): if rpc_client.proxy.is_running(): self.logger.info(f'{service_name} is running!') break - except (RemoteDisconnected, ConnectionRefusedError): + except (RemoteDisconnected, ConnectionRefusedError, ConnectionResetError): self.logger.debug( f'{service_name} has not responded in {self.get_start_time_offset()} seconds...' ) @@ -550,19 +556,18 @@ def log_summary(self): system_cpu_usage = cpu_stats['system_cpu_usage'] pre_cpu_total_usage = pre_cpu_stats['cpu_usage']['total_usage'] pre_system_cpu_usage = pre_cpu_stats['system_cpu_usage'] - cpu_usage_count = len(cpu_stats['cpu_usage']['percpu_usage']) # get memory stats memory_stats = stats["memory_stats"]["stats"] memory_usage = stats["memory_stats"]["usage"] - memory_used = memory_usage - memory_stats["cache"] + memory_stats["active_file"] + memory_used = memory_usage - memory_stats.get("cache", 0) + memory_stats.get("active_file", 0) limit = stats["memory_stats"]['limit'] # calculate cpu percentages total_cpu_usage_delta = cpu_total_usage - pre_cpu_total_usage system_cpu_usage_delta = system_cpu_usage - pre_system_cpu_usage - cpu_percentage = round((total_cpu_usage_delta / system_cpu_usage_delta) * cpu_usage_count * 100, 3) + cpu_percentage = round((total_cpu_usage_delta / system_cpu_usage_delta) * 100, 3) # calculate memory percentages memory_percentage = round(memory_used / limit * 100, 2) @@ -575,7 +580,7 @@ def log_summary(self): self.logger.info( f' {service_name.capitalize()}: Total runtime {runtime_delta.seconds} seconds | {cpu_percentage}% ' - f'CPU used across {cpu_usage_count} cores | {memory_percentage}% of available memory used ' + f'of available CPU was used | {memory_percentage}% of available memory used ' f'{gb_memory}GB / {gb_memory_limit}GB' ) diff --git a/ue2rigify/__init__.py b/ue2rigify/__init__.py index de8598af..2811cc55 100644 --- a/ue2rigify/__init__.py +++ b/ue2rigify/__init__.py @@ -11,12 +11,12 @@ bl_info = { "name": "UE to Rigify", - "author": "Epic Games Inc.", + "author": "Epic Games Inc (now a community fork)", "description": "Allows you to drive a given rig and its animations with a Rigify rig.", - "version": (1, 6, 2), + "version": (1, 6, 3), "blender": (3, 3, 0), "location": "3D View > Tools > UE to Rigify", - "wiki_url": "https://epicgamesext.github.io/BlenderTools/ue2rigify", + "wiki_url": "https://poly-hammer.github.io/BlenderTools/ue2rigify", "warning": "", "category": "Pipeline" }