diff --git a/.github/workflows/build-docs.yaml b/.github/workflows/build-docs.yaml new file mode 100644 index 0000000..518da21 --- /dev/null +++ b/.github/workflows/build-docs.yaml @@ -0,0 +1,75 @@ +name: Deploy VitePress site to Pages + +on: + push: + branches: [vitepress] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@v4 + with: + version: 10 + run_install: false + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + cache-dependency-path: vitepress/pnpm-lock.yaml + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Install dependencies + run: pnpm -C vitepress install + + - name: Build with VitePress + run: pnpm -C vitepress docs:build + + - name: Run preview job on the background + run: pnpm -C vitepress docs:preview & + + - name: Wait for the preview job + uses: iFaxity/wait-on-action@v1.2.1 + with: + resource: tcp:4173 + + - name: Generate Library PDF + run: | + pnpm -C vitepress docs:print + pkill -f docs:preview + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: vitepress/src/.vitepress/dist + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/build-lib.yaml b/.github/workflows/build-lib.yaml deleted file mode 100644 index bd4ea92..0000000 --- a/.github/workflows/build-lib.yaml +++ /dev/null @@ -1,66 +0,0 @@ -name: Build documentation - -on: - push: - branches: ["main"] - workflow_dispatch: - -permissions: - id-token: write - pages: write - -env: - INSTANCE: "Writerside/biblioteca" - ARTIFACT: "webHelpBIBLIOTECA2-all.zip" - DOCKER_VERSION: "242.21870" - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Build docs using Writerside Docker builder - uses: JetBrains/writerside-github-action@v4 - with: - instance: ${{ env.INSTANCE }} - artifact: ${{ env.ARTIFACT }} - docker-version: ${{ env.DOCKER_VERSION }} - - - name: Save artifact with build results - uses: actions/upload-artifact@v4 - with: - name: docs - path: | - artifacts/${{ env.ARTIFACT }} - artifacts/report.json - retention-days: 1 - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - needs: build - runs-on: ubuntu-latest - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: docs - - - name: Unzip artifact - run: unzip -O UTF-8 -qq '${{ env.ARTIFACT }}' -d dir - - - name: Setup Pages - uses: actions/configure-pages@v4 - - - name: Package and upload Pages artifact - uses: actions/upload-pages-artifact@v3 - with: - path: dir - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d95ec13 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules +cache +temp +dist +.idea +.vscode +.temp diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index a55e7a1..0000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/competitive-programming.iml b/.idea/competitive-programming.iml deleted file mode 100644 index 6102194..0000000 --- a/.idea/competitive-programming.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index ae8bede..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Writerside/biblioteca.tree b/Writerside/biblioteca.tree deleted file mode 100644 index 11b9030..0000000 --- a/Writerside/biblioteca.tree +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/Writerside/c.list b/Writerside/c.list deleted file mode 100644 index c4c77a2..0000000 --- a/Writerside/c.list +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Writerside/cfg/buildprofiles.xml b/Writerside/cfg/buildprofiles.xml deleted file mode 100644 index c7b7355..0000000 --- a/Writerside/cfg/buildprofiles.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - caecomp.png - icon16.png,icon32.png,icon96.png - false - true - deep-ocean - vivid - - - - false - - - - diff --git a/Writerside/cfg/glossary.xml b/Writerside/cfg/glossary.xml deleted file mode 100644 index 22bec6b..0000000 --- a/Writerside/cfg/glossary.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Description of what "foo" is. - - \ No newline at end of file diff --git a/Writerside/images/completion_procedure.png b/Writerside/images/completion_procedure.png deleted file mode 100644 index 3535a3f..0000000 Binary files a/Writerside/images/completion_procedure.png and /dev/null differ diff --git a/Writerside/images/completion_procedure_dark.png b/Writerside/images/completion_procedure_dark.png deleted file mode 100644 index a65beb0..0000000 Binary files a/Writerside/images/completion_procedure_dark.png and /dev/null differ diff --git a/Writerside/images/convert_table_to_xml.png b/Writerside/images/convert_table_to_xml.png deleted file mode 100644 index 2518a64..0000000 Binary files a/Writerside/images/convert_table_to_xml.png and /dev/null differ diff --git a/Writerside/images/convert_table_to_xml_dark.png b/Writerside/images/convert_table_to_xml_dark.png deleted file mode 100644 index 4716122..0000000 Binary files a/Writerside/images/convert_table_to_xml_dark.png and /dev/null differ diff --git a/Writerside/images/favicons/icon16.png b/Writerside/images/favicons/icon16.png deleted file mode 100644 index bfc1353..0000000 Binary files a/Writerside/images/favicons/icon16.png and /dev/null differ diff --git a/Writerside/images/favicons/icon32.png b/Writerside/images/favicons/icon32.png deleted file mode 100644 index c693681..0000000 Binary files a/Writerside/images/favicons/icon32.png and /dev/null differ diff --git a/Writerside/images/favicons/icon96.png b/Writerside/images/favicons/icon96.png deleted file mode 100644 index f91fb25..0000000 Binary files a/Writerside/images/favicons/icon96.png and /dev/null differ diff --git a/Writerside/images/new_topic_options.png b/Writerside/images/new_topic_options.png deleted file mode 100644 index bc6abb6..0000000 Binary files a/Writerside/images/new_topic_options.png and /dev/null differ diff --git a/Writerside/images/new_topic_options_dark.png b/Writerside/images/new_topic_options_dark.png deleted file mode 100644 index bf3e48d..0000000 Binary files a/Writerside/images/new_topic_options_dark.png and /dev/null differ diff --git a/Writerside/snippets.tree b/Writerside/snippets.tree deleted file mode 100644 index 600d8b8..0000000 --- a/Writerside/snippets.tree +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Writerside/topics/biblioteca.md b/Writerside/topics/biblioteca.md deleted file mode 100644 index 183e1ab..0000000 --- a/Writerside/topics/biblioteca.md +++ /dev/null @@ -1,8 +0,0 @@ -# Sobre a Biblioteca - -Este é um projeto do CAECOMP - IFCE, com o objetivo distribuir implementações de algoritmos comumente usados em contests ou maratonas de programação, como por exemplo: -- Algoritmos de grafos; -- Algoritmos de busca; -- Estruturas de dados eficientes; - -etc. \ No newline at end of file diff --git a/Writerside/topics/estruturas/dsu.md b/Writerside/topics/estruturas/dsu.md deleted file mode 100644 index 5ee4648..0000000 --- a/Writerside/topics/estruturas/dsu.md +++ /dev/null @@ -1,6 +0,0 @@ -# Disjoint Set Union (Union Find) - -```c++ -``` - -{src="estruturas/DSU.cpp"} \ No newline at end of file diff --git a/Writerside/topics/estruturas/estruturas.md b/Writerside/topics/estruturas/estruturas.md deleted file mode 100644 index 1ff6b73..0000000 --- a/Writerside/topics/estruturas/estruturas.md +++ /dev/null @@ -1 +0,0 @@ -# Estruturas diff --git a/Writerside/topics/estruturas/segtrees.md b/Writerside/topics/estruturas/segtrees.md deleted file mode 100644 index 257b3dd..0000000 --- a/Writerside/topics/estruturas/segtrees.md +++ /dev/null @@ -1,22 +0,0 @@ -# Segtrees - -## Segtree iterativa - -```c++ -``` - -{src="estruturas/segtree-iterativa.cpp"} - -## Segtree Recursiva - -```c++ -``` - -{src="estruturas/segtree-recursiva.cpp"} - -## Lazy Segtree (recursiva) - -```c++ -``` - -{src="estruturas/segtree-lazy.cpp"} \ No newline at end of file diff --git a/Writerside/topics/grafos/ciclos.md b/Writerside/topics/grafos/ciclos.md deleted file mode 100644 index dacdc1b..0000000 --- a/Writerside/topics/grafos/ciclos.md +++ /dev/null @@ -1,15 +0,0 @@ -# Detecção de ciclo - -## Grafo não direcionado, usando [Union Find](dsu.md) - -```c++ -``` - -{src="grafos/ciclo-nao-direcionado.cpp"} - -## Grafo direcionado, usando DFS - -```c++ -``` - -{ src="grafos/ciclo-direcionado.cpp"} \ No newline at end of file diff --git a/Writerside/topics/grafos/grafos.md b/Writerside/topics/grafos/grafos.md deleted file mode 100644 index cd4cc1d..0000000 --- a/Writerside/topics/grafos/grafos.md +++ /dev/null @@ -1 +0,0 @@ -# Grafos diff --git a/Writerside/topics/grafos/menor-caminho.md b/Writerside/topics/grafos/menor-caminho.md deleted file mode 100644 index 581c564..0000000 --- a/Writerside/topics/grafos/menor-caminho.md +++ /dev/null @@ -1,25 +0,0 @@ -# Menor caminho - -## Floyd-Warshall - - -\mathcal{O}(n^3) -\Theta(n^2) - -```c++ -``` -{ src="grafos/floyd-warshall.cpp" } - -## Bellman-Ford - -```c++ -``` - -{ src="grafos/bellman-ford.cpp"} - -## Dijkstra (para grafos esparsos) - -```c++ -``` - -{src="grafos/djikstra-esparso.cpp"} \ No newline at end of file diff --git a/Writerside/topics/programacao-dinamica/mochila.md b/Writerside/topics/programacao-dinamica/mochila.md deleted file mode 100644 index d5166d0..0000000 --- a/Writerside/topics/programacao-dinamica/mochila.md +++ /dev/null @@ -1,7 +0,0 @@ -# Problema da mochila - -## Mochila binária - -```c++ -``` -{ src="dp/binary-knapsack.cpp" } \ No newline at end of file diff --git a/Writerside/topics/programacao-dinamica/programacao-dinamica.md b/Writerside/topics/programacao-dinamica/programacao-dinamica.md deleted file mode 100644 index 0b3fecd..0000000 --- a/Writerside/topics/programacao-dinamica/programacao-dinamica.md +++ /dev/null @@ -1 +0,0 @@ -# Programação Dinâmica \ No newline at end of file diff --git a/Writerside/topics/snippets.md b/Writerside/topics/snippets.md deleted file mode 100644 index 422f9d8..0000000 --- a/Writerside/topics/snippets.md +++ /dev/null @@ -1,18 +0,0 @@ -# snippets - - - - - - - - - - - - - - - -
ComplexidadeTemporalEspacial
%temporal%%espacial%
-
\ No newline at end of file diff --git a/Writerside/v.list b/Writerside/v.list deleted file mode 100644 index 2d12cb3..0000000 --- a/Writerside/v.list +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg deleted file mode 100644 index 1e185cc..0000000 --- a/Writerside/writerside.cfg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - diff --git a/vitepress/package.json b/vitepress/package.json new file mode 100644 index 0000000..88500d3 --- /dev/null +++ b/vitepress/package.json @@ -0,0 +1,34 @@ +{ + "name": "competitive-programming-handbook", + "version": "1.0.0", + "description": "Um projeto do CAECOMP - IFCE para ajudar participantes de contests de programação competitiva.", + "main": "index.js", + "scripts": { + "docs:dev": "vitepress dev src", + "docs:build": "vitepress build src", + "docs:preview": "vitepress preview src", + "docs:print": "tsx src/createPdf.ts" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CAECOMP/handbook-competitive-programming.git" + }, + "author": "CAECOMP IFCE", + "license": "MIT", + "bugs": { + "url": "https://github.com/CAECOMP/handbook-competitive-programming/issues" + }, + "homepage": "https://github.com/CAECOMP/handbook-competitive-programming#readme", + "devDependencies": { + "@types/node": "^22.13.14", + "@web-printer/core": "^0.4.0", + "@web-printer/vitepress": "^0.4.0", + "markdown-it-mathjax3": "^4.3.2", + "tsx": "^4.19.3", + "typescript": "^5.8.2", + "vitepress": "^1.6.3" + }, + "dependencies": { + "vitepress-plugin-tabs": "^0.5.0" + } +} diff --git a/vitepress/pnpm-lock.yaml b/vitepress/pnpm-lock.yaml new file mode 100644 index 0000000..ce4943d --- /dev/null +++ b/vitepress/pnpm-lock.yaml @@ -0,0 +1,2338 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + vitepress-plugin-tabs: + specifier: ^0.5.0 + version: 0.5.0(vitepress@1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) + devDependencies: + '@types/node': + specifier: ^22.13.14 + version: 22.13.14 + '@web-printer/core': + specifier: ^0.4.0 + version: 0.4.0 + '@web-printer/vitepress': + specifier: ^0.4.0 + version: 0.4.0 + markdown-it-mathjax3: + specifier: ^4.3.2 + version: 4.3.2 + tsx: + specifier: ^4.19.3 + version: 4.19.3 + typescript: + specifier: ^5.8.2 + version: 5.8.2 + vitepress: + specifier: ^1.6.3 + version: 1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2) + +packages: + + '@algolia/autocomplete-core@1.17.7': + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7': + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.17.7': + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.17.7': + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.23.0': + resolution: {integrity: sha512-AyZ+9CUgWXwaaJ2lSwOJSy+/w0MFBPFqLrjWYs/HEpYMzBuFfGNZ7gEM9a7h4j7jY8hSBARBl8qdvInmj5vOEQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-analytics@5.23.0': + resolution: {integrity: sha512-oeKCPwLBnTEPF/RWr0aaJnrfRDfFRLT5O7KV0OF1NmpEXvmzLmN7RwnwDKsNtPUHNfpJ6esP9xzkPEtJabrZ2w==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@5.23.0': + resolution: {integrity: sha512-9jacdC44vXLSaYKNLkFpbU1J4BbBPi/N7uoPhcGO//8ubRuVzigH6+RfK5FbudmQlqFt0J5DGUCVeTlHtgyUeg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-insights@5.23.0': + resolution: {integrity: sha512-/Gw5UitweRsnyb24Td4XhjXmsx8PxFzCI0oW6FZZvyr4kjzB9ECP2IjO+PdDq1A2fzDl/LXQ+u8ROudoVnXnQg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-personalization@5.23.0': + resolution: {integrity: sha512-ivrEZBoXfDatpqpifgHauydxHEe4udNqJ0gy7adR2KODeQ+39MQeaT10I24mu+eylIuiQKJRqORgEdLZycq2qQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-query-suggestions@5.23.0': + resolution: {integrity: sha512-DjSgJWqTcsnlXEKqDsU7Y2vB/W/VYLlr6UfkzJkMuKB554Ia7IJr4keP2AlHVjjbBG62IDpdh5OkEs/+fbWsOA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-search@5.23.0': + resolution: {integrity: sha512-XAYWUYUhEG4OIdo/N7H/OFFRD9fokfv3bBTky+4Y4/q07bxhnrGSUvcrU6JQ2jJTQyg6kv0ke1EIfiTO/Xxb+g==} + engines: {node: '>= 14.0.0'} + + '@algolia/ingestion@1.23.0': + resolution: {integrity: sha512-ULbykzzhhLVofCDU1m/CqSzTyKmjaxA/z1d6o6hgUuR6X7/dll9/G0lu0e4vmWIOItklWWrhU2V8sXD0YGBIHg==} + engines: {node: '>= 14.0.0'} + + '@algolia/monitoring@1.23.0': + resolution: {integrity: sha512-oB3wG7CgQJQr+uoijV7bWBphiSHkvGX43At8RGgkDyc7Aeabcp9ik5HgLC1YDgbHVOlQI+tce5HIbDCifzQCIg==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@5.23.0': + resolution: {integrity: sha512-4PWvCV6VGhnCMAbv2zfQUAlc3ofMs6ovqKlC/xcp7tWaucYd//piHg9CcCM4S0p9OZznEGQMRYPt2uqbk6V9vg==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@5.23.0': + resolution: {integrity: sha512-bacOsX41pnsupNB0k0Ny+1JDchQxIsZIcp69GKDBT0NgTHG8OayEO141eFalNmGil+GXPY0NUPRpx+5s4RdhGA==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-fetch@5.23.0': + resolution: {integrity: sha512-tVNFREexJWDrvc23evmRgAcb2KLZuVilOIB/rVnQCl0GDbqIWJuQ1lG22HKqvCEQFthHkgVFGLYE74wQ96768g==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-node-http@5.23.0': + resolution: {integrity: sha512-XXHbq2heOZc9EFCc4z+uyHS9YRBygZbYQVsWjWZWx8hdAz+tkBX/jLHM9Xg+3zO0/v8JN6pcZzqYEVsdrLeNLg==} + engines: {node: '>= 14.0.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@cantoo/pdf-lib@1.21.1': + resolution: {integrity: sha512-ggPKdexF9Aa2hpDLL57dmydcEG28JWYXVFij2Tc8WwlQVhcYw7Tr/uvNf8NcPNcjyt2yeuWfV+/nCtSf5HCSlA==} + + '@docsearch/css@3.8.2': + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + + '@docsearch/js@3.8.2': + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} + + '@docsearch/react@3.8.2': + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@iconify-json/simple-icons@1.2.29': + resolution: {integrity: sha512-KYrxmxtRz6iOAulRiUsIBMUuXek+H+Evwf8UvYPIkbQ+KDoOqTegHx3q/w3GDDVC0qJYB+D3hXPMZcpm78qIuA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@pdf-lib/standard-fonts@1.0.0': + resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==} + + '@pdf-lib/upng@1.0.1': + resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==} + + '@rollup/rollup-android-arm-eabi@4.37.0': + resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.37.0': + resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.37.0': + resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.37.0': + resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.37.0': + resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.37.0': + resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': + resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.37.0': + resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.37.0': + resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.37.0': + resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': + resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': + resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.37.0': + resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.37.0': + resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.37.0': + resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.37.0': + resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.37.0': + resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.37.0': + resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.37.0': + resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.37.0': + resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} + cpu: [x64] + os: [win32] + + '@shikijs/core@2.5.0': + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + + '@shikijs/engine-javascript@2.5.0': + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + + '@shikijs/engine-oniguruma@2.5.0': + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + + '@shikijs/langs@2.5.0': + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + + '@shikijs/themes@2.5.0': + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + + '@shikijs/transformers@2.5.0': + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + + '@shikijs/types@2.5.0': + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/node@22.13.14': + resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitejs/plugin-vue@5.2.3': + resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@7.7.2': + resolution: {integrity: sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==} + + '@vue/devtools-kit@7.7.2': + resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==} + + '@vue/devtools-shared@7.7.2': + resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/integrations@12.8.2': + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + + '@web-printer/core@0.4.0': + resolution: {integrity: sha512-7f4f8revjNs9IN7nIIK066i4wJ5k81fKrcFrR04PS+h4TdfR71dsDh+WCttk8PYSk7mor9Gv148J8Os87t8ZDA==} + + '@web-printer/vitepress@0.4.0': + resolution: {integrity: sha512-+J1k1G+lVEkCr+6et6PxGvccbTXKgNUmsxEKWY1sm284fJu7kHNGwg/Qh38lh49ZzdlOdqK7iv8gNynPhsnSlQ==} + + algoliasearch@5.23.0: + resolution: {integrity: sha512-7TCj+hLx6fZKppLL74lYGDEltSBNSu4vqRwgqeIKZ3VQ0q3aOrdEN0f1sDWcvU1b+psn2wnl7aHt9hWtYatUUA==} + engines: {node: '>= 14.0.0'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + cheerio-select@1.6.0: + resolution: {integrity: sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==} + + cheerio@1.0.0-rc.10: + resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==} + engines: {node: '>= 6'} + + code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commander@9.2.0: + resolution: {integrity: sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==} + engines: {node: ^12.20.0 || >=14} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@3.3.0: + resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==} + engines: {node: '>= 4'} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + + escape-goat@3.0.0: + resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==} + engines: {node: '>=10'} + + esm@3.2.25: + resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} + engines: {node: '>=6'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + focus-trap@7.6.4: + resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-entities@2.5.3: + resolution: {integrity: sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + htmlparser2@5.0.1: + resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==} + + htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + juice@8.1.0: + resolution: {integrity: sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==} + engines: {node: '>=10.0.0'} + hasBin: true + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + markdown-it-mathjax3@4.3.2: + resolution: {integrity: sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w==} + + mathjax-full@3.2.2: + resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mensch@0.3.4: + resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==} + + mhchemparser@4.2.1: + resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + minisearch@7.1.2: + resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mj-context-menu@0.6.1: + resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-html-better-parser@1.4.11: + resolution: {integrity: sha512-rXYKBD30q6Iw/Y8o2ueJILB29Z3RrqQQN/U2PDg4Iz2TSZP/KmqdcGp+pl8o5uYZlvIKh+A4UfOK98pKIb3cRw==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + + oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.26.4: + resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==} + + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.37.0: + resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + search-insights@2.17.2: + resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} + + shiki@2.5.0: + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + single-line-log@1.1.2: + resolution: {integrity: sha512-awzaaIPtYFdexLr6TBpcZSGPB6D1RInNO/qNetgaJloPDF/D0GkVtLvGEp8InfmLV7CyLyQ5fIRP+tVN/JmWQA==} + + slick@1.12.2: + resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + speech-rule-engine@4.0.7: + resolution: {integrity: sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==} + hasBin: true + + string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + valid-data-url@3.0.1: + resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} + engines: {node: '>=10'} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@5.4.15: + resolution: {integrity: sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitepress-plugin-tabs@0.5.0: + resolution: {integrity: sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A==} + peerDependencies: + vitepress: ^1.0.0-rc.27 + vue: ^3.3.8 + + vitepress@1.6.3: + resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + web-resource-inliner@6.0.1: + resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==} + engines: {node: '>=10.0.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + wicked-good-xpath@1.3.0: + resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} + + xmldom-sre@0.1.31: + resolution: {integrity: sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==} + engines: {node: '>=0.1'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0) + '@algolia/client-search': 5.23.0 + algoliasearch: 5.23.0 + + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)': + dependencies: + '@algolia/client-search': 5.23.0 + algoliasearch: 5.23.0 + + '@algolia/client-abtesting@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/client-analytics@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/client-common@5.23.0': {} + + '@algolia/client-insights@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/client-personalization@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/client-query-suggestions@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/client-search@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/ingestion@1.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/monitoring@1.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/recommend@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + '@algolia/requester-browser-xhr@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + + '@algolia/requester-fetch@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + + '@algolia/requester-node-http@5.23.0': + dependencies: + '@algolia/client-common': 5.23.0 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@cantoo/pdf-lib@1.21.1': + dependencies: + '@pdf-lib/standard-fonts': 1.0.0 + '@pdf-lib/upng': 1.0.1 + color: 4.2.3 + node-html-better-parser: 1.4.11 + pako: 1.0.11 + + '@docsearch/css@3.8.2': {} + + '@docsearch/js@3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2)': + dependencies: + '@docsearch/react': 3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2) + preact: 10.26.4 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.23.0)(algoliasearch@5.23.0) + '@docsearch/css': 3.8.2 + algoliasearch: 5.23.0 + optionalDependencies: + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.25.1': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.25.1': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.25.1': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.25.1': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.25.1': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.25.1': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.25.1': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.25.1': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.25.1': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.25.1': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.25.1': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.25.1': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.25.1': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.25.1': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.25.1': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.25.1': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.25.1': + optional: true + + '@esbuild/netbsd-arm64@0.25.1': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.25.1': + optional: true + + '@esbuild/openbsd-arm64@0.25.1': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.25.1': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.25.1': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.25.1': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.25.1': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.25.1': + optional: true + + '@iconify-json/simple-icons@1.2.29': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@pdf-lib/standard-fonts@1.0.0': + dependencies: + pako: 1.0.11 + + '@pdf-lib/upng@1.0.1': + dependencies: + pako: 1.0.11 + + '@rollup/rollup-android-arm-eabi@4.37.0': + optional: true + + '@rollup/rollup-android-arm64@4.37.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.37.0': + optional: true + + '@rollup/rollup-darwin-x64@4.37.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.37.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.37.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.37.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.37.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.37.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.37.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.37.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.37.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.37.0': + optional: true + + '@shikijs/core@2.5.0': + dependencies: + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 + + '@shikijs/engine-oniguruma@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/themes@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/transformers@2.5.0': + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/types': 2.5.0 + + '@shikijs/types@2.5.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@types/estree@1.0.6': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + + '@types/node@22.13.14': + dependencies: + undici-types: 6.20.0 + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + + '@ungap/structured-clone@1.3.0': {} + + '@vitejs/plugin-vue@5.2.3(vite@5.4.15(@types/node@22.13.14))(vue@3.5.13(typescript@5.8.2))': + dependencies: + vite: 5.4.15(@types/node@22.13.14) + vue: 3.5.13(typescript@5.8.2) + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.27.0 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.27.0 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@7.7.2': + dependencies: + '@vue/devtools-kit': 7.7.2 + + '@vue/devtools-kit@7.7.2': + dependencies: + '@vue/devtools-shared': 7.7.2 + birpc: 0.2.19 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + + '@vue/devtools-shared@7.7.2': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.8.2) + + '@vue/shared@3.5.13': {} + + '@vueuse/core@12.8.2(typescript@5.8.2)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.8.2) + vue: 3.5.13(typescript@5.8.2) + transitivePeerDependencies: + - typescript + + '@vueuse/integrations@12.8.2(focus-trap@7.6.4)(typescript@5.8.2)': + dependencies: + '@vueuse/core': 12.8.2(typescript@5.8.2) + '@vueuse/shared': 12.8.2(typescript@5.8.2) + vue: 3.5.13(typescript@5.8.2) + optionalDependencies: + focus-trap: 7.6.4 + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/shared@12.8.2(typescript@5.8.2)': + dependencies: + vue: 3.5.13(typescript@5.8.2) + transitivePeerDependencies: + - typescript + + '@web-printer/core@0.4.0': + dependencies: + '@cantoo/pdf-lib': 1.21.1 + single-line-log: 1.1.2 + + '@web-printer/vitepress@0.4.0': + dependencies: + '@web-printer/core': 0.4.0 + + algoliasearch@5.23.0: + dependencies: + '@algolia/client-abtesting': 5.23.0 + '@algolia/client-analytics': 5.23.0 + '@algolia/client-common': 5.23.0 + '@algolia/client-insights': 5.23.0 + '@algolia/client-personalization': 5.23.0 + '@algolia/client-query-suggestions': 5.23.0 + '@algolia/client-search': 5.23.0 + '@algolia/ingestion': 1.23.0 + '@algolia/monitoring': 1.23.0 + '@algolia/recommend': 5.23.0 + '@algolia/requester-browser-xhr': 5.23.0 + '@algolia/requester-fetch': 5.23.0 + '@algolia/requester-node-http': 5.23.0 + + ansi-colors@4.1.3: {} + + ansi-regex@2.1.1: {} + + birpc@0.2.19: {} + + boolbase@1.0.0: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + cheerio-select@1.6.0: + dependencies: + css-select: 4.3.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + + cheerio@1.0.0-rc.10: + dependencies: + cheerio-select: 1.6.0 + dom-serializer: 1.4.1 + domhandler: 4.3.1 + htmlparser2: 6.1.0 + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + tslib: 2.8.1 + + code-point-at@1.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + comma-separated-tokens@2.0.3: {} + + commander@6.2.1: {} + + commander@9.2.0: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-what@6.1.0: {} + + csstype@3.1.3: {} + + dequal@2.0.3: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@2.3.0: {} + + domhandler@3.3.0: + dependencies: + domelementtype: 2.3.0 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + emoji-regex-xs@1.0.0: {} + + entities@2.2.0: {} + + entities@4.5.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.25.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + + escape-goat@3.0.0: {} + + esm@3.2.25: {} + + estree-walker@2.0.2: {} + + focus-trap@7.6.4: + dependencies: + tabbable: 6.2.0 + + fsevents@2.3.3: + optional: true + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.0.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hookable@5.5.3: {} + + html-entities@2.5.3: {} + + html-void-elements@3.0.0: {} + + htmlparser2@5.0.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 3.3.0 + domutils: 2.8.0 + entities: 2.2.0 + + htmlparser2@6.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + + is-arrayish@0.3.2: {} + + is-fullwidth-code-point@1.0.0: + dependencies: + number-is-nan: 1.0.1 + + is-what@4.1.16: {} + + juice@8.1.0: + dependencies: + cheerio: 1.0.0-rc.10 + commander: 6.2.1 + mensch: 0.3.4 + slick: 1.12.2 + web-resource-inliner: 6.0.1 + transitivePeerDependencies: + - encoding + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + mark.js@8.11.1: {} + + markdown-it-mathjax3@4.3.2: + dependencies: + juice: 8.1.0 + mathjax-full: 3.2.2 + transitivePeerDependencies: + - encoding + + mathjax-full@3.2.2: + dependencies: + esm: 3.2.25 + mhchemparser: 4.2.1 + mj-context-menu: 0.6.1 + speech-rule-engine: 4.0.7 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mensch@0.3.4: {} + + mhchemparser@4.2.1: {} + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + mime@2.6.0: {} + + minisearch@7.1.2: {} + + mitt@3.0.1: {} + + mj-context-menu@0.6.1: {} + + nanoid@3.3.11: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-html-better-parser@1.4.11: + dependencies: + html-entities: 2.5.3 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + number-is-nan@1.0.1: {} + + oniguruma-to-es@3.1.1: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 6.0.1 + regex-recursion: 6.0.2 + + pako@1.0.11: {} + + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@6.0.1: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.26.4: {} + + property-information@7.0.0: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + + resolve-pkg-maps@1.0.0: {} + + rfdc@1.4.1: {} + + rollup@4.37.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.37.0 + '@rollup/rollup-android-arm64': 4.37.0 + '@rollup/rollup-darwin-arm64': 4.37.0 + '@rollup/rollup-darwin-x64': 4.37.0 + '@rollup/rollup-freebsd-arm64': 4.37.0 + '@rollup/rollup-freebsd-x64': 4.37.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 + '@rollup/rollup-linux-arm-musleabihf': 4.37.0 + '@rollup/rollup-linux-arm64-gnu': 4.37.0 + '@rollup/rollup-linux-arm64-musl': 4.37.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 + '@rollup/rollup-linux-riscv64-gnu': 4.37.0 + '@rollup/rollup-linux-riscv64-musl': 4.37.0 + '@rollup/rollup-linux-s390x-gnu': 4.37.0 + '@rollup/rollup-linux-x64-gnu': 4.37.0 + '@rollup/rollup-linux-x64-musl': 4.37.0 + '@rollup/rollup-win32-arm64-msvc': 4.37.0 + '@rollup/rollup-win32-ia32-msvc': 4.37.0 + '@rollup/rollup-win32-x64-msvc': 4.37.0 + fsevents: 2.3.3 + + search-insights@2.17.2: {} + + shiki@2.5.0: + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/langs': 2.5.0 + '@shikijs/themes': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + single-line-log@1.1.2: + dependencies: + string-width: 1.0.2 + + slick@1.12.2: {} + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + speakingurl@14.0.1: {} + + speech-rule-engine@4.0.7: + dependencies: + commander: 9.2.0 + wicked-good-xpath: 1.3.0 + xmldom-sre: 0.1.31 + + string-width@1.0.2: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + tabbable@6.2.0: {} + + tr46@0.0.3: {} + + trim-lines@3.0.1: {} + + tslib@2.8.1: {} + + tsx@4.19.3: + dependencies: + esbuild: 0.25.1 + get-tsconfig: 4.10.0 + optionalDependencies: + fsevents: 2.3.3 + + typescript@5.8.2: {} + + undici-types@6.20.0: {} + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + valid-data-url@3.0.1: {} + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + vite@5.4.15(@types/node@22.13.14): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.3 + rollup: 4.37.0 + optionalDependencies: + '@types/node': 22.13.14 + fsevents: 2.3.3 + + vitepress-plugin-tabs@0.5.0(vitepress@1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)): + dependencies: + vitepress: 1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2) + vue: 3.5.13(typescript@5.8.2) + + vitepress@1.6.3(@algolia/client-search@5.23.0)(@types/node@22.13.14)(markdown-it-mathjax3@4.3.2)(postcss@8.5.3)(search-insights@2.17.2)(typescript@5.8.2): + dependencies: + '@docsearch/css': 3.8.2 + '@docsearch/js': 3.8.2(@algolia/client-search@5.23.0)(search-insights@2.17.2) + '@iconify-json/simple-icons': 1.2.29 + '@shikijs/core': 2.5.0 + '@shikijs/transformers': 2.5.0 + '@shikijs/types': 2.5.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.2.3(vite@5.4.15(@types/node@22.13.14))(vue@3.5.13(typescript@5.8.2)) + '@vue/devtools-api': 7.7.2 + '@vue/shared': 3.5.13 + '@vueuse/core': 12.8.2(typescript@5.8.2) + '@vueuse/integrations': 12.8.2(focus-trap@7.6.4)(typescript@5.8.2) + focus-trap: 7.6.4 + mark.js: 8.11.1 + minisearch: 7.1.2 + shiki: 2.5.0 + vite: 5.4.15(@types/node@22.13.14) + vue: 3.5.13(typescript@5.8.2) + optionalDependencies: + markdown-it-mathjax3: 4.3.2 + postcss: 8.5.3 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + + vue@3.5.13(typescript@5.8.2): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.2)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.8.2 + + web-resource-inliner@6.0.1: + dependencies: + ansi-colors: 4.1.3 + escape-goat: 3.0.0 + htmlparser2: 5.0.1 + mime: 2.6.0 + node-fetch: 2.7.0 + valid-data-url: 3.0.1 + transitivePeerDependencies: + - encoding + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + wicked-good-xpath@1.3.0: {} + + xmldom-sre@0.1.31: {} + + zwitch@2.0.4: {} diff --git a/vitepress/src/.vitepress/config.mts b/vitepress/src/.vitepress/config.mts new file mode 100644 index 0000000..cb49fe3 --- /dev/null +++ b/vitepress/src/.vitepress/config.mts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vitepress' +import themeConfig from './config/themeConfig' +import markdown from './config/markdownConfig' +// https://vitepress.dev/reference/site-config +export default defineConfig({ + lang: "pt-BR", + metaChunk: true, + base: "/handbook-competitive-programming/", + title: "Competitive Programming Handbook", + description: "De competidores, para competidores.", + themeConfig, + markdown +}) diff --git a/vitepress/src/.vitepress/config/markdownConfig.ts b/vitepress/src/.vitepress/config/markdownConfig.ts new file mode 100644 index 0000000..cb17866 --- /dev/null +++ b/vitepress/src/.vitepress/config/markdownConfig.ts @@ -0,0 +1,15 @@ +import { MarkdownOptions } from "vitepress"; +import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs' + +const markdown: MarkdownOptions = { + image: { + lazyLoading: true + }, + math: true, + lineNumbers: true, + config: (markdown) => { + markdown.use(tabsMarkdownPlugin) + } +} + +export default markdown diff --git a/vitepress/src/.vitepress/config/navigation/navbar.ts b/vitepress/src/.vitepress/config/navigation/navbar.ts new file mode 100644 index 0000000..828f530 --- /dev/null +++ b/vitepress/src/.vitepress/config/navigation/navbar.ts @@ -0,0 +1,7 @@ +import type { DefaultTheme } from 'vitepress' + +const nav: DefaultTheme.NavItem[] = [ + { text: 'Explorar', link: '/explore/guide' }, + { text: "Baixar a Biblioteca", link: "/handbook-competitive-programming/Biblioteca.pdf", activeMatch: "/library/" } +] +export default nav diff --git a/vitepress/src/.vitepress/config/navigation/sidebar.ts b/vitepress/src/.vitepress/config/navigation/sidebar.ts new file mode 100644 index 0000000..4e2e1b2 --- /dev/null +++ b/vitepress/src/.vitepress/config/navigation/sidebar.ts @@ -0,0 +1,86 @@ + +import type { DefaultTheme } from 'vitepress' + +const sidebar: DefaultTheme.SidebarItem[] = [ + { + text: "Explorar", + base: "/explore/", + items: sidebarExplore() + }, + { + text: "Biblioteca", + base: "/library/", + link: "/", + items: sidebarLibrary() + }, + { + text: "Por trás dos panos", + base: "/learn/", + link: "/", + items: sidebarLearn(), + }, + { + text: "Dicas e paranauês", + base: "/tips/", + link: "/", + items: sidebarTips() + } + +] + +function sidebarExplore(): DefaultTheme.SidebarItem[] { + return [ + { text: "Introdução", link: "introduction" }, + { text: "Guia", link: "guide" } + ] + +} + +function sidebarLibrary(): DefaultTheme.SidebarItem[] { + return [ + { + text: "Programação dinâmica", + base: "/library/dp/", + collapsed: true, + items: [{ text: "Problema da mochila", link: "knapsack" }] + }, + { + text: "Estruturas", + base: "/library/structures/", + collapsed: true, + items: [ + { text: "Disjoint set union (UnionFind)", link: "dsu" }, + { text: "Segtrees", link: "segtrees" } + ] + }, + { + text: "Grafos", + base: "/library/graphs/", + collapsed: true, + items: [ + { text: "Detecção de ciclo", link: "cycle-detection" }, + { text: "Menor caminho", link: "shortest-path" } + ] + } + ] + +} + +function sidebarLearn(): DefaultTheme.SidebarItem[] { + return [ + { text: "Segtrees", base: "/", link: "TODO" } + ] +} + +function sidebarTips(): DefaultTheme.SidebarItem[] { + return [ + { + text: "Debugging", base: "/tips/debug/", collapsed: true, items: [ + { text: "Debuggando variáveis", link: "debugging-variables" }, + { text: "Debuggando crashes", link: "debugging-crashes" } + ] + } + ] +} + +export default sidebar diff --git a/vitepress/src/.vitepress/config/searchConfig.ts b/vitepress/src/.vitepress/config/searchConfig.ts new file mode 100644 index 0000000..3faffad --- /dev/null +++ b/vitepress/src/.vitepress/config/searchConfig.ts @@ -0,0 +1,32 @@ +import { DefaultTheme } from 'vitepress/theme' + +const search: { provider: "local", options: DefaultTheme.LocalSearchOptions } = +{ + provider: "local", + options: { + locales: { + root: { + translations: { + button: { + buttonText: 'Buscar', + buttonAriaLabel: 'Buscar' + }, + modal: { + displayDetails: 'Mostrar detalhes', + resetButtonTitle: 'Resetar pesquisa', + backButtonTitle: 'Voltar', + noResultsText: 'Nenhum resultado para ', + footer: { + selectText: 'para selecionar', + navigateText: 'para navegar', + closeText: 'para fechar', + closeKeyAriaLabel: 'esc' + } + } + } + } + } + } +} + +export default search diff --git a/vitepress/src/.vitepress/config/themeConfig.ts b/vitepress/src/.vitepress/config/themeConfig.ts new file mode 100644 index 0000000..0dc13fe --- /dev/null +++ b/vitepress/src/.vitepress/config/themeConfig.ts @@ -0,0 +1,28 @@ +import type { DefaultTheme } from 'vitepress' + +import sidebar from './navigation/sidebar' +import nav from './navigation/navbar' +import search from './searchConfig' + +const themeConfig: DefaultTheme.Config = { + // https://vitepress.dev/reference/default-theme-config + logo: "/caecomp.png", + siteTitle: false, + search, + nav, + sidebar, + socialLinks: [ + { icon: 'github', link: 'https://github.com/CAECOMP' } + ], + darkModeSwitchTitle: "Usar o tema escuro", + lightModeSwitchTitle: "Usar o tema claro", + docFooter: { + prev: 'Página anterior', + next: 'Próxima página' + }, + outline: { + label: "Conteúdo" + } +} + +export default themeConfig diff --git a/vitepress/src/.vitepress/theme/index.ts b/vitepress/src/.vitepress/theme/index.ts new file mode 100644 index 0000000..59fc68d --- /dev/null +++ b/vitepress/src/.vitepress/theme/index.ts @@ -0,0 +1,19 @@ +// https://vitepress.dev/guide/custom-theme +import { h } from 'vue' +import type { Theme } from 'vitepress' +import DefaultTheme from 'vitepress/theme' +import './style.css' +import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client' + +export default { + extends: DefaultTheme, + Layout: () => { + return h(DefaultTheme.Layout, null, { + // https://vitepress.dev/guide/extending-default-theme#layout-slots + }) + }, + enhanceApp({ app, router, siteData }) { + // ... + enhanceAppWithTabs(app) + } +} satisfies Theme diff --git a/vitepress/src/.vitepress/theme/style.css b/vitepress/src/.vitepress/theme/style.css new file mode 100644 index 0000000..4c561c4 --- /dev/null +++ b/vitepress/src/.vitepress/theme/style.css @@ -0,0 +1,148 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attached to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--vp-c-indigo-1); + --vp-c-brand-2: var(--vp-c-indigo-2); + --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-soft: var(--vp-c-indigo-soft); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); +} +:root { + --vp-home-hero-name-color: transparent + --vp-home-hero-name-background: -webkit-linear-gradient(120deg, var(--vp-c-brand) 30%, var(--vp-c-brand-dark)) + --vp-home-hero-image-background-image: linear-gradient(-45deg, var(--vp-c-brand-light) 50%, var(--vp-c-brand-lighter) 50%) + --vp-home-hero-image-filter: blur(40px) +} + +.dark { + --vp-home-hero-image-background-image: linear-gradient(-45deg, var(--vp-c-brand-darker) 25%, var(--vp-c-brand-darkest) 25%) +} +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #bd34fe 30%, + #41d1ff + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #bd34fe 50%, + #47caff 50% + ); + --vp-home-hero-image-filter: blur(44px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} + diff --git a/vitepress/src/TODO.md b/vitepress/src/TODO.md new file mode 100644 index 0000000..9ec0e7b --- /dev/null +++ b/vitepress/src/TODO.md @@ -0,0 +1,2 @@ +# TODO +Essa página não foi construída ainda >:( diff --git a/vitepress/src/createPdf.ts b/vitepress/src/createPdf.ts new file mode 100644 index 0000000..3794d22 --- /dev/null +++ b/vitepress/src/createPdf.ts @@ -0,0 +1,47 @@ +import { Printer } from "@web-printer/core" +import vitepress from "@web-printer/vitepress" + +import type { MaybeMultiURL, Plugin } from "@web-printer/core" + +function plugin(options: { url: MaybeMultiURL, base: string }): Plugin { + const orig = vitepress(options) + orig.injectStyle = () => { + return { + contentSelector: "content", + avoidBreakSelector: ".custom-block" + } + + } + orig.onPageWillPrint = async ({ page, pageInfo }) => { + if (pageInfo.url.endsWith("/library/")) { + const elem = page.locator("div.custom-block a[href]") + await elem.evaluate((item, base: string) => { + item.setAttribute("href", base + item.getAttribute("href")) + }, base) + } + } + return orig +} + +const url = "http://localhost:4173/handbook-competitive-programming/library/" +const owner = (process.env.GITHUB_REPOSITORY_OWNER ?? "caecomp").toLowerCase() +const base = `https://${owner}.github.io` + +new Printer({ threads: 16, outputDir: __dirname + "/.vitepress/dist/" }) + .use(plugin({ url, base })) + .print("Biblioteca", { + filter: ({ url }) => url.includes("/library/"), + continuous: true, + replaceLink: true, + printBackground: true, + format: "A4", + margin: { left: 0, right: 0 }, + style: ` + @media print { + .VPNav, + .VPLocalNav, + .VPDocFooter { + display: none!important; + } + }` + }) diff --git a/vitepress/src/explore/guide.md b/vitepress/src/explore/guide.md new file mode 100644 index 0000000..0acf6ba --- /dev/null +++ b/vitepress/src/explore/guide.md @@ -0,0 +1,26 @@ +--- +title: Páginas +features: + - title: Biblioteca + icon: 📚 + link: /library/ + details: | + Implementações de algoritmos e estruturas de dados comumente usados em + contests de programação competitiva. + + - title: Por trás dos panos + icon: ⚙️ + link: /learn/ + details: Veja como e porquê certos algoritmos e estruturas de dados funcionam. + + - title: Dicas e paranauês + icon: 💡 + link: /tips/ + details: Veja todo tipo de informação e gambiarra que pode te ajudar em um contest. +--- + + + + diff --git a/vitepress/src/explore/introduction.md b/vitepress/src/explore/introduction.md new file mode 100644 index 0000000..ec2c5eb --- /dev/null +++ b/vitepress/src/explore/introduction.md @@ -0,0 +1,35 @@ +# Sobre o projeto + +Este é um projeto criado pelo CAECOMP - IFCE, com o intuito de distribuir o +conhecimento adquirido da área de programação competitiva com outros programadores. + +Esperamos conseguir ajudar e apoiar tanto novatos quanto veteranos, e garantir +medalhas em todo tipo de contest ou hackaton. + + + +# Contribuidores + +Conheça a equipe por trás deste projeto: + + diff --git a/vitepress/src/index.md b/vitepress/src/index.md new file mode 100644 index 0000000..5e704c5 --- /dev/null +++ b/vitepress/src/index.md @@ -0,0 +1,36 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Competitive Programming Handbook" + text: "De competidores, para competidores." + tagline: Aprenda sobre o funcionamento de algoritmos, veja implementações, obtenha dicas e muito mais! + image: + src: /caecomp.png + alt: CAECOMP + actions: + - theme: brand + text: Abrir guia + link: /explore/guide + +features: + - title: Economize tempo + icon: ⌛ + link: /library/dp/knapsack + linkText: Explorar a biblioteca + details: A nossa biblioteca de algoritmos e estruturas dispõe de códigos prontinhos para se usar em contests! + + - title: Entenda os detalhes + icon: ⚙️ + link: /learn/ + linkText: Ver explicações + details: Ensinamos como vários algoritmos e estruturas de dados funcionam passo-a-passo - Desvende a mágica conosco! + + - title: Dicas para melhorar sua performance + icon: 💡 + link: /tips/ + linkText: Ver dicas + details: Tem dificuldade para debuggar? Quer conhecer recursos obscuros do compilador? Está no lugar certo! +--- + diff --git a/vitepress/src/learn/.gitkeep b/vitepress/src/learn/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vitepress/src/learn/index.md b/vitepress/src/learn/index.md new file mode 100644 index 0000000..f9c1c9c --- /dev/null +++ b/vitepress/src/learn/index.md @@ -0,0 +1,11 @@ +--- +next: false +--- +# Por trás dos panos + +## Introdução + +Bem vindo á seção de explicações! + +Aqui, mostramos a teoria por trás de algoritmos e estruturas de dados comumente +utilizados em programação competitiva, sem enrolação. diff --git a/vitepress/src/library/dp/knapsack.md b/vitepress/src/library/dp/knapsack.md new file mode 100644 index 0000000..3591889 --- /dev/null +++ b/vitepress/src/library/dp/knapsack.md @@ -0,0 +1,7 @@ +--- +title: Problema da mochila +--- + +## Mochila binária {#mochila-binaria} + +<<< @/library/snippets/dp/binary-knapsack.cpp diff --git a/vitepress/src/library/graphs/cycle-detection.md b/vitepress/src/library/graphs/cycle-detection.md new file mode 100644 index 0000000..ec46367 --- /dev/null +++ b/vitepress/src/library/graphs/cycle-detection.md @@ -0,0 +1,10 @@ +--- +title: Algoritmos para detecção de ciclos em grafos +--- + +## Grafo não direcionado, usando [Union Find](/library/structures/dsu.html) +<<< @/library/snippets/graphs/undirected-cycle.cpp + +## Grafo direcionado, usando DFS + +<<< @/library/snippets/graphs/directed-cycle.cpp diff --git a/vitepress/src/library/graphs/shortest-path.md b/vitepress/src/library/graphs/shortest-path.md new file mode 100644 index 0000000..61d0d29 --- /dev/null +++ b/vitepress/src/library/graphs/shortest-path.md @@ -0,0 +1,15 @@ +--- +title: Algoritmos de menor caminho +--- + +## Floyd-Warshall + +<<< @/library/snippets/graphs/floyd-warshall.cpp + +## Bellman-Ford + +<<< @/library/snippets/graphs/bellman-ford.cpp + +## Dijkstra (para grafos esparsos) + +<<< @/library/snippets/graphs/sparse-dijkstra.cpp diff --git a/vitepress/src/library/index.md b/vitepress/src/library/index.md new file mode 100644 index 0000000..fe31e62 --- /dev/null +++ b/vitepress/src/library/index.md @@ -0,0 +1,16 @@ +--- +next: + text: Problema da mochila + link: /library/dp/knapsack +--- +# Biblioteca + +## Introdução + +Bem vindo á biblioteca de algoritmos e estruturas! +Aqui, você terá fácil acesso a implementações genéricas e legíveis de +vários algoritmos e estruturas importantes para programação competitiva. + +> [!WARNING]ATENÇÃO +> O foco da biblioteca é distribuir implementações, mas não explicar o funcionamento. +> Caso queira aprender bem como um algoritmo ou estrutura funciona, acesse a [seção de explicações](/learn/) diff --git a/Writerside/biblioteca-snippets/dp/binary-knapsack.cpp b/vitepress/src/library/snippets/dp/binary-knapsack.cpp similarity index 100% rename from Writerside/biblioteca-snippets/dp/binary-knapsack.cpp rename to vitepress/src/library/snippets/dp/binary-knapsack.cpp diff --git a/Writerside/biblioteca-snippets/grafos/bellman-ford.cpp b/vitepress/src/library/snippets/graphs/bellman-ford.cpp similarity index 100% rename from Writerside/biblioteca-snippets/grafos/bellman-ford.cpp rename to vitepress/src/library/snippets/graphs/bellman-ford.cpp diff --git a/Writerside/biblioteca-snippets/grafos/ciclo-direcionado.cpp b/vitepress/src/library/snippets/graphs/directed-cycle.cpp similarity index 100% rename from Writerside/biblioteca-snippets/grafos/ciclo-direcionado.cpp rename to vitepress/src/library/snippets/graphs/directed-cycle.cpp diff --git a/Writerside/biblioteca-snippets/grafos/floyd-warshall.cpp b/vitepress/src/library/snippets/graphs/floyd-warshall.cpp similarity index 100% rename from Writerside/biblioteca-snippets/grafos/floyd-warshall.cpp rename to vitepress/src/library/snippets/graphs/floyd-warshall.cpp diff --git a/Writerside/biblioteca-snippets/grafos/djikstra-esparso.cpp b/vitepress/src/library/snippets/graphs/sparse-dijkstra.cpp similarity index 100% rename from Writerside/biblioteca-snippets/grafos/djikstra-esparso.cpp rename to vitepress/src/library/snippets/graphs/sparse-dijkstra.cpp diff --git a/Writerside/biblioteca-snippets/grafos/ciclo-nao-direcionado.cpp b/vitepress/src/library/snippets/graphs/undirected-cycle.cpp similarity index 100% rename from Writerside/biblioteca-snippets/grafos/ciclo-nao-direcionado.cpp rename to vitepress/src/library/snippets/graphs/undirected-cycle.cpp diff --git a/Writerside/biblioteca-snippets/estruturas/DSU.cpp b/vitepress/src/library/snippets/structures/dsu.cpp similarity index 100% rename from Writerside/biblioteca-snippets/estruturas/DSU.cpp rename to vitepress/src/library/snippets/structures/dsu.cpp diff --git a/Writerside/biblioteca-snippets/estruturas/segtree-iterativa.cpp b/vitepress/src/library/snippets/structures/segtree-iterative.cpp similarity index 100% rename from Writerside/biblioteca-snippets/estruturas/segtree-iterativa.cpp rename to vitepress/src/library/snippets/structures/segtree-iterative.cpp diff --git a/Writerside/biblioteca-snippets/estruturas/segtree-lazy.cpp b/vitepress/src/library/snippets/structures/segtree-lazy.cpp similarity index 100% rename from Writerside/biblioteca-snippets/estruturas/segtree-lazy.cpp rename to vitepress/src/library/snippets/structures/segtree-lazy.cpp diff --git a/Writerside/biblioteca-snippets/estruturas/segtree-recursiva.cpp b/vitepress/src/library/snippets/structures/segtree-recursive.cpp similarity index 100% rename from Writerside/biblioteca-snippets/estruturas/segtree-recursiva.cpp rename to vitepress/src/library/snippets/structures/segtree-recursive.cpp diff --git a/vitepress/src/library/structures/dsu.md b/vitepress/src/library/structures/dsu.md new file mode 100644 index 0000000..da00eb6 --- /dev/null +++ b/vitepress/src/library/structures/dsu.md @@ -0,0 +1,7 @@ +--- +title: Disjoint Set Union / Union Find +--- + +## DSU (Otimizada) + +<<< @/library/snippets/structures/dsu.cpp diff --git a/vitepress/src/library/structures/segtrees.md b/vitepress/src/library/structures/segtrees.md new file mode 100644 index 0000000..acacef5 --- /dev/null +++ b/vitepress/src/library/structures/segtrees.md @@ -0,0 +1,12 @@ +--- +title: Árvores de segmentação (SegTrees) +--- + +## Segtree iterativa {#segiter} +<<< @/library/snippets/structures/segtree-iterative.cpp + +## Segtree recursiva (clássica) {#segrec} +<<< @/library/snippets/structures/segtree-recursive.cpp + +## Lazy Segtree (recursiva) +<<< @/library/snippets/structures/segtree-lazy.cpp diff --git a/Writerside/images/caecomp.png b/vitepress/src/public/caecomp.png similarity index 100% rename from Writerside/images/caecomp.png rename to vitepress/src/public/caecomp.png diff --git a/vitepress/src/tips/.gitkeep b/vitepress/src/tips/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vitepress/src/tips/debug/debugging-crashes.md b/vitepress/src/tips/debug/debugging-crashes.md new file mode 100644 index 0000000..57105cc --- /dev/null +++ b/vitepress/src/tips/debug/debugging-crashes.md @@ -0,0 +1,183 @@ +# Debuggando crashes e situações absurdas + +## Introdução + +Alguns tipos de erros de programação podem causar uma parada inesperada do programa +ou funcionamento completamente caótico. + +Em boa parte das linguagens de programação modernas, como Java, Python e JavaScript, +esse tipo de situação dispara uma exceção que irá: + +1. Relatar o tipo de erro que ocorreu (ex: acessar um item inexistente, divisão +por 0) +2. Mostrar a pilha de execução até o momento em que o erro aconteceu (stacktrace) +3. Terminar a execução do programa, caso a exceção não seja tratada. + +Em C, tal mecanismo não existe nativamente, e em C++ comum, isso raramente é usado. +Portanto, muitas vezes, o programa seguirá executando com valores errados, ou +simplesmente irá parar de executar sem relatar nada sobre o problema ocorrido, +o que dificulta o debug. + +Exemplos: + +::: tabs +==Divisão por zero + +```c++ +int main() { + int a = 1, b = 0; + return a / b; +} +``` + +```bash +$ ./main +Tarefa 1, './main' encerrada pelo sinal +SIGFPE (Exceção de ponto flutuante) +``` + +==Falha de segmentação + +```c++ +int main() { + int *a = nullptr; + return *a; +} +``` + +```bash +$ ./main +Tarefa 1, './main' encerrada pelo sinal +SIGSEGV (Erro de fronteira de endereço (Falha de segmentação)) +``` + +::: + +## Usando opções do compilador + +Versões recentes de compiladores modernos (ex, GCC 12+, Clang 16+) possuem +diversas opções que podem facilitar essa tarefa de encontrar coisas que podem +causar crashes em tempo de compilação, ou mostrar a causa do crash durante a runtime. + +Por exemplo, se você tentar compilar os snippets acima usando a opção `-fanalyzer` +no GCC: +::: tabs +== Divisão por zero + +```bash +$ g++ -fanalyzer main.cpp +main.cpp: In function ‘int main()’: +main.cpp:2:23: warning: infinite loop [CWE-835] [-Wanalyzer-infinite-loop] + 2 | for (int i = 2; i >= 0; --i) + | ~~^~~~ + ‘int main()’: events 1-5 + | + | 2 | for (int i = 2; i >= 0; --i) + | | ~~~ ~~^~~~ + | | | | + | | | (1) infinite loop here + | | | (2) when ‘i >= 0’: always following ‘true’ branch... + | | | (5) ...to here + | | (4) looping back... + | 3 | i /= i; + | | ~~~~~~ + | | | + | | (3) ...to here + | + +``` + +== Falha de segmentação + +```bash +$ g++ -fanalyzer main.cpp +main.cpp: In function ‘int main()’: +main:3:13: warning: dereference of NULL ‘a’ [CWE-476] [-Wanalyzer-null-dereference] + 3 | return *a; + | ^ + ‘int main()’: events 1-2 + | + | 2 | int *a = nullptr; + | | ^ + | | | + | | (1) ‘a’ is NULL + | 3 | return *a; + | | ~ + | | | + | | (2) dereference of NULL ‘a’ + | + +``` + +::: + +Porém, análise estática de código (em tempo de compilação) não é capaz de +detectar todos os bugs, e nem ajuda a explicar os crashes. + +## Debuggando bizonhices em tempo de execução - com opções do compilador + +:::warning AVISO +Algumas dessas opções podem não estar presentes no seu compilador, principalmente +no Windows. + +A solução é instalar um sistema que preste (ex: [CachyOS Linux](https://cachyos.org/), +[Pop!OS Linux](https://pop.system76.com/), etc). +::: + +Leia o código a seguir: + +```c++ +#include + +using namespace std; + +void f(int tamanho, int index) { + int arr[tamanho]; + arr[index] = index + tamanho; + cout << arr[index] << " " << arr[index + 1] << endl; +} + +int main() { + f(3, 4); + return 0; +} +``` + +Nesse trecho de código, é fácil ver que a função `f` irá acessar um +índice maior que o tamanho da array, mas isso NÃO crashará o programa, o que abre +um mundo de possibilidades para bugs bizonhos aparecerem. + +Em códigos bem mais complexos, não é tão fácil ver um erro desses de cara. +Nesses casos, você pode compilar o programa usando a opção `-fsanitize=undefined`: + +```bash +$ g++ -fsanitize=undefined main.cpp -o main +$ ./main +main.cpp:7:14: runtime error: index 3 out of bounds for type 'int [*]' + #0 0x556d628ca28b in f(int, int) (/tmp/main+0x128b) (BuildId: 0f08dc3fbd7e58985de984fd951d8608c071a6bb) + #1 0x556d628ca741 in main (/tmp/main+0x1741) (BuildId: 0f08dc3fbd7e58985de984fd951d8608c071a6bb) + #2 0x7efcdd633d67 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 + #3 0x7efcdd633e24 in __libc_start_main_impl ../csu/libc-start.c:360 + #4 0x556d628ca100 in _start (/tmp/main+0x1100) (BuildId: 0f08dc3fbd7e58985de984fd951d8608c071a6bb) +............. + +6 1600677166 +``` + +Note que você pode tornar essa saída um **pouco** mais legível caso adicione a +opção `-g`, que mantém dados importantes para debuggar no binário, como a linha +dos itens na pilha de chamada: + +```bash +$ g++ -fsanitize=undefined -g main.cpp -o main +$ ./main +main.cpp:7:14: runtime error: index 3 out of bounds for type 'int [*]' + #0 0x5650df40628b in f(int, int) /tmp/main.cpp:7 + #1 0x5650df406741 in main /tmp/main.cpp:12 + #2 0x7f9764833d67 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 + #3 0x7f9764833e24 in __libc_start_main_impl ../csu/libc-start.c:360 + #4 0x5650df406100 in _start (/tmp/main+0x1100) (BuildId: 75c7c990a14b29566e6674bf62b7b892048ccd58) + +6 1600677166 + +``` diff --git a/vitepress/src/tips/debug/debugging-variables.md b/vitepress/src/tips/debug/debugging-variables.md new file mode 100644 index 0000000..808618c --- /dev/null +++ b/vitepress/src/tips/debug/debugging-variables.md @@ -0,0 +1,200 @@ +# Debuggando variáveis + +## Introdução + +Nem tudo são flores, e nem sempre seu código irá funcionar. +E pior ainda, nem sempre você terá noção sobre o que está causando o problema. + +Uma forma comum e eficiente para debuggar é mostrar os dados contidos nas variáveis +do programa. Geralmente, isso é feito da seguinte forma: + +```c++ +int a = 10; +string b = "b"; +bool c = false; +std::cout << "A = " << a << ", b = " << b << "c = " << c << endl; +``` + +Porém, debuggar dessa forma tem várias desvantagens: + +1. Ter que especificar o nome de cada variável manualmente é verboso e repetitivo. +2. O `std::cout`, por si só, não é capaz de apresentar o valor de estruturas como +vetores ou sets. +3. Para desativar, é necessário manualmente remover todas as linhas com `std::cout`. +4. Pode ficar bem confuso, principalmente se o código de debug for repetido +em várias linhas. + +## Parte 1: Macros para o resgate! {#macros} + +Macros podem solucionar uma boa parte desses problemas. Como são expandidos +em tempo de compilação, podem gerar código com informações essenciais. + +Por exemplo, o macro a seguir: + +```c++:no-line-numbers +#define debug(x) cout << #x << " = " << x << endl +``` + +Mostrará o nome e o valor da expressão x: + +```c++ +int numero = 900; +debug(numero); // saída: numero = 900 +debug(numero / 2); // saída: numero / 2 = 450 +debug(20 & 1); // saída: 20 & 1 = 0 + +string str = "explodiu" +debug(str); // saída: str = explodiu +debug("não " + str) // saída: "não " + str = não explodiu +``` + +Macros também podem obter o nome da função e número da linha em que foram usados. + +Por exemplo: + +```c++:line-numbers=5 +#define debug(x) \ + cout << "Linha " << __LINE__ \ + << ", função " << __FUNCTION__ << ": " \ + << #x << " = " << x << endl + +void func(string x) { debug(x); } + +int main() { + func("teste"); + debug(33 + 36); +} +``` + +Tem como saída: + +```bash:no-line-numbers +Linha 10, função func: x = teste +Linha 14, função main: 33 + 36 = 69 +``` + +Porém, como visto em todos esses exemplos, apenas uma variável está sendo debuggada +por vez. Podemos melhorar? + +## Parte 2: Templates também ajudam! {#templates} + +Templates em C++ são ferramentas complexas e poderosas capazes de fazer uma função +poder receber vários tipos de dados diferentes, o que será fundamental pros códigos +a seguir. + +Exemplo simples: + +```c++ +void printer() { cout << endl; } +template void printer(H val, T... args) { + cout << val << ", "; + printer(args...); +} + +int main() { + printer("a", "b", true, false, 10, 0.5); + return 0; +} +``` + +Terá `a, b, 1, 0, 10, 0.5,` como saída. + +Agora podemos debuggar várias variáveis de uma vez só.... Mas e os nomes das +variáveis, que apareciam nos macros? E o número da linha? + +## Parte 3: Macros + Templates, união sinistra {#templates-e-macros} + +Juntando o ~~in~~útil ao ~~des~~agradável, podemos criar um macro capaz de receber +infinitas expressões, e usá-lo junto do template anterior: + +```c++ +#define debug(...) ({ \ + cout << "Linha " <<__LINE__ << ": "; \ + printer(__VA_ARGS__); \ +}) +``` + +E assim obtemos de volta a informação sobre a linha onde isso foi executado! + +..... Mas e os nomes das variáveis? + +É ligeiramente mais complicado, mas nada demais. Considerando que +`#define nome(x) #x` retorna a expressão `x` como uma string, também podemos aplicar +essa idéia á macros com infinitos argumentos: + +```c++ +#define nomes(...) #__VA_ARGS__ +int x = 10; +string str = "sim"; +string dados = nomes(x, str, true, 30 >> 1); +``` + +Nesse trecho de código, a variável `dados` assumirá o valor `"x, str, true, 30 >> 1"`. +Ou seja, só precisamos printar a string antes de cada vírgula, +e depois mostrar o valor real. + +Implementação: + +```c++ +void print_name(string &s) { + // Printa caractere a caractere, até achar uma vírgula + do { + cout << s[0]; + s = s.substr(1); + } while (s.size() && s[0] != ','); + cout << " = "; +} + +void printer(string s) { cout << endl; } +template void printer(string s, V val, A... args) { + print_name(s); // Mostra o nome da variável + cout << val; // Mostra o valor da variável + printer(s, args...); // Segue recursivamente +} + +#define debug(...) ({ \ + cout << "Linha " << __LINE__ << ": "; \ + printer(#__VA_ARGS__, __VA_ARGS__); \ +}) +``` + +Agora sim, você terá a linha de execução e o nome das variáveis! + +Porém, ainda existem limitações: Esse código não é capaz de debuggar estruturas +como vetores, sets, maps, e etc. +Suportar essas estruturas aumentam bastante a complexidade, e para algo realmente +completo, recomendamos ler [este post no Codeforces](https://codeforces.com/blog/entry/125435) + ou os arquivos do [repositório disponibilizado no post](https://github.com/Anshul-Johri-1/Debug-Template/). + +De toda forma, para adicionar o suporte a vetores de forma simples no código anterior, +é só adicionar essa função logo acima da função `printer` anterior: + +```c++ +template +void printer(string s, vector &vec, A... args) { + print_name(s); + cout << "{"; + for (int len = vec.size(), i = 0; i < len; ++i) { + cout << " " << vec[i]; + if (i + 1 != len) + cout << ","; + } + cout << " }"; + printer(s, args...); +} +``` + +## Desativando o debug {#desativando} + +Novamente, macros te ajudarão. Você pode escrever algo do tipo: + +```c++ +#define DEBUG // [!code highlight] +#ifdef DEBUG +#define debug(...) printer(#__VA_ARGS__, __VA_ARGS__); +#else +#define debug(...) 0 +#endif +``` + +Assim, para desativar o debug no código INTEIRO, é só comentar a linha destacada. diff --git a/vitepress/src/tips/index.md b/vitepress/src/tips/index.md new file mode 100644 index 0000000..975f43d --- /dev/null +++ b/vitepress/src/tips/index.md @@ -0,0 +1,18 @@ +--- +next: false +--- +# Dicas e paranauês + +## Introdução + +Bem vindo á seção de dicas! + +Aqui, você terá acesso a: + +- Ferramentas +- Snippets comuns de código +- _Artifícios técnicos não regularizados_ (Gambiarras) +- Dicas e estratégias para contests e maratonas +- Fontes de conteúdo relacionado á programação competitiva + +Etc.