diff options
| author | crupest <crupest@outlook.com> | 2024-11-11 01:12:29 +0800 | 
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2024-12-19 21:42:01 +0800 | 
| commit | f9aa02ec1a4c24e80a206857d4f68198bb027bb4 (patch) | |
| tree | 5994f0a62733b13f9f330e3515260ae20dc4a0bd /docker/nginx | |
| parent | 7b4d49e4bbdff6ddf1f8f7e937130e700024d5e9 (diff) | |
| download | crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.gz crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.bz2 crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.zip  | |
HALF WORK: 2024.12.19
Re-organize file structure.
Diffstat (limited to 'docker/nginx')
| -rw-r--r-- | docker/nginx/Dockerfile | 8 | ||||
| -rw-r--r-- | docker/nginx/sites/www/.dockerignore | 2 | ||||
| -rw-r--r-- | docker/nginx/sites/www/.gitignore | 26 | ||||
| -rw-r--r-- | docker/nginx/sites/www/.proxyrc.json | 6 | ||||
| -rw-r--r-- | docker/nginx/sites/www/avatar.png | bin | 0 -> 12038 bytes | |||
| -rw-r--r-- | docker/nginx/sites/www/favicon.ico | bin | 0 -> 15406 bytes | |||
| -rw-r--r-- | docker/nginx/sites/www/index.html | 95 | ||||
| -rw-r--r-- | docker/nginx/sites/www/package.json | 17 | ||||
| -rw-r--r-- | docker/nginx/sites/www/pnpm-lock.yaml | 2099 | ||||
| -rw-r--r-- | docker/nginx/sites/www/src/main.ts | 97 | ||||
| -rw-r--r-- | docker/nginx/sites/www/src/mock-todos.ts | 126 | ||||
| -rw-r--r-- | docker/nginx/sites/www/src/style.css | 185 | ||||
| -rw-r--r-- | docker/nginx/sites/www/src/todos.ts | 29 | ||||
| -rw-r--r-- | docker/nginx/sites/www/tsconfig.json | 19 | 
14 files changed, 2709 insertions, 0 deletions
diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile new file mode 100644 index 0000000..6d0400b --- /dev/null +++ b/docker/nginx/Dockerfile @@ -0,0 +1,8 @@ +FROM node:lts AS build-www +RUN npm install -g pnpm +COPY sites/www /sites/www +WORKDIR /sites/www +RUN pnpm install --frozen-lockfile && pnpm run build + +FROM nginx:mainline +COPY --from=build-www /sites/www/dist /srv/www diff --git a/docker/nginx/sites/www/.dockerignore b/docker/nginx/sites/www/.dockerignore new file mode 100644 index 0000000..de4d1f0 --- /dev/null +++ b/docker/nginx/sites/www/.dockerignore @@ -0,0 +1,2 @@ +dist +node_modules diff --git a/docker/nginx/sites/www/.gitignore b/docker/nginx/sites/www/.gitignore new file mode 100644 index 0000000..0b1e50b --- /dev/null +++ b/docker/nginx/sites/www/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.parcel-cache diff --git a/docker/nginx/sites/www/.proxyrc.json b/docker/nginx/sites/www/.proxyrc.json new file mode 100644 index 0000000..8fe13c0 --- /dev/null +++ b/docker/nginx/sites/www/.proxyrc.json @@ -0,0 +1,6 @@ +{ +    "/api": { +        "target": "http://localhost:5188", +        "changeOrigin": true +    } +} diff --git a/docker/nginx/sites/www/avatar.png b/docker/nginx/sites/www/avatar.png Binary files differnew file mode 100644 index 0000000..d890d8d --- /dev/null +++ b/docker/nginx/sites/www/avatar.png diff --git a/docker/nginx/sites/www/favicon.ico b/docker/nginx/sites/www/favicon.ico Binary files differnew file mode 100644 index 0000000..922a523 --- /dev/null +++ b/docker/nginx/sites/www/favicon.ico diff --git a/docker/nginx/sites/www/index.html b/docker/nginx/sites/www/index.html new file mode 100644 index 0000000..03485c5 --- /dev/null +++ b/docker/nginx/sites/www/index.html @@ -0,0 +1,95 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> +  <meta charset="UTF-8" /> +  <meta http-equiv="X-UA-Compatible" content="IE=edge"> +  <link rel="icon" href="./favicon.ico" /> +  <meta name="viewport" content="width=device-width, initial-scale=1.0" /> +  <title>crupest</title> +</head> + +<body> +  <div class="slogan-container"> +    <div class="slogan happy"> +      <span class="slogan-text">🙃The world is full of pain, but we can fix it with love!</span> +    </div> +    <div class="slogan angry"> +      <span class="slogan-text">😡The world is a piece of shit, so let's make it a little better!</span> +    </div> +  </div> +  <article id="main-article"> +    <img id="avatar" src="./avatar.png" title="my avatar" width="100" height="100"> +    <h1 id="title">Hello! This is <span id="title-name">crupest</span>.</h1> +    <section> +      <p>Welcome to my home page! I'm very glad to meet you here.</p> +      <p>If you have something interesting to share with me, feel free to reach me via email at <a class="mono" +          href="mailto:crupest@outlook.com">crupest@outlook.com</a> or, of course, <a class="mono" +          href="mailto:I@crupest.life">I@crupest.life</a>. You can also fire an issue in +        any repo on GitHub. Here is the link to my GitHub profile, <a class="mono" +          href="https://github.com/crupest">https://github.com/crupest</a>.</p> +      <p>Currently this page is hosted on my own server and my own apex domain (crupest.life). You can also share this +        website link, aka, <a class="mono" href="https://crupest.life">https://crupest.life</a>.</p> +    </section> +    <section> +      <h2 id="todos">TODOs of me <span class="h-note">grabbed from <a +            href="https://github.com/users/crupest/projects/2">my Github +            project</a></span></h2> +      <p id="todo-message">Fetching...</p> +      <ul id="todo-container"> +      </ul> +    </section> +    <section> +      <h2 id="friends">Friends of me:</h2> +      <div id="friends-container"> +        <a class="friend-link" href="https://wsmcs.cn" target="_blank"> +          <img class="friend-img" +            src="https://wsmcs.cn/wp-content/uploads/2023/02/BifengxiaPanda_ZH-CN8879969527_UHD-scaled.jpg"> +          <span class="friend-name">wsm</span> +        </a> +      </div> +    </section> +    <section> +      <p>This is just the home page. I also run some other services on my server under this domain:</p> +      <p>Public:</p> +      <ul> +        <li> +          https://crupest.life/api: Some APIs written in <a class="mono" +            href="https://learn.microsoft.com/en-us/aspnet/core/introduction-to-aspnet-core" target="_blank">ASP.NET +            Core</a>. +        </li> +        <li><a class="mono" href="https://blog.crupest.life" target="_blank">https://blog.crupest.life</a>: My blogs +          built with <a class="mono" href="https://gohugo.io" target="_blank">hugo</a>.</li> +        <li><a class="mono" href="https://timeline.crupest.life" target="_blank">https://timeline.crupest.life</a>: My +          micro-blogs +          with +          my own web app <a class="mono" href="https://github.com/crupest/Timeline">Timeline</a>.</li> +        <li><a href="https://github.crupest.life" target="_blank">https://github.crupest.life</a>: Redirect to my github +          profile, aka, <a class="mono" href="https://github.com/crupest">https://github.com/crupest</a>.</li> +      </ul> +      <p>Private:</p> +      <ul> +        <li><a class="mono" href="https://code.crupest.life" target="_blank">https://code.crupest.life</a>: Browser +          based vscode with +          <a class="mono" href="https://github.com/coder/code-server" target="_blank">code-server</a>. +        </li> +      </ul> +      <p>If you wish to deploy similar services like me, you are in the right place. Take a look at <a class="mono" +          href="https://github.com/crupest/crupest" target="_blank">https://github.com/crupest/crupest</a> and there is +        all you need to start with. Also, contact me if you run into some problem.</p> +    </section> +    <footer> +      <p>That's all of me!</p> +      <p>© 2022 crupest</p> +      <p> +        <a rel="license" href="https://creativecommons.org/licenses/by-nc/4.0/"><img alt="Creative Commons License" +            style="border-width:0" src="https://i.creativecommons.org/l/by-nc/4.0/88x31.png" /></a><br />This work is +        licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-nc/4.0/">Creative Commons +          Attribution-NonCommercial 4.0 International License</a>. +      </p> +    </footer> +  </article> +  <script type="module" src="./src/main.ts"></script> +</body> + +</html>
\ No newline at end of file diff --git a/docker/nginx/sites/www/package.json b/docker/nginx/sites/www/package.json new file mode 100644 index 0000000..c42bb29 --- /dev/null +++ b/docker/nginx/sites/www/package.json @@ -0,0 +1,17 @@ +{ +  "name": "crupest-www", +  "private": true, +  "version": "0.1.0", +  "source": "index.html", +  "scripts": { +    "start": "parcel", +    "build": "tsc && parcel build" +  }, +  "devDependencies": { +    "@tsconfig/recommended": "^1.0.7", +    "@types/parcel-env": "^0.0.6", +    "parcel": "^2.12.0", +    "prettier": "^3.3.3", +    "typescript": "^5.5.4" +  } +}
\ No newline at end of file diff --git a/docker/nginx/sites/www/pnpm-lock.yaml b/docker/nginx/sites/www/pnpm-lock.yaml new file mode 100644 index 0000000..aa83a70 --- /dev/null +++ b/docker/nginx/sites/www/pnpm-lock.yaml @@ -0,0 +1,2099 @@ +lockfileVersion: '9.0' + +settings: +  autoInstallPeers: true +  excludeLinksFromLockfile: false + +importers: + +  .: +    devDependencies: +      '@tsconfig/recommended': +        specifier: ^1.0.7 +        version: 1.0.7 +      '@types/parcel-env': +        specifier: ^0.0.6 +        version: 0.0.6 +      parcel: +        specifier: ^2.12.0 +        version: 2.12.0(@swc/helpers@0.5.12)(typescript@5.5.4) +      prettier: +        specifier: ^3.3.3 +        version: 3.3.3 +      typescript: +        specifier: ^5.5.4 +        version: 5.5.4 + +packages: + +  '@babel/code-frame@7.24.7': +    resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} +    engines: {node: '>=6.9.0'} + +  '@babel/helper-validator-identifier@7.24.7': +    resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} +    engines: {node: '>=6.9.0'} + +  '@babel/highlight@7.24.7': +    resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} +    engines: {node: '>=6.9.0'} + +  '@lezer/common@1.2.1': +    resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==} + +  '@lezer/lr@1.4.2': +    resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} + +  '@lmdb/lmdb-darwin-arm64@2.8.5': +    resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==} +    cpu: [arm64] +    os: [darwin] + +  '@lmdb/lmdb-darwin-x64@2.8.5': +    resolution: {integrity: sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==} +    cpu: [x64] +    os: [darwin] + +  '@lmdb/lmdb-linux-arm64@2.8.5': +    resolution: {integrity: sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==} +    cpu: [arm64] +    os: [linux] + +  '@lmdb/lmdb-linux-arm@2.8.5': +    resolution: {integrity: sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==} +    cpu: [arm] +    os: [linux] + +  '@lmdb/lmdb-linux-x64@2.8.5': +    resolution: {integrity: sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==} +    cpu: [x64] +    os: [linux] + +  '@lmdb/lmdb-win32-x64@2.8.5': +    resolution: {integrity: sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==} +    cpu: [x64] +    os: [win32] + +  '@mischnic/json-sourcemap@0.1.1': +    resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} +    engines: {node: '>=12.0.0'} + +  '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': +    resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} +    cpu: [arm64] +    os: [darwin] + +  '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': +    resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} +    cpu: [x64] +    os: [darwin] + +  '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': +    resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} +    cpu: [arm64] +    os: [linux] + +  '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': +    resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} +    cpu: [arm] +    os: [linux] + +  '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': +    resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} +    cpu: [x64] +    os: [linux] + +  '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': +    resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} +    cpu: [x64] +    os: [win32] + +  '@parcel/bundler-default@2.12.0': +    resolution: {integrity: sha512-3ybN74oYNMKyjD6V20c9Gerdbh7teeNvVMwIoHIQMzuIFT6IGX53PyOLlOKRLbjxMc0TMimQQxIt2eQqxR5LsA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/cache@2.12.0': +    resolution: {integrity: sha512-FX5ZpTEkxvq/yvWklRHDESVRz+c7sLTXgFuzz6uEnBcXV38j6dMSikflNpHA6q/L4GKkCqRywm9R6XQwhwIMyw==} +    engines: {node: '>= 12.0.0'} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@parcel/codeframe@2.12.0': +    resolution: {integrity: sha512-v2VmneILFiHZJTxPiR7GEF1wey1/IXPdZMcUlNXBiPZyWDfcuNgGGVQkx/xW561rULLIvDPharOMdxz5oHOKQg==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/compressor-raw@2.12.0': +    resolution: {integrity: sha512-h41Q3X7ZAQ9wbQ2csP8QGrwepasLZdXiuEdpUryDce6rF9ZiHoJ97MRpdLxOhOPyASTw/xDgE1xyaPQr0Q3f5A==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/config-default@2.12.0': +    resolution: {integrity: sha512-dPNe2n9eEsKRc1soWIY0yToMUPirPIa2QhxcCB3Z5RjpDGIXm0pds+BaiqY6uGLEEzsjhRO0ujd4v2Rmm0vuFg==} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@parcel/core@2.12.0': +    resolution: {integrity: sha512-s+6pwEj+GfKf7vqGUzN9iSEPueUssCCQrCBUlcAfKrJe0a22hTUCjewpB0I7lNrCIULt8dkndD+sMdOrXsRl6Q==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/diagnostic@2.12.0': +    resolution: {integrity: sha512-8f1NOsSFK+F4AwFCKynyIu9Kr/uWHC+SywAv4oS6Bv3Acig0gtwUjugk0C9UaB8ztBZiW5TQZhw+uPZn9T/lJA==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/events@2.12.0': +    resolution: {integrity: sha512-nmAAEIKLjW1kB2cUbCYSmZOGbnGj8wCzhqnK727zCCWaA25ogzAtt657GPOeFyqW77KyosU728Tl63Fc8hphIA==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/fs@2.12.0': +    resolution: {integrity: sha512-NnFkuvou1YBtPOhTdZr44WN7I60cGyly2wpHzqRl62yhObyi1KvW0SjwOMa0QGNcBOIzp4G0CapoZ93hD0RG5Q==} +    engines: {node: '>= 12.0.0'} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@parcel/graph@3.2.0': +    resolution: {integrity: sha512-xlrmCPqy58D4Fg5umV7bpwDx5Vyt7MlnQPxW68vae5+BA4GSWetfZt+Cs5dtotMG2oCHzZxhIPt7YZ7NRyQzLA==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/logger@2.12.0': +    resolution: {integrity: sha512-cJ7Paqa7/9VJ7C+KwgJlwMqTQBOjjn71FbKk0G07hydUEBISU2aDfmc/52o60ErL9l+vXB26zTrIBanbxS8rVg==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/markdown-ansi@2.12.0': +    resolution: {integrity: sha512-WZz3rzL8k0H3WR4qTHX6Ic8DlEs17keO9gtD4MNGyMNQbqQEvQ61lWJaIH0nAtgEetu0SOITiVqdZrb8zx/M7w==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/namer-default@2.12.0': +    resolution: {integrity: sha512-9DNKPDHWgMnMtqqZIMiEj/R9PNWW16lpnlHjwK3ciRlMPgjPJ8+UNc255teZODhX0T17GOzPdGbU/O/xbxVPzA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/node-resolver-core@3.3.0': +    resolution: {integrity: sha512-rhPW9DYPEIqQBSlYzz3S0AjXxjN6Ub2yS6tzzsW/4S3Gpsgk/uEq4ZfxPvoPf/6TgZndVxmKwpmxaKtGMmf3cA==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/optimizer-css@2.12.0': +    resolution: {integrity: sha512-ifbcC97fRzpruTjaa8axIFeX4MjjSIlQfem3EJug3L2AVqQUXnM1XO8L0NaXGNLTW2qnh1ZjIJ7vXT/QhsphsA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/optimizer-htmlnano@2.12.0': +    resolution: {integrity: sha512-MfPMeCrT8FYiOrpFHVR+NcZQlXAptK2r4nGJjfT+ndPBhEEZp4yyL7n1y7HfX9geg5altc4WTb4Gug7rCoW8VQ==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/optimizer-image@2.12.0': +    resolution: {integrity: sha512-bo1O7raeAIbRU5nmNVtx8divLW9Xqn0c57GVNGeAK4mygnQoqHqRZ0mR9uboh64pxv6ijXZHPhKvU9HEpjPjBQ==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@parcel/optimizer-svgo@2.12.0': +    resolution: {integrity: sha512-Kyli+ZZXnoonnbeRQdoWwee9Bk2jm/49xvnfb+2OO8NN0d41lblBoRhOyFiScRnJrw7eVl1Xrz7NTkXCIO7XFQ==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/optimizer-swc@2.12.0': +    resolution: {integrity: sha512-iBi6LZB3lm6WmbXfzi8J3DCVPmn4FN2lw7DGXxUXu7MouDPVWfTsM6U/5TkSHJRNRogZ2gqy5q9g34NPxHbJcw==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/package-manager@2.12.0': +    resolution: {integrity: sha512-0nvAezcjPx9FT+hIL+LS1jb0aohwLZXct7jAh7i0MLMtehOi0z1Sau+QpgMlA9rfEZZ1LIeFdnZZwqSy7Ccspw==} +    engines: {node: '>= 12.0.0'} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@parcel/packager-css@2.12.0': +    resolution: {integrity: sha512-j3a/ODciaNKD19IYdWJT+TP+tnhhn5koBGBWWtrKSu0UxWpnezIGZetit3eE+Y9+NTePalMkvpIlit2eDhvfJA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/packager-html@2.12.0': +    resolution: {integrity: sha512-PpvGB9hFFe+19NXGz2ApvPrkA9GwEqaDAninT+3pJD57OVBaxB8U+HN4a5LICKxjUppPPqmrLb6YPbD65IX4RA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/packager-js@2.12.0': +    resolution: {integrity: sha512-viMF+FszITRRr8+2iJyk+4ruGiL27Y6AF7hQ3xbJfzqnmbOhGFtLTQwuwhOLqN/mWR2VKdgbLpZSarWaO3yAMg==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/packager-raw@2.12.0': +    resolution: {integrity: sha512-tJZqFbHqP24aq1F+OojFbQIc09P/u8HAW5xfndCrFnXpW4wTgM3p03P0xfw3gnNq+TtxHJ8c3UFE5LnXNNKhYA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/packager-svg@2.12.0': +    resolution: {integrity: sha512-ldaGiacGb2lLqcXas97k8JiZRbAnNREmcvoY2W2dvW4loVuDT9B9fU777mbV6zODpcgcHWsLL3lYbJ5Lt3y9cg==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/packager-wasm@2.12.0': +    resolution: {integrity: sha512-fYqZzIqO9fGYveeImzF8ll6KRo2LrOXfD+2Y5U3BiX/wp9wv17dz50QLDQm9hmTcKGWxK4yWqKQh+Evp/fae7A==} +    engines: {node: '>=12.0.0', parcel: ^2.12.0} + +  '@parcel/plugin@2.12.0': +    resolution: {integrity: sha512-nc/uRA8DiMoe4neBbzV6kDndh/58a4wQuGKw5oEoIwBCHUvE2W8ZFSu7ollSXUGRzfacTt4NdY8TwS73ScWZ+g==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/profiler@2.12.0': +    resolution: {integrity: sha512-q53fvl5LDcFYzMUtSusUBZSjQrKjMlLEBgKeQHFwkimwR1mgoseaDBDuNz0XvmzDzF1UelJ02TUKCGacU8W2qA==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/reporter-cli@2.12.0': +    resolution: {integrity: sha512-TqKsH4GVOLPSCanZ6tcTPj+rdVHERnt5y4bwTM82cajM21bCX1Ruwp8xOKU+03091oV2pv5ieB18pJyRF7IpIw==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/reporter-dev-server@2.12.0': +    resolution: {integrity: sha512-tIcDqRvAPAttRlTV28dHcbWT5K2r/MBFks7nM4nrEDHWtnrCwimkDmZTc1kD8QOCCjGVwRHcQybpHvxfwol6GA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/reporter-tracer@2.12.0': +    resolution: {integrity: sha512-g8rlu9GxB8Ut/F8WGx4zidIPQ4pcYFjU9bZO+fyRIPrSUFH2bKijCnbZcr4ntqzDGx74hwD6cCG4DBoleq2UlQ==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/resolver-default@2.12.0': +    resolution: {integrity: sha512-uuhbajTax37TwCxu7V98JtRLiT6hzE4VYSu5B7Qkauy14/WFt2dz6GOUXPgVsED569/hkxebPx3KCMtZW6cHHA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/runtime-browser-hmr@2.12.0': +    resolution: {integrity: sha512-4ZLp2FWyD32r0GlTulO3+jxgsA3oO1P1b5oO2IWuWilfhcJH5LTiazpL5YdusUjtNn9PGN6QLAWfxmzRIfM+Ow==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/runtime-js@2.12.0': +    resolution: {integrity: sha512-sBerP32Z1crX5PfLNGDSXSdqzlllM++GVnVQVeM7DgMKS8JIFG3VLi28YkX+dYYGtPypm01JoIHCkvwiZEcQJg==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/runtime-react-refresh@2.12.0': +    resolution: {integrity: sha512-SCHkcczJIDFTFdLTzrHTkQ0aTrX3xH6jrA4UsCBL6ji61+w+ohy4jEEe9qCgJVXhnJfGLE43HNXek+0MStX+Mw==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/runtime-service-worker@2.12.0': +    resolution: {integrity: sha512-BXuMBsfiwpIEnssn+jqfC3jkgbS8oxeo3C7xhSQsuSv+AF2FwY3O3AO1c1RBskEW3XrBLNINOJujroNw80VTKA==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/rust@2.12.0': +    resolution: {integrity: sha512-005cldMdFZFDPOjbDVEXcINQ3wT4vrxvSavRWI3Az0e3E18exO/x/mW9f648KtXugOXMAqCEqhFHcXECL9nmMw==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/source-map@2.1.1': +    resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} +    engines: {node: ^12.18.3 || >=14} + +  '@parcel/transformer-babel@2.12.0': +    resolution: {integrity: sha512-zQaBfOnf/l8rPxYGnsk/ufh/0EuqvmnxafjBIpKZ//j6rGylw5JCqXSb1QvvAqRYruKeccxGv7+HrxpqKU6V4A==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-css@2.12.0': +    resolution: {integrity: sha512-vXhOqoAlQGATYyQ433Z1DXKmiKmzOAUmKysbYH3FD+LKEKLMEl/pA14goqp00TW+A/EjtSKKyeMyHlMIIUqj4Q==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-html@2.12.0': +    resolution: {integrity: sha512-5jW4dFFBlYBvIQk4nrH62rfA/G/KzVzEDa6S+Nne0xXhglLjkm64Ci9b/d4tKZfuGWUbpm2ASAq8skti/nfpXw==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-image@2.12.0': +    resolution: {integrity: sha512-8hXrGm2IRII49R7lZ0RpmNk27EhcsH+uNKsvxuMpXPuEnWgC/ha/IrjaI29xCng1uGur74bJF43NUSQhR4aTdw==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@parcel/transformer-js@2.12.0': +    resolution: {integrity: sha512-OSZpOu+FGDbC/xivu24v092D9w6EGytB3vidwbdiJ2FaPgfV7rxS0WIUjH4I0OcvHAcitArRXL0a3+HrNTdQQw==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@parcel/transformer-json@2.12.0': +    resolution: {integrity: sha512-Utv64GLRCQILK5r0KFs4o7I41ixMPllwOLOhkdjJKvf1hZmN6WqfOmB1YLbWS/y5Zb/iB52DU2pWZm96vLFQZQ==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-postcss@2.12.0': +    resolution: {integrity: sha512-FZqn+oUtiLfPOn67EZxPpBkfdFiTnF4iwiXPqvst3XI8H+iC+yNgzmtJkunOOuylpYY6NOU5jT8d7saqWSDv2Q==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-posthtml@2.12.0': +    resolution: {integrity: sha512-z6Z7rav/pcaWdeD+2sDUcd0mmNZRUvtHaUGa50Y2mr+poxrKilpsnFMSiWBT+oOqPt7j71jzDvrdnAF4XkCljg==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-raw@2.12.0': +    resolution: {integrity: sha512-Ht1fQvXxix0NncdnmnXZsa6hra20RXYh1VqhBYZLsDfkvGGFnXIgO03Jqn4Z8MkKoa0tiNbDhpKIeTjyclbBxQ==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-react-refresh-wrap@2.12.0': +    resolution: {integrity: sha512-GE8gmP2AZtkpBIV5vSCVhewgOFRhqwdM5Q9jNPOY5PKcM3/Ff0qCqDiTzzGLhk0/VMBrdjssrfZkVx6S/lHdJw==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/transformer-svg@2.12.0': +    resolution: {integrity: sha512-cZJqGRJ4JNdYcb+vj94J7PdOuTnwyy45dM9xqbIMH+HSiiIkfrMsdEwYft0GTyFTdsnf+hdHn3tau7Qa5hhX+A==} +    engines: {node: '>= 12.0.0', parcel: ^2.12.0} + +  '@parcel/types@2.12.0': +    resolution: {integrity: sha512-8zAFiYNCwNTQcglIObyNwKfRYQK5ELlL13GuBOrSMxueUiI5ylgsGbTS1N7J3dAGZixHO8KhHGv5a71FILn9rQ==} + +  '@parcel/utils@2.12.0': +    resolution: {integrity: sha512-z1JhLuZ8QmDaYoEIuUCVZlhcFrS7LMfHrb2OCRui5SQFntRWBH2fNM6H/fXXUkT9SkxcuFP2DUA6/m4+Gkz72g==} +    engines: {node: '>= 12.0.0'} + +  '@parcel/watcher-android-arm64@2.4.1': +    resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} +    engines: {node: '>= 10.0.0'} +    cpu: [arm64] +    os: [android] + +  '@parcel/watcher-darwin-arm64@2.4.1': +    resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} +    engines: {node: '>= 10.0.0'} +    cpu: [arm64] +    os: [darwin] + +  '@parcel/watcher-darwin-x64@2.4.1': +    resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} +    engines: {node: '>= 10.0.0'} +    cpu: [x64] +    os: [darwin] + +  '@parcel/watcher-freebsd-x64@2.4.1': +    resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} +    engines: {node: '>= 10.0.0'} +    cpu: [x64] +    os: [freebsd] + +  '@parcel/watcher-linux-arm-glibc@2.4.1': +    resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} +    engines: {node: '>= 10.0.0'} +    cpu: [arm] +    os: [linux] + +  '@parcel/watcher-linux-arm64-glibc@2.4.1': +    resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} +    engines: {node: '>= 10.0.0'} +    cpu: [arm64] +    os: [linux] + +  '@parcel/watcher-linux-arm64-musl@2.4.1': +    resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} +    engines: {node: '>= 10.0.0'} +    cpu: [arm64] +    os: [linux] + +  '@parcel/watcher-linux-x64-glibc@2.4.1': +    resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} +    engines: {node: '>= 10.0.0'} +    cpu: [x64] +    os: [linux] + +  '@parcel/watcher-linux-x64-musl@2.4.1': +    resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} +    engines: {node: '>= 10.0.0'} +    cpu: [x64] +    os: [linux] + +  '@parcel/watcher-win32-arm64@2.4.1': +    resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} +    engines: {node: '>= 10.0.0'} +    cpu: [arm64] +    os: [win32] + +  '@parcel/watcher-win32-ia32@2.4.1': +    resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} +    engines: {node: '>= 10.0.0'} +    cpu: [ia32] +    os: [win32] + +  '@parcel/watcher-win32-x64@2.4.1': +    resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} +    engines: {node: '>= 10.0.0'} +    cpu: [x64] +    os: [win32] + +  '@parcel/watcher@2.4.1': +    resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} +    engines: {node: '>= 10.0.0'} + +  '@parcel/workers@2.12.0': +    resolution: {integrity: sha512-zv5We5Jmb+ZWXlU6A+AufyjY4oZckkxsZ8J4dvyWL0W8IQvGO1JB4FGeryyttzQv3RM3OxcN/BpTGPiDG6keBw==} +    engines: {node: '>= 12.0.0'} +    peerDependencies: +      '@parcel/core': ^2.12.0 + +  '@swc/core-darwin-arm64@1.7.11': +    resolution: {integrity: sha512-HRQv4qIeMBPThZ6Y/4yYW52rGsS6yrpusvuxLGyoFo45Y0y12/V2yXkOIA/0HIQyrqoUAxn1k4zQXpPaPNCmnw==} +    engines: {node: '>=10'} +    cpu: [arm64] +    os: [darwin] + +  '@swc/core-darwin-x64@1.7.11': +    resolution: {integrity: sha512-vtMQj0F3oYwDu5yhO7SKDRg1XekRSi6/TbzHAbBXv+dBhlGGvcZZynT1H90EVFTv+7w7Sh+lOFvRv5Z4ZTcxow==} +    engines: {node: '>=10'} +    cpu: [x64] +    os: [darwin] + +  '@swc/core-linux-arm-gnueabihf@1.7.11': +    resolution: {integrity: sha512-mHtzWKxhtyreI4CSxs+3+ENv8t/Qo35WFoYG66qHEgJz/Z2Lh6jv1E+MYgHdYwnpQHgHbdvAco7HsBu/Dt6xXw==} +    engines: {node: '>=10'} +    cpu: [arm] +    os: [linux] + +  '@swc/core-linux-arm64-gnu@1.7.11': +    resolution: {integrity: sha512-FRwe/x0GfXSQjGP2lIk+NO0pUFS/lI/RorCLBPiK808EVE9JTbh9DKCc/4Bbb4jgScAjNkrFCUVObQYl3YKmpA==} +    engines: {node: '>=10'} +    cpu: [arm64] +    os: [linux] + +  '@swc/core-linux-arm64-musl@1.7.11': +    resolution: {integrity: sha512-GY/rs0+GUq14Gbnza90KOrQd/9yHd5qQMii5jcSWcUCT5A8QTa8kiicsM2NxZeTJ69xlKmT7sLod5l99lki/2A==} +    engines: {node: '>=10'} +    cpu: [arm64] +    os: [linux] + +  '@swc/core-linux-x64-gnu@1.7.11': +    resolution: {integrity: sha512-QDkGRwSPmp2RBOlSs503IUXlWYlny8DyznTT0QuK0ML2RpDFlXWU94K/EZhS0RBEUkMY/W51OacM8P8aS/dkCg==} +    engines: {node: '>=10'} +    cpu: [x64] +    os: [linux] + +  '@swc/core-linux-x64-musl@1.7.11': +    resolution: {integrity: sha512-SBEfKrXy6zQ6ksnyxw1FaCftrIH4fLfA81xNnKb7x/6iblv7Ko6H0aK3P5C86jyqF/82+ONl9C7ImGkUFQADig==} +    engines: {node: '>=10'} +    cpu: [x64] +    os: [linux] + +  '@swc/core-win32-arm64-msvc@1.7.11': +    resolution: {integrity: sha512-a2Y4xxEsLLYHJN7sMnw9+YQJDi3M1BxEr9hklfopPuGGnYLFNnx5CypH1l9ReijEfWjIAHNi7pq3m023lzW1Hg==} +    engines: {node: '>=10'} +    cpu: [arm64] +    os: [win32] + +  '@swc/core-win32-ia32-msvc@1.7.11': +    resolution: {integrity: sha512-ZbZFMwZO+j8ulhegJ7EhJ/QVZPoQ5qc30ylJQSxizizTJaen71Q7/13lXWc6ksuCKvg6dUKrp/TPgoxOOtSrFA==} +    engines: {node: '>=10'} +    cpu: [ia32] +    os: [win32] + +  '@swc/core-win32-x64-msvc@1.7.11': +    resolution: {integrity: sha512-IUohZedSJyDu/ReEBG/mqX6uG29uA7zZ9z6dIAF+p6eFxjXmh9MuHryyM+H8ebUyoq/Ad3rL+rUCksnuYNnI0w==} +    engines: {node: '>=10'} +    cpu: [x64] +    os: [win32] + +  '@swc/core@1.7.11': +    resolution: {integrity: sha512-AB+qc45UrJrDfbhPKcUXk+9z/NmFfYYwJT6G7/iur0fCse9kXjx45gi40+u/O2zgarG/30/zV6E3ps8fUvjh7g==} +    engines: {node: '>=10'} +    peerDependencies: +      '@swc/helpers': '*' +    peerDependenciesMeta: +      '@swc/helpers': +        optional: true + +  '@swc/counter@0.1.3': +    resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + +  '@swc/helpers@0.5.12': +    resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + +  '@swc/types@0.1.12': +    resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + +  '@trysound/sax@0.2.0': +    resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} +    engines: {node: '>=10.13.0'} + +  '@tsconfig/recommended@1.0.7': +    resolution: {integrity: sha512-xiNMgCuoy4mCL4JTywk9XFs5xpRUcKxtWEcMR6FNMtsgewYTIgIR+nvlP4A4iRCAzRsHMnPhvTRrzp4AGcRTEA==} + +  '@types/parcel-env@0.0.6': +    resolution: {integrity: sha512-HlPNbKhUe+0xVqzeqttl/gFC27dUZCjrUSI6MlfGoudjCtNeVOwm2kmDalkfXVWXsj4NJ4oa0PO3SdtOdGaGDg==} + +  abortcontroller-polyfill@1.7.5: +    resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + +  ansi-styles@3.2.1: +    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} +    engines: {node: '>=4'} + +  ansi-styles@4.3.0: +    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} +    engines: {node: '>=8'} + +  argparse@2.0.1: +    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + +  base-x@3.0.10: +    resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + +  boolbase@1.0.0: +    resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + +  braces@3.0.3: +    resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} +    engines: {node: '>=8'} + +  browserslist@4.23.3: +    resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} +    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} +    hasBin: true + +  callsites@3.1.0: +    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} +    engines: {node: '>=6'} + +  caniuse-lite@1.0.30001651: +    resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + +  chalk@2.4.2: +    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} +    engines: {node: '>=4'} + +  chalk@4.1.2: +    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} +    engines: {node: '>=10'} + +  chrome-trace-event@1.0.4: +    resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} +    engines: {node: '>=6.0'} + +  clone@2.1.2: +    resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} +    engines: {node: '>=0.8'} + +  color-convert@1.9.3: +    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + +  color-convert@2.0.1: +    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} +    engines: {node: '>=7.0.0'} + +  color-name@1.1.3: +    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + +  color-name@1.1.4: +    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + +  commander@7.2.0: +    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} +    engines: {node: '>= 10'} + +  cosmiconfig@9.0.0: +    resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} +    engines: {node: '>=14'} +    peerDependencies: +      typescript: '>=4.9.5' +    peerDependenciesMeta: +      typescript: +        optional: true + +  css-select@4.3.0: +    resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + +  css-tree@1.1.3: +    resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} +    engines: {node: '>=8.0.0'} + +  css-what@6.1.0: +    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} +    engines: {node: '>= 6'} + +  csso@4.2.0: +    resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} +    engines: {node: '>=8.0.0'} + +  detect-libc@1.0.3: +    resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} +    engines: {node: '>=0.10'} +    hasBin: true + +  detect-libc@2.0.3: +    resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} +    engines: {node: '>=8'} + +  dom-serializer@1.4.1: +    resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + +  domelementtype@2.3.0: +    resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + +  domhandler@4.3.1: +    resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} +    engines: {node: '>= 4'} + +  domutils@2.8.0: +    resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + +  dotenv-expand@5.1.0: +    resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + +  dotenv@7.0.0: +    resolution: {integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==} +    engines: {node: '>=6'} + +  electron-to-chromium@1.5.9: +    resolution: {integrity: sha512-HfkT8ndXR0SEkU8gBQQM3rz035bpE/hxkZ1YIt4KJPEFES68HfIU6LzKukH0H794Lm83WJtkSAMfEToxCs15VA==} + +  entities@2.2.0: +    resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + +  entities@3.0.1: +    resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} +    engines: {node: '>=0.12'} + +  env-paths@2.2.1: +    resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} +    engines: {node: '>=6'} + +  error-ex@1.3.2: +    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + +  escalade@3.1.2: +    resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} +    engines: {node: '>=6'} + +  escape-string-regexp@1.0.5: +    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} +    engines: {node: '>=0.8.0'} + +  fill-range@7.1.1: +    resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} +    engines: {node: '>=8'} + +  get-port@4.2.0: +    resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==} +    engines: {node: '>=6'} + +  globals@13.24.0: +    resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} +    engines: {node: '>=8'} + +  has-flag@3.0.0: +    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} +    engines: {node: '>=4'} + +  has-flag@4.0.0: +    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} +    engines: {node: '>=8'} + +  htmlnano@2.1.1: +    resolution: {integrity: sha512-kAERyg/LuNZYmdqgCdYvugyLWNFAm8MWXpQMz1pLpetmCbFwoMxvkSoaAMlFrOC4OKTWI4KlZGT/RsNxg4ghOw==} +    peerDependencies: +      cssnano: ^7.0.0 +      postcss: ^8.3.11 +      purgecss: ^6.0.0 +      relateurl: ^0.2.7 +      srcset: 5.0.1 +      svgo: ^3.0.2 +      terser: ^5.10.0 +      uncss: ^0.17.3 +    peerDependenciesMeta: +      cssnano: +        optional: true +      postcss: +        optional: true +      purgecss: +        optional: true +      relateurl: +        optional: true +      srcset: +        optional: true +      svgo: +        optional: true +      terser: +        optional: true +      uncss: +        optional: true + +  htmlparser2@7.2.0: +    resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} + +  import-fresh@3.3.0: +    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} +    engines: {node: '>=6'} + +  is-arrayish@0.2.1: +    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + +  is-extglob@2.1.1: +    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} +    engines: {node: '>=0.10.0'} + +  is-glob@4.0.3: +    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} +    engines: {node: '>=0.10.0'} + +  is-json@2.0.1: +    resolution: {integrity: sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==} + +  is-number@7.0.0: +    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} +    engines: {node: '>=0.12.0'} + +  js-tokens@4.0.0: +    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + +  js-yaml@4.1.0: +    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} +    hasBin: true + +  json-parse-even-better-errors@2.3.1: +    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + +  json5@2.2.3: +    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} +    engines: {node: '>=6'} +    hasBin: true + +  lightningcss-darwin-arm64@1.26.0: +    resolution: {integrity: sha512-n4TIvHO1NY1ondKFYpL2ZX0bcC2y6yjXMD6JfyizgR8BCFNEeArINDzEaeqlfX9bXz73Bpz/Ow0nu+1qiDrBKg==} +    engines: {node: '>= 12.0.0'} +    cpu: [arm64] +    os: [darwin] + +  lightningcss-darwin-x64@1.26.0: +    resolution: {integrity: sha512-Rf9HuHIDi1R6/zgBkJh25SiJHF+dm9axUZW/0UoYCW1/8HV0gMI0blARhH4z+REmWiU1yYT/KyNF3h7tHyRXUg==} +    engines: {node: '>= 12.0.0'} +    cpu: [x64] +    os: [darwin] + +  lightningcss-freebsd-x64@1.26.0: +    resolution: {integrity: sha512-C/io7POAxp6sZxFSVGezjajMlCKQ8KSwISLLGRq8xLQpQMokYrUoqYEwmIX8mLmF6C/CZPk0gFmRSzd8biWM0g==} +    engines: {node: '>= 12.0.0'} +    cpu: [x64] +    os: [freebsd] + +  lightningcss-linux-arm-gnueabihf@1.26.0: +    resolution: {integrity: sha512-Aag9kqXqkyPSW+dXMgyWk66C984Nay2pY8Nws+67gHlDzV3cWh7TvFlzuaTaVFMVqdDTzN484LSK3u39zFBnzg==} +    engines: {node: '>= 12.0.0'} +    cpu: [arm] +    os: [linux] + +  lightningcss-linux-arm64-gnu@1.26.0: +    resolution: {integrity: sha512-iJmZM7fUyVjH+POtdiCtExG+67TtPUTer7K/5A8DIfmPfrmeGvzfRyBltGhQz13Wi15K1lf2cPYoRaRh6vcwNA==} +    engines: {node: '>= 12.0.0'} +    cpu: [arm64] +    os: [linux] + +  lightningcss-linux-arm64-musl@1.26.0: +    resolution: {integrity: sha512-XxoEL++tTkyuvu+wq/QS8bwyTXZv2y5XYCMcWL45b8XwkiS8eEEEej9BkMGSRwxa5J4K+LDeIhLrS23CpQyfig==} +    engines: {node: '>= 12.0.0'} +    cpu: [arm64] +    os: [linux] + +  lightningcss-linux-x64-gnu@1.26.0: +    resolution: {integrity: sha512-1dkTfZQAYLj8MUSkd6L/+TWTG8V6Kfrzfa0T1fSlXCXQHrt1HC1/UepXHtKHDt/9yFwyoeayivxXAsApVxn6zA==} +    engines: {node: '>= 12.0.0'} +    cpu: [x64] +    os: [linux] + +  lightningcss-linux-x64-musl@1.26.0: +    resolution: {integrity: sha512-yX3Rk9m00JGCUzuUhFEojY+jf/6zHs3XU8S8Vk+FRbnr4St7cjyMXdNjuA2LjiT8e7j8xHRCH8hyZ4H/btRE4A==} +    engines: {node: '>= 12.0.0'} +    cpu: [x64] +    os: [linux] + +  lightningcss-win32-arm64-msvc@1.26.0: +    resolution: {integrity: sha512-X/597/cFnCogy9VItj/+7Tgu5VLbAtDF7KZDPdSw0MaL6FL940th1y3HiOzFIlziVvAtbo0RB3NAae1Oofr+Tw==} +    engines: {node: '>= 12.0.0'} +    cpu: [arm64] +    os: [win32] + +  lightningcss-win32-x64-msvc@1.26.0: +    resolution: {integrity: sha512-pYS3EyGP3JRhfqEFYmfFDiZ9/pVNfy8jVIYtrx9TVNusVyDK3gpW1w/rbvroQ4bDJi7grdUtyrYU6V2xkY/bBw==} +    engines: {node: '>= 12.0.0'} +    cpu: [x64] +    os: [win32] + +  lightningcss@1.26.0: +    resolution: {integrity: sha512-a/XZ5hdgifrofQJUArr5AiJjx26SwMam3SJUSMjgebZbESZ96i+6Qsl8tLi0kaUsdMzBWXh9sN1Oe6hp2/dkQw==} +    engines: {node: '>= 12.0.0'} + +  lines-and-columns@1.2.4: +    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + +  lmdb@2.8.5: +    resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} +    hasBin: true + +  mdn-data@2.0.14: +    resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + +  micromatch@4.0.7: +    resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} +    engines: {node: '>=8.6'} + +  msgpackr-extract@3.0.3: +    resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} +    hasBin: true + +  msgpackr@1.11.0: +    resolution: {integrity: sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==} + +  node-addon-api@6.1.0: +    resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + +  node-addon-api@7.1.1: +    resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + +  node-gyp-build-optional-packages@5.1.1: +    resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} +    hasBin: true + +  node-gyp-build-optional-packages@5.2.2: +    resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} +    hasBin: true + +  node-releases@2.0.18: +    resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + +  nth-check@2.1.1: +    resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + +  nullthrows@1.1.1: +    resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + +  ordered-binary@1.5.1: +    resolution: {integrity: sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==} + +  parcel@2.12.0: +    resolution: {integrity: sha512-W+gxAq7aQ9dJIg/XLKGcRT0cvnStFAQHPaI0pvD0U2l6IVLueUAm3nwN7lkY62zZNmlvNx6jNtE4wlbS+CyqSg==} +    engines: {node: '>= 12.0.0'} +    hasBin: true + +  parent-module@1.0.1: +    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} +    engines: {node: '>=6'} + +  parse-json@5.2.0: +    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} +    engines: {node: '>=8'} + +  picocolors@1.0.1: +    resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + +  picomatch@2.3.1: +    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} +    engines: {node: '>=8.6'} + +  postcss-value-parser@4.2.0: +    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + +  posthtml-parser@0.10.2: +    resolution: {integrity: sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==} +    engines: {node: '>=12'} + +  posthtml-parser@0.11.0: +    resolution: {integrity: sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==} +    engines: {node: '>=12'} + +  posthtml-render@3.0.0: +    resolution: {integrity: sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==} +    engines: {node: '>=12'} + +  posthtml@0.16.6: +    resolution: {integrity: sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==} +    engines: {node: '>=12.0.0'} + +  prettier@3.3.3: +    resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} +    engines: {node: '>=14'} +    hasBin: true + +  react-error-overlay@6.0.9: +    resolution: {integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==} + +  react-refresh@0.9.0: +    resolution: {integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==} +    engines: {node: '>=0.10.0'} + +  regenerator-runtime@0.13.11: +    resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + +  resolve-from@4.0.0: +    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} +    engines: {node: '>=4'} + +  safe-buffer@5.2.1: +    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + +  semver@7.6.3: +    resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} +    engines: {node: '>=10'} +    hasBin: true + +  source-map@0.6.1: +    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} +    engines: {node: '>=0.10.0'} + +  srcset@4.0.0: +    resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} +    engines: {node: '>=12'} + +  stable@0.1.8: +    resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} +    deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + +  supports-color@5.5.0: +    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} +    engines: {node: '>=4'} + +  supports-color@7.2.0: +    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} +    engines: {node: '>=8'} + +  svgo@2.8.0: +    resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} +    engines: {node: '>=10.13.0'} +    hasBin: true + +  term-size@2.2.1: +    resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} +    engines: {node: '>=8'} + +  timsort@0.3.0: +    resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} + +  to-regex-range@5.0.1: +    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} +    engines: {node: '>=8.0'} + +  tslib@2.6.3: +    resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + +  type-fest@0.20.2: +    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} +    engines: {node: '>=10'} + +  typescript@5.5.4: +    resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} +    engines: {node: '>=14.17'} +    hasBin: true + +  update-browserslist-db@1.1.0: +    resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} +    hasBin: true +    peerDependencies: +      browserslist: '>= 4.21.0' + +  utility-types@3.11.0: +    resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} +    engines: {node: '>= 4'} + +  weak-lru-cache@1.2.2: +    resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + +snapshots: + +  '@babel/code-frame@7.24.7': +    dependencies: +      '@babel/highlight': 7.24.7 +      picocolors: 1.0.1 + +  '@babel/helper-validator-identifier@7.24.7': {} + +  '@babel/highlight@7.24.7': +    dependencies: +      '@babel/helper-validator-identifier': 7.24.7 +      chalk: 2.4.2 +      js-tokens: 4.0.0 +      picocolors: 1.0.1 + +  '@lezer/common@1.2.1': {} + +  '@lezer/lr@1.4.2': +    dependencies: +      '@lezer/common': 1.2.1 + +  '@lmdb/lmdb-darwin-arm64@2.8.5': +    optional: true + +  '@lmdb/lmdb-darwin-x64@2.8.5': +    optional: true + +  '@lmdb/lmdb-linux-arm64@2.8.5': +    optional: true + +  '@lmdb/lmdb-linux-arm@2.8.5': +    optional: true + +  '@lmdb/lmdb-linux-x64@2.8.5': +    optional: true + +  '@lmdb/lmdb-win32-x64@2.8.5': +    optional: true + +  '@mischnic/json-sourcemap@0.1.1': +    dependencies: +      '@lezer/common': 1.2.1 +      '@lezer/lr': 1.4.2 +      json5: 2.2.3 + +  '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': +    optional: true + +  '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': +    optional: true + +  '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': +    optional: true + +  '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': +    optional: true + +  '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': +    optional: true + +  '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': +    optional: true + +  '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/graph': 3.2.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/rust': 2.12.0 +      '@parcel/utils': 2.12.0 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)': +    dependencies: +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/logger': 2.12.0 +      '@parcel/utils': 2.12.0 +      lmdb: 2.8.5 +    transitivePeerDependencies: +      - '@swc/helpers' + +  '@parcel/codeframe@2.12.0': +    dependencies: +      chalk: 4.1.2 + +  '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(typescript@5.5.4)': +    dependencies: +      '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(typescript@5.5.4) +      '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +    transitivePeerDependencies: +      - '@swc/helpers' +      - cssnano +      - postcss +      - purgecss +      - relateurl +      - srcset +      - terser +      - typescript +      - uncss + +  '@parcel/core@2.12.0(@swc/helpers@0.5.12)': +    dependencies: +      '@mischnic/json-sourcemap': 0.1.1 +      '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/diagnostic': 2.12.0 +      '@parcel/events': 2.12.0 +      '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/graph': 3.2.0 +      '@parcel/logger': 2.12.0 +      '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/profiler': 2.12.0 +      '@parcel/rust': 2.12.0 +      '@parcel/source-map': 2.1.1 +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      abortcontroller-polyfill: 1.7.5 +      base-x: 3.0.10 +      browserslist: 4.23.3 +      clone: 2.1.2 +      dotenv: 7.0.0 +      dotenv-expand: 5.1.0 +      json5: 2.2.3 +      msgpackr: 1.11.0 +      nullthrows: 1.1.1 +      semver: 7.6.3 +    transitivePeerDependencies: +      - '@swc/helpers' + +  '@parcel/diagnostic@2.12.0': +    dependencies: +      '@mischnic/json-sourcemap': 0.1.1 +      nullthrows: 1.1.1 + +  '@parcel/events@2.12.0': {} + +  '@parcel/fs@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)': +    dependencies: +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/rust': 2.12.0 +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      '@parcel/watcher': 2.4.1 +      '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +    transitivePeerDependencies: +      - '@swc/helpers' + +  '@parcel/graph@3.2.0': +    dependencies: +      nullthrows: 1.1.1 + +  '@parcel/logger@2.12.0': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/events': 2.12.0 + +  '@parcel/markdown-ansi@2.12.0': +    dependencies: +      chalk: 4.1.2 + +  '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/node-resolver-core@3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@mischnic/json-sourcemap': 0.1.1 +      '@parcel/diagnostic': 2.12.0 +      '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/rust': 2.12.0 +      '@parcel/utils': 2.12.0 +      nullthrows: 1.1.1 +      semver: 7.6.3 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/source-map': 2.1.1 +      '@parcel/utils': 2.12.0 +      browserslist: 4.23.3 +      lightningcss: 1.26.0 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(typescript@5.5.4)': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      htmlnano: 2.1.1(svgo@2.8.0)(typescript@5.5.4) +      nullthrows: 1.1.1 +      posthtml: 0.16.6 +      svgo: 2.8.0 +    transitivePeerDependencies: +      - '@parcel/core' +      - cssnano +      - postcss +      - purgecss +      - relateurl +      - srcset +      - terser +      - typescript +      - uncss + +  '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/rust': 2.12.0 +      '@parcel/utils': 2.12.0 +      '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) + +  '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      svgo: 2.8.0 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/optimizer-swc@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/source-map': 2.1.1 +      '@parcel/utils': 2.12.0 +      '@swc/core': 1.7.11(@swc/helpers@0.5.12) +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' +      - '@swc/helpers' + +  '@parcel/package-manager@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)': +    dependencies: +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/diagnostic': 2.12.0 +      '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/logger': 2.12.0 +      '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@swc/core': 1.7.11(@swc/helpers@0.5.12) +      semver: 7.6.3 +    transitivePeerDependencies: +      - '@swc/helpers' + +  '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/source-map': 2.1.1 +      '@parcel/utils': 2.12.0 +      lightningcss: 1.26.0 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      nullthrows: 1.1.1 +      posthtml: 0.16.6 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/rust': 2.12.0 +      '@parcel/source-map': 2.1.1 +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      globals: 13.24.0 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      posthtml: 0.16.6 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/profiler@2.12.0': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/events': 2.12.0 +      chrome-trace-event: 1.0.4 + +  '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      chalk: 4.1.2 +      term-size: 2.2.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      chrome-trace-event: 1.0.4 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      react-error-overlay: 6.0.9 +      react-refresh: 0.9.0 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/rust@2.12.0': {} + +  '@parcel/source-map@2.1.1': +    dependencies: +      detect-libc: 1.0.3 + +  '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/source-map': 2.1.1 +      '@parcel/utils': 2.12.0 +      browserslist: 4.23.3 +      json5: 2.2.3 +      nullthrows: 1.1.1 +      semver: 7.6.3 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/source-map': 2.1.1 +      '@parcel/utils': 2.12.0 +      browserslist: 4.23.3 +      lightningcss: 1.26.0 +      nullthrows: 1.1.1 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/rust': 2.12.0 +      nullthrows: 1.1.1 +      posthtml: 0.16.6 +      posthtml-parser: 0.10.2 +      posthtml-render: 3.0.0 +      semver: 7.6.3 +      srcset: 4.0.0 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      nullthrows: 1.1.1 + +  '@parcel/transformer-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/rust': 2.12.0 +      '@parcel/source-map': 2.1.1 +      '@parcel/utils': 2.12.0 +      '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@swc/helpers': 0.5.12 +      browserslist: 4.23.3 +      nullthrows: 1.1.1 +      regenerator-runtime: 0.13.11 +      semver: 7.6.3 + +  '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      json5: 2.2.3 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/rust': 2.12.0 +      '@parcel/utils': 2.12.0 +      clone: 2.1.2 +      nullthrows: 1.1.1 +      postcss-value-parser: 4.2.0 +      semver: 7.6.3 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      nullthrows: 1.1.1 +      posthtml: 0.16.6 +      posthtml-parser: 0.10.2 +      posthtml-render: 3.0.0 +      semver: 7.6.3 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      react-refresh: 0.9.0 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/diagnostic': 2.12.0 +      '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/rust': 2.12.0 +      nullthrows: 1.1.1 +      posthtml: 0.16.6 +      posthtml-parser: 0.10.2 +      posthtml-render: 3.0.0 +      semver: 7.6.3 +    transitivePeerDependencies: +      - '@parcel/core' + +  '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)': +    dependencies: +      '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/diagnostic': 2.12.0 +      '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/source-map': 2.1.1 +      '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      utility-types: 3.11.0 +    transitivePeerDependencies: +      - '@parcel/core' +      - '@swc/helpers' + +  '@parcel/utils@2.12.0': +    dependencies: +      '@parcel/codeframe': 2.12.0 +      '@parcel/diagnostic': 2.12.0 +      '@parcel/logger': 2.12.0 +      '@parcel/markdown-ansi': 2.12.0 +      '@parcel/rust': 2.12.0 +      '@parcel/source-map': 2.1.1 +      chalk: 4.1.2 +      nullthrows: 1.1.1 + +  '@parcel/watcher-android-arm64@2.4.1': +    optional: true + +  '@parcel/watcher-darwin-arm64@2.4.1': +    optional: true + +  '@parcel/watcher-darwin-x64@2.4.1': +    optional: true + +  '@parcel/watcher-freebsd-x64@2.4.1': +    optional: true + +  '@parcel/watcher-linux-arm-glibc@2.4.1': +    optional: true + +  '@parcel/watcher-linux-arm64-glibc@2.4.1': +    optional: true + +  '@parcel/watcher-linux-arm64-musl@2.4.1': +    optional: true + +  '@parcel/watcher-linux-x64-glibc@2.4.1': +    optional: true + +  '@parcel/watcher-linux-x64-musl@2.4.1': +    optional: true + +  '@parcel/watcher-win32-arm64@2.4.1': +    optional: true + +  '@parcel/watcher-win32-ia32@2.4.1': +    optional: true + +  '@parcel/watcher-win32-x64@2.4.1': +    optional: true + +  '@parcel/watcher@2.4.1': +    dependencies: +      detect-libc: 1.0.3 +      is-glob: 4.0.3 +      micromatch: 4.0.7 +      node-addon-api: 7.1.1 +    optionalDependencies: +      '@parcel/watcher-android-arm64': 2.4.1 +      '@parcel/watcher-darwin-arm64': 2.4.1 +      '@parcel/watcher-darwin-x64': 2.4.1 +      '@parcel/watcher-freebsd-x64': 2.4.1 +      '@parcel/watcher-linux-arm-glibc': 2.4.1 +      '@parcel/watcher-linux-arm64-glibc': 2.4.1 +      '@parcel/watcher-linux-arm64-musl': 2.4.1 +      '@parcel/watcher-linux-x64-glibc': 2.4.1 +      '@parcel/watcher-linux-x64-musl': 2.4.1 +      '@parcel/watcher-win32-arm64': 2.4.1 +      '@parcel/watcher-win32-ia32': 2.4.1 +      '@parcel/watcher-win32-x64': 2.4.1 + +  '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))': +    dependencies: +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/diagnostic': 2.12.0 +      '@parcel/logger': 2.12.0 +      '@parcel/profiler': 2.12.0 +      '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/utils': 2.12.0 +      nullthrows: 1.1.1 + +  '@swc/core-darwin-arm64@1.7.11': +    optional: true + +  '@swc/core-darwin-x64@1.7.11': +    optional: true + +  '@swc/core-linux-arm-gnueabihf@1.7.11': +    optional: true + +  '@swc/core-linux-arm64-gnu@1.7.11': +    optional: true + +  '@swc/core-linux-arm64-musl@1.7.11': +    optional: true + +  '@swc/core-linux-x64-gnu@1.7.11': +    optional: true + +  '@swc/core-linux-x64-musl@1.7.11': +    optional: true + +  '@swc/core-win32-arm64-msvc@1.7.11': +    optional: true + +  '@swc/core-win32-ia32-msvc@1.7.11': +    optional: true + +  '@swc/core-win32-x64-msvc@1.7.11': +    optional: true + +  '@swc/core@1.7.11(@swc/helpers@0.5.12)': +    dependencies: +      '@swc/counter': 0.1.3 +      '@swc/types': 0.1.12 +    optionalDependencies: +      '@swc/core-darwin-arm64': 1.7.11 +      '@swc/core-darwin-x64': 1.7.11 +      '@swc/core-linux-arm-gnueabihf': 1.7.11 +      '@swc/core-linux-arm64-gnu': 1.7.11 +      '@swc/core-linux-arm64-musl': 1.7.11 +      '@swc/core-linux-x64-gnu': 1.7.11 +      '@swc/core-linux-x64-musl': 1.7.11 +      '@swc/core-win32-arm64-msvc': 1.7.11 +      '@swc/core-win32-ia32-msvc': 1.7.11 +      '@swc/core-win32-x64-msvc': 1.7.11 +      '@swc/helpers': 0.5.12 + +  '@swc/counter@0.1.3': {} + +  '@swc/helpers@0.5.12': +    dependencies: +      tslib: 2.6.3 + +  '@swc/types@0.1.12': +    dependencies: +      '@swc/counter': 0.1.3 + +  '@trysound/sax@0.2.0': {} + +  '@tsconfig/recommended@1.0.7': {} + +  '@types/parcel-env@0.0.6': {} + +  abortcontroller-polyfill@1.7.5: {} + +  ansi-styles@3.2.1: +    dependencies: +      color-convert: 1.9.3 + +  ansi-styles@4.3.0: +    dependencies: +      color-convert: 2.0.1 + +  argparse@2.0.1: {} + +  base-x@3.0.10: +    dependencies: +      safe-buffer: 5.2.1 + +  boolbase@1.0.0: {} + +  braces@3.0.3: +    dependencies: +      fill-range: 7.1.1 + +  browserslist@4.23.3: +    dependencies: +      caniuse-lite: 1.0.30001651 +      electron-to-chromium: 1.5.9 +      node-releases: 2.0.18 +      update-browserslist-db: 1.1.0(browserslist@4.23.3) + +  callsites@3.1.0: {} + +  caniuse-lite@1.0.30001651: {} + +  chalk@2.4.2: +    dependencies: +      ansi-styles: 3.2.1 +      escape-string-regexp: 1.0.5 +      supports-color: 5.5.0 + +  chalk@4.1.2: +    dependencies: +      ansi-styles: 4.3.0 +      supports-color: 7.2.0 + +  chrome-trace-event@1.0.4: {} + +  clone@2.1.2: {} + +  color-convert@1.9.3: +    dependencies: +      color-name: 1.1.3 + +  color-convert@2.0.1: +    dependencies: +      color-name: 1.1.4 + +  color-name@1.1.3: {} + +  color-name@1.1.4: {} + +  commander@7.2.0: {} + +  cosmiconfig@9.0.0(typescript@5.5.4): +    dependencies: +      env-paths: 2.2.1 +      import-fresh: 3.3.0 +      js-yaml: 4.1.0 +      parse-json: 5.2.0 +    optionalDependencies: +      typescript: 5.5.4 + +  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-tree@1.1.3: +    dependencies: +      mdn-data: 2.0.14 +      source-map: 0.6.1 + +  css-what@6.1.0: {} + +  csso@4.2.0: +    dependencies: +      css-tree: 1.1.3 + +  detect-libc@1.0.3: {} + +  detect-libc@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@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 + +  dotenv-expand@5.1.0: {} + +  dotenv@7.0.0: {} + +  electron-to-chromium@1.5.9: {} + +  entities@2.2.0: {} + +  entities@3.0.1: {} + +  env-paths@2.2.1: {} + +  error-ex@1.3.2: +    dependencies: +      is-arrayish: 0.2.1 + +  escalade@3.1.2: {} + +  escape-string-regexp@1.0.5: {} + +  fill-range@7.1.1: +    dependencies: +      to-regex-range: 5.0.1 + +  get-port@4.2.0: {} + +  globals@13.24.0: +    dependencies: +      type-fest: 0.20.2 + +  has-flag@3.0.0: {} + +  has-flag@4.0.0: {} + +  htmlnano@2.1.1(svgo@2.8.0)(typescript@5.5.4): +    dependencies: +      cosmiconfig: 9.0.0(typescript@5.5.4) +      posthtml: 0.16.6 +      timsort: 0.3.0 +    optionalDependencies: +      svgo: 2.8.0 +    transitivePeerDependencies: +      - typescript + +  htmlparser2@7.2.0: +    dependencies: +      domelementtype: 2.3.0 +      domhandler: 4.3.1 +      domutils: 2.8.0 +      entities: 3.0.1 + +  import-fresh@3.3.0: +    dependencies: +      parent-module: 1.0.1 +      resolve-from: 4.0.0 + +  is-arrayish@0.2.1: {} + +  is-extglob@2.1.1: {} + +  is-glob@4.0.3: +    dependencies: +      is-extglob: 2.1.1 + +  is-json@2.0.1: {} + +  is-number@7.0.0: {} + +  js-tokens@4.0.0: {} + +  js-yaml@4.1.0: +    dependencies: +      argparse: 2.0.1 + +  json-parse-even-better-errors@2.3.1: {} + +  json5@2.2.3: {} + +  lightningcss-darwin-arm64@1.26.0: +    optional: true + +  lightningcss-darwin-x64@1.26.0: +    optional: true + +  lightningcss-freebsd-x64@1.26.0: +    optional: true + +  lightningcss-linux-arm-gnueabihf@1.26.0: +    optional: true + +  lightningcss-linux-arm64-gnu@1.26.0: +    optional: true + +  lightningcss-linux-arm64-musl@1.26.0: +    optional: true + +  lightningcss-linux-x64-gnu@1.26.0: +    optional: true + +  lightningcss-linux-x64-musl@1.26.0: +    optional: true + +  lightningcss-win32-arm64-msvc@1.26.0: +    optional: true + +  lightningcss-win32-x64-msvc@1.26.0: +    optional: true + +  lightningcss@1.26.0: +    dependencies: +      detect-libc: 1.0.3 +    optionalDependencies: +      lightningcss-darwin-arm64: 1.26.0 +      lightningcss-darwin-x64: 1.26.0 +      lightningcss-freebsd-x64: 1.26.0 +      lightningcss-linux-arm-gnueabihf: 1.26.0 +      lightningcss-linux-arm64-gnu: 1.26.0 +      lightningcss-linux-arm64-musl: 1.26.0 +      lightningcss-linux-x64-gnu: 1.26.0 +      lightningcss-linux-x64-musl: 1.26.0 +      lightningcss-win32-arm64-msvc: 1.26.0 +      lightningcss-win32-x64-msvc: 1.26.0 + +  lines-and-columns@1.2.4: {} + +  lmdb@2.8.5: +    dependencies: +      msgpackr: 1.11.0 +      node-addon-api: 6.1.0 +      node-gyp-build-optional-packages: 5.1.1 +      ordered-binary: 1.5.1 +      weak-lru-cache: 1.2.2 +    optionalDependencies: +      '@lmdb/lmdb-darwin-arm64': 2.8.5 +      '@lmdb/lmdb-darwin-x64': 2.8.5 +      '@lmdb/lmdb-linux-arm': 2.8.5 +      '@lmdb/lmdb-linux-arm64': 2.8.5 +      '@lmdb/lmdb-linux-x64': 2.8.5 +      '@lmdb/lmdb-win32-x64': 2.8.5 + +  mdn-data@2.0.14: {} + +  micromatch@4.0.7: +    dependencies: +      braces: 3.0.3 +      picomatch: 2.3.1 + +  msgpackr-extract@3.0.3: +    dependencies: +      node-gyp-build-optional-packages: 5.2.2 +    optionalDependencies: +      '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 +      '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 +      '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 +      '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 +      '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 +      '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 +    optional: true + +  msgpackr@1.11.0: +    optionalDependencies: +      msgpackr-extract: 3.0.3 + +  node-addon-api@6.1.0: {} + +  node-addon-api@7.1.1: {} + +  node-gyp-build-optional-packages@5.1.1: +    dependencies: +      detect-libc: 2.0.3 + +  node-gyp-build-optional-packages@5.2.2: +    dependencies: +      detect-libc: 2.0.3 +    optional: true + +  node-releases@2.0.18: {} + +  nth-check@2.1.1: +    dependencies: +      boolbase: 1.0.0 + +  nullthrows@1.1.1: {} + +  ordered-binary@1.5.1: {} + +  parcel@2.12.0(@swc/helpers@0.5.12)(typescript@5.5.4): +    dependencies: +      '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(typescript@5.5.4) +      '@parcel/core': 2.12.0(@swc/helpers@0.5.12) +      '@parcel/diagnostic': 2.12.0 +      '@parcel/events': 2.12.0 +      '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/logger': 2.12.0 +      '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12))(@swc/helpers@0.5.12) +      '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.12)) +      '@parcel/utils': 2.12.0 +      chalk: 4.1.2 +      commander: 7.2.0 +      get-port: 4.2.0 +    transitivePeerDependencies: +      - '@swc/helpers' +      - cssnano +      - postcss +      - purgecss +      - relateurl +      - srcset +      - terser +      - typescript +      - uncss + +  parent-module@1.0.1: +    dependencies: +      callsites: 3.1.0 + +  parse-json@5.2.0: +    dependencies: +      '@babel/code-frame': 7.24.7 +      error-ex: 1.3.2 +      json-parse-even-better-errors: 2.3.1 +      lines-and-columns: 1.2.4 + +  picocolors@1.0.1: {} + +  picomatch@2.3.1: {} + +  postcss-value-parser@4.2.0: {} + +  posthtml-parser@0.10.2: +    dependencies: +      htmlparser2: 7.2.0 + +  posthtml-parser@0.11.0: +    dependencies: +      htmlparser2: 7.2.0 + +  posthtml-render@3.0.0: +    dependencies: +      is-json: 2.0.1 + +  posthtml@0.16.6: +    dependencies: +      posthtml-parser: 0.11.0 +      posthtml-render: 3.0.0 + +  prettier@3.3.3: {} + +  react-error-overlay@6.0.9: {} + +  react-refresh@0.9.0: {} + +  regenerator-runtime@0.13.11: {} + +  resolve-from@4.0.0: {} + +  safe-buffer@5.2.1: {} + +  semver@7.6.3: {} + +  source-map@0.6.1: {} + +  srcset@4.0.0: {} + +  stable@0.1.8: {} + +  supports-color@5.5.0: +    dependencies: +      has-flag: 3.0.0 + +  supports-color@7.2.0: +    dependencies: +      has-flag: 4.0.0 + +  svgo@2.8.0: +    dependencies: +      '@trysound/sax': 0.2.0 +      commander: 7.2.0 +      css-select: 4.3.0 +      css-tree: 1.1.3 +      csso: 4.2.0 +      picocolors: 1.0.1 +      stable: 0.1.8 + +  term-size@2.2.1: {} + +  timsort@0.3.0: {} + +  to-regex-range@5.0.1: +    dependencies: +      is-number: 7.0.0 + +  tslib@2.6.3: {} + +  type-fest@0.20.2: {} + +  typescript@5.5.4: {} + +  update-browserslist-db@1.1.0(browserslist@4.23.3): +    dependencies: +      browserslist: 4.23.3 +      escalade: 3.1.2 +      picocolors: 1.0.1 + +  utility-types@3.11.0: {} + +  weak-lru-cache@1.2.2: {} diff --git a/docker/nginx/sites/www/src/main.ts b/docker/nginx/sites/www/src/main.ts new file mode 100644 index 0000000..2f09deb --- /dev/null +++ b/docker/nginx/sites/www/src/main.ts @@ -0,0 +1,97 @@ +import "./style.css"; + +import { fetchTodos } from "./todos"; + +const happy = "happy" as const; +const angry = "angry" as const; +type Emotion = typeof happy | typeof angry; + +function emotionOpposite(emotion: Emotion): Emotion { +  if (emotion === happy) { +    return angry; +  } else { +    return happy; +  } +} + +function emotionElement(emotion: Emotion): HTMLDivElement { +  return document.querySelector<HTMLDivElement>(`.slogan.${emotion}`)!; +} + +function emotionElementHeight(emotion: Emotion): number { +  return emotionElement(emotion).clientHeight; +} + +function updateBodyTopPadding(emotion: Emotion): void { +  document.body.style.paddingTop = `${emotionElementHeight(emotion)}px`; +} + +const sloganEmotionKey = "sloganEmotion"; + +const savedEmotion = +  (localStorage.getItem(sloganEmotionKey) as Emotion | null) ?? happy; +if (savedEmotion !== happy && savedEmotion !== angry) { +  console.error(`Invalid saved emotion: ${savedEmotion}`); +} + +updateBodyTopPadding(savedEmotion); +// Then we add transition animation. +setTimeout(() => { +  document.body.style.transition = "padding-top 1s"; +}); + +const sloganContainer = document.querySelector( +  ".slogan-container", +) as HTMLDivElement; + +setTimeout(() => { +  sloganContainer.dataset.sloganEmotion = savedEmotion; +}, 500); + +const sloganLoadedPromise = new Promise<void>((resolve) => { +  setTimeout(() => { +    resolve(); +  }, 1500); +}); + +for (const emotion of [happy, angry]) { +  emotionElement(emotion).addEventListener("click", () => { +    const opposite = emotionOpposite(emotion); +    localStorage.setItem(sloganEmotionKey, opposite); +    sloganContainer.dataset.sloganEmotion = opposite; +    updateBodyTopPadding(opposite); +  }); +} + +async function loadTodos(syncWith: Promise<unknown>): Promise<void> { +  const todoMessage = document.getElementById("todo-message")!; +  const todoContainer = document.getElementById("todo-container")!; + +  try { +    const todosPromise = fetchTodos(); +    await syncWith; // Let's wait this first. +    const todos = await todosPromise; +    todos.forEach((item, index) => { +      const { status, title, closed } = item; +      const li = document.createElement("li"); +      li.dataset.status = closed ? "closed" : "open"; +      li.style.animationDelay = `${index * 0.04}s`; +      // The color from api server is kind of ugly at present. +      // li.style.background = color; +      const statusSpan = document.createElement("span"); +      const titleSpan = document.createElement("span"); +      statusSpan.textContent = status; +      titleSpan.textContent = title; +      li.appendChild(statusSpan); +      li.append(" : "); +      li.append(titleSpan); +      todoContainer.appendChild(li); +    }); +    todoMessage.parentElement!.removeChild(todoMessage); +  } catch (e) { +    todoMessage.style.color = "red"; +    todoMessage.textContent = (e as Error).message; +  } +} + +loadTodos(sloganLoadedPromise); diff --git a/docker/nginx/sites/www/src/mock-todos.ts b/docker/nginx/sites/www/src/mock-todos.ts new file mode 100644 index 0000000..aacb40e --- /dev/null +++ b/docker/nginx/sites/www/src/mock-todos.ts @@ -0,0 +1,126 @@ +/** Grabbed at Tue, 18 Jul 2023 15:30:05 GMT, used as mock data. 🍻 */ + +const todos = [ +  { +    status: "Done", +    title: "All BLOCKed by graduate paper.", +    closed: true, +    color: "green", +  }, +  { +    status: "Done", +    title: "Slogan is not completely visible on phone.", +    closed: true, +    color: "green", +  }, +  { +    status: "Todo", +    title: "Users api.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Todo", +    title: "Secrets api.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Todo", +    title: "Refactor aio python scripts.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Todo", +    title: "Nginx path redirection.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Todo", +    title: "Make services optional.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Done", +    title: "Optimize code-server.", +    closed: true, +    color: "green", +  }, +  { +    status: "Todo", +    title: "No more alpine.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Done", +    title: "No netease music.", +    closed: true, +    color: "green", +  }, +  { +    status: "Done", +    title: "Draft issue status in www TODOs.", +    closed: true, +    color: "green", +  }, +  { +    status: "Done", +    title: "Re-bootstrap front end.", +    closed: true, +    color: "green", +  }, +  { +    status: "Todo", +    title: "Clean react imports for new jsx usage.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Done", +    title: "i18next backend bug.", +    closed: true, +    color: "green", +  }, +  { +    status: "Done", +    title: "Organize buttons.", +    closed: true, +    color: "green", +  }, +  { +    status: "Done", +    title: "Fix dialog typo.", +    closed: true, +    color: "green", +  }, +  { +    status: "Todo", +    title: "Organize OperationDialog.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Todo", +    title: "New palette api.", +    closed: false, +    color: "blue", +  }, +  { +    status: "Todo", +    title: "No Docker!!!", +    closed: false, +    color: "blue", +  }, +  { +    status: "Done", +    title: "Improve animation of slogan.", +    closed: true, +    color: "green", +  }, +]; + +export default todos; diff --git a/docker/nginx/sites/www/src/style.css b/docker/nginx/sites/www/src/style.css new file mode 100644 index 0000000..1f9c9ed --- /dev/null +++ b/docker/nginx/sites/www/src/style.css @@ -0,0 +1,185 @@ +html { +  width: 100%; +  line-height: 1.5; +  font-family: ui-sans-serif; +} + +body { +  width: 100%; +  margin: 0; +  box-sizing: border-box; +} + +a.mono { +  font-family: ui-monospace; +} + +.h-note { +  font-size: 0.6em; +  color: gray; +} + +@keyframes article-enter { +  from { +    opacity: 0; +    transform: translateY(100px); +  } + +  to { +    opacity: 1; +    transform: translateY(0); +  } +} + +:root { +  --main-article-horizontal-padding: 1em; +  --main-article-horizontal-margin-shrink: -1em; + +  --im-me: deepskyblue; +  --im-happy: dodgerblue; +  --im-angry: orangered; +  --im-good: hsl(120, 85%, 85%); +  --im-active: hsl(20, 85%, 85%); +} + +@media (min-width: 576px) { +  :root { +    --main-article-horizontal-padding: 2em; +    --main-article-horizontal-margin-shrink: -2em; +  } +} + +#main-article { +  padding: 0 var(--main-article-horizontal-padding); +  animation: article-enter 1s; +} + +#title { +  font-size: 2em; +} + +@keyframes title-name-enter { +  from { +    background-color: white; +  } + +  to { +    background-color: var(--im-me); +  } +} + +#title-name { +  font-family: ui-monospace; +  border-radius: 8px; +  background-color: white; +  animation: title-name-enter 3s 2s forwards; +} + +@keyframes avatar-enter { +  from { +    opacity: 0; +    transform: translateX(calc(100% + var(--main-article-horizontal-padding))); +  } + +  to { +    opacity: 1; +    transform: translateX(0); +  } +} + +#avatar { +  float: right; +  transform: translateX(calc(100% + var(--main-article-horizontal-padding))); +  animation: avatar-enter 0.5s 1s forwards; +} + +.slogan-container { +  width: 100%; +  position: fixed; +  z-index: 1; +  top: 0; +} + +.slogan { +  width: 100%; +  padding: 0.5em 1em; +  text-align: center; +  box-sizing: border-box; +  position: absolute; +  transform: translateY(-100%); +  transition: transform 1s; +} + +.slogan.happy { +  background-color: var(--im-happy); +} + +.slogan.angry { +  background-color: var(--im-angry); +} + +.slogan-container[data-slogan-emotion="happy"] .slogan.happy { +  transform: translateY(0); +} + +.slogan-container[data-slogan-emotion="angry"] .slogan.angry { +  transform: translateY(0); +} + +.slogan-text { +  display: inline-block; +  text-align: initial; +  color: white; +  font-size: 1.2em; +} + +#todo-container { +  list-style: none; +  margin-block: 0; +  padding-inline: 0; +} + +@keyframes todo-enter { +  from { +    opacity: 0; +    transform: translateX(-100%); +  } + +  to { +    opacity: 1; +    transform: translateX(0); +  } +} + +#todo-container li { +  margin: 0 var(--main-article-horizontal-margin-shrink); +  padding: 0.25em 3em; +  transform: translateX(-100%); +  animation: todo-enter 1s forwards; +} + +#todo-container li[data-status="closed"] { +  background-color: var(--im-good); +} + +#todo-container li[data-status="open"] { +  background-color: var(--im-active); +} + +.friend-link { +  display: inline-block; +} + +.friend-img { +  display: block; +  width: 80px; +  height: 80px; +  object-fit: cover; +  border-radius: 50%; +} + +.friend-name { +  display: block; +  text-align: center; +  font-size: 1.2em; +} diff --git a/docker/nginx/sites/www/src/todos.ts b/docker/nginx/sites/www/src/todos.ts new file mode 100644 index 0000000..b69f524 --- /dev/null +++ b/docker/nginx/sites/www/src/todos.ts @@ -0,0 +1,29 @@ +export interface Todo { +  status: string; +  title: string; +  closed: boolean; +  color: string; +} + +export async function fetchTodos(): Promise<Todo[]> { +  console.log("Try to fetch TODOs from server."); + +  if (process.env.NODE_ENV !== "production") { +    console.log("YaY! We are developers. 🍻 Use mock TODOs. (After 2s)"); +    // await new Promise((resolve) => setTimeout(resolve, 2000)); +    return (await import("./mock-todos")).default; +  } else { +    const res = await fetch("/api/todos"); +    const body: Todo[] = await res.json(); + +    if (res.status !== 200) { +      console.error( +        `Failed to get TODOs. Status: ${res.status}. Body: ${body}`, +      ); +      throw new Error( +        "Failed to fetch TODOs. (Maybe due to rate limit. Please try later.)", +      ); +    } +    return body; +  } +} diff --git a/docker/nginx/sites/www/tsconfig.json b/docker/nginx/sites/www/tsconfig.json new file mode 100644 index 0000000..9d1434c --- /dev/null +++ b/docker/nginx/sites/www/tsconfig.json @@ -0,0 +1,19 @@ +{ +    "extends": "@tsconfig/recommended/tsconfig.json", +    "compilerOptions": { +        "lib": [ +            "ESNext", +            "DOM", +            "DOM.Iterable" +        ], +        "types": [ +            "parcel-env" +        ], +        "target": "ESNext", +        "module": "ESNext", +        "moduleResolution": "bundler", +        "resolveJsonModule": true, +        "isolatedModules": true, +        "noEmit": true +    } +}
\ No newline at end of file  | 
