├── .eslintrc.cjs ├── .github ├── deployment-branches.png └── workflows │ └── github-pages-deploy.yml ├── .gitignore ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── public └── tonconnect-manifest.json ├── src ├── components │ ├── App.tsx │ ├── DisplayData │ │ ├── DisplayData.css │ │ └── DisplayData.tsx │ ├── Link │ │ ├── Link.css │ │ └── Link.tsx │ ├── Page │ │ ├── Page.css │ │ └── Page.tsx │ ├── RGB │ │ ├── RGB.css │ │ └── RGB.tsx │ └── Root.tsx ├── css │ ├── bem.ts │ └── classnames.ts ├── helpers │ └── publicUrl.ts ├── index.css ├── index.tsx ├── init.ts ├── mockEnv.ts ├── navigation │ └── routes.tsx ├── pages │ ├── IndexPage │ │ ├── IndexPage.css │ │ └── IndexPage.tsx │ ├── InitDataPage │ │ ├── InitDataPage.css │ │ └── InitDataPage.tsx │ ├── LaunchParamsPage.tsx │ ├── ThemeParamsPage.tsx │ └── TonConnectPage │ │ ├── TonConnectPage.css │ │ └── TonConnectPage.tsx └── tonconnect │ ├── TonConnectButton.tsx │ ├── TonConnectUIContext.ts │ ├── TonConnectUIProvider.tsx │ ├── useTonConnectUI.ts │ └── useTonWallet.ts ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true, 4 | es2021: true 5 | }, 6 | extends: [ 7 | 'eslint:recommended', 8 | 'plugin:@typescript-eslint/recommended', 9 | 'plugin:solid/typescript' 10 | ], 11 | overrides: [ 12 | { 13 | env: { 14 | node: true 15 | }, 16 | files: [ 17 | '.eslintrc.{js,cjs}' 18 | ], 19 | parserOptions: { 20 | sourceType: 'script' 21 | } 22 | } 23 | ], 24 | parser: '@typescript-eslint/parser', 25 | parserOptions: { 26 | ecmaVersion: 'latest', 27 | sourceType: 'module' 28 | }, 29 | plugins: [ 30 | '@typescript-eslint' 31 | ], 32 | rules: {} 33 | }; 34 | -------------------------------------------------------------------------------- /.github/deployment-branches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Telegram-Mini-Apps/solidjs-template/a373a15528d5cbb4c7a99d966c14869e051ca3e2/.github/deployment-branches.png -------------------------------------------------------------------------------- /.github/workflows/github-pages-deploy.yml: -------------------------------------------------------------------------------- 1 | # Simple workflow for deploying static content to GitHub Pages 2 | name: Deploy static content to Pages 3 | 4 | on: 5 | # Runs on pushes targeting the default branch 6 | push: 7 | branches: ['master'] 8 | 9 | # Allows you to run this workflow manually from the Actions tab 10 | workflow_dispatch: 11 | 12 | # Sets the GITHUB_TOKEN permissions to allow deployment to GitHub Pages 13 | permissions: 14 | contents: read 15 | pages: write 16 | id-token: write 17 | 18 | # Allow one concurrent deployment 19 | concurrency: 20 | group: 'pages' 21 | cancel-in-progress: true 22 | 23 | jobs: 24 | # Single deploy job since we're just deploying 25 | deploy: 26 | environment: 27 | name: github-pages 28 | url: ${{ steps.deployment.outputs.page_url }} 29 | runs-on: ubuntu-latest 30 | steps: 31 | - name: Checkout 32 | uses: actions/checkout@v4 33 | 34 | - name: Setup node 35 | uses: actions/setup-node@v3 36 | with: 37 | node-version: 18 38 | registry-url: 'https://registry.npmjs.org' 39 | 40 | - name: Install pnpm 41 | uses: pnpm/action-setup@v2 42 | id: pnpm-install 43 | with: 44 | version: 8 45 | run_install: true 46 | 47 | - name: Build 48 | run: pnpm run build 49 | 50 | - name: Setup Pages 51 | uses: actions/configure-pages@v3 52 | 53 | - name: Upload artifact 54 | uses: actions/upload-pages-artifact@v2 55 | with: 56 | # Upload dist repository 57 | path: './dist' 58 | 59 | - name: Deploy to GitHub Pages 60 | id: deployment 61 | uses: actions/deploy-pages@v2 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.pem 3 | node_modules 4 | dist -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Telegram Mini Apps Solid.js Template 2 | 3 | This template demonstrates how developers can implement a single-page 4 | application on the Telegram Mini Apps platform using the following technologies 5 | and libraries: 6 | 7 | - [Solid](https://solidjs.com/) 8 | - [TypeScript](https://www.typescriptlang.org/) 9 | - [TON Connect](https://docs.ton.org/develop/dapps/ton-connect/overview) 10 | - [@tma.js SDK](https://docs.telegram-mini-apps.com/packages/tma-js-sdk) 11 | - [Vite](https://vitejs.dev/) 12 | 13 | > This boilerplate was created using [pnpm](https://pnpm.io/). Therefore, it is 14 | > required to use it for this project as well. 15 | 16 | ## Install Dependencies 17 | 18 | If you have just cloned this template, you should install the project 19 | dependencies using the command: 20 | 21 | ```Bash 22 | pnpm install 23 | ``` 24 | 25 | ## Scripts 26 | 27 | This project contains the following scripts: 28 | 29 | - `dev`. Runs the application in development mode. 30 | - `dev:https`. Runs the application in development mode using locally created valid 31 | SSL-certificates. 32 | - `build`. Builds the application for production. 33 | - `lint`. Runs [eslint](https://eslint.org/) to ensure the code quality meets 34 | the required 35 | standards. 36 | - `deploy`. Deploys the application to GitHub Pages. 37 | 38 | To run a script, use the `pnpm run` command: 39 | 40 | ```Bash 41 | pnpm run {script} 42 | # Example: pnpm run build 43 | ``` 44 | 45 | ## Create Bot and Mini App 46 | 47 | Before you start, make sure you have already created a Telegram Bot. Here is 48 | a [comprehensive guide](https://docs.telegram-mini-apps.com/platform/creating-new-app) 49 | on how to do it. 50 | 51 | ## Run 52 | 53 | Although Mini Apps are designed to be opened 54 | within [Telegram applications](https://docs.telegram-mini-apps.com/platform/about#supported-applications), 55 | you can still develop and test them outside of Telegram during the development 56 | process. 57 | 58 | To run the application in the development mode, use the `dev` script: 59 | 60 | ```bash 61 | npm run dev:https 62 | ``` 63 | 64 | > [!NOTE] 65 | > As long as we use [vite-plugin-mkcert](https://www.npmjs.com/package/vite-plugin-mkcert), 66 | > launching the dev mode for the first time, you may see sudo password request. 67 | > The plugin requires it to properly configure SSL-certificates. To disable the plugin, use 68 | > the `pnpm run dev` command. 69 | 70 | After this, you will see a similar message in your terminal: 71 | 72 | ```bash 73 | VITE v5.2.12 ready in 237 ms 74 | 75 | ➜ Local: https://localhost:5173/solidjs-template 76 | ➜ Network: https://172.18.16.1:5173/solidjs-template 77 | ➜ Network: https://172.19.32.1:5173/solidjs-template 78 | ➜ Network: https://192.168.0.171:5173/solidjs-template 79 | ➜ press h + enter to show help 80 | ``` 81 | 82 | Here, you can see the `Local` link, available locally, and `Network` links 83 | accessible to all devices in the same network with the current device. 84 | 85 | To view the application, you need to open the `Local` 86 | link (`https://localhost:5173/solidjs-template` in this example) in your 87 | browser. 88 | 89 | It is important to note that some libraries in this template, such as 90 | `@tma.js/sdk-solid`, are not intended for use outside of Telegram. 91 | 92 | Nevertheless, they appear to function properly. This is because the 93 | `src/mockEnv.ts` file, which is imported in the application's entry point ( 94 | `src/index.ts`), employs the `mockTelegramEnv` function to simulate the Telegram 95 | environment. This trick convinces the application that it is running in a 96 | Telegram-based environment. Therefore, be cautious not to use this function in 97 | production mode unless you fully understand its implications. 98 | 99 | > [!WARNING] 100 | > Because we are using self-signed SSL certificates, the Android and iOS 101 | > Telegram applications will not be able to display the application. These 102 | > operating systems enforce stricter security measures, preventing the Mini App 103 | > from loading. To address this issue, refer to 104 | > [this guide](https://docs.telegram-mini-apps.com/platform/getting-app-link#remote). 105 | 106 | ## Deploy 107 | 108 | This boilerplate uses GitHub Pages as the way to host the application 109 | externally. GitHub Pages provides a CDN which will let your users receive the 110 | application rapidly. Alternatively, you could 111 | use such services as [Heroku](https://www.heroku.com/) 112 | or [Vercel](https://vercel.com). 113 | 114 | ### Manual Deployment 115 | 116 | This boilerplate uses the [gh-pages](https://www.npmjs.com/package/gh-pages) 117 | tool, which allows deploying your application right from your PC. 118 | 119 | #### Configuring 120 | 121 | Before running the deployment process, ensure that you have done the following: 122 | 123 | 1. Replaced the `homepage` value in `package.json`. The GitHub Pages deploy tool 124 | uses this value to 125 | determine the related GitHub project. 126 | 2. Replaced the `base` value in `vite.config.ts` and have set it to the name of 127 | your GitHub 128 | repository. Vite will use this value when creating paths to static assets. 129 | 130 | For instance, if your GitHub username is `telegram-mini-apps` and the repository 131 | name is `is-awesome`, the value in the `homepage` field should be the following: 132 | 133 | ```json 134 | { 135 | "homepage": "https://telegram-mini-apps.github.io/is-awesome" 136 | } 137 | ``` 138 | 139 | And `vite.config.ts` should have this content: 140 | 141 | ```ts 142 | export default defineConfig({ 143 | base: '/is-awesome/', 144 | // ... 145 | }); 146 | ``` 147 | 148 | You can find more information on configuring the deployment in the `gh-pages` 149 | [docs](https://github.com/tschaub/gh-pages?tab=readme-ov-file#github-pages-project-sites). 150 | 151 | #### Before Deploying 152 | 153 | Before deploying the application, make sure that you've built it and going to 154 | deploy the fresh static files: 155 | 156 | ```bash 157 | npm run build 158 | ``` 159 | 160 | Then, run the deployment process, using the `deploy` script: 161 | 162 | ```Bash 163 | npm run deploy 164 | ``` 165 | 166 | After the deployment completed successfully, visit the page with data according 167 | to your username and repository name. Here is the page link example using the 168 | data mentioned above: 169 | https://telegram-mini-apps.github.io/is-awesome 170 | 171 | ### GitHub Workflow 172 | 173 | To simplify the deployment process, this template includes a 174 | pre-configured [GitHub workflow](.github/workflows/github-pages-deploy.yml) that 175 | automatically deploys the project when changes are pushed to the `master` 176 | branch. 177 | 178 | To enable this workflow, create a new environment (or edit the existing one) in 179 | the GitHub repository settings and name it `github-pages`. Then, add the 180 | `master` branch to the list of deployment branches. 181 | 182 | You can find the environment settings using this 183 | URL: `https://github.com/{username}/{repository}/settings/environments`. 184 | 185 | ![img.png](.github/deployment-branches.png) 186 | 187 | In case, you don't want to do it automatically, or you don't use GitHub as the 188 | project codebase, remove the `.github` directory. 189 | 190 | ### GitHub Web Interface 191 | 192 | Alternatively, developers can configure automatic deployment using the GitHub 193 | web interface. To do this, follow the link: 194 | `https://github.com/{username}/{repository}/settings/pages`. 195 | 196 | ## TON Connect 197 | 198 | This boilerplate utilizes 199 | the [TON Connect](https://docs.ton.org/develop/dapps/ton-connect/overview) 200 | project to demonstrate how developers can integrate functionality related to TON 201 | cryptocurrency. 202 | 203 | The TON Connect manifest used in this boilerplate is stored in the `public` 204 | folder, where all publicly accessible static files are located. Remember 205 | to [configure](https://docs.ton.org/develop/dapps/ton-connect/manifest) this 206 | file according to your project's information. 207 | 208 | ## Useful Links 209 | 210 | - [Platform documentation](https://docs.telegram-mini-apps.com/) 211 | - [@tma.js/sdk-solid documentation](https://docs.telegram-mini-apps.com/packages/tma-js-sdk-solid) 212 | - [Telegram developers community chat](https://t.me/devs_cis) 213 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + Solid + TS 8 | 9 | 10 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "solidjs-template", 3 | "private": true, 4 | "version": "0.0.2", 5 | "type": "module", 6 | "main": "index.js", 7 | "homepage": "https://telegram-mini-apps.github.io/solidjs-template", 8 | "scripts": { 9 | "deploy": "gh-pages -d dist", 10 | "dev": "vite", 11 | "dev:https": "cross-env HTTPS=true vite", 12 | "build": "tsc --noEmit && vite build", 13 | "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 14 | "lint:fix": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --fix", 15 | "preview": "vite preview", 16 | "predeploy": "pnpm run build" 17 | }, 18 | "publishConfig": { 19 | "access": "public" 20 | }, 21 | "dependencies": { 22 | "@solidjs/router": "^0.13.6", 23 | "@tma.js/sdk-solid": "^3.0.7", 24 | "@tonconnect/ui": "^2.0.5", 25 | "eruda": "^3.0.1", 26 | "solid-js": "^1.9.9" 27 | }, 28 | "devDependencies": { 29 | "@eslint/js": "^9.2.0", 30 | "@types/node": "^20.12.5", 31 | "@typescript-eslint/eslint-plugin": "^7.8.0", 32 | "@typescript-eslint/parser": "^7.8.0", 33 | "@vitejs/plugin-basic-ssl": "^1.1.0", 34 | "cross-env": "^7.0.3", 35 | "eslint": "^8.57.0", 36 | "eslint-plugin-solid": "^0.14.0", 37 | "gh-pages": "^6.1.1", 38 | "globals": "^15.2.0", 39 | "solid-devtools": "^0.30.1", 40 | "typescript": "^5.4.4", 41 | "typescript-eslint": "^7.8.0", 42 | "vite": "^5.2.11", 43 | "vite-plugin-mkcert": "^1.17.6", 44 | "vite-plugin-solid": "^2.10.2", 45 | "vite-tsconfig-paths": "^4.3.2" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@solidjs/router': 12 | specifier: ^0.13.6 13 | version: 0.13.6(solid-js@1.9.9) 14 | '@tma.js/sdk-solid': 15 | specifier: ^3.0.7 16 | version: 3.0.7(solid-js@1.9.9)(typescript@5.4.4) 17 | '@tonconnect/ui': 18 | specifier: ^2.0.5 19 | version: 2.0.5 20 | eruda: 21 | specifier: ^3.0.1 22 | version: 3.0.1 23 | solid-js: 24 | specifier: ^1.9.9 25 | version: 1.9.9 26 | devDependencies: 27 | '@eslint/js': 28 | specifier: ^9.2.0 29 | version: 9.2.0 30 | '@types/node': 31 | specifier: ^20.12.5 32 | version: 20.12.5 33 | '@typescript-eslint/eslint-plugin': 34 | specifier: ^7.8.0 35 | version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.4))(eslint@8.57.0)(typescript@5.4.4) 36 | '@typescript-eslint/parser': 37 | specifier: ^7.8.0 38 | version: 7.8.0(eslint@8.57.0)(typescript@5.4.4) 39 | '@vitejs/plugin-basic-ssl': 40 | specifier: ^1.1.0 41 | version: 1.1.0(vite@5.2.11(@types/node@20.12.5)) 42 | cross-env: 43 | specifier: ^7.0.3 44 | version: 7.0.3 45 | eslint: 46 | specifier: ^8.57.0 47 | version: 8.57.0 48 | eslint-plugin-solid: 49 | specifier: ^0.14.0 50 | version: 0.14.0(eslint@8.57.0)(typescript@5.4.4) 51 | gh-pages: 52 | specifier: ^6.1.1 53 | version: 6.1.1 54 | globals: 55 | specifier: ^15.2.0 56 | version: 15.2.0 57 | solid-devtools: 58 | specifier: ^0.30.1 59 | version: 0.30.1(solid-js@1.9.9)(vite@5.2.11(@types/node@20.12.5)) 60 | typescript: 61 | specifier: ^5.4.4 62 | version: 5.4.4 63 | typescript-eslint: 64 | specifier: ^7.8.0 65 | version: 7.8.0(eslint@8.57.0)(typescript@5.4.4) 66 | vite: 67 | specifier: ^5.2.11 68 | version: 5.2.11(@types/node@20.12.5) 69 | vite-plugin-mkcert: 70 | specifier: ^1.17.6 71 | version: 1.17.6(vite@5.2.11(@types/node@20.12.5)) 72 | vite-plugin-solid: 73 | specifier: ^2.10.2 74 | version: 2.10.2(solid-js@1.9.9)(vite@5.2.11(@types/node@20.12.5)) 75 | vite-tsconfig-paths: 76 | specifier: ^4.3.2 77 | version: 4.3.2(typescript@5.4.4)(vite@5.2.11(@types/node@20.12.5)) 78 | 79 | packages: 80 | 81 | '@aashutoshrathi/word-wrap@1.2.6': 82 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 83 | engines: {node: '>=0.10.0'} 84 | 85 | '@ampproject/remapping@2.3.0': 86 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 87 | engines: {node: '>=6.0.0'} 88 | 89 | '@babel/code-frame@7.24.2': 90 | resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} 91 | engines: {node: '>=6.9.0'} 92 | 93 | '@babel/compat-data@7.24.4': 94 | resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} 95 | engines: {node: '>=6.9.0'} 96 | 97 | '@babel/core@7.24.4': 98 | resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} 99 | engines: {node: '>=6.9.0'} 100 | 101 | '@babel/generator@7.24.4': 102 | resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} 103 | engines: {node: '>=6.9.0'} 104 | 105 | '@babel/helper-compilation-targets@7.23.6': 106 | resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 107 | engines: {node: '>=6.9.0'} 108 | 109 | '@babel/helper-environment-visitor@7.22.20': 110 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 111 | engines: {node: '>=6.9.0'} 112 | 113 | '@babel/helper-function-name@7.23.0': 114 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 115 | engines: {node: '>=6.9.0'} 116 | 117 | '@babel/helper-hoist-variables@7.22.5': 118 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 119 | engines: {node: '>=6.9.0'} 120 | 121 | '@babel/helper-module-imports@7.18.6': 122 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 123 | engines: {node: '>=6.9.0'} 124 | 125 | '@babel/helper-module-imports@7.24.3': 126 | resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} 127 | engines: {node: '>=6.9.0'} 128 | 129 | '@babel/helper-module-transforms@7.23.3': 130 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 131 | engines: {node: '>=6.9.0'} 132 | peerDependencies: 133 | '@babel/core': ^7.0.0 134 | 135 | '@babel/helper-plugin-utils@7.24.0': 136 | resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} 137 | engines: {node: '>=6.9.0'} 138 | 139 | '@babel/helper-simple-access@7.22.5': 140 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 141 | engines: {node: '>=6.9.0'} 142 | 143 | '@babel/helper-split-export-declaration@7.22.6': 144 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 145 | engines: {node: '>=6.9.0'} 146 | 147 | '@babel/helper-string-parser@7.24.1': 148 | resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} 149 | engines: {node: '>=6.9.0'} 150 | 151 | '@babel/helper-validator-identifier@7.22.20': 152 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 153 | engines: {node: '>=6.9.0'} 154 | 155 | '@babel/helper-validator-option@7.23.5': 156 | resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 157 | engines: {node: '>=6.9.0'} 158 | 159 | '@babel/helpers@7.24.4': 160 | resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} 161 | engines: {node: '>=6.9.0'} 162 | 163 | '@babel/highlight@7.24.2': 164 | resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} 165 | engines: {node: '>=6.9.0'} 166 | 167 | '@babel/parser@7.24.4': 168 | resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} 169 | engines: {node: '>=6.0.0'} 170 | hasBin: true 171 | 172 | '@babel/plugin-syntax-jsx@7.24.1': 173 | resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} 174 | engines: {node: '>=6.9.0'} 175 | peerDependencies: 176 | '@babel/core': ^7.0.0-0 177 | 178 | '@babel/plugin-syntax-typescript@7.24.1': 179 | resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} 180 | engines: {node: '>=6.9.0'} 181 | peerDependencies: 182 | '@babel/core': ^7.0.0-0 183 | 184 | '@babel/template@7.24.0': 185 | resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} 186 | engines: {node: '>=6.9.0'} 187 | 188 | '@babel/traverse@7.24.1': 189 | resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} 190 | engines: {node: '>=6.9.0'} 191 | 192 | '@babel/types@7.24.0': 193 | resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} 194 | engines: {node: '>=6.9.0'} 195 | 196 | '@esbuild/aix-ppc64@0.20.2': 197 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 198 | engines: {node: '>=12'} 199 | cpu: [ppc64] 200 | os: [aix] 201 | 202 | '@esbuild/android-arm64@0.20.2': 203 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 204 | engines: {node: '>=12'} 205 | cpu: [arm64] 206 | os: [android] 207 | 208 | '@esbuild/android-arm@0.20.2': 209 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 210 | engines: {node: '>=12'} 211 | cpu: [arm] 212 | os: [android] 213 | 214 | '@esbuild/android-x64@0.20.2': 215 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 216 | engines: {node: '>=12'} 217 | cpu: [x64] 218 | os: [android] 219 | 220 | '@esbuild/darwin-arm64@0.20.2': 221 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 222 | engines: {node: '>=12'} 223 | cpu: [arm64] 224 | os: [darwin] 225 | 226 | '@esbuild/darwin-x64@0.20.2': 227 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 228 | engines: {node: '>=12'} 229 | cpu: [x64] 230 | os: [darwin] 231 | 232 | '@esbuild/freebsd-arm64@0.20.2': 233 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 234 | engines: {node: '>=12'} 235 | cpu: [arm64] 236 | os: [freebsd] 237 | 238 | '@esbuild/freebsd-x64@0.20.2': 239 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 240 | engines: {node: '>=12'} 241 | cpu: [x64] 242 | os: [freebsd] 243 | 244 | '@esbuild/linux-arm64@0.20.2': 245 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 246 | engines: {node: '>=12'} 247 | cpu: [arm64] 248 | os: [linux] 249 | 250 | '@esbuild/linux-arm@0.20.2': 251 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 252 | engines: {node: '>=12'} 253 | cpu: [arm] 254 | os: [linux] 255 | 256 | '@esbuild/linux-ia32@0.20.2': 257 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 258 | engines: {node: '>=12'} 259 | cpu: [ia32] 260 | os: [linux] 261 | 262 | '@esbuild/linux-loong64@0.20.2': 263 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 264 | engines: {node: '>=12'} 265 | cpu: [loong64] 266 | os: [linux] 267 | 268 | '@esbuild/linux-mips64el@0.20.2': 269 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 270 | engines: {node: '>=12'} 271 | cpu: [mips64el] 272 | os: [linux] 273 | 274 | '@esbuild/linux-ppc64@0.20.2': 275 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 276 | engines: {node: '>=12'} 277 | cpu: [ppc64] 278 | os: [linux] 279 | 280 | '@esbuild/linux-riscv64@0.20.2': 281 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 282 | engines: {node: '>=12'} 283 | cpu: [riscv64] 284 | os: [linux] 285 | 286 | '@esbuild/linux-s390x@0.20.2': 287 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 288 | engines: {node: '>=12'} 289 | cpu: [s390x] 290 | os: [linux] 291 | 292 | '@esbuild/linux-x64@0.20.2': 293 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 294 | engines: {node: '>=12'} 295 | cpu: [x64] 296 | os: [linux] 297 | 298 | '@esbuild/netbsd-x64@0.20.2': 299 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 300 | engines: {node: '>=12'} 301 | cpu: [x64] 302 | os: [netbsd] 303 | 304 | '@esbuild/openbsd-x64@0.20.2': 305 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 306 | engines: {node: '>=12'} 307 | cpu: [x64] 308 | os: [openbsd] 309 | 310 | '@esbuild/sunos-x64@0.20.2': 311 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 312 | engines: {node: '>=12'} 313 | cpu: [x64] 314 | os: [sunos] 315 | 316 | '@esbuild/win32-arm64@0.20.2': 317 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 318 | engines: {node: '>=12'} 319 | cpu: [arm64] 320 | os: [win32] 321 | 322 | '@esbuild/win32-ia32@0.20.2': 323 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 324 | engines: {node: '>=12'} 325 | cpu: [ia32] 326 | os: [win32] 327 | 328 | '@esbuild/win32-x64@0.20.2': 329 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 330 | engines: {node: '>=12'} 331 | cpu: [x64] 332 | os: [win32] 333 | 334 | '@eslint-community/eslint-utils@4.4.0': 335 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 336 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 337 | peerDependencies: 338 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 339 | 340 | '@eslint-community/regexpp@4.10.0': 341 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 342 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 343 | 344 | '@eslint/eslintrc@2.1.4': 345 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 346 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 347 | 348 | '@eslint/js@8.57.0': 349 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 350 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 351 | 352 | '@eslint/js@9.2.0': 353 | resolution: {integrity: sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==} 354 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 355 | 356 | '@humanwhocodes/config-array@0.11.14': 357 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 358 | engines: {node: '>=10.10.0'} 359 | 360 | '@humanwhocodes/module-importer@1.0.1': 361 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 362 | engines: {node: '>=12.22'} 363 | 364 | '@humanwhocodes/object-schema@2.0.3': 365 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 366 | 367 | '@jridgewell/gen-mapping@0.3.5': 368 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 369 | engines: {node: '>=6.0.0'} 370 | 371 | '@jridgewell/resolve-uri@3.1.2': 372 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 373 | engines: {node: '>=6.0.0'} 374 | 375 | '@jridgewell/set-array@1.2.1': 376 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 377 | engines: {node: '>=6.0.0'} 378 | 379 | '@jridgewell/sourcemap-codec@1.4.15': 380 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 381 | 382 | '@jridgewell/trace-mapping@0.3.25': 383 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 384 | 385 | '@nodelib/fs.scandir@2.1.5': 386 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 387 | engines: {node: '>= 8'} 388 | 389 | '@nodelib/fs.stat@2.0.5': 390 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 391 | engines: {node: '>= 8'} 392 | 393 | '@nodelib/fs.walk@1.2.8': 394 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 395 | engines: {node: '>= 8'} 396 | 397 | '@nothing-but/utils@0.12.1': 398 | resolution: {integrity: sha512-1qZU1Q5El0IjE7JT/ucvJNzdr2hL3W8Rm27xNf1p6gb3Nw8pGnZmxp6/GEW9h+I1k1cICxXNq25hBwknTQ7yhg==} 399 | 400 | '@octokit/auth-token@4.0.0': 401 | resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} 402 | engines: {node: '>= 18'} 403 | 404 | '@octokit/core@5.2.0': 405 | resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} 406 | engines: {node: '>= 18'} 407 | 408 | '@octokit/endpoint@9.0.5': 409 | resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} 410 | engines: {node: '>= 18'} 411 | 412 | '@octokit/graphql@7.1.0': 413 | resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} 414 | engines: {node: '>= 18'} 415 | 416 | '@octokit/openapi-types@22.2.0': 417 | resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} 418 | 419 | '@octokit/plugin-paginate-rest@11.3.1': 420 | resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} 421 | engines: {node: '>= 18'} 422 | peerDependencies: 423 | '@octokit/core': '5' 424 | 425 | '@octokit/plugin-request-log@4.0.1': 426 | resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} 427 | engines: {node: '>= 18'} 428 | peerDependencies: 429 | '@octokit/core': '5' 430 | 431 | '@octokit/plugin-rest-endpoint-methods@13.2.2': 432 | resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} 433 | engines: {node: '>= 18'} 434 | peerDependencies: 435 | '@octokit/core': ^5 436 | 437 | '@octokit/request-error@5.1.0': 438 | resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} 439 | engines: {node: '>= 18'} 440 | 441 | '@octokit/request@8.4.0': 442 | resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} 443 | engines: {node: '>= 18'} 444 | 445 | '@octokit/rest@20.1.1': 446 | resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} 447 | engines: {node: '>= 18'} 448 | 449 | '@octokit/types@13.6.1': 450 | resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==} 451 | 452 | '@rollup/rollup-android-arm-eabi@4.14.1': 453 | resolution: {integrity: sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==} 454 | cpu: [arm] 455 | os: [android] 456 | 457 | '@rollup/rollup-android-arm64@4.14.1': 458 | resolution: {integrity: sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==} 459 | cpu: [arm64] 460 | os: [android] 461 | 462 | '@rollup/rollup-darwin-arm64@4.14.1': 463 | resolution: {integrity: sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==} 464 | cpu: [arm64] 465 | os: [darwin] 466 | 467 | '@rollup/rollup-darwin-x64@4.14.1': 468 | resolution: {integrity: sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==} 469 | cpu: [x64] 470 | os: [darwin] 471 | 472 | '@rollup/rollup-linux-arm-gnueabihf@4.14.1': 473 | resolution: {integrity: sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==} 474 | cpu: [arm] 475 | os: [linux] 476 | 477 | '@rollup/rollup-linux-arm64-gnu@4.14.1': 478 | resolution: {integrity: sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==} 479 | cpu: [arm64] 480 | os: [linux] 481 | 482 | '@rollup/rollup-linux-arm64-musl@4.14.1': 483 | resolution: {integrity: sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==} 484 | cpu: [arm64] 485 | os: [linux] 486 | 487 | '@rollup/rollup-linux-powerpc64le-gnu@4.14.1': 488 | resolution: {integrity: sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==} 489 | cpu: [ppc64le] 490 | os: [linux] 491 | 492 | '@rollup/rollup-linux-riscv64-gnu@4.14.1': 493 | resolution: {integrity: sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==} 494 | cpu: [riscv64] 495 | os: [linux] 496 | 497 | '@rollup/rollup-linux-s390x-gnu@4.14.1': 498 | resolution: {integrity: sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==} 499 | cpu: [s390x] 500 | os: [linux] 501 | 502 | '@rollup/rollup-linux-x64-gnu@4.14.1': 503 | resolution: {integrity: sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==} 504 | cpu: [x64] 505 | os: [linux] 506 | 507 | '@rollup/rollup-linux-x64-musl@4.14.1': 508 | resolution: {integrity: sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==} 509 | cpu: [x64] 510 | os: [linux] 511 | 512 | '@rollup/rollup-win32-arm64-msvc@4.14.1': 513 | resolution: {integrity: sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==} 514 | cpu: [arm64] 515 | os: [win32] 516 | 517 | '@rollup/rollup-win32-ia32-msvc@4.14.1': 518 | resolution: {integrity: sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==} 519 | cpu: [ia32] 520 | os: [win32] 521 | 522 | '@rollup/rollup-win32-x64-msvc@4.14.1': 523 | resolution: {integrity: sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==} 524 | cpu: [x64] 525 | os: [win32] 526 | 527 | '@solid-devtools/debugger@0.23.4': 528 | resolution: {integrity: sha512-EfTB1Eo313wztQYGJ4Ec/wE70Ay2d603VCXfT3RlyqO5QfLrQGRHX5NXC07hJpQTJJJ3tbNgzO7+ZKo76MM5uA==} 529 | peerDependencies: 530 | solid-js: ^1.8.0 531 | 532 | '@solid-devtools/shared@0.13.2': 533 | resolution: {integrity: sha512-Y4uaC4EfTVwBR537MZwfaY/eiWAh+hW4mbtnwNuUw/LFmitHSkQhNQTUlLQv/S0chtwrYWQBxvXos1dC7e8R9g==} 534 | peerDependencies: 535 | solid-js: ^1.8.0 536 | 537 | '@solid-primitives/bounds@0.0.118': 538 | resolution: {integrity: sha512-Qj42w8LlnhJ3r/t+t0c0vrdwIvvQMPgjEFGmLiwREaA85ojLbgL9lSBq2tKvljeLCvRVkgj10KEUf+vc99VCIg==} 539 | peerDependencies: 540 | solid-js: ^1.6.12 541 | 542 | '@solid-primitives/cursor@0.0.112': 543 | resolution: {integrity: sha512-TAtU7qD7ipSLSXHnq8FhhosAPVX+dnOCb/ITcGcLlj8e/C9YKcxDhgBHJ3R/d1xDRb5/vO/szJtEz6fnQD311Q==} 544 | peerDependencies: 545 | solid-js: ^1.6.12 546 | 547 | '@solid-primitives/event-bus@1.0.11': 548 | resolution: {integrity: sha512-bSwVA4aI2aNHomSbEroUnisMSyDDXJbrw4U8kFEvrcYdlLrJX5i6QeCFx+vj/zdQQw62KAllrEIyWP8KMpPVnQ==} 549 | peerDependencies: 550 | solid-js: ^1.6.12 551 | 552 | '@solid-primitives/event-listener@2.3.3': 553 | resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} 554 | peerDependencies: 555 | solid-js: ^1.6.12 556 | 557 | '@solid-primitives/keyboard@1.2.8': 558 | resolution: {integrity: sha512-pJtcbkjozS6L1xvTht9rPpyPpX55nAkfBzbFWdf3y0Suwh6qClTibvvObzKOf7uzQ+8aZRDH4LsoGmbTKXtJjQ==} 559 | peerDependencies: 560 | solid-js: ^1.6.12 561 | 562 | '@solid-primitives/media@2.2.8': 563 | resolution: {integrity: sha512-jcwTxjEn07W5KEeQIc0nR+07xRjvsWTf115PIwScCWgo6aPkfW3x74aq7lH5F3mLfb/9SeTn0ixz8fBVel3cHg==} 564 | peerDependencies: 565 | solid-js: ^1.6.12 566 | 567 | '@solid-primitives/platform@0.1.2': 568 | resolution: {integrity: sha512-sSxcZfuUrtxcwV0vdjmGnZQcflACzMfLriVeIIWXKp8hzaS3Or3tO6EFQkTd3L8T5dTq+kTtLvPscXIpL0Wzdg==} 569 | peerDependencies: 570 | solid-js: ^1.6.12 571 | 572 | '@solid-primitives/refs@1.0.8': 573 | resolution: {integrity: sha512-+jIsWG8/nYvhaCoG2Vg6CJOLgTmPKFbaCrNQKWfChalgUf9WrVxWw0CdJb3yX15n5lUcQ0jBo6qYtuVVmBLpBw==} 574 | peerDependencies: 575 | solid-js: ^1.6.12 576 | 577 | '@solid-primitives/resize-observer@2.0.25': 578 | resolution: {integrity: sha512-jVDXkt2MiriYRaz4DYs62185d+6jQ+1DCsR+v7f6XMsIJJuf963qdBRFjtZtKXBaxdPNMyuPeDgf5XQe3EoDJg==} 579 | peerDependencies: 580 | solid-js: ^1.6.12 581 | 582 | '@solid-primitives/rootless@1.4.5': 583 | resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} 584 | peerDependencies: 585 | solid-js: ^1.6.12 586 | 587 | '@solid-primitives/scheduled@1.4.3': 588 | resolution: {integrity: sha512-HfWN5w7b7FEc6VPLBKnnE302h90jsLMuR28Fcf7neRGGf8jBj6wm6/UFQ00VlKexHFMR6KQ2u4VBh5a1ZcqM8g==} 589 | peerDependencies: 590 | solid-js: ^1.6.12 591 | 592 | '@solid-primitives/static-store@0.0.5': 593 | resolution: {integrity: sha512-ssQ+s/wrlFAEE4Zw8GV499yBfvWx7SMm+ZVc11wvao4T5xg9VfXCL9Oa+x4h+vPMvSV/Knv5LrsLiUa+wlJUXQ==} 594 | peerDependencies: 595 | solid-js: ^1.6.12 596 | 597 | '@solid-primitives/static-store@0.0.8': 598 | resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} 599 | peerDependencies: 600 | solid-js: ^1.6.12 601 | 602 | '@solid-primitives/styles@0.0.111': 603 | resolution: {integrity: sha512-1mBxOGAPXmfD5oYCvqjKBDN7SuNjz2qz7RdH7KtsuNLQh6lpuSKadtHnLvru0Y8Vz1InqTJisBIy/6P5kyDmPw==} 604 | peerDependencies: 605 | solid-js: ^1.6.12 606 | 607 | '@solid-primitives/utils@6.2.3': 608 | resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} 609 | peerDependencies: 610 | solid-js: ^1.6.12 611 | 612 | '@solidjs/router@0.13.6': 613 | resolution: {integrity: sha512-CdpFsBYoiJ/FQ4wZIamj3KEFRkmrYu5sVXM6PouNkmSENta1YJamsm9wa/VjaPmkw2RsnDnO0UvZ705v6EgOXQ==} 614 | peerDependencies: 615 | solid-js: ^1.8.6 616 | 617 | '@tma.js/bridge@2.1.3': 618 | resolution: {integrity: sha512-mJPdGP3AgQ10ovW2A/yKdLPqhMt1Mx/uHvXRz1qyyy9L6kQlCojx68ib1Km7jumKdYvljy3470Yhk18V65pcdw==} 619 | 620 | '@tma.js/sdk-solid@3.0.7': 621 | resolution: {integrity: sha512-QYTYNKonFe+OBoCOW3S/7wTDRsyegFBlTCyrFQnqgysYU9U6nU06YGQoKUrFfuGNM04qCByW8cnBiVhXloR3qQ==} 622 | peerDependencies: 623 | solid-js: ^1.0.0 624 | 625 | '@tma.js/sdk@3.0.7': 626 | resolution: {integrity: sha512-5CEHqs3HQTEjls+XLkZ5IS+j9dwVfCnQFoaL3jRwQqISqHDrLYds1h4TLvZ+vROTaAxVyJZtbLA+QorX+TldDw==} 627 | 628 | '@tma.js/signals@1.0.1': 629 | resolution: {integrity: sha512-i2HUuwGqL4BmM5KAklAUhMhlEgUOF+F4nMHHS/zxrmD0upHE/0CiXCEdQxVeeOGN6e2RrKlonA40sDtR6OUDCw==} 630 | 631 | '@tma.js/toolkit@1.0.2': 632 | resolution: {integrity: sha512-HGKYFZuxfbrlUguyoV+q+0ghNWqEYnnI66oI5DH2zSrafA0QyTsMOYXZ95aU+fzKbulf5S+YOVJTnFZQZnqLMQ==} 633 | 634 | '@tma.js/transformers@1.1.1': 635 | resolution: {integrity: sha512-FTzsUXojndg/zk5Ai/lxncc11gxGiI2szdK4tsN36elhig8lPj0gg9uYDlIfyWNM7TCyq2ZWE3jliCz3ofpiiA==} 636 | 637 | '@tma.js/types@1.0.2': 638 | resolution: {integrity: sha512-qs4mi+U1xZmMQBdMhWAo1X4YqUJ/ae0y28s+GNCpQq58bsJo0h8rvyVOB1RwPvXogIY9+yribbZe6z3AIJmsAQ==} 639 | 640 | '@tonconnect/isomorphic-eventsource@0.0.2': 641 | resolution: {integrity: sha512-B4UoIjPi0QkvIzZH5fV3BQLWrqSYABdrzZQSI9sJA9aA+iC0ohOzFwVVGXanlxeDAy1bcvPbb29f6sVUk0UnnQ==} 642 | 643 | '@tonconnect/isomorphic-fetch@0.0.3': 644 | resolution: {integrity: sha512-jIg5nTrDwnite4fXao3dD83eCpTvInTjZon/rZZrIftIegh4XxyVb5G2mpMqXrVGk1e8SVXm3Kj5OtfMplQs0w==} 645 | 646 | '@tonconnect/protocol@2.2.6': 647 | resolution: {integrity: sha512-kyoDz5EqgsycYP+A+JbVsAUYHNT059BCrK+m0pqxykMODwpziuSAXfwAZmHcg8v7NB9VKYbdFY55xKeXOuEd0w==} 648 | 649 | '@tonconnect/sdk@3.0.3': 650 | resolution: {integrity: sha512-ElVre1DPixzQLgLtQIa8Wu5xS8nozlgblZTJhFFPrk82M2rZ+sawyF+LAVwt9wZRN7+htWnJrNz0+bBr4b3geA==} 651 | 652 | '@tonconnect/ui@2.0.5': 653 | resolution: {integrity: sha512-AuVtBqX450lJyJtrJDhBPwPzkhm10QCsnS1/p2CLkzzcMH5b5o50oVp5yuRWw/1eIwJZSLjVplkgA/JjMAlmsA==} 654 | 655 | '@types/babel__core@7.20.5': 656 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 657 | 658 | '@types/babel__generator@7.6.8': 659 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 660 | 661 | '@types/babel__template@7.4.4': 662 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 663 | 664 | '@types/babel__traverse@7.20.5': 665 | resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} 666 | 667 | '@types/estree@1.0.5': 668 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 669 | 670 | '@types/json-schema@7.0.15': 671 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 672 | 673 | '@types/node@20.12.5': 674 | resolution: {integrity: sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==} 675 | 676 | '@types/semver@7.5.8': 677 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 678 | 679 | '@typescript-eslint/eslint-plugin@7.8.0': 680 | resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} 681 | engines: {node: ^18.18.0 || >=20.0.0} 682 | peerDependencies: 683 | '@typescript-eslint/parser': ^7.0.0 684 | eslint: ^8.56.0 685 | typescript: '*' 686 | peerDependenciesMeta: 687 | typescript: 688 | optional: true 689 | 690 | '@typescript-eslint/parser@7.8.0': 691 | resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} 692 | engines: {node: ^18.18.0 || >=20.0.0} 693 | peerDependencies: 694 | eslint: ^8.56.0 695 | typescript: '*' 696 | peerDependenciesMeta: 697 | typescript: 698 | optional: true 699 | 700 | '@typescript-eslint/scope-manager@7.6.0': 701 | resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} 702 | engines: {node: ^18.18.0 || >=20.0.0} 703 | 704 | '@typescript-eslint/scope-manager@7.8.0': 705 | resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} 706 | engines: {node: ^18.18.0 || >=20.0.0} 707 | 708 | '@typescript-eslint/type-utils@7.8.0': 709 | resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} 710 | engines: {node: ^18.18.0 || >=20.0.0} 711 | peerDependencies: 712 | eslint: ^8.56.0 713 | typescript: '*' 714 | peerDependenciesMeta: 715 | typescript: 716 | optional: true 717 | 718 | '@typescript-eslint/types@7.6.0': 719 | resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} 720 | engines: {node: ^18.18.0 || >=20.0.0} 721 | 722 | '@typescript-eslint/types@7.8.0': 723 | resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} 724 | engines: {node: ^18.18.0 || >=20.0.0} 725 | 726 | '@typescript-eslint/typescript-estree@7.6.0': 727 | resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} 728 | engines: {node: ^18.18.0 || >=20.0.0} 729 | peerDependencies: 730 | typescript: '*' 731 | peerDependenciesMeta: 732 | typescript: 733 | optional: true 734 | 735 | '@typescript-eslint/typescript-estree@7.8.0': 736 | resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} 737 | engines: {node: ^18.18.0 || >=20.0.0} 738 | peerDependencies: 739 | typescript: '*' 740 | peerDependenciesMeta: 741 | typescript: 742 | optional: true 743 | 744 | '@typescript-eslint/utils@7.6.0': 745 | resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} 746 | engines: {node: ^18.18.0 || >=20.0.0} 747 | peerDependencies: 748 | eslint: ^8.56.0 749 | 750 | '@typescript-eslint/utils@7.8.0': 751 | resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} 752 | engines: {node: ^18.18.0 || >=20.0.0} 753 | peerDependencies: 754 | eslint: ^8.56.0 755 | 756 | '@typescript-eslint/visitor-keys@7.6.0': 757 | resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} 758 | engines: {node: ^18.18.0 || >=20.0.0} 759 | 760 | '@typescript-eslint/visitor-keys@7.8.0': 761 | resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} 762 | engines: {node: ^18.18.0 || >=20.0.0} 763 | 764 | '@ungap/structured-clone@1.2.0': 765 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 766 | 767 | '@vitejs/plugin-basic-ssl@1.1.0': 768 | resolution: {integrity: sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==} 769 | engines: {node: '>=14.6.0'} 770 | peerDependencies: 771 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 772 | 773 | acorn-jsx@5.3.2: 774 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 775 | peerDependencies: 776 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 777 | 778 | acorn@8.11.3: 779 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 780 | engines: {node: '>=0.4.0'} 781 | hasBin: true 782 | 783 | ajv@6.12.6: 784 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 785 | 786 | ansi-regex@5.0.1: 787 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 788 | engines: {node: '>=8'} 789 | 790 | ansi-styles@3.2.1: 791 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 792 | engines: {node: '>=4'} 793 | 794 | ansi-styles@4.3.0: 795 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 796 | engines: {node: '>=8'} 797 | 798 | argparse@2.0.1: 799 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 800 | 801 | array-union@1.0.2: 802 | resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} 803 | engines: {node: '>=0.10.0'} 804 | 805 | array-union@2.1.0: 806 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 807 | engines: {node: '>=8'} 808 | 809 | array-uniq@1.0.3: 810 | resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} 811 | engines: {node: '>=0.10.0'} 812 | 813 | async@3.2.5: 814 | resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} 815 | 816 | asynckit@0.4.0: 817 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 818 | 819 | axios@1.7.7: 820 | resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} 821 | 822 | babel-plugin-jsx-dom-expressions@0.37.19: 823 | resolution: {integrity: sha512-nef2eLpWBgFggwrYwN6O3dNKn3RnlX6n4DIamNEAeHwp03kVQUaKUiLaEPnHPJHwxie1KwPelyIY9QikU03vUA==} 824 | peerDependencies: 825 | '@babel/core': ^7.20.12 826 | 827 | babel-preset-solid@1.8.16: 828 | resolution: {integrity: sha512-b4HFg/xaKM+H3Tu5iUlZ/43TJOZnhi85xrm3JrXDQ0s4cmtmU37bXXYzb2m55G4QKiFjxLAjvb7sUorPrAMs5w==} 829 | peerDependencies: 830 | '@babel/core': ^7.0.0 831 | 832 | balanced-match@1.0.2: 833 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 834 | 835 | before-after-hook@2.2.3: 836 | resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} 837 | 838 | better-promises@1.0.0: 839 | resolution: {integrity: sha512-gPgL2nRgeSbMIe3QpsYdKR3K0S9OZuphVuos60Eqsw8d/6GivOkyJ5D/zmnolJ6hzh7upnnflBUWUlQh4qpU2A==} 840 | 841 | brace-expansion@1.1.11: 842 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 843 | 844 | brace-expansion@2.0.1: 845 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 846 | 847 | braces@3.0.2: 848 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 849 | engines: {node: '>=8'} 850 | 851 | browserslist@4.23.0: 852 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 853 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 854 | hasBin: true 855 | 856 | callsites@3.1.0: 857 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 858 | engines: {node: '>=6'} 859 | 860 | caniuse-lite@1.0.30001607: 861 | resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} 862 | 863 | chalk@2.4.2: 864 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 865 | engines: {node: '>=4'} 866 | 867 | chalk@4.1.2: 868 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 869 | engines: {node: '>=10'} 870 | 871 | classnames@2.5.1: 872 | resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} 873 | 874 | color-convert@1.9.3: 875 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 876 | 877 | color-convert@2.0.1: 878 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 879 | engines: {node: '>=7.0.0'} 880 | 881 | color-name@1.1.3: 882 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 883 | 884 | color-name@1.1.4: 885 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 886 | 887 | combined-stream@1.0.8: 888 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 889 | engines: {node: '>= 0.8'} 890 | 891 | commander@11.1.0: 892 | resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 893 | engines: {node: '>=16'} 894 | 895 | commondir@1.0.1: 896 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 897 | 898 | concat-map@0.0.1: 899 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 900 | 901 | convert-source-map@2.0.0: 902 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 903 | 904 | cross-env@7.0.3: 905 | resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} 906 | engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} 907 | hasBin: true 908 | 909 | cross-spawn@7.0.3: 910 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 911 | engines: {node: '>= 8'} 912 | 913 | csstype@3.1.3: 914 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 915 | 916 | debug@4.3.4: 917 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 918 | engines: {node: '>=6.0'} 919 | peerDependencies: 920 | supports-color: '*' 921 | peerDependenciesMeta: 922 | supports-color: 923 | optional: true 924 | 925 | debug@4.3.7: 926 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 927 | engines: {node: '>=6.0'} 928 | peerDependencies: 929 | supports-color: '*' 930 | peerDependenciesMeta: 931 | supports-color: 932 | optional: true 933 | 934 | deep-is@0.1.4: 935 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 936 | 937 | deepmerge@4.3.1: 938 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 939 | engines: {node: '>=0.10.0'} 940 | 941 | delayed-stream@1.0.0: 942 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 943 | engines: {node: '>=0.4.0'} 944 | 945 | deprecation@2.3.1: 946 | resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} 947 | 948 | dir-glob@3.0.1: 949 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 950 | engines: {node: '>=8'} 951 | 952 | doctrine@3.0.0: 953 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 954 | engines: {node: '>=6.0.0'} 955 | 956 | electron-to-chromium@1.4.730: 957 | resolution: {integrity: sha512-oJRPo82XEqtQAobHpJIR3zW5YO3sSRRkPz2an4yxi1UvqhsGm54vR/wzTFV74a3soDOJ8CKW7ajOOX5ESzddwg==} 958 | 959 | email-addresses@5.0.0: 960 | resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} 961 | 962 | error-kid@1.0.2: 963 | resolution: {integrity: sha512-Xvq0ZrY/azCbREWKt9E/3mXDF0MkuEVVvHnOKutUhtq2O8pyneEixQ4nSFkA19Xfn+/OVSg//iVG0dxIDj7DIA==} 964 | 965 | eruda@3.0.1: 966 | resolution: {integrity: sha512-6q1Xdwga4JTr1mKSW4mzuWSSbmXgqpm/8Wa1QGFGfCWRjC0bCQjbS4u06M1te1moucIS3hBLlbSTPWYH2W0qbQ==} 967 | 968 | esbuild@0.20.2: 969 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 970 | engines: {node: '>=12'} 971 | hasBin: true 972 | 973 | escalade@3.1.2: 974 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 975 | engines: {node: '>=6'} 976 | 977 | escape-string-regexp@1.0.5: 978 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 979 | engines: {node: '>=0.8.0'} 980 | 981 | escape-string-regexp@4.0.0: 982 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 983 | engines: {node: '>=10'} 984 | 985 | eslint-plugin-solid@0.14.0: 986 | resolution: {integrity: sha512-EY0GJLOZdLynAyBM39WBLJH2bUftGI0KekyzpfxQEhCTuOhXkIRf648P97mQjME3TDaQQbY+ObVXeE2mjfs4FQ==} 987 | engines: {node: '>=12.0.0'} 988 | peerDependencies: 989 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 990 | 991 | eslint-scope@7.2.2: 992 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 993 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 994 | 995 | eslint-visitor-keys@3.4.3: 996 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 997 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 998 | 999 | eslint@8.57.0: 1000 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 1001 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1002 | hasBin: true 1003 | 1004 | espree@9.6.1: 1005 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1006 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1007 | 1008 | esquery@1.5.0: 1009 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1010 | engines: {node: '>=0.10'} 1011 | 1012 | esrecurse@4.3.0: 1013 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1014 | engines: {node: '>=4.0'} 1015 | 1016 | estraverse@5.3.0: 1017 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1018 | engines: {node: '>=4.0'} 1019 | 1020 | esutils@2.0.3: 1021 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1022 | engines: {node: '>=0.10.0'} 1023 | 1024 | eventsource@2.0.2: 1025 | resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} 1026 | engines: {node: '>=12.0.0'} 1027 | 1028 | fast-deep-equal@3.1.3: 1029 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1030 | 1031 | fast-glob@3.3.2: 1032 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1033 | engines: {node: '>=8.6.0'} 1034 | 1035 | fast-json-stable-stringify@2.1.0: 1036 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1037 | 1038 | fast-levenshtein@2.0.6: 1039 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1040 | 1041 | fastq@1.17.1: 1042 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1043 | 1044 | file-entry-cache@6.0.1: 1045 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1046 | engines: {node: ^10.12.0 || >=12.0.0} 1047 | 1048 | filename-reserved-regex@2.0.0: 1049 | resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} 1050 | engines: {node: '>=4'} 1051 | 1052 | filenamify@4.3.0: 1053 | resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} 1054 | engines: {node: '>=8'} 1055 | 1056 | fill-range@7.0.1: 1057 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1058 | engines: {node: '>=8'} 1059 | 1060 | find-cache-dir@3.3.2: 1061 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 1062 | engines: {node: '>=8'} 1063 | 1064 | find-up@4.1.0: 1065 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1066 | engines: {node: '>=8'} 1067 | 1068 | find-up@5.0.0: 1069 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1070 | engines: {node: '>=10'} 1071 | 1072 | flat-cache@3.2.0: 1073 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1074 | engines: {node: ^10.12.0 || >=12.0.0} 1075 | 1076 | flatted@3.3.1: 1077 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1078 | 1079 | follow-redirects@1.15.9: 1080 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 1081 | engines: {node: '>=4.0'} 1082 | peerDependencies: 1083 | debug: '*' 1084 | peerDependenciesMeta: 1085 | debug: 1086 | optional: true 1087 | 1088 | form-data@4.0.1: 1089 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} 1090 | engines: {node: '>= 6'} 1091 | 1092 | fp-ts@2.16.11: 1093 | resolution: {integrity: sha512-LaI+KaX2NFkfn1ZGHoKCmcfv7yrZsC3b8NtWsTVQeHkq4F27vI5igUuO53sxqDEa2gNQMHFPmpojDw/1zmUK7w==} 1094 | 1095 | fs-extra@11.2.0: 1096 | resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} 1097 | engines: {node: '>=14.14'} 1098 | 1099 | fs.realpath@1.0.0: 1100 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1101 | 1102 | fsevents@2.3.3: 1103 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1104 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1105 | os: [darwin] 1106 | 1107 | gensync@1.0.0-beta.2: 1108 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1109 | engines: {node: '>=6.9.0'} 1110 | 1111 | gh-pages@6.1.1: 1112 | resolution: {integrity: sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==} 1113 | engines: {node: '>=10'} 1114 | hasBin: true 1115 | 1116 | glob-parent@5.1.2: 1117 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1118 | engines: {node: '>= 6'} 1119 | 1120 | glob-parent@6.0.2: 1121 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1122 | engines: {node: '>=10.13.0'} 1123 | 1124 | glob@7.2.3: 1125 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1126 | 1127 | globals@11.12.0: 1128 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1129 | engines: {node: '>=4'} 1130 | 1131 | globals@13.24.0: 1132 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1133 | engines: {node: '>=8'} 1134 | 1135 | globals@15.2.0: 1136 | resolution: {integrity: sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==} 1137 | engines: {node: '>=18'} 1138 | 1139 | globby@11.1.0: 1140 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1141 | engines: {node: '>=10'} 1142 | 1143 | globby@6.1.0: 1144 | resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} 1145 | engines: {node: '>=0.10.0'} 1146 | 1147 | globrex@0.1.2: 1148 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1149 | 1150 | graceful-fs@4.2.11: 1151 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1152 | 1153 | graphemer@1.4.0: 1154 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1155 | 1156 | has-flag@3.0.0: 1157 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1158 | engines: {node: '>=4'} 1159 | 1160 | has-flag@4.0.0: 1161 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1162 | engines: {node: '>=8'} 1163 | 1164 | html-entities@2.3.3: 1165 | resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 1166 | 1167 | html-tags@3.3.1: 1168 | resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} 1169 | engines: {node: '>=8'} 1170 | 1171 | ignore@5.3.1: 1172 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 1173 | engines: {node: '>= 4'} 1174 | 1175 | import-fresh@3.3.0: 1176 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1177 | engines: {node: '>=6'} 1178 | 1179 | imurmurhash@0.1.4: 1180 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1181 | engines: {node: '>=0.8.19'} 1182 | 1183 | inflight@1.0.6: 1184 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1185 | 1186 | inherits@2.0.4: 1187 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1188 | 1189 | inline-style-parser@0.2.3: 1190 | resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} 1191 | 1192 | is-extglob@2.1.1: 1193 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1194 | engines: {node: '>=0.10.0'} 1195 | 1196 | is-glob@4.0.3: 1197 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1198 | engines: {node: '>=0.10.0'} 1199 | 1200 | is-html@2.0.0: 1201 | resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==} 1202 | engines: {node: '>=8'} 1203 | 1204 | is-number@7.0.0: 1205 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1206 | engines: {node: '>=0.12.0'} 1207 | 1208 | is-path-inside@3.0.3: 1209 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1210 | engines: {node: '>=8'} 1211 | 1212 | is-what@4.1.16: 1213 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 1214 | engines: {node: '>=12.13'} 1215 | 1216 | isexe@2.0.0: 1217 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1218 | 1219 | js-tokens@4.0.0: 1220 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1221 | 1222 | js-yaml@4.1.0: 1223 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1224 | hasBin: true 1225 | 1226 | jsesc@2.5.2: 1227 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1228 | engines: {node: '>=4'} 1229 | hasBin: true 1230 | 1231 | json-buffer@3.0.1: 1232 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1233 | 1234 | json-schema-traverse@0.4.1: 1235 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1236 | 1237 | json-stable-stringify-without-jsonify@1.0.1: 1238 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1239 | 1240 | json5@2.2.3: 1241 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1242 | engines: {node: '>=6'} 1243 | hasBin: true 1244 | 1245 | jsonfile@6.1.0: 1246 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1247 | 1248 | kebab-case@1.0.2: 1249 | resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} 1250 | 1251 | keyv@4.5.4: 1252 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1253 | 1254 | known-css-properties@0.30.0: 1255 | resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==} 1256 | 1257 | levn@0.4.1: 1258 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1259 | engines: {node: '>= 0.8.0'} 1260 | 1261 | locate-path@5.0.0: 1262 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1263 | engines: {node: '>=8'} 1264 | 1265 | locate-path@6.0.0: 1266 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1267 | engines: {node: '>=10'} 1268 | 1269 | lodash.merge@4.6.2: 1270 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1271 | 1272 | lru-cache@5.1.1: 1273 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1274 | 1275 | lru-cache@6.0.0: 1276 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1277 | engines: {node: '>=10'} 1278 | 1279 | make-dir@3.1.0: 1280 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1281 | engines: {node: '>=8'} 1282 | 1283 | merge-anything@5.1.7: 1284 | resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} 1285 | engines: {node: '>=12.13'} 1286 | 1287 | merge2@1.4.1: 1288 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1289 | engines: {node: '>= 8'} 1290 | 1291 | micromatch@4.0.5: 1292 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1293 | engines: {node: '>=8.6'} 1294 | 1295 | mime-db@1.52.0: 1296 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1297 | engines: {node: '>= 0.6'} 1298 | 1299 | mime-types@2.1.35: 1300 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1301 | engines: {node: '>= 0.6'} 1302 | 1303 | minimatch@3.1.2: 1304 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1305 | 1306 | minimatch@9.0.4: 1307 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 1308 | engines: {node: '>=16 || 14 >=14.17'} 1309 | 1310 | mitt@3.0.1: 1311 | resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} 1312 | 1313 | ms@2.1.2: 1314 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1315 | 1316 | ms@2.1.3: 1317 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1318 | 1319 | nanoid@3.3.7: 1320 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1321 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1322 | hasBin: true 1323 | 1324 | natural-compare@1.4.0: 1325 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1326 | 1327 | node-fetch@2.7.0: 1328 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1329 | engines: {node: 4.x || >=6.0.0} 1330 | peerDependencies: 1331 | encoding: ^0.1.0 1332 | peerDependenciesMeta: 1333 | encoding: 1334 | optional: true 1335 | 1336 | node-releases@2.0.14: 1337 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1338 | 1339 | object-assign@4.1.1: 1340 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1341 | engines: {node: '>=0.10.0'} 1342 | 1343 | once@1.4.0: 1344 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1345 | 1346 | optionator@0.9.3: 1347 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1348 | engines: {node: '>= 0.8.0'} 1349 | 1350 | p-limit@2.3.0: 1351 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1352 | engines: {node: '>=6'} 1353 | 1354 | p-limit@3.1.0: 1355 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1356 | engines: {node: '>=10'} 1357 | 1358 | p-locate@4.1.0: 1359 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1360 | engines: {node: '>=8'} 1361 | 1362 | p-locate@5.0.0: 1363 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1364 | engines: {node: '>=10'} 1365 | 1366 | p-try@2.2.0: 1367 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1368 | engines: {node: '>=6'} 1369 | 1370 | parent-module@1.0.1: 1371 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1372 | engines: {node: '>=6'} 1373 | 1374 | path-exists@4.0.0: 1375 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1376 | engines: {node: '>=8'} 1377 | 1378 | path-is-absolute@1.0.1: 1379 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1380 | engines: {node: '>=0.10.0'} 1381 | 1382 | path-key@3.1.1: 1383 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1384 | engines: {node: '>=8'} 1385 | 1386 | path-type@4.0.0: 1387 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1388 | engines: {node: '>=8'} 1389 | 1390 | picocolors@1.0.0: 1391 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1392 | 1393 | picocolors@1.1.0: 1394 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 1395 | 1396 | picomatch@2.3.1: 1397 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1398 | engines: {node: '>=8.6'} 1399 | 1400 | pify@2.3.0: 1401 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1402 | engines: {node: '>=0.10.0'} 1403 | 1404 | pinkie-promise@2.0.1: 1405 | resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} 1406 | engines: {node: '>=0.10.0'} 1407 | 1408 | pinkie@2.0.4: 1409 | resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} 1410 | engines: {node: '>=0.10.0'} 1411 | 1412 | pkg-dir@4.2.0: 1413 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1414 | engines: {node: '>=8'} 1415 | 1416 | postcss@8.4.38: 1417 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 1418 | engines: {node: ^10 || ^12 || >=14} 1419 | 1420 | prelude-ls@1.2.1: 1421 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1422 | engines: {node: '>= 0.8.0'} 1423 | 1424 | proxy-from-env@1.1.0: 1425 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1426 | 1427 | punycode@2.3.1: 1428 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1429 | engines: {node: '>=6'} 1430 | 1431 | queue-microtask@1.2.3: 1432 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1433 | 1434 | resolve-from@4.0.0: 1435 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1436 | engines: {node: '>=4'} 1437 | 1438 | reusify@1.0.4: 1439 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1440 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1441 | 1442 | rimraf@3.0.2: 1443 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1444 | hasBin: true 1445 | 1446 | rollup@4.14.1: 1447 | resolution: {integrity: sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==} 1448 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1449 | hasBin: true 1450 | 1451 | run-parallel@1.2.0: 1452 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1453 | 1454 | semver@6.3.1: 1455 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1456 | hasBin: true 1457 | 1458 | semver@7.6.0: 1459 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 1460 | engines: {node: '>=10'} 1461 | hasBin: true 1462 | 1463 | seroval-plugins@1.3.3: 1464 | resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} 1465 | engines: {node: '>=10'} 1466 | peerDependencies: 1467 | seroval: ^1.0 1468 | 1469 | seroval@1.3.2: 1470 | resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 1471 | engines: {node: '>=10'} 1472 | 1473 | shebang-command@2.0.0: 1474 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1475 | engines: {node: '>=8'} 1476 | 1477 | shebang-regex@3.0.0: 1478 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1479 | engines: {node: '>=8'} 1480 | 1481 | slash@3.0.0: 1482 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1483 | engines: {node: '>=8'} 1484 | 1485 | solid-devtools@0.30.1: 1486 | resolution: {integrity: sha512-axpXL4JV1dnGhuei+nSGS8ewGeNkmIgFDsAlO90YyYY5t8wU1R0aYAQtL+I+5KICLKPBvfkzdcFa2br7AV4lAw==} 1487 | peerDependencies: 1488 | solid-js: ^1.8.0 1489 | solid-start: ^0.3.0 1490 | vite: ^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 1491 | peerDependenciesMeta: 1492 | solid-start: 1493 | optional: true 1494 | vite: 1495 | optional: true 1496 | 1497 | solid-js@1.9.9: 1498 | resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} 1499 | 1500 | solid-refresh@0.6.3: 1501 | resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} 1502 | peerDependencies: 1503 | solid-js: ^1.3 1504 | 1505 | source-map-js@1.2.0: 1506 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1507 | engines: {node: '>=0.10.0'} 1508 | 1509 | strip-ansi@6.0.1: 1510 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1511 | engines: {node: '>=8'} 1512 | 1513 | strip-json-comments@3.1.1: 1514 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1515 | engines: {node: '>=8'} 1516 | 1517 | strip-outer@1.0.1: 1518 | resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} 1519 | engines: {node: '>=0.10.0'} 1520 | 1521 | style-to-object@1.0.6: 1522 | resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} 1523 | 1524 | supports-color@5.5.0: 1525 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1526 | engines: {node: '>=4'} 1527 | 1528 | supports-color@7.2.0: 1529 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1530 | engines: {node: '>=8'} 1531 | 1532 | text-table@0.2.0: 1533 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1534 | 1535 | to-fast-properties@2.0.0: 1536 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1537 | engines: {node: '>=4'} 1538 | 1539 | to-regex-range@5.0.1: 1540 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1541 | engines: {node: '>=8.0'} 1542 | 1543 | tr46@0.0.3: 1544 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1545 | 1546 | trim-repeated@1.0.0: 1547 | resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} 1548 | engines: {node: '>=0.10.0'} 1549 | 1550 | ts-api-utils@1.3.0: 1551 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1552 | engines: {node: '>=16'} 1553 | peerDependencies: 1554 | typescript: '>=4.2.0' 1555 | 1556 | tsconfck@3.0.3: 1557 | resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==} 1558 | engines: {node: ^18 || >=20} 1559 | hasBin: true 1560 | peerDependencies: 1561 | typescript: ^5.0.0 1562 | peerDependenciesMeta: 1563 | typescript: 1564 | optional: true 1565 | 1566 | tweetnacl-util@0.15.1: 1567 | resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} 1568 | 1569 | tweetnacl@1.0.3: 1570 | resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} 1571 | 1572 | type-check@0.4.0: 1573 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1574 | engines: {node: '>= 0.8.0'} 1575 | 1576 | type-fest@0.20.2: 1577 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1578 | engines: {node: '>=10'} 1579 | 1580 | typescript-eslint@7.8.0: 1581 | resolution: {integrity: sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==} 1582 | engines: {node: ^18.18.0 || >=20.0.0} 1583 | peerDependencies: 1584 | eslint: ^8.56.0 1585 | typescript: '*' 1586 | peerDependenciesMeta: 1587 | typescript: 1588 | optional: true 1589 | 1590 | typescript@5.4.4: 1591 | resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} 1592 | engines: {node: '>=14.17'} 1593 | hasBin: true 1594 | 1595 | ua-parser-js@1.0.38: 1596 | resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} 1597 | 1598 | undici-types@5.26.5: 1599 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1600 | 1601 | universal-user-agent@6.0.1: 1602 | resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} 1603 | 1604 | universalify@2.0.1: 1605 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1606 | engines: {node: '>= 10.0.0'} 1607 | 1608 | update-browserslist-db@1.0.13: 1609 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 1610 | hasBin: true 1611 | peerDependencies: 1612 | browserslist: '>= 4.21.0' 1613 | 1614 | uri-js@4.4.1: 1615 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1616 | 1617 | valibot@1.1.0: 1618 | resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} 1619 | peerDependencies: 1620 | typescript: '>=5' 1621 | peerDependenciesMeta: 1622 | typescript: 1623 | optional: true 1624 | 1625 | validate-html-nesting@1.2.2: 1626 | resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} 1627 | 1628 | vite-plugin-mkcert@1.17.6: 1629 | resolution: {integrity: sha512-4JR1RN0HEg/w17eRQJ/Ve2pSa6KCVQcQO6yKtIaKQCFDyd63zGfXHWpygBkvvRSpqa0GcqNKf0fjUJ0HiJQXVQ==} 1630 | engines: {node: '>=v16.7.0'} 1631 | peerDependencies: 1632 | vite: '>=3' 1633 | 1634 | vite-plugin-solid@2.10.2: 1635 | resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} 1636 | peerDependencies: 1637 | '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 1638 | solid-js: ^1.7.2 1639 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 1640 | peerDependenciesMeta: 1641 | '@testing-library/jest-dom': 1642 | optional: true 1643 | 1644 | vite-tsconfig-paths@4.3.2: 1645 | resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} 1646 | peerDependencies: 1647 | vite: '*' 1648 | peerDependenciesMeta: 1649 | vite: 1650 | optional: true 1651 | 1652 | vite@5.2.11: 1653 | resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} 1654 | engines: {node: ^18.0.0 || >=20.0.0} 1655 | hasBin: true 1656 | peerDependencies: 1657 | '@types/node': ^18.0.0 || >=20.0.0 1658 | less: '*' 1659 | lightningcss: ^1.21.0 1660 | sass: '*' 1661 | stylus: '*' 1662 | sugarss: '*' 1663 | terser: ^5.4.0 1664 | peerDependenciesMeta: 1665 | '@types/node': 1666 | optional: true 1667 | less: 1668 | optional: true 1669 | lightningcss: 1670 | optional: true 1671 | sass: 1672 | optional: true 1673 | stylus: 1674 | optional: true 1675 | sugarss: 1676 | optional: true 1677 | terser: 1678 | optional: true 1679 | 1680 | vitefu@0.2.5: 1681 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 1682 | peerDependencies: 1683 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 1684 | peerDependenciesMeta: 1685 | vite: 1686 | optional: true 1687 | 1688 | webidl-conversions@3.0.1: 1689 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1690 | 1691 | whatwg-url@5.0.0: 1692 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1693 | 1694 | which@2.0.2: 1695 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1696 | engines: {node: '>= 8'} 1697 | hasBin: true 1698 | 1699 | wrappy@1.0.2: 1700 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1701 | 1702 | yallist@3.1.1: 1703 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1704 | 1705 | yallist@4.0.0: 1706 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1707 | 1708 | yocto-queue@0.1.0: 1709 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1710 | engines: {node: '>=10'} 1711 | 1712 | snapshots: 1713 | 1714 | '@aashutoshrathi/word-wrap@1.2.6': {} 1715 | 1716 | '@ampproject/remapping@2.3.0': 1717 | dependencies: 1718 | '@jridgewell/gen-mapping': 0.3.5 1719 | '@jridgewell/trace-mapping': 0.3.25 1720 | 1721 | '@babel/code-frame@7.24.2': 1722 | dependencies: 1723 | '@babel/highlight': 7.24.2 1724 | picocolors: 1.0.0 1725 | 1726 | '@babel/compat-data@7.24.4': {} 1727 | 1728 | '@babel/core@7.24.4': 1729 | dependencies: 1730 | '@ampproject/remapping': 2.3.0 1731 | '@babel/code-frame': 7.24.2 1732 | '@babel/generator': 7.24.4 1733 | '@babel/helper-compilation-targets': 7.23.6 1734 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) 1735 | '@babel/helpers': 7.24.4 1736 | '@babel/parser': 7.24.4 1737 | '@babel/template': 7.24.0 1738 | '@babel/traverse': 7.24.1 1739 | '@babel/types': 7.24.0 1740 | convert-source-map: 2.0.0 1741 | debug: 4.3.4 1742 | gensync: 1.0.0-beta.2 1743 | json5: 2.2.3 1744 | semver: 6.3.1 1745 | transitivePeerDependencies: 1746 | - supports-color 1747 | 1748 | '@babel/generator@7.24.4': 1749 | dependencies: 1750 | '@babel/types': 7.24.0 1751 | '@jridgewell/gen-mapping': 0.3.5 1752 | '@jridgewell/trace-mapping': 0.3.25 1753 | jsesc: 2.5.2 1754 | 1755 | '@babel/helper-compilation-targets@7.23.6': 1756 | dependencies: 1757 | '@babel/compat-data': 7.24.4 1758 | '@babel/helper-validator-option': 7.23.5 1759 | browserslist: 4.23.0 1760 | lru-cache: 5.1.1 1761 | semver: 6.3.1 1762 | 1763 | '@babel/helper-environment-visitor@7.22.20': {} 1764 | 1765 | '@babel/helper-function-name@7.23.0': 1766 | dependencies: 1767 | '@babel/template': 7.24.0 1768 | '@babel/types': 7.24.0 1769 | 1770 | '@babel/helper-hoist-variables@7.22.5': 1771 | dependencies: 1772 | '@babel/types': 7.24.0 1773 | 1774 | '@babel/helper-module-imports@7.18.6': 1775 | dependencies: 1776 | '@babel/types': 7.24.0 1777 | 1778 | '@babel/helper-module-imports@7.24.3': 1779 | dependencies: 1780 | '@babel/types': 7.24.0 1781 | 1782 | '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': 1783 | dependencies: 1784 | '@babel/core': 7.24.4 1785 | '@babel/helper-environment-visitor': 7.22.20 1786 | '@babel/helper-module-imports': 7.24.3 1787 | '@babel/helper-simple-access': 7.22.5 1788 | '@babel/helper-split-export-declaration': 7.22.6 1789 | '@babel/helper-validator-identifier': 7.22.20 1790 | 1791 | '@babel/helper-plugin-utils@7.24.0': {} 1792 | 1793 | '@babel/helper-simple-access@7.22.5': 1794 | dependencies: 1795 | '@babel/types': 7.24.0 1796 | 1797 | '@babel/helper-split-export-declaration@7.22.6': 1798 | dependencies: 1799 | '@babel/types': 7.24.0 1800 | 1801 | '@babel/helper-string-parser@7.24.1': {} 1802 | 1803 | '@babel/helper-validator-identifier@7.22.20': {} 1804 | 1805 | '@babel/helper-validator-option@7.23.5': {} 1806 | 1807 | '@babel/helpers@7.24.4': 1808 | dependencies: 1809 | '@babel/template': 7.24.0 1810 | '@babel/traverse': 7.24.1 1811 | '@babel/types': 7.24.0 1812 | transitivePeerDependencies: 1813 | - supports-color 1814 | 1815 | '@babel/highlight@7.24.2': 1816 | dependencies: 1817 | '@babel/helper-validator-identifier': 7.22.20 1818 | chalk: 2.4.2 1819 | js-tokens: 4.0.0 1820 | picocolors: 1.0.0 1821 | 1822 | '@babel/parser@7.24.4': 1823 | dependencies: 1824 | '@babel/types': 7.24.0 1825 | 1826 | '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)': 1827 | dependencies: 1828 | '@babel/core': 7.24.4 1829 | '@babel/helper-plugin-utils': 7.24.0 1830 | 1831 | '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)': 1832 | dependencies: 1833 | '@babel/core': 7.24.4 1834 | '@babel/helper-plugin-utils': 7.24.0 1835 | 1836 | '@babel/template@7.24.0': 1837 | dependencies: 1838 | '@babel/code-frame': 7.24.2 1839 | '@babel/parser': 7.24.4 1840 | '@babel/types': 7.24.0 1841 | 1842 | '@babel/traverse@7.24.1': 1843 | dependencies: 1844 | '@babel/code-frame': 7.24.2 1845 | '@babel/generator': 7.24.4 1846 | '@babel/helper-environment-visitor': 7.22.20 1847 | '@babel/helper-function-name': 7.23.0 1848 | '@babel/helper-hoist-variables': 7.22.5 1849 | '@babel/helper-split-export-declaration': 7.22.6 1850 | '@babel/parser': 7.24.4 1851 | '@babel/types': 7.24.0 1852 | debug: 4.3.4 1853 | globals: 11.12.0 1854 | transitivePeerDependencies: 1855 | - supports-color 1856 | 1857 | '@babel/types@7.24.0': 1858 | dependencies: 1859 | '@babel/helper-string-parser': 7.24.1 1860 | '@babel/helper-validator-identifier': 7.22.20 1861 | to-fast-properties: 2.0.0 1862 | 1863 | '@esbuild/aix-ppc64@0.20.2': 1864 | optional: true 1865 | 1866 | '@esbuild/android-arm64@0.20.2': 1867 | optional: true 1868 | 1869 | '@esbuild/android-arm@0.20.2': 1870 | optional: true 1871 | 1872 | '@esbuild/android-x64@0.20.2': 1873 | optional: true 1874 | 1875 | '@esbuild/darwin-arm64@0.20.2': 1876 | optional: true 1877 | 1878 | '@esbuild/darwin-x64@0.20.2': 1879 | optional: true 1880 | 1881 | '@esbuild/freebsd-arm64@0.20.2': 1882 | optional: true 1883 | 1884 | '@esbuild/freebsd-x64@0.20.2': 1885 | optional: true 1886 | 1887 | '@esbuild/linux-arm64@0.20.2': 1888 | optional: true 1889 | 1890 | '@esbuild/linux-arm@0.20.2': 1891 | optional: true 1892 | 1893 | '@esbuild/linux-ia32@0.20.2': 1894 | optional: true 1895 | 1896 | '@esbuild/linux-loong64@0.20.2': 1897 | optional: true 1898 | 1899 | '@esbuild/linux-mips64el@0.20.2': 1900 | optional: true 1901 | 1902 | '@esbuild/linux-ppc64@0.20.2': 1903 | optional: true 1904 | 1905 | '@esbuild/linux-riscv64@0.20.2': 1906 | optional: true 1907 | 1908 | '@esbuild/linux-s390x@0.20.2': 1909 | optional: true 1910 | 1911 | '@esbuild/linux-x64@0.20.2': 1912 | optional: true 1913 | 1914 | '@esbuild/netbsd-x64@0.20.2': 1915 | optional: true 1916 | 1917 | '@esbuild/openbsd-x64@0.20.2': 1918 | optional: true 1919 | 1920 | '@esbuild/sunos-x64@0.20.2': 1921 | optional: true 1922 | 1923 | '@esbuild/win32-arm64@0.20.2': 1924 | optional: true 1925 | 1926 | '@esbuild/win32-ia32@0.20.2': 1927 | optional: true 1928 | 1929 | '@esbuild/win32-x64@0.20.2': 1930 | optional: true 1931 | 1932 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': 1933 | dependencies: 1934 | eslint: 8.57.0 1935 | eslint-visitor-keys: 3.4.3 1936 | 1937 | '@eslint-community/regexpp@4.10.0': {} 1938 | 1939 | '@eslint/eslintrc@2.1.4': 1940 | dependencies: 1941 | ajv: 6.12.6 1942 | debug: 4.3.4 1943 | espree: 9.6.1 1944 | globals: 13.24.0 1945 | ignore: 5.3.1 1946 | import-fresh: 3.3.0 1947 | js-yaml: 4.1.0 1948 | minimatch: 3.1.2 1949 | strip-json-comments: 3.1.1 1950 | transitivePeerDependencies: 1951 | - supports-color 1952 | 1953 | '@eslint/js@8.57.0': {} 1954 | 1955 | '@eslint/js@9.2.0': {} 1956 | 1957 | '@humanwhocodes/config-array@0.11.14': 1958 | dependencies: 1959 | '@humanwhocodes/object-schema': 2.0.3 1960 | debug: 4.3.4 1961 | minimatch: 3.1.2 1962 | transitivePeerDependencies: 1963 | - supports-color 1964 | 1965 | '@humanwhocodes/module-importer@1.0.1': {} 1966 | 1967 | '@humanwhocodes/object-schema@2.0.3': {} 1968 | 1969 | '@jridgewell/gen-mapping@0.3.5': 1970 | dependencies: 1971 | '@jridgewell/set-array': 1.2.1 1972 | '@jridgewell/sourcemap-codec': 1.4.15 1973 | '@jridgewell/trace-mapping': 0.3.25 1974 | 1975 | '@jridgewell/resolve-uri@3.1.2': {} 1976 | 1977 | '@jridgewell/set-array@1.2.1': {} 1978 | 1979 | '@jridgewell/sourcemap-codec@1.4.15': {} 1980 | 1981 | '@jridgewell/trace-mapping@0.3.25': 1982 | dependencies: 1983 | '@jridgewell/resolve-uri': 3.1.2 1984 | '@jridgewell/sourcemap-codec': 1.4.15 1985 | 1986 | '@nodelib/fs.scandir@2.1.5': 1987 | dependencies: 1988 | '@nodelib/fs.stat': 2.0.5 1989 | run-parallel: 1.2.0 1990 | 1991 | '@nodelib/fs.stat@2.0.5': {} 1992 | 1993 | '@nodelib/fs.walk@1.2.8': 1994 | dependencies: 1995 | '@nodelib/fs.scandir': 2.1.5 1996 | fastq: 1.17.1 1997 | 1998 | '@nothing-but/utils@0.12.1': {} 1999 | 2000 | '@octokit/auth-token@4.0.0': {} 2001 | 2002 | '@octokit/core@5.2.0': 2003 | dependencies: 2004 | '@octokit/auth-token': 4.0.0 2005 | '@octokit/graphql': 7.1.0 2006 | '@octokit/request': 8.4.0 2007 | '@octokit/request-error': 5.1.0 2008 | '@octokit/types': 13.6.1 2009 | before-after-hook: 2.2.3 2010 | universal-user-agent: 6.0.1 2011 | 2012 | '@octokit/endpoint@9.0.5': 2013 | dependencies: 2014 | '@octokit/types': 13.6.1 2015 | universal-user-agent: 6.0.1 2016 | 2017 | '@octokit/graphql@7.1.0': 2018 | dependencies: 2019 | '@octokit/request': 8.4.0 2020 | '@octokit/types': 13.6.1 2021 | universal-user-agent: 6.0.1 2022 | 2023 | '@octokit/openapi-types@22.2.0': {} 2024 | 2025 | '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': 2026 | dependencies: 2027 | '@octokit/core': 5.2.0 2028 | '@octokit/types': 13.6.1 2029 | 2030 | '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)': 2031 | dependencies: 2032 | '@octokit/core': 5.2.0 2033 | 2034 | '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': 2035 | dependencies: 2036 | '@octokit/core': 5.2.0 2037 | '@octokit/types': 13.6.1 2038 | 2039 | '@octokit/request-error@5.1.0': 2040 | dependencies: 2041 | '@octokit/types': 13.6.1 2042 | deprecation: 2.3.1 2043 | once: 1.4.0 2044 | 2045 | '@octokit/request@8.4.0': 2046 | dependencies: 2047 | '@octokit/endpoint': 9.0.5 2048 | '@octokit/request-error': 5.1.0 2049 | '@octokit/types': 13.6.1 2050 | universal-user-agent: 6.0.1 2051 | 2052 | '@octokit/rest@20.1.1': 2053 | dependencies: 2054 | '@octokit/core': 5.2.0 2055 | '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0) 2056 | '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) 2057 | '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) 2058 | 2059 | '@octokit/types@13.6.1': 2060 | dependencies: 2061 | '@octokit/openapi-types': 22.2.0 2062 | 2063 | '@rollup/rollup-android-arm-eabi@4.14.1': 2064 | optional: true 2065 | 2066 | '@rollup/rollup-android-arm64@4.14.1': 2067 | optional: true 2068 | 2069 | '@rollup/rollup-darwin-arm64@4.14.1': 2070 | optional: true 2071 | 2072 | '@rollup/rollup-darwin-x64@4.14.1': 2073 | optional: true 2074 | 2075 | '@rollup/rollup-linux-arm-gnueabihf@4.14.1': 2076 | optional: true 2077 | 2078 | '@rollup/rollup-linux-arm64-gnu@4.14.1': 2079 | optional: true 2080 | 2081 | '@rollup/rollup-linux-arm64-musl@4.14.1': 2082 | optional: true 2083 | 2084 | '@rollup/rollup-linux-powerpc64le-gnu@4.14.1': 2085 | optional: true 2086 | 2087 | '@rollup/rollup-linux-riscv64-gnu@4.14.1': 2088 | optional: true 2089 | 2090 | '@rollup/rollup-linux-s390x-gnu@4.14.1': 2091 | optional: true 2092 | 2093 | '@rollup/rollup-linux-x64-gnu@4.14.1': 2094 | optional: true 2095 | 2096 | '@rollup/rollup-linux-x64-musl@4.14.1': 2097 | optional: true 2098 | 2099 | '@rollup/rollup-win32-arm64-msvc@4.14.1': 2100 | optional: true 2101 | 2102 | '@rollup/rollup-win32-ia32-msvc@4.14.1': 2103 | optional: true 2104 | 2105 | '@rollup/rollup-win32-x64-msvc@4.14.1': 2106 | optional: true 2107 | 2108 | '@solid-devtools/debugger@0.23.4(solid-js@1.9.9)': 2109 | dependencies: 2110 | '@nothing-but/utils': 0.12.1 2111 | '@solid-devtools/shared': 0.13.2(solid-js@1.9.9) 2112 | '@solid-primitives/bounds': 0.0.118(solid-js@1.9.9) 2113 | '@solid-primitives/cursor': 0.0.112(solid-js@1.9.9) 2114 | '@solid-primitives/event-bus': 1.0.11(solid-js@1.9.9) 2115 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.9) 2116 | '@solid-primitives/keyboard': 1.2.8(solid-js@1.9.9) 2117 | '@solid-primitives/platform': 0.1.2(solid-js@1.9.9) 2118 | '@solid-primitives/rootless': 1.4.5(solid-js@1.9.9) 2119 | '@solid-primitives/scheduled': 1.4.3(solid-js@1.9.9) 2120 | '@solid-primitives/static-store': 0.0.5(solid-js@1.9.9) 2121 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2122 | solid-js: 1.9.9 2123 | 2124 | '@solid-devtools/shared@0.13.2(solid-js@1.9.9)': 2125 | dependencies: 2126 | '@solid-primitives/event-bus': 1.0.11(solid-js@1.9.9) 2127 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.9) 2128 | '@solid-primitives/media': 2.2.8(solid-js@1.9.9) 2129 | '@solid-primitives/refs': 1.0.8(solid-js@1.9.9) 2130 | '@solid-primitives/rootless': 1.4.5(solid-js@1.9.9) 2131 | '@solid-primitives/scheduled': 1.4.3(solid-js@1.9.9) 2132 | '@solid-primitives/static-store': 0.0.5(solid-js@1.9.9) 2133 | '@solid-primitives/styles': 0.0.111(solid-js@1.9.9) 2134 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2135 | solid-js: 1.9.9 2136 | 2137 | '@solid-primitives/bounds@0.0.118(solid-js@1.9.9)': 2138 | dependencies: 2139 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.9) 2140 | '@solid-primitives/resize-observer': 2.0.25(solid-js@1.9.9) 2141 | '@solid-primitives/static-store': 0.0.5(solid-js@1.9.9) 2142 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2143 | solid-js: 1.9.9 2144 | 2145 | '@solid-primitives/cursor@0.0.112(solid-js@1.9.9)': 2146 | dependencies: 2147 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2148 | solid-js: 1.9.9 2149 | 2150 | '@solid-primitives/event-bus@1.0.11(solid-js@1.9.9)': 2151 | dependencies: 2152 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2153 | solid-js: 1.9.9 2154 | 2155 | '@solid-primitives/event-listener@2.3.3(solid-js@1.9.9)': 2156 | dependencies: 2157 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2158 | solid-js: 1.9.9 2159 | 2160 | '@solid-primitives/keyboard@1.2.8(solid-js@1.9.9)': 2161 | dependencies: 2162 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.9) 2163 | '@solid-primitives/rootless': 1.4.5(solid-js@1.9.9) 2164 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2165 | solid-js: 1.9.9 2166 | 2167 | '@solid-primitives/media@2.2.8(solid-js@1.9.9)': 2168 | dependencies: 2169 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.9) 2170 | '@solid-primitives/rootless': 1.4.5(solid-js@1.9.9) 2171 | '@solid-primitives/static-store': 0.0.8(solid-js@1.9.9) 2172 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2173 | solid-js: 1.9.9 2174 | 2175 | '@solid-primitives/platform@0.1.2(solid-js@1.9.9)': 2176 | dependencies: 2177 | solid-js: 1.9.9 2178 | 2179 | '@solid-primitives/refs@1.0.8(solid-js@1.9.9)': 2180 | dependencies: 2181 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2182 | solid-js: 1.9.9 2183 | 2184 | '@solid-primitives/resize-observer@2.0.25(solid-js@1.9.9)': 2185 | dependencies: 2186 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.9) 2187 | '@solid-primitives/rootless': 1.4.5(solid-js@1.9.9) 2188 | '@solid-primitives/static-store': 0.0.8(solid-js@1.9.9) 2189 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2190 | solid-js: 1.9.9 2191 | 2192 | '@solid-primitives/rootless@1.4.5(solid-js@1.9.9)': 2193 | dependencies: 2194 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2195 | solid-js: 1.9.9 2196 | 2197 | '@solid-primitives/scheduled@1.4.3(solid-js@1.9.9)': 2198 | dependencies: 2199 | solid-js: 1.9.9 2200 | 2201 | '@solid-primitives/static-store@0.0.5(solid-js@1.9.9)': 2202 | dependencies: 2203 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2204 | solid-js: 1.9.9 2205 | 2206 | '@solid-primitives/static-store@0.0.8(solid-js@1.9.9)': 2207 | dependencies: 2208 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2209 | solid-js: 1.9.9 2210 | 2211 | '@solid-primitives/styles@0.0.111(solid-js@1.9.9)': 2212 | dependencies: 2213 | '@solid-primitives/rootless': 1.4.5(solid-js@1.9.9) 2214 | '@solid-primitives/utils': 6.2.3(solid-js@1.9.9) 2215 | solid-js: 1.9.9 2216 | 2217 | '@solid-primitives/utils@6.2.3(solid-js@1.9.9)': 2218 | dependencies: 2219 | solid-js: 1.9.9 2220 | 2221 | '@solidjs/router@0.13.6(solid-js@1.9.9)': 2222 | dependencies: 2223 | solid-js: 1.9.9 2224 | 2225 | '@tma.js/bridge@2.1.3(typescript@5.4.4)': 2226 | dependencies: 2227 | '@tma.js/signals': 1.0.1 2228 | '@tma.js/toolkit': 1.0.2 2229 | '@tma.js/transformers': 1.1.1(typescript@5.4.4) 2230 | '@tma.js/types': 1.0.2 2231 | better-promises: 1.0.0 2232 | error-kid: 1.0.2 2233 | fp-ts: 2.16.11 2234 | mitt: 3.0.1 2235 | valibot: 1.1.0(typescript@5.4.4) 2236 | transitivePeerDependencies: 2237 | - typescript 2238 | 2239 | '@tma.js/sdk-solid@3.0.7(solid-js@1.9.9)(typescript@5.4.4)': 2240 | dependencies: 2241 | '@tma.js/sdk': 3.0.7(typescript@5.4.4) 2242 | solid-js: 1.9.9 2243 | transitivePeerDependencies: 2244 | - typescript 2245 | 2246 | '@tma.js/sdk@3.0.7(typescript@5.4.4)': 2247 | dependencies: 2248 | '@tma.js/bridge': 2.1.3(typescript@5.4.4) 2249 | '@tma.js/signals': 1.0.1 2250 | '@tma.js/toolkit': 1.0.2 2251 | '@tma.js/transformers': 1.1.1(typescript@5.4.4) 2252 | '@tma.js/types': 1.0.2 2253 | better-promises: 1.0.0 2254 | error-kid: 1.0.2 2255 | fp-ts: 2.16.11 2256 | valibot: 1.1.0(typescript@5.4.4) 2257 | transitivePeerDependencies: 2258 | - typescript 2259 | 2260 | '@tma.js/signals@1.0.1': {} 2261 | 2262 | '@tma.js/toolkit@1.0.2': 2263 | dependencies: 2264 | better-promises: 1.0.0 2265 | fp-ts: 2.16.11 2266 | 2267 | '@tma.js/transformers@1.1.1(typescript@5.4.4)': 2268 | dependencies: 2269 | '@tma.js/toolkit': 1.0.2 2270 | '@tma.js/types': 1.0.2 2271 | fp-ts: 2.16.11 2272 | valibot: 1.1.0(typescript@5.4.4) 2273 | transitivePeerDependencies: 2274 | - typescript 2275 | 2276 | '@tma.js/types@1.0.2': {} 2277 | 2278 | '@tonconnect/isomorphic-eventsource@0.0.2': 2279 | dependencies: 2280 | eventsource: 2.0.2 2281 | 2282 | '@tonconnect/isomorphic-fetch@0.0.3': 2283 | dependencies: 2284 | node-fetch: 2.7.0 2285 | transitivePeerDependencies: 2286 | - encoding 2287 | 2288 | '@tonconnect/protocol@2.2.6': 2289 | dependencies: 2290 | tweetnacl: 1.0.3 2291 | tweetnacl-util: 0.15.1 2292 | 2293 | '@tonconnect/sdk@3.0.3': 2294 | dependencies: 2295 | '@tonconnect/isomorphic-eventsource': 0.0.2 2296 | '@tonconnect/isomorphic-fetch': 0.0.3 2297 | '@tonconnect/protocol': 2.2.6 2298 | transitivePeerDependencies: 2299 | - encoding 2300 | 2301 | '@tonconnect/ui@2.0.5': 2302 | dependencies: 2303 | '@tonconnect/sdk': 3.0.3 2304 | classnames: 2.5.1 2305 | deepmerge: 4.3.1 2306 | ua-parser-js: 1.0.38 2307 | transitivePeerDependencies: 2308 | - encoding 2309 | 2310 | '@types/babel__core@7.20.5': 2311 | dependencies: 2312 | '@babel/parser': 7.24.4 2313 | '@babel/types': 7.24.0 2314 | '@types/babel__generator': 7.6.8 2315 | '@types/babel__template': 7.4.4 2316 | '@types/babel__traverse': 7.20.5 2317 | 2318 | '@types/babel__generator@7.6.8': 2319 | dependencies: 2320 | '@babel/types': 7.24.0 2321 | 2322 | '@types/babel__template@7.4.4': 2323 | dependencies: 2324 | '@babel/parser': 7.24.4 2325 | '@babel/types': 7.24.0 2326 | 2327 | '@types/babel__traverse@7.20.5': 2328 | dependencies: 2329 | '@babel/types': 7.24.0 2330 | 2331 | '@types/estree@1.0.5': {} 2332 | 2333 | '@types/json-schema@7.0.15': {} 2334 | 2335 | '@types/node@20.12.5': 2336 | dependencies: 2337 | undici-types: 5.26.5 2338 | 2339 | '@types/semver@7.5.8': {} 2340 | 2341 | '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.4))(eslint@8.57.0)(typescript@5.4.4)': 2342 | dependencies: 2343 | '@eslint-community/regexpp': 4.10.0 2344 | '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.4) 2345 | '@typescript-eslint/scope-manager': 7.8.0 2346 | '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.4) 2347 | '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.4) 2348 | '@typescript-eslint/visitor-keys': 7.8.0 2349 | debug: 4.3.4 2350 | eslint: 8.57.0 2351 | graphemer: 1.4.0 2352 | ignore: 5.3.1 2353 | natural-compare: 1.4.0 2354 | semver: 7.6.0 2355 | ts-api-utils: 1.3.0(typescript@5.4.4) 2356 | optionalDependencies: 2357 | typescript: 5.4.4 2358 | transitivePeerDependencies: 2359 | - supports-color 2360 | 2361 | '@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.4)': 2362 | dependencies: 2363 | '@typescript-eslint/scope-manager': 7.8.0 2364 | '@typescript-eslint/types': 7.8.0 2365 | '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.4) 2366 | '@typescript-eslint/visitor-keys': 7.8.0 2367 | debug: 4.3.4 2368 | eslint: 8.57.0 2369 | optionalDependencies: 2370 | typescript: 5.4.4 2371 | transitivePeerDependencies: 2372 | - supports-color 2373 | 2374 | '@typescript-eslint/scope-manager@7.6.0': 2375 | dependencies: 2376 | '@typescript-eslint/types': 7.6.0 2377 | '@typescript-eslint/visitor-keys': 7.6.0 2378 | 2379 | '@typescript-eslint/scope-manager@7.8.0': 2380 | dependencies: 2381 | '@typescript-eslint/types': 7.8.0 2382 | '@typescript-eslint/visitor-keys': 7.8.0 2383 | 2384 | '@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.4)': 2385 | dependencies: 2386 | '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.4) 2387 | '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.4) 2388 | debug: 4.3.4 2389 | eslint: 8.57.0 2390 | ts-api-utils: 1.3.0(typescript@5.4.4) 2391 | optionalDependencies: 2392 | typescript: 5.4.4 2393 | transitivePeerDependencies: 2394 | - supports-color 2395 | 2396 | '@typescript-eslint/types@7.6.0': {} 2397 | 2398 | '@typescript-eslint/types@7.8.0': {} 2399 | 2400 | '@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.4)': 2401 | dependencies: 2402 | '@typescript-eslint/types': 7.6.0 2403 | '@typescript-eslint/visitor-keys': 7.6.0 2404 | debug: 4.3.4 2405 | globby: 11.1.0 2406 | is-glob: 4.0.3 2407 | minimatch: 9.0.4 2408 | semver: 7.6.0 2409 | ts-api-utils: 1.3.0(typescript@5.4.4) 2410 | optionalDependencies: 2411 | typescript: 5.4.4 2412 | transitivePeerDependencies: 2413 | - supports-color 2414 | 2415 | '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.4)': 2416 | dependencies: 2417 | '@typescript-eslint/types': 7.8.0 2418 | '@typescript-eslint/visitor-keys': 7.8.0 2419 | debug: 4.3.4 2420 | globby: 11.1.0 2421 | is-glob: 4.0.3 2422 | minimatch: 9.0.4 2423 | semver: 7.6.0 2424 | ts-api-utils: 1.3.0(typescript@5.4.4) 2425 | optionalDependencies: 2426 | typescript: 5.4.4 2427 | transitivePeerDependencies: 2428 | - supports-color 2429 | 2430 | '@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.4)': 2431 | dependencies: 2432 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 2433 | '@types/json-schema': 7.0.15 2434 | '@types/semver': 7.5.8 2435 | '@typescript-eslint/scope-manager': 7.6.0 2436 | '@typescript-eslint/types': 7.6.0 2437 | '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) 2438 | eslint: 8.57.0 2439 | semver: 7.6.0 2440 | transitivePeerDependencies: 2441 | - supports-color 2442 | - typescript 2443 | 2444 | '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.4)': 2445 | dependencies: 2446 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 2447 | '@types/json-schema': 7.0.15 2448 | '@types/semver': 7.5.8 2449 | '@typescript-eslint/scope-manager': 7.8.0 2450 | '@typescript-eslint/types': 7.8.0 2451 | '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.4) 2452 | eslint: 8.57.0 2453 | semver: 7.6.0 2454 | transitivePeerDependencies: 2455 | - supports-color 2456 | - typescript 2457 | 2458 | '@typescript-eslint/visitor-keys@7.6.0': 2459 | dependencies: 2460 | '@typescript-eslint/types': 7.6.0 2461 | eslint-visitor-keys: 3.4.3 2462 | 2463 | '@typescript-eslint/visitor-keys@7.8.0': 2464 | dependencies: 2465 | '@typescript-eslint/types': 7.8.0 2466 | eslint-visitor-keys: 3.4.3 2467 | 2468 | '@ungap/structured-clone@1.2.0': {} 2469 | 2470 | '@vitejs/plugin-basic-ssl@1.1.0(vite@5.2.11(@types/node@20.12.5))': 2471 | dependencies: 2472 | vite: 5.2.11(@types/node@20.12.5) 2473 | 2474 | acorn-jsx@5.3.2(acorn@8.11.3): 2475 | dependencies: 2476 | acorn: 8.11.3 2477 | 2478 | acorn@8.11.3: {} 2479 | 2480 | ajv@6.12.6: 2481 | dependencies: 2482 | fast-deep-equal: 3.1.3 2483 | fast-json-stable-stringify: 2.1.0 2484 | json-schema-traverse: 0.4.1 2485 | uri-js: 4.4.1 2486 | 2487 | ansi-regex@5.0.1: {} 2488 | 2489 | ansi-styles@3.2.1: 2490 | dependencies: 2491 | color-convert: 1.9.3 2492 | 2493 | ansi-styles@4.3.0: 2494 | dependencies: 2495 | color-convert: 2.0.1 2496 | 2497 | argparse@2.0.1: {} 2498 | 2499 | array-union@1.0.2: 2500 | dependencies: 2501 | array-uniq: 1.0.3 2502 | 2503 | array-union@2.1.0: {} 2504 | 2505 | array-uniq@1.0.3: {} 2506 | 2507 | async@3.2.5: {} 2508 | 2509 | asynckit@0.4.0: {} 2510 | 2511 | axios@1.7.7(debug@4.3.7): 2512 | dependencies: 2513 | follow-redirects: 1.15.9(debug@4.3.7) 2514 | form-data: 4.0.1 2515 | proxy-from-env: 1.1.0 2516 | transitivePeerDependencies: 2517 | - debug 2518 | 2519 | babel-plugin-jsx-dom-expressions@0.37.19(@babel/core@7.24.4): 2520 | dependencies: 2521 | '@babel/core': 7.24.4 2522 | '@babel/helper-module-imports': 7.18.6 2523 | '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) 2524 | '@babel/types': 7.24.0 2525 | html-entities: 2.3.3 2526 | validate-html-nesting: 1.2.2 2527 | 2528 | babel-preset-solid@1.8.16(@babel/core@7.24.4): 2529 | dependencies: 2530 | '@babel/core': 7.24.4 2531 | babel-plugin-jsx-dom-expressions: 0.37.19(@babel/core@7.24.4) 2532 | 2533 | balanced-match@1.0.2: {} 2534 | 2535 | before-after-hook@2.2.3: {} 2536 | 2537 | better-promises@1.0.0: 2538 | dependencies: 2539 | error-kid: 1.0.2 2540 | 2541 | brace-expansion@1.1.11: 2542 | dependencies: 2543 | balanced-match: 1.0.2 2544 | concat-map: 0.0.1 2545 | 2546 | brace-expansion@2.0.1: 2547 | dependencies: 2548 | balanced-match: 1.0.2 2549 | 2550 | braces@3.0.2: 2551 | dependencies: 2552 | fill-range: 7.0.1 2553 | 2554 | browserslist@4.23.0: 2555 | dependencies: 2556 | caniuse-lite: 1.0.30001607 2557 | electron-to-chromium: 1.4.730 2558 | node-releases: 2.0.14 2559 | update-browserslist-db: 1.0.13(browserslist@4.23.0) 2560 | 2561 | callsites@3.1.0: {} 2562 | 2563 | caniuse-lite@1.0.30001607: {} 2564 | 2565 | chalk@2.4.2: 2566 | dependencies: 2567 | ansi-styles: 3.2.1 2568 | escape-string-regexp: 1.0.5 2569 | supports-color: 5.5.0 2570 | 2571 | chalk@4.1.2: 2572 | dependencies: 2573 | ansi-styles: 4.3.0 2574 | supports-color: 7.2.0 2575 | 2576 | classnames@2.5.1: {} 2577 | 2578 | color-convert@1.9.3: 2579 | dependencies: 2580 | color-name: 1.1.3 2581 | 2582 | color-convert@2.0.1: 2583 | dependencies: 2584 | color-name: 1.1.4 2585 | 2586 | color-name@1.1.3: {} 2587 | 2588 | color-name@1.1.4: {} 2589 | 2590 | combined-stream@1.0.8: 2591 | dependencies: 2592 | delayed-stream: 1.0.0 2593 | 2594 | commander@11.1.0: {} 2595 | 2596 | commondir@1.0.1: {} 2597 | 2598 | concat-map@0.0.1: {} 2599 | 2600 | convert-source-map@2.0.0: {} 2601 | 2602 | cross-env@7.0.3: 2603 | dependencies: 2604 | cross-spawn: 7.0.3 2605 | 2606 | cross-spawn@7.0.3: 2607 | dependencies: 2608 | path-key: 3.1.1 2609 | shebang-command: 2.0.0 2610 | which: 2.0.2 2611 | 2612 | csstype@3.1.3: {} 2613 | 2614 | debug@4.3.4: 2615 | dependencies: 2616 | ms: 2.1.2 2617 | 2618 | debug@4.3.7: 2619 | dependencies: 2620 | ms: 2.1.3 2621 | 2622 | deep-is@0.1.4: {} 2623 | 2624 | deepmerge@4.3.1: {} 2625 | 2626 | delayed-stream@1.0.0: {} 2627 | 2628 | deprecation@2.3.1: {} 2629 | 2630 | dir-glob@3.0.1: 2631 | dependencies: 2632 | path-type: 4.0.0 2633 | 2634 | doctrine@3.0.0: 2635 | dependencies: 2636 | esutils: 2.0.3 2637 | 2638 | electron-to-chromium@1.4.730: {} 2639 | 2640 | email-addresses@5.0.0: {} 2641 | 2642 | error-kid@1.0.2: {} 2643 | 2644 | eruda@3.0.1: {} 2645 | 2646 | esbuild@0.20.2: 2647 | optionalDependencies: 2648 | '@esbuild/aix-ppc64': 0.20.2 2649 | '@esbuild/android-arm': 0.20.2 2650 | '@esbuild/android-arm64': 0.20.2 2651 | '@esbuild/android-x64': 0.20.2 2652 | '@esbuild/darwin-arm64': 0.20.2 2653 | '@esbuild/darwin-x64': 0.20.2 2654 | '@esbuild/freebsd-arm64': 0.20.2 2655 | '@esbuild/freebsd-x64': 0.20.2 2656 | '@esbuild/linux-arm': 0.20.2 2657 | '@esbuild/linux-arm64': 0.20.2 2658 | '@esbuild/linux-ia32': 0.20.2 2659 | '@esbuild/linux-loong64': 0.20.2 2660 | '@esbuild/linux-mips64el': 0.20.2 2661 | '@esbuild/linux-ppc64': 0.20.2 2662 | '@esbuild/linux-riscv64': 0.20.2 2663 | '@esbuild/linux-s390x': 0.20.2 2664 | '@esbuild/linux-x64': 0.20.2 2665 | '@esbuild/netbsd-x64': 0.20.2 2666 | '@esbuild/openbsd-x64': 0.20.2 2667 | '@esbuild/sunos-x64': 0.20.2 2668 | '@esbuild/win32-arm64': 0.20.2 2669 | '@esbuild/win32-ia32': 0.20.2 2670 | '@esbuild/win32-x64': 0.20.2 2671 | 2672 | escalade@3.1.2: {} 2673 | 2674 | escape-string-regexp@1.0.5: {} 2675 | 2676 | escape-string-regexp@4.0.0: {} 2677 | 2678 | eslint-plugin-solid@0.14.0(eslint@8.57.0)(typescript@5.4.4): 2679 | dependencies: 2680 | '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.4) 2681 | eslint: 8.57.0 2682 | estraverse: 5.3.0 2683 | is-html: 2.0.0 2684 | kebab-case: 1.0.2 2685 | known-css-properties: 0.30.0 2686 | style-to-object: 1.0.6 2687 | transitivePeerDependencies: 2688 | - supports-color 2689 | - typescript 2690 | 2691 | eslint-scope@7.2.2: 2692 | dependencies: 2693 | esrecurse: 4.3.0 2694 | estraverse: 5.3.0 2695 | 2696 | eslint-visitor-keys@3.4.3: {} 2697 | 2698 | eslint@8.57.0: 2699 | dependencies: 2700 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 2701 | '@eslint-community/regexpp': 4.10.0 2702 | '@eslint/eslintrc': 2.1.4 2703 | '@eslint/js': 8.57.0 2704 | '@humanwhocodes/config-array': 0.11.14 2705 | '@humanwhocodes/module-importer': 1.0.1 2706 | '@nodelib/fs.walk': 1.2.8 2707 | '@ungap/structured-clone': 1.2.0 2708 | ajv: 6.12.6 2709 | chalk: 4.1.2 2710 | cross-spawn: 7.0.3 2711 | debug: 4.3.4 2712 | doctrine: 3.0.0 2713 | escape-string-regexp: 4.0.0 2714 | eslint-scope: 7.2.2 2715 | eslint-visitor-keys: 3.4.3 2716 | espree: 9.6.1 2717 | esquery: 1.5.0 2718 | esutils: 2.0.3 2719 | fast-deep-equal: 3.1.3 2720 | file-entry-cache: 6.0.1 2721 | find-up: 5.0.0 2722 | glob-parent: 6.0.2 2723 | globals: 13.24.0 2724 | graphemer: 1.4.0 2725 | ignore: 5.3.1 2726 | imurmurhash: 0.1.4 2727 | is-glob: 4.0.3 2728 | is-path-inside: 3.0.3 2729 | js-yaml: 4.1.0 2730 | json-stable-stringify-without-jsonify: 1.0.1 2731 | levn: 0.4.1 2732 | lodash.merge: 4.6.2 2733 | minimatch: 3.1.2 2734 | natural-compare: 1.4.0 2735 | optionator: 0.9.3 2736 | strip-ansi: 6.0.1 2737 | text-table: 0.2.0 2738 | transitivePeerDependencies: 2739 | - supports-color 2740 | 2741 | espree@9.6.1: 2742 | dependencies: 2743 | acorn: 8.11.3 2744 | acorn-jsx: 5.3.2(acorn@8.11.3) 2745 | eslint-visitor-keys: 3.4.3 2746 | 2747 | esquery@1.5.0: 2748 | dependencies: 2749 | estraverse: 5.3.0 2750 | 2751 | esrecurse@4.3.0: 2752 | dependencies: 2753 | estraverse: 5.3.0 2754 | 2755 | estraverse@5.3.0: {} 2756 | 2757 | esutils@2.0.3: {} 2758 | 2759 | eventsource@2.0.2: {} 2760 | 2761 | fast-deep-equal@3.1.3: {} 2762 | 2763 | fast-glob@3.3.2: 2764 | dependencies: 2765 | '@nodelib/fs.stat': 2.0.5 2766 | '@nodelib/fs.walk': 1.2.8 2767 | glob-parent: 5.1.2 2768 | merge2: 1.4.1 2769 | micromatch: 4.0.5 2770 | 2771 | fast-json-stable-stringify@2.1.0: {} 2772 | 2773 | fast-levenshtein@2.0.6: {} 2774 | 2775 | fastq@1.17.1: 2776 | dependencies: 2777 | reusify: 1.0.4 2778 | 2779 | file-entry-cache@6.0.1: 2780 | dependencies: 2781 | flat-cache: 3.2.0 2782 | 2783 | filename-reserved-regex@2.0.0: {} 2784 | 2785 | filenamify@4.3.0: 2786 | dependencies: 2787 | filename-reserved-regex: 2.0.0 2788 | strip-outer: 1.0.1 2789 | trim-repeated: 1.0.0 2790 | 2791 | fill-range@7.0.1: 2792 | dependencies: 2793 | to-regex-range: 5.0.1 2794 | 2795 | find-cache-dir@3.3.2: 2796 | dependencies: 2797 | commondir: 1.0.1 2798 | make-dir: 3.1.0 2799 | pkg-dir: 4.2.0 2800 | 2801 | find-up@4.1.0: 2802 | dependencies: 2803 | locate-path: 5.0.0 2804 | path-exists: 4.0.0 2805 | 2806 | find-up@5.0.0: 2807 | dependencies: 2808 | locate-path: 6.0.0 2809 | path-exists: 4.0.0 2810 | 2811 | flat-cache@3.2.0: 2812 | dependencies: 2813 | flatted: 3.3.1 2814 | keyv: 4.5.4 2815 | rimraf: 3.0.2 2816 | 2817 | flatted@3.3.1: {} 2818 | 2819 | follow-redirects@1.15.9(debug@4.3.7): 2820 | optionalDependencies: 2821 | debug: 4.3.7 2822 | 2823 | form-data@4.0.1: 2824 | dependencies: 2825 | asynckit: 0.4.0 2826 | combined-stream: 1.0.8 2827 | mime-types: 2.1.35 2828 | 2829 | fp-ts@2.16.11: {} 2830 | 2831 | fs-extra@11.2.0: 2832 | dependencies: 2833 | graceful-fs: 4.2.11 2834 | jsonfile: 6.1.0 2835 | universalify: 2.0.1 2836 | 2837 | fs.realpath@1.0.0: {} 2838 | 2839 | fsevents@2.3.3: 2840 | optional: true 2841 | 2842 | gensync@1.0.0-beta.2: {} 2843 | 2844 | gh-pages@6.1.1: 2845 | dependencies: 2846 | async: 3.2.5 2847 | commander: 11.1.0 2848 | email-addresses: 5.0.0 2849 | filenamify: 4.3.0 2850 | find-cache-dir: 3.3.2 2851 | fs-extra: 11.2.0 2852 | globby: 6.1.0 2853 | 2854 | glob-parent@5.1.2: 2855 | dependencies: 2856 | is-glob: 4.0.3 2857 | 2858 | glob-parent@6.0.2: 2859 | dependencies: 2860 | is-glob: 4.0.3 2861 | 2862 | glob@7.2.3: 2863 | dependencies: 2864 | fs.realpath: 1.0.0 2865 | inflight: 1.0.6 2866 | inherits: 2.0.4 2867 | minimatch: 3.1.2 2868 | once: 1.4.0 2869 | path-is-absolute: 1.0.1 2870 | 2871 | globals@11.12.0: {} 2872 | 2873 | globals@13.24.0: 2874 | dependencies: 2875 | type-fest: 0.20.2 2876 | 2877 | globals@15.2.0: {} 2878 | 2879 | globby@11.1.0: 2880 | dependencies: 2881 | array-union: 2.1.0 2882 | dir-glob: 3.0.1 2883 | fast-glob: 3.3.2 2884 | ignore: 5.3.1 2885 | merge2: 1.4.1 2886 | slash: 3.0.0 2887 | 2888 | globby@6.1.0: 2889 | dependencies: 2890 | array-union: 1.0.2 2891 | glob: 7.2.3 2892 | object-assign: 4.1.1 2893 | pify: 2.3.0 2894 | pinkie-promise: 2.0.1 2895 | 2896 | globrex@0.1.2: {} 2897 | 2898 | graceful-fs@4.2.11: {} 2899 | 2900 | graphemer@1.4.0: {} 2901 | 2902 | has-flag@3.0.0: {} 2903 | 2904 | has-flag@4.0.0: {} 2905 | 2906 | html-entities@2.3.3: {} 2907 | 2908 | html-tags@3.3.1: {} 2909 | 2910 | ignore@5.3.1: {} 2911 | 2912 | import-fresh@3.3.0: 2913 | dependencies: 2914 | parent-module: 1.0.1 2915 | resolve-from: 4.0.0 2916 | 2917 | imurmurhash@0.1.4: {} 2918 | 2919 | inflight@1.0.6: 2920 | dependencies: 2921 | once: 1.4.0 2922 | wrappy: 1.0.2 2923 | 2924 | inherits@2.0.4: {} 2925 | 2926 | inline-style-parser@0.2.3: {} 2927 | 2928 | is-extglob@2.1.1: {} 2929 | 2930 | is-glob@4.0.3: 2931 | dependencies: 2932 | is-extglob: 2.1.1 2933 | 2934 | is-html@2.0.0: 2935 | dependencies: 2936 | html-tags: 3.3.1 2937 | 2938 | is-number@7.0.0: {} 2939 | 2940 | is-path-inside@3.0.3: {} 2941 | 2942 | is-what@4.1.16: {} 2943 | 2944 | isexe@2.0.0: {} 2945 | 2946 | js-tokens@4.0.0: {} 2947 | 2948 | js-yaml@4.1.0: 2949 | dependencies: 2950 | argparse: 2.0.1 2951 | 2952 | jsesc@2.5.2: {} 2953 | 2954 | json-buffer@3.0.1: {} 2955 | 2956 | json-schema-traverse@0.4.1: {} 2957 | 2958 | json-stable-stringify-without-jsonify@1.0.1: {} 2959 | 2960 | json5@2.2.3: {} 2961 | 2962 | jsonfile@6.1.0: 2963 | dependencies: 2964 | universalify: 2.0.1 2965 | optionalDependencies: 2966 | graceful-fs: 4.2.11 2967 | 2968 | kebab-case@1.0.2: {} 2969 | 2970 | keyv@4.5.4: 2971 | dependencies: 2972 | json-buffer: 3.0.1 2973 | 2974 | known-css-properties@0.30.0: {} 2975 | 2976 | levn@0.4.1: 2977 | dependencies: 2978 | prelude-ls: 1.2.1 2979 | type-check: 0.4.0 2980 | 2981 | locate-path@5.0.0: 2982 | dependencies: 2983 | p-locate: 4.1.0 2984 | 2985 | locate-path@6.0.0: 2986 | dependencies: 2987 | p-locate: 5.0.0 2988 | 2989 | lodash.merge@4.6.2: {} 2990 | 2991 | lru-cache@5.1.1: 2992 | dependencies: 2993 | yallist: 3.1.1 2994 | 2995 | lru-cache@6.0.0: 2996 | dependencies: 2997 | yallist: 4.0.0 2998 | 2999 | make-dir@3.1.0: 3000 | dependencies: 3001 | semver: 6.3.1 3002 | 3003 | merge-anything@5.1.7: 3004 | dependencies: 3005 | is-what: 4.1.16 3006 | 3007 | merge2@1.4.1: {} 3008 | 3009 | micromatch@4.0.5: 3010 | dependencies: 3011 | braces: 3.0.2 3012 | picomatch: 2.3.1 3013 | 3014 | mime-db@1.52.0: {} 3015 | 3016 | mime-types@2.1.35: 3017 | dependencies: 3018 | mime-db: 1.52.0 3019 | 3020 | minimatch@3.1.2: 3021 | dependencies: 3022 | brace-expansion: 1.1.11 3023 | 3024 | minimatch@9.0.4: 3025 | dependencies: 3026 | brace-expansion: 2.0.1 3027 | 3028 | mitt@3.0.1: {} 3029 | 3030 | ms@2.1.2: {} 3031 | 3032 | ms@2.1.3: {} 3033 | 3034 | nanoid@3.3.7: {} 3035 | 3036 | natural-compare@1.4.0: {} 3037 | 3038 | node-fetch@2.7.0: 3039 | dependencies: 3040 | whatwg-url: 5.0.0 3041 | 3042 | node-releases@2.0.14: {} 3043 | 3044 | object-assign@4.1.1: {} 3045 | 3046 | once@1.4.0: 3047 | dependencies: 3048 | wrappy: 1.0.2 3049 | 3050 | optionator@0.9.3: 3051 | dependencies: 3052 | '@aashutoshrathi/word-wrap': 1.2.6 3053 | deep-is: 0.1.4 3054 | fast-levenshtein: 2.0.6 3055 | levn: 0.4.1 3056 | prelude-ls: 1.2.1 3057 | type-check: 0.4.0 3058 | 3059 | p-limit@2.3.0: 3060 | dependencies: 3061 | p-try: 2.2.0 3062 | 3063 | p-limit@3.1.0: 3064 | dependencies: 3065 | yocto-queue: 0.1.0 3066 | 3067 | p-locate@4.1.0: 3068 | dependencies: 3069 | p-limit: 2.3.0 3070 | 3071 | p-locate@5.0.0: 3072 | dependencies: 3073 | p-limit: 3.1.0 3074 | 3075 | p-try@2.2.0: {} 3076 | 3077 | parent-module@1.0.1: 3078 | dependencies: 3079 | callsites: 3.1.0 3080 | 3081 | path-exists@4.0.0: {} 3082 | 3083 | path-is-absolute@1.0.1: {} 3084 | 3085 | path-key@3.1.1: {} 3086 | 3087 | path-type@4.0.0: {} 3088 | 3089 | picocolors@1.0.0: {} 3090 | 3091 | picocolors@1.1.0: {} 3092 | 3093 | picomatch@2.3.1: {} 3094 | 3095 | pify@2.3.0: {} 3096 | 3097 | pinkie-promise@2.0.1: 3098 | dependencies: 3099 | pinkie: 2.0.4 3100 | 3101 | pinkie@2.0.4: {} 3102 | 3103 | pkg-dir@4.2.0: 3104 | dependencies: 3105 | find-up: 4.1.0 3106 | 3107 | postcss@8.4.38: 3108 | dependencies: 3109 | nanoid: 3.3.7 3110 | picocolors: 1.0.0 3111 | source-map-js: 1.2.0 3112 | 3113 | prelude-ls@1.2.1: {} 3114 | 3115 | proxy-from-env@1.1.0: {} 3116 | 3117 | punycode@2.3.1: {} 3118 | 3119 | queue-microtask@1.2.3: {} 3120 | 3121 | resolve-from@4.0.0: {} 3122 | 3123 | reusify@1.0.4: {} 3124 | 3125 | rimraf@3.0.2: 3126 | dependencies: 3127 | glob: 7.2.3 3128 | 3129 | rollup@4.14.1: 3130 | dependencies: 3131 | '@types/estree': 1.0.5 3132 | optionalDependencies: 3133 | '@rollup/rollup-android-arm-eabi': 4.14.1 3134 | '@rollup/rollup-android-arm64': 4.14.1 3135 | '@rollup/rollup-darwin-arm64': 4.14.1 3136 | '@rollup/rollup-darwin-x64': 4.14.1 3137 | '@rollup/rollup-linux-arm-gnueabihf': 4.14.1 3138 | '@rollup/rollup-linux-arm64-gnu': 4.14.1 3139 | '@rollup/rollup-linux-arm64-musl': 4.14.1 3140 | '@rollup/rollup-linux-powerpc64le-gnu': 4.14.1 3141 | '@rollup/rollup-linux-riscv64-gnu': 4.14.1 3142 | '@rollup/rollup-linux-s390x-gnu': 4.14.1 3143 | '@rollup/rollup-linux-x64-gnu': 4.14.1 3144 | '@rollup/rollup-linux-x64-musl': 4.14.1 3145 | '@rollup/rollup-win32-arm64-msvc': 4.14.1 3146 | '@rollup/rollup-win32-ia32-msvc': 4.14.1 3147 | '@rollup/rollup-win32-x64-msvc': 4.14.1 3148 | fsevents: 2.3.3 3149 | 3150 | run-parallel@1.2.0: 3151 | dependencies: 3152 | queue-microtask: 1.2.3 3153 | 3154 | semver@6.3.1: {} 3155 | 3156 | semver@7.6.0: 3157 | dependencies: 3158 | lru-cache: 6.0.0 3159 | 3160 | seroval-plugins@1.3.3(seroval@1.3.2): 3161 | dependencies: 3162 | seroval: 1.3.2 3163 | 3164 | seroval@1.3.2: {} 3165 | 3166 | shebang-command@2.0.0: 3167 | dependencies: 3168 | shebang-regex: 3.0.0 3169 | 3170 | shebang-regex@3.0.0: {} 3171 | 3172 | slash@3.0.0: {} 3173 | 3174 | solid-devtools@0.30.1(solid-js@1.9.9)(vite@5.2.11(@types/node@20.12.5)): 3175 | dependencies: 3176 | '@babel/core': 7.24.4 3177 | '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) 3178 | '@babel/types': 7.24.0 3179 | '@solid-devtools/debugger': 0.23.4(solid-js@1.9.9) 3180 | '@solid-devtools/shared': 0.13.2(solid-js@1.9.9) 3181 | solid-js: 1.9.9 3182 | optionalDependencies: 3183 | vite: 5.2.11(@types/node@20.12.5) 3184 | transitivePeerDependencies: 3185 | - supports-color 3186 | 3187 | solid-js@1.9.9: 3188 | dependencies: 3189 | csstype: 3.1.3 3190 | seroval: 1.3.2 3191 | seroval-plugins: 1.3.3(seroval@1.3.2) 3192 | 3193 | solid-refresh@0.6.3(solid-js@1.9.9): 3194 | dependencies: 3195 | '@babel/generator': 7.24.4 3196 | '@babel/helper-module-imports': 7.24.3 3197 | '@babel/types': 7.24.0 3198 | solid-js: 1.9.9 3199 | 3200 | source-map-js@1.2.0: {} 3201 | 3202 | strip-ansi@6.0.1: 3203 | dependencies: 3204 | ansi-regex: 5.0.1 3205 | 3206 | strip-json-comments@3.1.1: {} 3207 | 3208 | strip-outer@1.0.1: 3209 | dependencies: 3210 | escape-string-regexp: 1.0.5 3211 | 3212 | style-to-object@1.0.6: 3213 | dependencies: 3214 | inline-style-parser: 0.2.3 3215 | 3216 | supports-color@5.5.0: 3217 | dependencies: 3218 | has-flag: 3.0.0 3219 | 3220 | supports-color@7.2.0: 3221 | dependencies: 3222 | has-flag: 4.0.0 3223 | 3224 | text-table@0.2.0: {} 3225 | 3226 | to-fast-properties@2.0.0: {} 3227 | 3228 | to-regex-range@5.0.1: 3229 | dependencies: 3230 | is-number: 7.0.0 3231 | 3232 | tr46@0.0.3: {} 3233 | 3234 | trim-repeated@1.0.0: 3235 | dependencies: 3236 | escape-string-regexp: 1.0.5 3237 | 3238 | ts-api-utils@1.3.0(typescript@5.4.4): 3239 | dependencies: 3240 | typescript: 5.4.4 3241 | 3242 | tsconfck@3.0.3(typescript@5.4.4): 3243 | optionalDependencies: 3244 | typescript: 5.4.4 3245 | 3246 | tweetnacl-util@0.15.1: {} 3247 | 3248 | tweetnacl@1.0.3: {} 3249 | 3250 | type-check@0.4.0: 3251 | dependencies: 3252 | prelude-ls: 1.2.1 3253 | 3254 | type-fest@0.20.2: {} 3255 | 3256 | typescript-eslint@7.8.0(eslint@8.57.0)(typescript@5.4.4): 3257 | dependencies: 3258 | '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.4))(eslint@8.57.0)(typescript@5.4.4) 3259 | '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.4) 3260 | '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.4) 3261 | eslint: 8.57.0 3262 | optionalDependencies: 3263 | typescript: 5.4.4 3264 | transitivePeerDependencies: 3265 | - supports-color 3266 | 3267 | typescript@5.4.4: {} 3268 | 3269 | ua-parser-js@1.0.38: {} 3270 | 3271 | undici-types@5.26.5: {} 3272 | 3273 | universal-user-agent@6.0.1: {} 3274 | 3275 | universalify@2.0.1: {} 3276 | 3277 | update-browserslist-db@1.0.13(browserslist@4.23.0): 3278 | dependencies: 3279 | browserslist: 4.23.0 3280 | escalade: 3.1.2 3281 | picocolors: 1.0.0 3282 | 3283 | uri-js@4.4.1: 3284 | dependencies: 3285 | punycode: 2.3.1 3286 | 3287 | valibot@1.1.0(typescript@5.4.4): 3288 | optionalDependencies: 3289 | typescript: 5.4.4 3290 | 3291 | validate-html-nesting@1.2.2: {} 3292 | 3293 | vite-plugin-mkcert@1.17.6(vite@5.2.11(@types/node@20.12.5)): 3294 | dependencies: 3295 | '@octokit/rest': 20.1.1 3296 | axios: 1.7.7(debug@4.3.7) 3297 | debug: 4.3.7 3298 | picocolors: 1.1.0 3299 | vite: 5.2.11(@types/node@20.12.5) 3300 | transitivePeerDependencies: 3301 | - supports-color 3302 | 3303 | vite-plugin-solid@2.10.2(solid-js@1.9.9)(vite@5.2.11(@types/node@20.12.5)): 3304 | dependencies: 3305 | '@babel/core': 7.24.4 3306 | '@types/babel__core': 7.20.5 3307 | babel-preset-solid: 1.8.16(@babel/core@7.24.4) 3308 | merge-anything: 5.1.7 3309 | solid-js: 1.9.9 3310 | solid-refresh: 0.6.3(solid-js@1.9.9) 3311 | vite: 5.2.11(@types/node@20.12.5) 3312 | vitefu: 0.2.5(vite@5.2.11(@types/node@20.12.5)) 3313 | transitivePeerDependencies: 3314 | - supports-color 3315 | 3316 | vite-tsconfig-paths@4.3.2(typescript@5.4.4)(vite@5.2.11(@types/node@20.12.5)): 3317 | dependencies: 3318 | debug: 4.3.4 3319 | globrex: 0.1.2 3320 | tsconfck: 3.0.3(typescript@5.4.4) 3321 | optionalDependencies: 3322 | vite: 5.2.11(@types/node@20.12.5) 3323 | transitivePeerDependencies: 3324 | - supports-color 3325 | - typescript 3326 | 3327 | vite@5.2.11(@types/node@20.12.5): 3328 | dependencies: 3329 | esbuild: 0.20.2 3330 | postcss: 8.4.38 3331 | rollup: 4.14.1 3332 | optionalDependencies: 3333 | '@types/node': 20.12.5 3334 | fsevents: 2.3.3 3335 | 3336 | vitefu@0.2.5(vite@5.2.11(@types/node@20.12.5)): 3337 | optionalDependencies: 3338 | vite: 5.2.11(@types/node@20.12.5) 3339 | 3340 | webidl-conversions@3.0.1: {} 3341 | 3342 | whatwg-url@5.0.0: 3343 | dependencies: 3344 | tr46: 0.0.3 3345 | webidl-conversions: 3.0.1 3346 | 3347 | which@2.0.2: 3348 | dependencies: 3349 | isexe: 2.0.0 3350 | 3351 | wrappy@1.0.2: {} 3352 | 3353 | yallist@3.1.1: {} 3354 | 3355 | yallist@4.0.0: {} 3356 | 3357 | yocto-queue@0.1.0: {} 3358 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | ignoredBuiltDependencies: 2 | - esbuild 3 | -------------------------------------------------------------------------------- /public/tonconnect-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "url": "https://ton.vote", 3 | "name": "TON Vote", 4 | "iconUrl": "https://ton.vote/logo.png" 5 | } -------------------------------------------------------------------------------- /src/components/App.tsx: -------------------------------------------------------------------------------- 1 | import { Navigate, Route, HashRouter } from '@solidjs/router'; 2 | import { For } from 'solid-js'; 3 | 4 | import { routes } from '@/navigation/routes.js'; 5 | 6 | export function App() { 7 | return ( 8 | 9 | 10 | {(route) => } 11 | 12 | }/> 13 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /src/components/DisplayData/DisplayData.css: -------------------------------------------------------------------------------- 1 | .display-data__line { 2 | display: flex; 3 | align-items: center; 4 | margin-bottom: 8px; 5 | gap: 10px; 6 | flex-flow: wrap; 7 | } 8 | 9 | .display-data__line-title { 10 | border: 1px solid var(--tg-theme-accent-text-color); 11 | background-color: var(--tg-theme-bg-color); 12 | border-radius: 5px; 13 | padding: 2px 8px 4px; 14 | box-sizing: border-box; 15 | } 16 | 17 | .display-data__line-value { 18 | word-break: break-word; 19 | } 20 | -------------------------------------------------------------------------------- /src/components/DisplayData/DisplayData.tsx: -------------------------------------------------------------------------------- 1 | import { isRGB, type RGB as RGBType } from '@tma.js/sdk-solid'; 2 | import { type Component, For, type JSXElement, Match, Switch } from 'solid-js'; 3 | 4 | import { RGB } from '@/components/RGB/RGB.js'; 5 | 6 | import './DisplayData.css'; 7 | 8 | export interface DisplayDataRow { 9 | title: string; 10 | value?: RGBType | string | boolean | JSXElement; 11 | } 12 | 13 | export interface DisplayDataProps { 14 | rows: DisplayDataRow[]; 15 | } 16 | 17 | export const DisplayData: Component = (props) => { 18 | return ( 19 |
20 | 21 | {(row) => ( 22 |
23 | {row.title} 24 | 25 | 26 | 27 | {(color) => } 28 | 29 | 30 | ✔️ 31 | empty 32 | 33 | 34 |
35 | )} 36 |
37 |
38 | ); 39 | }; 40 | -------------------------------------------------------------------------------- /src/components/Link/Link.css: -------------------------------------------------------------------------------- 1 | .link { 2 | text-decoration: none; 3 | color: var(--tg-theme-link-color); 4 | } -------------------------------------------------------------------------------- /src/components/Link/Link.tsx: -------------------------------------------------------------------------------- 1 | import { A, type AnchorProps } from '@solidjs/router'; 2 | import { openLink } from '@tma.js/sdk-solid'; 3 | import type { Component } from 'solid-js'; 4 | 5 | import { classNames } from '@/css/classnames.js'; 6 | 7 | import './Link.css'; 8 | 9 | export const Link: Component = (props) => { 10 | const onClick = (e: MouseEvent) => { 11 | // Compute if target path is external. In this case we would like to open link using 12 | // TMA method. 13 | const targetUrl = new URL(props.href, window.location.toString()); 14 | const currentUrl = new URL(window.location.toString()); 15 | const isExternal = targetUrl.protocol !== currentUrl.protocol 16 | || targetUrl.host !== currentUrl.host; 17 | 18 | if (isExternal) { 19 | e.preventDefault(); 20 | openLink(targetUrl.toString()); 21 | } 22 | }; 23 | 24 | return ( 25 | 30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /src/components/Page/Page.css: -------------------------------------------------------------------------------- 1 | .page { 2 | padding: 0 10px; 3 | box-sizing: border-box; 4 | } 5 | 6 | .page__disclaimer { 7 | margin-bottom: 16px; 8 | } -------------------------------------------------------------------------------- /src/components/Page/Page.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | type Component, 3 | createEffect, 4 | createMemo, 5 | type JSX, onCleanup, 6 | type ParentProps, 7 | } from 'solid-js'; 8 | import { backButton } from '@tma.js/sdk-solid'; 9 | 10 | import { useNavigate } from '@solidjs/router'; 11 | 12 | import './Page.css'; 13 | 14 | export interface PageProps extends ParentProps { 15 | title: string; 16 | disclaimer?: JSX.Element; 17 | /** 18 | * True if it is allowed to go back from this page. 19 | * @default true 20 | */ 21 | back?: boolean; 22 | } 23 | 24 | export const Page: Component = (props) => { 25 | const navigate = useNavigate(); 26 | const back = createMemo(() => typeof props.back === 'boolean' ? props.back : true); 27 | 28 | createEffect(() => { 29 | if (back()) { 30 | backButton.show(); 31 | onCleanup(backButton.onClick(() => { 32 | navigate(-1); 33 | })); 34 | return; 35 | } 36 | backButton.hide(); 37 | }); 38 | 39 | return ( 40 |
41 |

{props.title}

42 | {props.disclaimer &&
{props.disclaimer}
} 43 | {props.children} 44 |
45 | ); 46 | }; 47 | -------------------------------------------------------------------------------- /src/components/RGB/RGB.css: -------------------------------------------------------------------------------- 1 | .rgb { 2 | display: inline-flex; 3 | align-items: center; 4 | gap: 5px; 5 | } 6 | 7 | .rgb__icon { 8 | width: 18px; 9 | aspect-ratio: 1; 10 | border: 1px solid #555; 11 | border-radius: 50%; 12 | } -------------------------------------------------------------------------------- /src/components/RGB/RGB.tsx: -------------------------------------------------------------------------------- 1 | import type { RGB as RGBType } from '@tma.js/sdk-solid'; 2 | import { type Component, type JSX, splitProps } from 'solid-js'; 3 | 4 | import { classNames } from '@/css/classnames.js'; 5 | 6 | import './RGB.css'; 7 | 8 | export type RGBProps = JSX.IntrinsicElements['span'] & { 9 | color: RGBType; 10 | }; 11 | 12 | export const RGB: Component = (props) => ( 13 | 14 | 15 | {props.color} 16 | 17 | ); 18 | -------------------------------------------------------------------------------- /src/components/Root.tsx: -------------------------------------------------------------------------------- 1 | import { ErrorBoundary, type Component, Switch, Match } from 'solid-js'; 2 | 3 | import { App } from '@/components/App.js'; 4 | import { TonConnectUIProvider } from '@/tonconnect/TonConnectUIProvider.js'; 5 | import { publicUrl } from '@/helpers/publicUrl.js'; 6 | 7 | export const Root: Component = () => { 8 | return ( 9 | { 11 | console.error('ErrorBoundary handled error:', err); 12 | 13 | return ( 14 |
15 |

ErrorBoundary handled error:

16 |
17 | 18 | 19 | 20 | {v => v()} 21 | 22 | 23 | {v => v()} 24 | 25 | 26 | 27 |
28 |
29 | ); 30 | }} 31 | > 32 | 33 | 34 | 35 |
36 | ); 37 | }; 38 | -------------------------------------------------------------------------------- /src/css/bem.ts: -------------------------------------------------------------------------------- 1 | import { classNames, isRecord } from '@/css/classnames.js'; 2 | 3 | export interface BlockFn { 4 | (...mods: unknown[]): string; 5 | } 6 | 7 | export interface ElemFn { 8 | (elem: string, ...mods: unknown[]): string; 9 | } 10 | 11 | /** 12 | * Applies mods to the specified element. 13 | * @param element - element name. 14 | * @param mod - mod to apply. 15 | */ 16 | function applyMods(element: string, mod: unknown): string { 17 | if (Array.isArray(mod)) { 18 | return classNames(mod.map(m => applyMods(element, m))); 19 | } 20 | if (isRecord(mod)) { 21 | return classNames( 22 | Object.entries(mod).map(([mod, v]) => v && applyMods(element, mod)), 23 | ); 24 | } 25 | const v = classNames(mod); 26 | return v && `${element}--${v}`; 27 | } 28 | 29 | /** 30 | * Computes final classname for the specified element. 31 | * @param element - element name. 32 | * @param mods - mod to apply. 33 | */ 34 | function computeClassnames(element: string, ...mods: unknown[]): string { 35 | return classNames(element, applyMods(element, mods)); 36 | } 37 | 38 | /** 39 | * @returns A tuple, containing two functions. The first one generates classnames list for the 40 | * block, the second one generates classnames for its elements. 41 | * @param block - BEM block name. 42 | */ 43 | export function bem(block: string): [BlockFn, ElemFn] { 44 | return [ 45 | (...mods) => computeClassnames(block, mods), 46 | (elem, ...mods) => computeClassnames(`${block}__${elem}`, mods), 47 | ]; 48 | } -------------------------------------------------------------------------------- /src/css/classnames.ts: -------------------------------------------------------------------------------- 1 | export function isRecord(v: unknown): v is Record { 2 | return !!v && typeof v === 'object' && !Array.isArray(v); 3 | } 4 | 5 | /** 6 | * Function which joins passed values with space following these rules: 7 | * 1. If value is non-empty string, it will be added to output. 8 | * 2. If value is object, only those keys will be added, which values are truthy. 9 | * 3. If value is array, classNames will be called with this value spread. 10 | * 4. All other values are ignored. 11 | * 12 | * You can find this function to similar one from the package {@link https://www.npmjs.com/package/classnames|classnames}. 13 | * @param values - values array. 14 | * @returns Final class name. 15 | */ 16 | export function classNames(...values: any[]): string { 17 | return values 18 | .map((value) => { 19 | if (typeof value === 'string') { 20 | return value; 21 | } 22 | 23 | if (isRecord(value)) { 24 | return classNames(Object.entries(value).map((entry) => entry[1] && entry[0])); 25 | } 26 | 27 | if (Array.isArray(value)) { 28 | return classNames(...value); 29 | } 30 | }) 31 | .filter(Boolean) 32 | .join(' '); 33 | } 34 | 35 | type UnionStringKeys = U extends U 36 | ? { [K in keyof U]-?: U[K] extends string | undefined ? K : never }[keyof U] 37 | : never; 38 | 39 | type UnionRequiredKeys = U extends U 40 | ? { [K in UnionStringKeys]: (object extends Pick ? never : K) }[UnionStringKeys] 41 | : never; 42 | 43 | type UnionOptionalKeys = Exclude, UnionRequiredKeys>; 44 | 45 | export type MergeClassNames = 46 | // Removes all types from union that will be ignored by the mergeClassNames function. 47 | Exclude extends infer Union 48 | ? 49 | & { [K in UnionRequiredKeys]: string; } 50 | & { [K in UnionOptionalKeys]?: string; } 51 | : never; 52 | 53 | /** 54 | * Merges two sets of classnames. 55 | * 56 | * The function expects to pass an array of objects with values that could be passed to 57 | * the `classNames` function. 58 | * @returns An object with keys from all objects with merged values. 59 | * @see classNames 60 | */ 61 | export function mergeClassNames(...partials: T): MergeClassNames { 62 | return partials.reduce>((acc, partial) => { 63 | if (isRecord(partial)) { 64 | Object.entries(partial).forEach(([key, value]) => { 65 | const className = classNames((acc as any)[key], value); 66 | if (className) { 67 | (acc as any)[key] = className; 68 | } 69 | }); 70 | } 71 | return acc; 72 | }, {} as MergeClassNames); 73 | } -------------------------------------------------------------------------------- /src/helpers/publicUrl.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @returns A complete public URL prefixed with the public static assets base 3 | * path. 4 | * @param path - path to prepend prefix to 5 | */ 6 | export function publicUrl(path: string): string { 7 | // The baseUrl must be ending with the slash. The reason is if the baseUrl will 8 | // equal to "/my-base", then passing the path equal to "tonconnect-manifest.json" will not 9 | // give us the expected result, it will actually be "/tonconnect-manifest.json", but the expected 10 | // one is "/my-base/tonconnect-manifest.json". This is due to the URL constructor. 11 | let baseUrl = import.meta.env.BASE_URL; 12 | if (!baseUrl.endsWith('/')) { 13 | baseUrl += '/'; 14 | } 15 | 16 | let isBaseAbsolute = false; 17 | try { 18 | new URL(baseUrl); 19 | isBaseAbsolute = true; 20 | } catch { /* empty */ 21 | } 22 | 23 | return new URL( 24 | // The path is not allowed to be starting with the slash as long as it will break the 25 | // base URL. For instance, having the "/my-base/" base URL and path 26 | // equal to "/tonconnect-manifest.json", we will not get the expected result like 27 | // "/my-base/tonconnect-manifest.json", but "/tonconnect-manifest.json". 28 | path.replace(/^\/+/, ''), 29 | isBaseAbsolute 30 | ? baseUrl 31 | : window.location.origin + baseUrl, 32 | ).toString(); 33 | } -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: -apple-system, BlinkMacSystemFont, 'Roboto', 'Oxygen', 3 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 4 | sans-serif; 5 | -webkit-font-smoothing: antialiased; 6 | -moz-osx-font-smoothing: grayscale; 7 | line-height: 1.5; 8 | 9 | background: var(--tg-theme-secondary-bg-color, white); 10 | color: var(--tg-theme-text-color, black); 11 | } 12 | 13 | blockquote { 14 | margin: 0; 15 | } 16 | 17 | blockquote p { 18 | padding: 15px; 19 | background: #eee; 20 | border-radius: 5px; 21 | } 22 | 23 | pre { 24 | overflow: auto; 25 | } -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | /* @refresh reload */ 2 | import { render } from 'solid-js/web'; 3 | import { retrieveLaunchParams } from '@tma.js/sdk-solid'; 4 | 5 | import { Root } from '@/components/Root.js'; 6 | import { init } from '@/init.js'; 7 | 8 | import './index.css'; 9 | 10 | // Mock the environment in case, we are outside Telegram. 11 | import './mockEnv.js'; 12 | 13 | try { 14 | const launchParams = retrieveLaunchParams(); 15 | const { tgWebAppPlatform: platform } = launchParams; 16 | const debug = (launchParams.tgWebAppStartParam || '').includes('debug') 17 | || import.meta.env.DEV; 18 | 19 | // Configure all application dependencies. 20 | await init({ 21 | debug, 22 | eruda: debug && ['ios', 'android'].includes(platform), 23 | mockForMacOS: platform === 'macos', 24 | }) 25 | .then(() => { 26 | const root = document.getElementById('root'); 27 | 28 | if (import.meta.env.DEV && !(root instanceof HTMLElement)) { 29 | throw new Error( 30 | 'Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?', 31 | ); 32 | } 33 | 34 | render(() => (), root!); 35 | }); 36 | } catch (e) { 37 | // Handling the issue is on you :) 38 | } 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/init.ts: -------------------------------------------------------------------------------- 1 | import { 2 | setDebug, 3 | themeParams, 4 | initData, 5 | viewport, 6 | init as initSDK, 7 | mockTelegramEnv, 8 | type ThemeParams, 9 | retrieveLaunchParams, 10 | emitEvent, 11 | miniApp, 12 | backButton, 13 | } from '@tma.js/sdk-solid'; 14 | 15 | /** 16 | * Initializes the application and configures its dependencies. 17 | */ 18 | export async function init(options: { 19 | debug: boolean; 20 | eruda: boolean; 21 | mockForMacOS: boolean; 22 | }): Promise { 23 | // Set @telegram-apps/sdk-solid debug mode and initialize it. 24 | setDebug(options.debug); 25 | initSDK(); 26 | 27 | // Add Eruda if needed. 28 | options.eruda && void import('eruda').then(({ default: eruda }) => { 29 | eruda.init(); 30 | eruda.position({ x: window.innerWidth - 50, y: 0 }); 31 | }); 32 | 33 | // Telegram for macOS has a ton of bugs, including cases, when the client doesn't 34 | // even response to the "web_app_request_theme" method. It also generates an incorrect 35 | // event for the "web_app_request_safe_area" method. 36 | if (options.mockForMacOS) { 37 | let firstThemeSent = false; 38 | mockTelegramEnv({ 39 | onEvent(event, next) { 40 | if (event.name === 'web_app_request_theme') { 41 | let tp: ThemeParams = {}; 42 | if (firstThemeSent) { 43 | tp = themeParams.state(); 44 | } else { 45 | firstThemeSent = true; 46 | tp ||= retrieveLaunchParams().tgWebAppThemeParams; 47 | } 48 | return emitEvent('theme_changed', { theme_params: tp }); 49 | } 50 | 51 | if (event.name === 'web_app_request_safe_area') { 52 | return emitEvent('safe_area_changed', { left: 0, top: 0, right: 0, bottom: 0 }); 53 | } 54 | 55 | next(); 56 | }, 57 | }); 58 | } 59 | 60 | // Mount all components used in the project. 61 | backButton.mount.ifAvailable(); 62 | initData.restore(); 63 | 64 | if (miniApp.mount.isAvailable()) { 65 | themeParams.mount(); 66 | miniApp.mount(); 67 | themeParams.bindCssVars(); 68 | } 69 | 70 | if (viewport.mount.isAvailable()) { 71 | viewport.mount().then(() => { 72 | viewport.bindCssVars(); 73 | }); 74 | } 75 | } -------------------------------------------------------------------------------- /src/mockEnv.ts: -------------------------------------------------------------------------------- 1 | import { emitEvent, isTMA, mockTelegramEnv } from '@tma.js/sdk-solid'; 2 | 3 | // It is important, to mock the environment only for development purposes. When building the 4 | // application, import.meta.env.DEV will become false, and the code inside will be tree-shaken, 5 | // so you will not see it in your final bundle. 6 | if (import.meta.env.DEV) { 7 | if (!await isTMA('complete')) { 8 | const themeParams = { 9 | accent_text_color: '#6ab2f2', 10 | bg_color: '#17212b', 11 | button_color: '#5288c1', 12 | button_text_color: '#ffffff', 13 | destructive_text_color: '#ec3942', 14 | header_bg_color: '#17212b', 15 | hint_color: '#708499', 16 | link_color: '#6ab3f3', 17 | secondary_bg_color: '#232e3c', 18 | section_bg_color: '#17212b', 19 | section_header_text_color: '#6ab3f3', 20 | subtitle_text_color: '#708499', 21 | text_color: '#f5f5f5', 22 | } as const; 23 | const noInsets = { left: 0, top: 0, bottom: 0, right: 0 } as const; 24 | 25 | mockTelegramEnv({ 26 | onEvent(e) { 27 | // Here you can write your own handlers for all known Telegram Mini Apps methods: 28 | // https://docs.telegram-mini-apps.com/platform/methods 29 | if (e.name === 'web_app_request_theme') { 30 | return emitEvent('theme_changed', { theme_params: themeParams }); 31 | } 32 | if (e.name === 'web_app_request_viewport') { 33 | return emitEvent('viewport_changed', { 34 | height: window.innerHeight, 35 | width: window.innerWidth, 36 | is_expanded: true, 37 | is_state_stable: true, 38 | }); 39 | } 40 | if (e.name === 'web_app_request_content_safe_area') { 41 | return emitEvent('content_safe_area_changed', noInsets); 42 | } 43 | if (e.name === 'web_app_request_safe_area') { 44 | return emitEvent('safe_area_changed', noInsets); 45 | } 46 | }, 47 | launchParams: new URLSearchParams([ 48 | // Discover more launch parameters: 49 | // https://docs.telegram-mini-apps.com/platform/launch-parameters#parameters-list 50 | ['tgWebAppThemeParams', JSON.stringify(themeParams)], 51 | // Your init data goes here. Learn more about it here: 52 | // https://docs.telegram-mini-apps.com/platform/init-data#parameters-list 53 | // 54 | // Note that to make sure, you are using a valid init data, you must pass it exactly as it 55 | // is sent from the Telegram application. The reason is in case you will sort its keys 56 | // (auth_date, hash, user, etc.) or values your own way, init data validation will more 57 | // likely to fail on your server side. So, to make sure you are working with a valid init 58 | // data, it is better to take a real one from your application and paste it here. It should 59 | // look something like this (a correctly encoded URL search params): 60 | // ``` 61 | // user=%7B%22id%22%3A279058397%2C%22first_name%22%3A%22Vladislav%22%2C%22last_name%22... 62 | // ``` 63 | // But in case you don't really need a valid init data, use this one: 64 | ['tgWebAppData', new URLSearchParams([ 65 | ['auth_date', (new Date().getTime() / 1000 | 0).toString()], 66 | ['hash', 'some-hash'], 67 | ['signature', 'some-signature'], 68 | ['user', JSON.stringify({ id: 1, first_name: 'Vladislav' })], 69 | ]).toString()], 70 | ['tgWebAppVersion', '8.4'], 71 | ['tgWebAppPlatform', 'tdesktop'], 72 | ]), 73 | }); 74 | 75 | console.info( 76 | '⚠️ As long as the current environment was not considered as the Telegram-based one, it was mocked. Take a note, that you should not do it in production and current behavior is only specific to the development process. Environment mocking is also applied only in development mode. So, after building the application, you will not see this behavior and related warning, leading to crashing the application outside Telegram.', 77 | ); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/navigation/routes.tsx: -------------------------------------------------------------------------------- 1 | import type { Component } from 'solid-js'; 2 | 3 | import { IndexPage } from '@/pages/IndexPage/IndexPage.js'; 4 | import { InitDataPage } from '@/pages/InitDataPage/InitDataPage.js'; 5 | import { LaunchParamsPage } from '@/pages/LaunchParamsPage.js'; 6 | import { ThemeParamsPage } from '@/pages/ThemeParamsPage.js'; 7 | import { TonConnectPage } from '@/pages/TonConnectPage/TonConnectPage.js'; 8 | 9 | interface Route { 10 | path: string; 11 | Component: Component; 12 | title?: string; 13 | Icon?: Component; 14 | } 15 | 16 | export const routes: Route[] = [ 17 | { path: '/', Component: IndexPage }, 18 | { path: '/init-data', Component: InitDataPage, title: 'Init Data' }, 19 | { path: '/theme-params', Component: ThemeParamsPage, title: 'Theme Params' }, 20 | { path: '/launch-params', Component: LaunchParamsPage, title: 'Launch Params' }, 21 | { 22 | path: '/ton-connect', 23 | Component: TonConnectPage, 24 | title: 'TON Connect', 25 | Icon: () => ( 26 | 33 | 37 | 41 | 42 | ), 43 | }, 44 | ]; 45 | -------------------------------------------------------------------------------- /src/pages/IndexPage/IndexPage.css: -------------------------------------------------------------------------------- 1 | .index-page__links { 2 | list-style: none; 3 | padding-left: 0; 4 | } 5 | 6 | .index-page__link { 7 | font-weight: bold; 8 | display: inline-flex; 9 | gap: 5px; 10 | } 11 | 12 | .index-page__link-item + .index-page__link-item { 13 | margin-top: 10px; 14 | } 15 | 16 | .index-page__link-icon { 17 | width: 20px; 18 | display: block; 19 | } 20 | 21 | .index-page__link-icon svg { 22 | display: block; 23 | } -------------------------------------------------------------------------------- /src/pages/IndexPage/IndexPage.tsx: -------------------------------------------------------------------------------- 1 | import { For, Show, type Component } from 'solid-js'; 2 | import { Dynamic } from 'solid-js/web'; 3 | 4 | import { Link } from '@/components/Link/Link.js'; 5 | import { Page } from '@/components/Page/Page.js'; 6 | import { routes } from '@/navigation/routes.js'; 7 | 8 | import './IndexPage.css'; 9 | 10 | export const IndexPage: Component = () => { 11 | return ( 12 | 13 |

14 | This page is a home page in this boilerplate. You can use the links below to visit other 15 | pages with their own functionality. 16 |

17 | 37 |
38 | ); 39 | }; 40 | -------------------------------------------------------------------------------- /src/pages/InitDataPage/InitDataPage.css: -------------------------------------------------------------------------------- 1 | .init-data-page__section + .init-data-page__section { 2 | margin-top: 12px; 3 | } 4 | 5 | .init-data-page__section-title { 6 | margin-bottom: 4px; 7 | } -------------------------------------------------------------------------------- /src/pages/InitDataPage/InitDataPage.tsx: -------------------------------------------------------------------------------- 1 | import { initData, type User, useSignal } from '@tma.js/sdk-solid'; 2 | import { createMemo, Show, type Component } from 'solid-js'; 3 | 4 | import { 5 | DisplayData, 6 | type DisplayDataRow, 7 | } from '@/components/DisplayData/DisplayData.js'; 8 | import { Link } from '@/components/Link/Link.js'; 9 | import { Page } from '@/components/Page/Page.js'; 10 | 11 | import './InitDataPage.css'; 12 | 13 | function getUserRows(user: User): DisplayDataRow[] { 14 | return Object.entries(user).map(([title, value]) => ({ title, value })); 15 | } 16 | 17 | export const InitDataPage: Component = () => { 18 | const initDataState = useSignal(initData.state); 19 | const initDataRaw = useSignal(initData.raw); 20 | 21 | const initDataRows = createMemo(() => { 22 | const state = initDataState(); 23 | const raw = initDataRaw(); 24 | if (!state || !raw) { 25 | return; 26 | } 27 | return [ 28 | { title: 'raw', value: raw }, 29 | ...Object.entries(initDataState).reduce((acc, [title, value]) => { 30 | if (value instanceof Date) { 31 | acc.push({ title, value: value.toISOString() }); 32 | } else if (!value || typeof value !== 'object') { 33 | acc.push({ title, value }); 34 | } 35 | return acc; 36 | }, []), 37 | ]; 38 | }); 39 | 40 | const userRows = createMemo(() => { 41 | const user = initDataState()?.user; 42 | return user ? getUserRows(user) : undefined; 43 | }); 44 | 45 | const receiverRows = createMemo(() => { 46 | const receiver = initDataState()?.receiver; 47 | return receiver ? getUserRows(receiver) : undefined; 48 | }); 49 | 50 | const chatRows = createMemo(() => { 51 | const chat = initDataState()?.chat; 52 | return chat 53 | ? Object.entries(chat).map(([title, value]) => ({ title, value })) 54 | : undefined; 55 | }); 56 | 57 | return ( 58 | 62 | This page displays application 63 | {' '} 64 | 65 | init data 66 | 67 | . 68 | 69 | )} 70 | > 71 | Application was launched with missing init data
} 74 | > 75 | {(rows) => ( 76 | <> 77 |
78 |

Init data

79 | 80 |
81 | 82 |
83 |

User

84 | User information missing}> 86 | {(uRows) => } 87 | 88 |
89 | 90 |
91 |

Receiver

92 | Receiver information missing}> 94 | {(rRows) => } 95 | 96 |
97 | 98 |
99 |

Chat

100 | Chat information missing}> 102 | {(cRows) => } 103 | 104 |
105 | 106 | )} 107 | 108 | 109 | ); 110 | }; 111 | -------------------------------------------------------------------------------- /src/pages/LaunchParamsPage.tsx: -------------------------------------------------------------------------------- 1 | import { retrieveLaunchParams } from '@tma.js/sdk-solid'; 2 | import type { Component } from 'solid-js'; 3 | 4 | import { DisplayData } from '@/components/DisplayData/DisplayData.js'; 5 | import { Link } from '@/components/Link/Link.js'; 6 | import { Page } from '@/components/Page/Page.js'; 7 | 8 | export const LaunchParamsPage: Component = () => { 9 | const lp = retrieveLaunchParams(); 10 | 11 | return ( 12 | 16 | This page displays application 17 | {' '} 18 | 19 | launch parameters 20 | 21 | . 22 | 23 | )} 24 | > 25 | View }, 33 | { title: 'tgWebAppThemeParams', value: View }, 34 | ]} 35 | /> 36 | 37 | ); 38 | }; 39 | -------------------------------------------------------------------------------- /src/pages/ThemeParamsPage.tsx: -------------------------------------------------------------------------------- 1 | import { useSignal, themeParams } from '@tma.js/sdk-solid'; 2 | import type { Component } from 'solid-js'; 3 | 4 | import { DisplayData } from '@/components/DisplayData/DisplayData.js'; 5 | import { Link } from '@/components/Link/Link.js'; 6 | import { Page } from '@/components/Page/Page.js'; 7 | 8 | export const ThemeParamsPage: Component = () => { 9 | const tpState = useSignal(themeParams.state); 10 | 11 | return ( 12 | 16 | This page displays current 17 | {' '} 18 | 19 | theme parameters 20 | 21 | . It is reactive, so, changing theme externally will lead to this page updates. 22 | 23 | )} 24 | > 25 | ({ 30 | title: title 31 | .replace(/[A-Z]/g, (m) => `_${m.toLowerCase()}`) 32 | .replace(/background/, 'bg'), 33 | value, 34 | })) 35 | } 36 | /> 37 | 38 | ); 39 | }; 40 | -------------------------------------------------------------------------------- /src/pages/TonConnectPage/TonConnectPage.css: -------------------------------------------------------------------------------- 1 | .ton-connect-page__button-container { 2 | display: flex; 3 | align-items: center; 4 | justify-content: flex-end; 5 | } 6 | 7 | .ton-connect-page__provider { 8 | display: flex; 9 | align-items: center; 10 | gap: 15px; 11 | margin-bottom: 16px; 12 | } 13 | 14 | .ton-connect-page__provider-image { 15 | border-radius: 5px; 16 | } 17 | 18 | .ton-connect-page__provider-meta { 19 | display: flex; 20 | flex-direction: column; 21 | } 22 | 23 | .ton-connect-page__provider-wallet-name { 24 | font-weight: bold; 25 | font-size: 20px; 26 | margin: 0; 27 | } 28 | 29 | .ton-connect-page__provider-app-name { 30 | opacity: .4; 31 | font-weight: 400; 32 | font-size: 14px; 33 | vertical-align: top; 34 | } -------------------------------------------------------------------------------- /src/pages/TonConnectPage/TonConnectPage.tsx: -------------------------------------------------------------------------------- 1 | import { Show, type Component } from 'solid-js'; 2 | 3 | import { DisplayData } from '@/components/DisplayData/DisplayData.js'; 4 | import { Link } from '@/components/Link/Link.js'; 5 | import { Page } from '@/components/Page/Page.js'; 6 | import { TonConnectButton } from '@/tonconnect/TonConnectButton.js'; 7 | import { useTonWallet } from '@/tonconnect/useTonWallet.js'; 8 | 9 | import './TonConnectPage.css'; 10 | 11 | export const TonConnectPage: Component = () => { 12 | const wallet = useTonWallet(); 13 | 14 | return ( 15 | 16 | 20 | To display the data related to the TON Connect, it is required to connect your wallet. 21 |

22 | } 23 | > 24 | {(walletBasic) => { 25 | const walletExtended = () => { 26 | const w = walletBasic(); 27 | return 'imageUrl' in w ? w : null; 28 | }; 29 | const account = () => walletBasic().account; 30 | 31 | return ( 32 | <> 33 | 34 | {(w) => ( 35 |
36 | Provider logo 43 |
44 |

45 | {w().name}  46 | 47 | ({w().appName}) 48 | 49 |

50 | 51 | About connected wallet 52 | 53 |
54 |
55 | )} 56 |
57 | 64 | 65 | ); 66 | }} 67 |
68 |
69 | 70 |
71 |
72 | ); 73 | }; 74 | -------------------------------------------------------------------------------- /src/tonconnect/TonConnectButton.tsx: -------------------------------------------------------------------------------- 1 | import { onCleanup, onMount, type Component } from 'solid-js'; 2 | 3 | import { useTonConnectUI } from '@/tonconnect/TonConnectUIContext.js'; 4 | 5 | export const TonConnectButton: Component = () => { 6 | const [, { setUIOptions }] = useTonConnectUI(); 7 | const buttonRootId = 'ton-connect-button'; 8 | 9 | onMount(() => { 10 | setUIOptions({ buttonRootId }); 11 | }); 12 | 13 | onCleanup(() => { 14 | setUIOptions({ buttonRootId: null }); 15 | }); 16 | 17 | return
; 18 | }; 19 | -------------------------------------------------------------------------------- /src/tonconnect/TonConnectUIContext.ts: -------------------------------------------------------------------------------- 1 | import { createContext, useContext } from 'solid-js'; 2 | import type { TonConnectUI, TonConnectUiOptions } from '@tonconnect/ui'; 3 | 4 | export type TonConnectUIContextType = [ 5 | get: () => TonConnectUI, 6 | { 7 | setUIOptions(options: TonConnectUiOptions): void; 8 | }, 9 | ]; 10 | 11 | export const TonConnectUIContext = createContext(); 12 | 13 | export function useTonConnectUI(): TonConnectUIContextType { 14 | const context = useContext(TonConnectUIContext); 15 | if (!context) { 16 | throw new Error('Unable to get TonConnectUIContext'); 17 | } 18 | return context; 19 | } 20 | -------------------------------------------------------------------------------- /src/tonconnect/TonConnectUIProvider.tsx: -------------------------------------------------------------------------------- 1 | import { TonConnectUI, type TonConnectUiOptions } from '@tonconnect/ui'; 2 | import { createMemo, type Component, type ParentProps } from 'solid-js'; 3 | 4 | import { TonConnectUIContext } from '@/tonconnect/TonConnectUIContext.js'; 5 | 6 | export interface TonConnectUIProviderProps extends ParentProps { 7 | manifestUrl: string; 8 | } 9 | 10 | // FIXME: Well, we found this code in the official tonconnect implementation for React. Doesn't 11 | // seem to work the other way due to **constructor side effects**. Sad. 12 | // https://github.com/ton-connect/sdk/blob/main/packages/ui-react/src/components/TonConnectUIProvider.tsx#L75 13 | let cached: TonConnectUI | undefined; 14 | 15 | export const TonConnectUIProvider: Component = (props) => { 16 | const tonConnectUI = createMemo(() => { 17 | return cached || (cached = new TonConnectUI({ 18 | manifestUrl: props.manifestUrl, 19 | })); 20 | }); 21 | 22 | return ( 23 | 33 | {props.children} 34 | 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /src/tonconnect/useTonConnectUI.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'solid-js'; 2 | 3 | import { 4 | TonConnectUIContext, 5 | type TonConnectUIContextType, 6 | } from '@/tonconnect/TonConnectUIContext.js'; 7 | 8 | export function useTonConnectUI(): TonConnectUIContextType { 9 | const context = useContext(TonConnectUIContext); 10 | if (!context) { 11 | throw new Error('Unable to get TonConnectUIContext'); 12 | } 13 | return context; 14 | } 15 | -------------------------------------------------------------------------------- /src/tonconnect/useTonWallet.ts: -------------------------------------------------------------------------------- 1 | import { createEffect, createSignal, onCleanup, type Accessor } from 'solid-js'; 2 | import type { Wallet, WalletInfoWithOpenMethod } from '@tonconnect/ui'; 3 | 4 | import { useTonConnectUI } from './useTonConnectUI.js'; 5 | 6 | /** 7 | * Use it to get user's current ton wallet. If wallet is not connected hook will return null. 8 | * @see Original React code: 9 | * https://github.com/ton-connect/sdk/blob/main/packages/ui-react/src/hooks/useTonWallet.ts 10 | */ 11 | export function useTonWallet(): Accessor { 12 | const [tonConnectUI] = useTonConnectUI(); 13 | const [wallet, setWallet] = createSignal( 14 | tonConnectUI().wallet || null, 15 | ); 16 | 17 | createEffect(() => onCleanup( 18 | tonConnectUI().onStatusChange((value) => { 19 | setWallet(value); 20 | }), 21 | )); 22 | 23 | return wallet; 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "esModuleInterop": true, 5 | "isolatedModules": true, 6 | "jsx": "preserve", 7 | "jsxImportSource": "solid-js", 8 | "lib": [ 9 | "ES2020", 10 | "DOM", 11 | "DOM.Iterable" 12 | ], 13 | "module": "NodeNext", 14 | "moduleResolution": "NodeNext", 15 | "noEmit": true, 16 | "noFallthroughCasesInSwitch": true, 17 | "noUnusedLocals": true, 18 | "noUnusedParameters": true, 19 | "paths": { 20 | "@/*": [ 21 | "./src/*" 22 | ] 23 | }, 24 | "resolveJsonModule": true, 25 | "skipLibCheck": true, 26 | "strict": true, 27 | "target": "ESNext", 28 | "types": [ 29 | "vite/client" 30 | ] 31 | }, 32 | "include": [ 33 | "src" 34 | ], 35 | "references": [ 36 | { 37 | "path": "./tsconfig.node.json" 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import solidPlugin from 'vite-plugin-solid'; 3 | import tsconfigPaths from 'vite-tsconfig-paths'; 4 | import mkcert from 'vite-plugin-mkcert'; 5 | 6 | export default defineConfig({ 7 | base: '/solidjs-template', 8 | plugins: [ 9 | // Uncomment the following line to enable solid-devtools. 10 | // For more info see https://github.com/thetarnav/solid-devtools/tree/main/packages/extension#readme 11 | // devtools(), 12 | solidPlugin(), 13 | // Allows using the compilerOptions.paths property in tsconfig.json. 14 | // https://www.npmjs.com/package/vite-tsconfig-paths 15 | tsconfigPaths(), 16 | // Creates a custom SSL certificate valid for the local machine. 17 | // Using this plugin requires admin rights on the first dev-mode launch. 18 | // https://www.npmjs.com/package/vite-plugin-mkcert 19 | process.env.HTTPS && mkcert(), 20 | ], 21 | build: { 22 | target: 'esnext', 23 | }, 24 | publicDir: './public', 25 | server: { 26 | // Exposes your dev server and makes it accessible for the devices in the same network. 27 | host: true, 28 | }, 29 | }); 30 | --------------------------------------------------------------------------------