├── .github └── workflows │ ├── main.yml │ └── size.yml ├── .gitignore ├── LICENSE ├── README.md ├── assets └── header.svg ├── package.json ├── pnpm-lock.yaml ├── site ├── .gitignore ├── README.md ├── assets │ ├── arrow.svg │ ├── butter-1.svg │ ├── butter-2.png │ ├── butter-2.svg │ ├── checkmark.svg │ ├── github.svg │ ├── logo-small.svg │ └── logo.svg ├── components │ ├── code.tsx │ ├── docs-layout.tsx │ ├── emoji-button.tsx │ └── sections │ │ ├── footer.tsx │ │ ├── splitbee-counter.tsx │ │ ├── toast-example.tsx │ │ └── toaster-example.tsx ├── next-env.d.ts ├── next.config.mjs ├── package.json ├── pages │ ├── _app.tsx │ ├── docs │ │ ├── index.mdx │ │ ├── styling.mdx │ │ ├── toast-bar.mdx │ │ ├── toast.mdx │ │ ├── toaster.mdx │ │ ├── use-toaster-store.mdx │ │ ├── use-toaster.mdx │ │ └── version-2.mdx │ └── index.tsx ├── pnpm-lock.yaml ├── postcss.config.js ├── public │ ├── favicon.png │ └── social-image.png ├── styles │ ├── main.css │ ├── prism-theme.css │ └── tailwind-utils.css ├── tailwind.config.js ├── tsconfig.json └── types │ ├── mdx.d.ts │ └── svg.d.ts ├── src ├── components │ ├── checkmark.tsx │ ├── error.tsx │ ├── loader.tsx │ ├── toast-bar.tsx │ ├── toast-icon.tsx │ └── toaster.tsx ├── core │ ├── store.ts │ ├── toast.ts │ ├── types.ts │ ├── use-toaster.ts │ └── utils.ts ├── headless │ └── index.ts └── index.ts ├── test └── toast.test.tsx ├── tsconfig.json └── tsup.config.ts /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [push] 3 | jobs: 4 | build: 5 | name: Build 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v2 9 | - uses: pnpm/action-setup@v2.2.2 10 | with: 11 | version: 7 12 | - name: Use Node.js ${{ matrix.node-version }} 13 | uses: actions/setup-node@v2 14 | with: 15 | node-version: ${{ matrix.node-version }} 16 | cache: 'pnpm' 17 | - name: Install dependencies 18 | run: pnpm install 19 | - name: Build package 20 | run: pnpm build 21 | -------------------------------------------------------------------------------- /.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v2 10 | - uses: pnpm/action-setup@v2.2.2 11 | with: 12 | version: 7 13 | - uses: andresz1/size-limit-action@v1 14 | with: 15 | github_token: ${{ secrets.GITHUB_TOKEN }} 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .cache 5 | dist 6 | /headless 7 | .vscode 8 | .vercel 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Timo Lins 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | react-hot-toast - Try it out 2 | 3 |
4 | NPM Version 5 | minzipped size 6 | Build Status 7 | 8 |
9 |
10 |
Smoking hot Notifications for React.
11 |
Lightweight, customizable and beautiful by default.
12 |
13 |
14 | Website 15 | · 16 | Documentation 17 | · 18 | Twitter 19 |
20 | 21 |
22 |
23 | Cooked by Timo Lins 👨‍🍳 24 |
25 | 26 |
27 | 28 | ## Features 29 | 30 | - 🔥 **Hot by default** 31 | - 🔩 **Easily Customizable** 32 | - ⏳ **Promise API** - _Automatic loader from a promise_ 33 | - 🕊 **Lightweight** - _less than 5kb including styles_ 34 | - ✅ **Accessible** 35 | - 🤯 **Headless Hooks** - _Create your own with [`useToaster()`](https://react-hot-toast.com/docs/use-toaster)_ 36 | 37 | ## Installation 38 | 39 | #### With yarn 40 | 41 | ```sh 42 | yarn add react-hot-toast 43 | ``` 44 | 45 | #### With NPM 46 | 47 | ```sh 48 | npm install react-hot-toast 49 | ``` 50 | 51 | ## Getting Started 52 | 53 | Add the Toaster to your app first. It will take care of rendering all notifications emitted. Now you can trigger `toast()` from anywhere! 54 | 55 | ```jsx 56 | import toast, { Toaster } from 'react-hot-toast'; 57 | 58 | const notify = () => toast('Here is your toast.'); 59 | 60 | const App = () => { 61 | return ( 62 |
63 | 64 | 65 |
66 | ); 67 | }; 68 | ``` 69 | 70 | ## Documentation 71 | 72 | Find the full API reference on [official documentation](https://react-hot-toast.com/docs). 73 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-hot-toast", 3 | "description": "Smoking hot React Notifications. Lightweight, customizable and beautiful by default.", 4 | "version": "2.3.0", 5 | "author": "Timo Lins", 6 | "license": "MIT", 7 | "repository": "timolins/react-hot-toast", 8 | "keywords": [ 9 | "react", 10 | "notifications", 11 | "toast", 12 | "snackbar" 13 | ], 14 | "main": "dist/index.js", 15 | "types": "dist/index.d.ts", 16 | "exports": { 17 | "./package.json": "./package.json", 18 | ".": { 19 | "types": "./dist/index.d.ts", 20 | "import": "./dist/index.mjs", 21 | "require": "./dist/index.js" 22 | }, 23 | "./headless": { 24 | "types": "./headless/index.d.ts", 25 | "import": "./headless/index.mjs", 26 | "require": "./headless/index.js" 27 | } 28 | }, 29 | "files": [ 30 | "headless", 31 | "dist", 32 | "src" 33 | ], 34 | "engines": { 35 | "node": ">=10" 36 | }, 37 | "scripts": { 38 | "start": "tsup --watch", 39 | "build": "tsup", 40 | "test": "echo \"No test specified\"", 41 | "setup": "pnpm i && cd site && pnpm i && cd .. && pnpm run link", 42 | "link": "pnpm link ./site/node_modules/react && pnpm link ./site/node_modules/react-dom", 43 | "size": "size-limit" 44 | }, 45 | "husky": { 46 | "hooks": { 47 | "pre-commit": "prettier src --ignore-unknown --write" 48 | } 49 | }, 50 | "prettier": { 51 | "printWidth": 80, 52 | "semi": true, 53 | "singleQuote": true, 54 | "arrowParens": "always", 55 | "trailingComma": "es5" 56 | }, 57 | "size-limit": [ 58 | { 59 | "path": "dist/index.js", 60 | "limit": "5 KB" 61 | }, 62 | { 63 | "path": "dist/index.mjs", 64 | "limit": "5 KB" 65 | }, 66 | { 67 | "path": "headless/index.js", 68 | "limit": "2 KB" 69 | }, 70 | { 71 | "path": "headless/index.mjs", 72 | "limit": "2 KB" 73 | } 74 | ], 75 | "devDependencies": { 76 | "@size-limit/preset-small-lib": "^7.0.8", 77 | "@types/react": "^17.0.0", 78 | "@types/react-dom": "^17.0.0", 79 | "csstype": "^3.0.7", 80 | "prettier": "^2.7.1", 81 | "size-limit": "^7.0.8", 82 | "tsup": "^6.1.3", 83 | "typescript": "^4.7.4" 84 | }, 85 | "dependencies": { 86 | "goober": "^2.1.10" 87 | }, 88 | "peerDependencies": { 89 | "react": ">=16", 90 | "react-dom": ">=16" 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@size-limit/preset-small-lib': ^7.0.8 5 | '@types/react': ^17.0.0 6 | '@types/react-dom': ^17.0.0 7 | csstype: ^3.0.7 8 | goober: ^2.1.10 9 | prettier: ^2.7.1 10 | size-limit: ^7.0.8 11 | tsup: ^6.1.3 12 | typescript: ^4.7.4 13 | 14 | dependencies: 15 | goober: 2.1.10_csstype@3.1.0 16 | 17 | devDependencies: 18 | '@size-limit/preset-small-lib': 7.0.8_size-limit@7.0.8 19 | '@types/react': 17.0.47 20 | '@types/react-dom': 17.0.17 21 | csstype: 3.1.0 22 | prettier: 2.7.1 23 | size-limit: 7.0.8 24 | tsup: 6.1.3_typescript@4.7.4 25 | typescript: 4.7.4 26 | 27 | packages: 28 | 29 | /@nodelib/fs.scandir/2.1.5: 30 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 31 | engines: {node: '>= 8'} 32 | dependencies: 33 | '@nodelib/fs.stat': 2.0.5 34 | run-parallel: 1.2.0 35 | dev: true 36 | 37 | /@nodelib/fs.stat/2.0.5: 38 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 39 | engines: {node: '>= 8'} 40 | dev: true 41 | 42 | /@nodelib/fs.walk/1.2.8: 43 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 44 | engines: {node: '>= 8'} 45 | dependencies: 46 | '@nodelib/fs.scandir': 2.1.5 47 | fastq: 1.13.0 48 | dev: true 49 | 50 | /@size-limit/esbuild/7.0.8_size-limit@7.0.8: 51 | resolution: {integrity: sha512-AzCrxJJThDvHrBNoolebYVgXu46c6HuS3fOxoXr3V0YWNM0qz81z5F3j7RruzboZnls8ZgME4WrH6GM5rB9gtA==} 52 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 53 | peerDependencies: 54 | size-limit: 7.0.8 55 | dependencies: 56 | esbuild: 0.14.48 57 | nanoid: 3.3.4 58 | size-limit: 7.0.8 59 | dev: true 60 | 61 | /@size-limit/file/7.0.8_size-limit@7.0.8: 62 | resolution: {integrity: sha512-1KeFQuMXIXAH/iELqIX7x+YNYDFvzIvmxcp9PrdwEoSNL0dXdaDIo9WE/yz8xvOmUcKaLfqbWkL75DM0k91WHQ==} 63 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 64 | peerDependencies: 65 | size-limit: 7.0.8 66 | dependencies: 67 | semver: 7.3.5 68 | size-limit: 7.0.8 69 | dev: true 70 | 71 | /@size-limit/preset-small-lib/7.0.8_size-limit@7.0.8: 72 | resolution: {integrity: sha512-CT8nIYA/c2CSD+X4rAUgwqYccQMahJ6rBnaZxvi3YKFdkXIbuGNXHNjHsYaFksgwG9P4UjG/unyO5L73f3zQBw==} 73 | peerDependencies: 74 | size-limit: 7.0.8 75 | dependencies: 76 | '@size-limit/esbuild': 7.0.8_size-limit@7.0.8 77 | '@size-limit/file': 7.0.8_size-limit@7.0.8 78 | size-limit: 7.0.8 79 | dev: true 80 | 81 | /@types/prop-types/15.7.5: 82 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 83 | dev: true 84 | 85 | /@types/react-dom/17.0.17: 86 | resolution: {integrity: sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg==} 87 | dependencies: 88 | '@types/react': 17.0.47 89 | dev: true 90 | 91 | /@types/react/17.0.47: 92 | resolution: {integrity: sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==} 93 | dependencies: 94 | '@types/prop-types': 15.7.5 95 | '@types/scheduler': 0.16.2 96 | csstype: 3.1.0 97 | dev: true 98 | 99 | /@types/scheduler/0.16.2: 100 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 101 | dev: true 102 | 103 | /any-promise/1.3.0: 104 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 105 | dev: true 106 | 107 | /anymatch/3.1.2: 108 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 109 | engines: {node: '>= 8'} 110 | dependencies: 111 | normalize-path: 3.0.0 112 | picomatch: 2.3.1 113 | dev: true 114 | 115 | /array-union/2.1.0: 116 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 117 | engines: {node: '>=8'} 118 | dev: true 119 | 120 | /balanced-match/1.0.2: 121 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 122 | dev: true 123 | 124 | /binary-extensions/2.2.0: 125 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 126 | engines: {node: '>=8'} 127 | dev: true 128 | 129 | /brace-expansion/1.1.11: 130 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 131 | dependencies: 132 | balanced-match: 1.0.2 133 | concat-map: 0.0.1 134 | dev: true 135 | 136 | /braces/3.0.2: 137 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 138 | engines: {node: '>=8'} 139 | dependencies: 140 | fill-range: 7.0.1 141 | dev: true 142 | 143 | /bundle-require/3.0.4_esbuild@0.14.48: 144 | resolution: {integrity: sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A==} 145 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 146 | peerDependencies: 147 | esbuild: '>=0.13' 148 | dependencies: 149 | esbuild: 0.14.48 150 | load-tsconfig: 0.2.3 151 | dev: true 152 | 153 | /bytes-iec/3.1.1: 154 | resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} 155 | engines: {node: '>= 0.8'} 156 | dev: true 157 | 158 | /cac/6.7.12: 159 | resolution: {integrity: sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==} 160 | engines: {node: '>=8'} 161 | dev: true 162 | 163 | /chokidar/3.5.3: 164 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 165 | engines: {node: '>= 8.10.0'} 166 | dependencies: 167 | anymatch: 3.1.2 168 | braces: 3.0.2 169 | glob-parent: 5.1.2 170 | is-binary-path: 2.1.0 171 | is-glob: 4.0.3 172 | normalize-path: 3.0.0 173 | readdirp: 3.6.0 174 | optionalDependencies: 175 | fsevents: 2.3.2 176 | dev: true 177 | 178 | /ci-job-number/1.2.2: 179 | resolution: {integrity: sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==} 180 | dev: true 181 | 182 | /commander/4.1.1: 183 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 184 | engines: {node: '>= 6'} 185 | dev: true 186 | 187 | /concat-map/0.0.1: 188 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 189 | dev: true 190 | 191 | /cross-spawn/7.0.3: 192 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 193 | engines: {node: '>= 8'} 194 | dependencies: 195 | path-key: 3.1.1 196 | shebang-command: 2.0.0 197 | which: 2.0.2 198 | dev: true 199 | 200 | /csstype/3.1.0: 201 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} 202 | 203 | /debug/4.3.4: 204 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 205 | engines: {node: '>=6.0'} 206 | peerDependencies: 207 | supports-color: '*' 208 | peerDependenciesMeta: 209 | supports-color: 210 | optional: true 211 | dependencies: 212 | ms: 2.1.2 213 | dev: true 214 | 215 | /dir-glob/3.0.1: 216 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 217 | engines: {node: '>=8'} 218 | dependencies: 219 | path-type: 4.0.0 220 | dev: true 221 | 222 | /esbuild-android-64/0.14.48: 223 | resolution: {integrity: sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==} 224 | engines: {node: '>=12'} 225 | cpu: [x64] 226 | os: [android] 227 | requiresBuild: true 228 | dev: true 229 | optional: true 230 | 231 | /esbuild-android-arm64/0.14.48: 232 | resolution: {integrity: sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==} 233 | engines: {node: '>=12'} 234 | cpu: [arm64] 235 | os: [android] 236 | requiresBuild: true 237 | dev: true 238 | optional: true 239 | 240 | /esbuild-darwin-64/0.14.48: 241 | resolution: {integrity: sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==} 242 | engines: {node: '>=12'} 243 | cpu: [x64] 244 | os: [darwin] 245 | requiresBuild: true 246 | dev: true 247 | optional: true 248 | 249 | /esbuild-darwin-arm64/0.14.48: 250 | resolution: {integrity: sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==} 251 | engines: {node: '>=12'} 252 | cpu: [arm64] 253 | os: [darwin] 254 | requiresBuild: true 255 | dev: true 256 | optional: true 257 | 258 | /esbuild-freebsd-64/0.14.48: 259 | resolution: {integrity: sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==} 260 | engines: {node: '>=12'} 261 | cpu: [x64] 262 | os: [freebsd] 263 | requiresBuild: true 264 | dev: true 265 | optional: true 266 | 267 | /esbuild-freebsd-arm64/0.14.48: 268 | resolution: {integrity: sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==} 269 | engines: {node: '>=12'} 270 | cpu: [arm64] 271 | os: [freebsd] 272 | requiresBuild: true 273 | dev: true 274 | optional: true 275 | 276 | /esbuild-linux-32/0.14.48: 277 | resolution: {integrity: sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==} 278 | engines: {node: '>=12'} 279 | cpu: [ia32] 280 | os: [linux] 281 | requiresBuild: true 282 | dev: true 283 | optional: true 284 | 285 | /esbuild-linux-64/0.14.48: 286 | resolution: {integrity: sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==} 287 | engines: {node: '>=12'} 288 | cpu: [x64] 289 | os: [linux] 290 | requiresBuild: true 291 | dev: true 292 | optional: true 293 | 294 | /esbuild-linux-arm/0.14.48: 295 | resolution: {integrity: sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==} 296 | engines: {node: '>=12'} 297 | cpu: [arm] 298 | os: [linux] 299 | requiresBuild: true 300 | dev: true 301 | optional: true 302 | 303 | /esbuild-linux-arm64/0.14.48: 304 | resolution: {integrity: sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==} 305 | engines: {node: '>=12'} 306 | cpu: [arm64] 307 | os: [linux] 308 | requiresBuild: true 309 | dev: true 310 | optional: true 311 | 312 | /esbuild-linux-mips64le/0.14.48: 313 | resolution: {integrity: sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==} 314 | engines: {node: '>=12'} 315 | cpu: [mips64el] 316 | os: [linux] 317 | requiresBuild: true 318 | dev: true 319 | optional: true 320 | 321 | /esbuild-linux-ppc64le/0.14.48: 322 | resolution: {integrity: sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==} 323 | engines: {node: '>=12'} 324 | cpu: [ppc64] 325 | os: [linux] 326 | requiresBuild: true 327 | dev: true 328 | optional: true 329 | 330 | /esbuild-linux-riscv64/0.14.48: 331 | resolution: {integrity: sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==} 332 | engines: {node: '>=12'} 333 | cpu: [riscv64] 334 | os: [linux] 335 | requiresBuild: true 336 | dev: true 337 | optional: true 338 | 339 | /esbuild-linux-s390x/0.14.48: 340 | resolution: {integrity: sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==} 341 | engines: {node: '>=12'} 342 | cpu: [s390x] 343 | os: [linux] 344 | requiresBuild: true 345 | dev: true 346 | optional: true 347 | 348 | /esbuild-netbsd-64/0.14.48: 349 | resolution: {integrity: sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==} 350 | engines: {node: '>=12'} 351 | cpu: [x64] 352 | os: [netbsd] 353 | requiresBuild: true 354 | dev: true 355 | optional: true 356 | 357 | /esbuild-openbsd-64/0.14.48: 358 | resolution: {integrity: sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==} 359 | engines: {node: '>=12'} 360 | cpu: [x64] 361 | os: [openbsd] 362 | requiresBuild: true 363 | dev: true 364 | optional: true 365 | 366 | /esbuild-sunos-64/0.14.48: 367 | resolution: {integrity: sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==} 368 | engines: {node: '>=12'} 369 | cpu: [x64] 370 | os: [sunos] 371 | requiresBuild: true 372 | dev: true 373 | optional: true 374 | 375 | /esbuild-windows-32/0.14.48: 376 | resolution: {integrity: sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==} 377 | engines: {node: '>=12'} 378 | cpu: [ia32] 379 | os: [win32] 380 | requiresBuild: true 381 | dev: true 382 | optional: true 383 | 384 | /esbuild-windows-64/0.14.48: 385 | resolution: {integrity: sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==} 386 | engines: {node: '>=12'} 387 | cpu: [x64] 388 | os: [win32] 389 | requiresBuild: true 390 | dev: true 391 | optional: true 392 | 393 | /esbuild-windows-arm64/0.14.48: 394 | resolution: {integrity: sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==} 395 | engines: {node: '>=12'} 396 | cpu: [arm64] 397 | os: [win32] 398 | requiresBuild: true 399 | dev: true 400 | optional: true 401 | 402 | /esbuild/0.14.48: 403 | resolution: {integrity: sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==} 404 | engines: {node: '>=12'} 405 | hasBin: true 406 | requiresBuild: true 407 | optionalDependencies: 408 | esbuild-android-64: 0.14.48 409 | esbuild-android-arm64: 0.14.48 410 | esbuild-darwin-64: 0.14.48 411 | esbuild-darwin-arm64: 0.14.48 412 | esbuild-freebsd-64: 0.14.48 413 | esbuild-freebsd-arm64: 0.14.48 414 | esbuild-linux-32: 0.14.48 415 | esbuild-linux-64: 0.14.48 416 | esbuild-linux-arm: 0.14.48 417 | esbuild-linux-arm64: 0.14.48 418 | esbuild-linux-mips64le: 0.14.48 419 | esbuild-linux-ppc64le: 0.14.48 420 | esbuild-linux-riscv64: 0.14.48 421 | esbuild-linux-s390x: 0.14.48 422 | esbuild-netbsd-64: 0.14.48 423 | esbuild-openbsd-64: 0.14.48 424 | esbuild-sunos-64: 0.14.48 425 | esbuild-windows-32: 0.14.48 426 | esbuild-windows-64: 0.14.48 427 | esbuild-windows-arm64: 0.14.48 428 | dev: true 429 | 430 | /execa/5.1.1: 431 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 432 | engines: {node: '>=10'} 433 | dependencies: 434 | cross-spawn: 7.0.3 435 | get-stream: 6.0.1 436 | human-signals: 2.1.0 437 | is-stream: 2.0.1 438 | merge-stream: 2.0.0 439 | npm-run-path: 4.0.1 440 | onetime: 5.1.2 441 | signal-exit: 3.0.7 442 | strip-final-newline: 2.0.0 443 | dev: true 444 | 445 | /fast-glob/3.2.11: 446 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 447 | engines: {node: '>=8.6.0'} 448 | dependencies: 449 | '@nodelib/fs.stat': 2.0.5 450 | '@nodelib/fs.walk': 1.2.8 451 | glob-parent: 5.1.2 452 | merge2: 1.4.1 453 | micromatch: 4.0.5 454 | dev: true 455 | 456 | /fastq/1.13.0: 457 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 458 | dependencies: 459 | reusify: 1.0.4 460 | dev: true 461 | 462 | /fill-range/7.0.1: 463 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 464 | engines: {node: '>=8'} 465 | dependencies: 466 | to-regex-range: 5.0.1 467 | dev: true 468 | 469 | /fs.realpath/1.0.0: 470 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 471 | dev: true 472 | 473 | /fsevents/2.3.2: 474 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 475 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 476 | os: [darwin] 477 | requiresBuild: true 478 | dev: true 479 | optional: true 480 | 481 | /get-stream/6.0.1: 482 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 483 | engines: {node: '>=10'} 484 | dev: true 485 | 486 | /glob-parent/5.1.2: 487 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 488 | engines: {node: '>= 6'} 489 | dependencies: 490 | is-glob: 4.0.3 491 | dev: true 492 | 493 | /glob/7.1.6: 494 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 495 | dependencies: 496 | fs.realpath: 1.0.0 497 | inflight: 1.0.6 498 | inherits: 2.0.4 499 | minimatch: 3.1.2 500 | once: 1.4.0 501 | path-is-absolute: 1.0.1 502 | dev: true 503 | 504 | /globby/11.1.0: 505 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 506 | engines: {node: '>=10'} 507 | dependencies: 508 | array-union: 2.1.0 509 | dir-glob: 3.0.1 510 | fast-glob: 3.2.11 511 | ignore: 5.2.0 512 | merge2: 1.4.1 513 | slash: 3.0.0 514 | dev: true 515 | 516 | /goober/2.1.10_csstype@3.1.0: 517 | resolution: {integrity: sha512-7PpuQMH10jaTWm33sQgBQvz45pHR8N4l3Cu3WMGEWmHShAcTuuP7I+5/DwKo39fwti5A80WAjvqgz6SSlgWmGA==} 518 | peerDependencies: 519 | csstype: ^3.0.10 520 | dependencies: 521 | csstype: 3.1.0 522 | dev: false 523 | 524 | /human-signals/2.1.0: 525 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 526 | engines: {node: '>=10.17.0'} 527 | dev: true 528 | 529 | /ignore/5.2.0: 530 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 531 | engines: {node: '>= 4'} 532 | dev: true 533 | 534 | /inflight/1.0.6: 535 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 536 | dependencies: 537 | once: 1.4.0 538 | wrappy: 1.0.2 539 | dev: true 540 | 541 | /inherits/2.0.4: 542 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 543 | dev: true 544 | 545 | /is-binary-path/2.1.0: 546 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 547 | engines: {node: '>=8'} 548 | dependencies: 549 | binary-extensions: 2.2.0 550 | dev: true 551 | 552 | /is-extglob/2.1.1: 553 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 554 | engines: {node: '>=0.10.0'} 555 | dev: true 556 | 557 | /is-glob/4.0.3: 558 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 559 | engines: {node: '>=0.10.0'} 560 | dependencies: 561 | is-extglob: 2.1.1 562 | dev: true 563 | 564 | /is-number/7.0.0: 565 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 566 | engines: {node: '>=0.12.0'} 567 | dev: true 568 | 569 | /is-stream/2.0.1: 570 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 571 | engines: {node: '>=8'} 572 | dev: true 573 | 574 | /isexe/2.0.0: 575 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 576 | dev: true 577 | 578 | /joycon/3.1.1: 579 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 580 | engines: {node: '>=10'} 581 | dev: true 582 | 583 | /lilconfig/2.0.5: 584 | resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} 585 | engines: {node: '>=10'} 586 | dev: true 587 | 588 | /lines-and-columns/1.2.4: 589 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 590 | dev: true 591 | 592 | /load-tsconfig/0.2.3: 593 | resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} 594 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 595 | dev: true 596 | 597 | /lodash.sortby/4.7.0: 598 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 599 | dev: true 600 | 601 | /lru-cache/6.0.0: 602 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 603 | engines: {node: '>=10'} 604 | dependencies: 605 | yallist: 4.0.0 606 | dev: true 607 | 608 | /merge-stream/2.0.0: 609 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 610 | dev: true 611 | 612 | /merge2/1.4.1: 613 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 614 | engines: {node: '>= 8'} 615 | dev: true 616 | 617 | /micromatch/4.0.5: 618 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 619 | engines: {node: '>=8.6'} 620 | dependencies: 621 | braces: 3.0.2 622 | picomatch: 2.3.1 623 | dev: true 624 | 625 | /mimic-fn/2.1.0: 626 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 627 | engines: {node: '>=6'} 628 | dev: true 629 | 630 | /minimatch/3.1.2: 631 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 632 | dependencies: 633 | brace-expansion: 1.1.11 634 | dev: true 635 | 636 | /mkdirp/1.0.4: 637 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 638 | engines: {node: '>=10'} 639 | hasBin: true 640 | dev: true 641 | 642 | /ms/2.1.2: 643 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 644 | dev: true 645 | 646 | /mz/2.7.0: 647 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 648 | dependencies: 649 | any-promise: 1.3.0 650 | object-assign: 4.1.1 651 | thenify-all: 1.6.0 652 | dev: true 653 | 654 | /nanoid/3.3.4: 655 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 656 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 657 | hasBin: true 658 | dev: true 659 | 660 | /nanospinner/1.1.0: 661 | resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} 662 | dependencies: 663 | picocolors: 1.0.0 664 | dev: true 665 | 666 | /normalize-path/3.0.0: 667 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 668 | engines: {node: '>=0.10.0'} 669 | dev: true 670 | 671 | /npm-run-path/4.0.1: 672 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 673 | engines: {node: '>=8'} 674 | dependencies: 675 | path-key: 3.1.1 676 | dev: true 677 | 678 | /object-assign/4.1.1: 679 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 680 | engines: {node: '>=0.10.0'} 681 | dev: true 682 | 683 | /once/1.4.0: 684 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 685 | dependencies: 686 | wrappy: 1.0.2 687 | dev: true 688 | 689 | /onetime/5.1.2: 690 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 691 | engines: {node: '>=6'} 692 | dependencies: 693 | mimic-fn: 2.1.0 694 | dev: true 695 | 696 | /path-is-absolute/1.0.1: 697 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 698 | engines: {node: '>=0.10.0'} 699 | dev: true 700 | 701 | /path-key/3.1.1: 702 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 703 | engines: {node: '>=8'} 704 | dev: true 705 | 706 | /path-type/4.0.0: 707 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 708 | engines: {node: '>=8'} 709 | dev: true 710 | 711 | /picocolors/1.0.0: 712 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 713 | dev: true 714 | 715 | /picomatch/2.3.1: 716 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 717 | engines: {node: '>=8.6'} 718 | dev: true 719 | 720 | /pirates/4.0.5: 721 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 722 | engines: {node: '>= 6'} 723 | dev: true 724 | 725 | /postcss-load-config/3.1.4: 726 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 727 | engines: {node: '>= 10'} 728 | peerDependencies: 729 | postcss: '>=8.0.9' 730 | ts-node: '>=9.0.0' 731 | peerDependenciesMeta: 732 | postcss: 733 | optional: true 734 | ts-node: 735 | optional: true 736 | dependencies: 737 | lilconfig: 2.0.5 738 | yaml: 1.10.2 739 | dev: true 740 | 741 | /prettier/2.7.1: 742 | resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} 743 | engines: {node: '>=10.13.0'} 744 | hasBin: true 745 | dev: true 746 | 747 | /punycode/2.1.1: 748 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 749 | engines: {node: '>=6'} 750 | dev: true 751 | 752 | /queue-microtask/1.2.3: 753 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 754 | dev: true 755 | 756 | /readdirp/3.6.0: 757 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 758 | engines: {node: '>=8.10.0'} 759 | dependencies: 760 | picomatch: 2.3.1 761 | dev: true 762 | 763 | /resolve-from/5.0.0: 764 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 765 | engines: {node: '>=8'} 766 | dev: true 767 | 768 | /reusify/1.0.4: 769 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 770 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 771 | dev: true 772 | 773 | /rollup/2.75.7: 774 | resolution: {integrity: sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==} 775 | engines: {node: '>=10.0.0'} 776 | hasBin: true 777 | optionalDependencies: 778 | fsevents: 2.3.2 779 | dev: true 780 | 781 | /run-parallel/1.2.0: 782 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 783 | dependencies: 784 | queue-microtask: 1.2.3 785 | dev: true 786 | 787 | /semver/7.3.5: 788 | resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} 789 | engines: {node: '>=10'} 790 | hasBin: true 791 | dependencies: 792 | lru-cache: 6.0.0 793 | dev: true 794 | 795 | /shebang-command/2.0.0: 796 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 797 | engines: {node: '>=8'} 798 | dependencies: 799 | shebang-regex: 3.0.0 800 | dev: true 801 | 802 | /shebang-regex/3.0.0: 803 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 804 | engines: {node: '>=8'} 805 | dev: true 806 | 807 | /signal-exit/3.0.7: 808 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 809 | dev: true 810 | 811 | /size-limit/7.0.8: 812 | resolution: {integrity: sha512-3h76c9E0e/nNhYLSR7IBI/bSoXICeo7EYkYjlyVqNIsu7KvN/PQmMbIXeyd2QKIF8iZKhaiZQoXLkGWbyPDtvQ==} 813 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 814 | hasBin: true 815 | dependencies: 816 | bytes-iec: 3.1.1 817 | chokidar: 3.5.3 818 | ci-job-number: 1.2.2 819 | globby: 11.1.0 820 | lilconfig: 2.0.5 821 | mkdirp: 1.0.4 822 | nanospinner: 1.1.0 823 | picocolors: 1.0.0 824 | dev: true 825 | 826 | /slash/3.0.0: 827 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 828 | engines: {node: '>=8'} 829 | dev: true 830 | 831 | /source-map/0.8.0-beta.0: 832 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 833 | engines: {node: '>= 8'} 834 | dependencies: 835 | whatwg-url: 7.1.0 836 | dev: true 837 | 838 | /strip-final-newline/2.0.0: 839 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 840 | engines: {node: '>=6'} 841 | dev: true 842 | 843 | /sucrase/3.23.0: 844 | resolution: {integrity: sha512-xgC1xboStzGhCnRywlBf/DLmkC+SkdAKqrNCDsxGrzM0phR5oUxoFKiQNrsc2D8wDdAm03iLbSZqjHDddo3IzQ==} 845 | engines: {node: '>=8'} 846 | hasBin: true 847 | dependencies: 848 | commander: 4.1.1 849 | glob: 7.1.6 850 | lines-and-columns: 1.2.4 851 | mz: 2.7.0 852 | pirates: 4.0.5 853 | ts-interface-checker: 0.1.13 854 | dev: true 855 | 856 | /thenify-all/1.6.0: 857 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 858 | engines: {node: '>=0.8'} 859 | dependencies: 860 | thenify: 3.3.1 861 | dev: true 862 | 863 | /thenify/3.3.1: 864 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 865 | dependencies: 866 | any-promise: 1.3.0 867 | dev: true 868 | 869 | /to-regex-range/5.0.1: 870 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 871 | engines: {node: '>=8.0'} 872 | dependencies: 873 | is-number: 7.0.0 874 | dev: true 875 | 876 | /tr46/1.0.1: 877 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 878 | dependencies: 879 | punycode: 2.1.1 880 | dev: true 881 | 882 | /tree-kill/1.2.2: 883 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 884 | hasBin: true 885 | dev: true 886 | 887 | /ts-interface-checker/0.1.13: 888 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 889 | dev: true 890 | 891 | /tsup/6.1.3_typescript@4.7.4: 892 | resolution: {integrity: sha512-eRpBnbfpDFng+EJNTQ90N7QAf4HAGGC7O3buHIjroKWK7D1ibk9/YnR/3cS8HsMU5T+6Oi+cnF+yU5WmCnB//Q==} 893 | engines: {node: '>=14'} 894 | hasBin: true 895 | peerDependencies: 896 | '@swc/core': ^1 897 | postcss: ^8.4.12 898 | typescript: ^4.1.0 899 | peerDependenciesMeta: 900 | '@swc/core': 901 | optional: true 902 | postcss: 903 | optional: true 904 | typescript: 905 | optional: true 906 | dependencies: 907 | bundle-require: 3.0.4_esbuild@0.14.48 908 | cac: 6.7.12 909 | chokidar: 3.5.3 910 | debug: 4.3.4 911 | esbuild: 0.14.48 912 | execa: 5.1.1 913 | globby: 11.1.0 914 | joycon: 3.1.1 915 | postcss-load-config: 3.1.4 916 | resolve-from: 5.0.0 917 | rollup: 2.75.7 918 | source-map: 0.8.0-beta.0 919 | sucrase: 3.23.0 920 | tree-kill: 1.2.2 921 | typescript: 4.7.4 922 | transitivePeerDependencies: 923 | - supports-color 924 | - ts-node 925 | dev: true 926 | 927 | /typescript/4.7.4: 928 | resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} 929 | engines: {node: '>=4.2.0'} 930 | hasBin: true 931 | dev: true 932 | 933 | /webidl-conversions/4.0.2: 934 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 935 | dev: true 936 | 937 | /whatwg-url/7.1.0: 938 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 939 | dependencies: 940 | lodash.sortby: 4.7.0 941 | tr46: 1.0.1 942 | webidl-conversions: 4.0.2 943 | dev: true 944 | 945 | /which/2.0.2: 946 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 947 | engines: {node: '>= 8'} 948 | hasBin: true 949 | dependencies: 950 | isexe: 2.0.0 951 | dev: true 952 | 953 | /wrappy/1.0.2: 954 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 955 | dev: true 956 | 957 | /yallist/4.0.0: 958 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 959 | dev: true 960 | 961 | /yaml/1.10.2: 962 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 963 | engines: {node: '>= 6'} 964 | dev: true 965 | -------------------------------------------------------------------------------- /site/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | -------------------------------------------------------------------------------- /site/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. 16 | 17 | ## Learn More 18 | 19 | To learn more about Next.js, take a look at the following resources: 20 | 21 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 22 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 23 | 24 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 25 | 26 | ## Deploy on Vercel 27 | 28 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/import?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 29 | 30 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 31 | -------------------------------------------------------------------------------- /site/assets/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /site/assets/butter-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /site/assets/butter-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DogSoulDev/react-hot-toast/ee483cc02dcac4359a5081a99aa006fac54cfafc/site/assets/butter-2.png -------------------------------------------------------------------------------- /site/assets/butter-2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /site/assets/checkmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /site/assets/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /site/assets/logo-small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /site/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /site/components/code.tsx: -------------------------------------------------------------------------------- 1 | import clsx from 'clsx'; 2 | import Highlight, { 3 | defaultProps, 4 | Language, 5 | PrismTheme, 6 | } from 'prism-react-renderer'; 7 | 8 | const theme: PrismTheme = { 9 | plain: { 10 | backgroundColor: '#351e11', 11 | color: '#d6ceff', 12 | }, 13 | styles: [ 14 | { 15 | types: ['comment', 'prolog', 'doctype', 'cdata', 'punctuation'], 16 | style: { 17 | color: '#6c6783', 18 | }, 19 | }, 20 | { 21 | types: ['namespace'], 22 | style: { 23 | opacity: 0.7, 24 | }, 25 | }, 26 | { 27 | types: ['tag', 'operator', 'number', 'module'], 28 | style: { 29 | color: '#e09142', 30 | }, 31 | }, 32 | { 33 | types: ['property', 'function'], 34 | style: { 35 | color: '#9a86fd', 36 | }, 37 | }, 38 | { 39 | types: ['tag-id', 'selector', 'atrule-id'], 40 | style: { 41 | color: '#eeebff', 42 | }, 43 | }, 44 | { 45 | types: ['attr-name'], 46 | style: { 47 | color: '#c4b9fe', 48 | }, 49 | }, 50 | { 51 | types: [ 52 | 'boolean', 53 | 'string', 54 | 'entity', 55 | 'url', 56 | 'attr-value', 57 | 'keyword', 58 | 'control', 59 | 'directive', 60 | 'unit', 61 | 'statement', 62 | 'regex', 63 | 'at-rule', 64 | 'placeholder', 65 | 'variable', 66 | ], 67 | style: { 68 | color: '#ffcc99', 69 | }, 70 | }, 71 | { 72 | types: ['deleted'], 73 | style: { 74 | textDecorationLine: 'line-through', 75 | }, 76 | }, 77 | { 78 | types: ['inserted'], 79 | style: { 80 | textDecorationLine: 'underline', 81 | }, 82 | }, 83 | { 84 | types: ['italic'], 85 | style: { 86 | fontStyle: 'italic', 87 | }, 88 | }, 89 | { 90 | types: ['important', 'bold'], 91 | style: { 92 | fontWeight: 'bold', 93 | }, 94 | }, 95 | { 96 | types: ['important'], 97 | style: { 98 | color: '#c4b9fe', 99 | }, 100 | }, 101 | ], 102 | }; 103 | 104 | export const Code: React.FC<{ 105 | snippet: string; 106 | language?: Language; 107 | className?: string; 108 | }> = (props) => { 109 | const language = props.language || 'jsx'; 110 | 111 | return ( 112 | 118 | {({ className, style, tokens, getLineProps, getTokenProps }) => ( 119 |
127 |           {tokens.map((line, i) => {
128 |             if (tokens.length - 1 === i && line[0].empty) {
129 |               return null;
130 |             }
131 | 
132 |             return (
133 |               
134 | {line.map((token, key) => ( 135 | 136 | ))} 137 |
138 | ); 139 | })} 140 |
141 | )} 142 |
143 | ); 144 | }; 145 | -------------------------------------------------------------------------------- /site/components/docs-layout.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Toaster } from 'react-hot-toast'; 3 | import { NextSeo } from 'next-seo'; 4 | import Link from 'next/link'; 5 | import { Footer } from './sections/footer'; 6 | import Logo from '../assets/logo-small.svg'; 7 | 8 | const TableItem: React.FC<{ 9 | href: string; 10 | children?: React.ReactNode; 11 | }> = ({ children, href }) => ( 12 | 13 | 14 | {children} 15 | 16 | 17 | ); 18 | 19 | const TableHeader: React.FC<{ 20 | children?: React.ReactNode; 21 | }> = ({ children }) => ( 22 | 23 | {children} 24 | 25 | ); 26 | 27 | export default function DocsLayout({ meta, children }) { 28 | return ( 29 |
30 | 43 | 44 |
45 |
46 | 47 | 51 | 52 | 56 | GitHub 57 | 58 |
59 | 60 |
61 | 82 | 83 |
84 | {children} 85 |
86 |
87 |
88 |
91 | ); 92 | } 93 | -------------------------------------------------------------------------------- /site/components/emoji-button.tsx: -------------------------------------------------------------------------------- 1 | export const EmojiButton: React.FC<{ 2 | onClick: () => void; 3 | emoji: string | JSX.Element; 4 | children?: React.ReactNode; 5 | }> = ({ onClick, children, emoji }) => ( 6 | 20 | ); 21 | -------------------------------------------------------------------------------- /site/components/sections/footer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Link from 'next/link'; 3 | 4 | export function Footer({ noBadge }: { noBadge?: boolean }) { 5 | return ( 6 | 46 | ); 47 | } 48 | -------------------------------------------------------------------------------- /site/components/sections/splitbee-counter.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import clsx from 'clsx'; 3 | 4 | export const useSplitbeeCount = ( 5 | event: T, 6 | token: string 7 | ): number => { 8 | const [data, setData] = React.useState(0); 9 | const socket = React.useRef(null); 10 | React.useEffect(() => { 11 | if (typeof window !== undefined) { 12 | socket.current = new WebSocket('wss://realtime.react-hot-toast.com/'); 13 | socket.current.onopen = (e) => { 14 | socket.current.send( 15 | JSON.stringify({ 16 | type: 'subscribe', 17 | data: { 18 | token: token, 19 | events: [event], 20 | }, 21 | }) 22 | ); 23 | }; 24 | socket.current.onmessage = (e) => { 25 | const d = JSON.parse(e.data); 26 | setData(d.count); 27 | }; 28 | 29 | return () => {}; 30 | } 31 | }, []); 32 | 33 | return data; 34 | }; 35 | 36 | export const SplitbeeCounter = () => { 37 | const count = useSplitbeeCount('Trigger Toast', 'NTV7AYBLEXW3'); 38 | 39 | const letters = count.toString().split(''); 40 | 41 | return ( 42 |
43 |
44 | Toasts made on this website so far 45 |
46 |
49 | {letters.map((l, i) => ( 50 |
57 | {l} 58 |
59 | ))} 60 |
61 |
62 | ⚡️ Real-time analytics by{' '} 63 | 69 | Splitbee 70 | 71 |
72 |
73 | ); 74 | }; 75 | -------------------------------------------------------------------------------- /site/components/sections/toast-example.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import toast from 'react-hot-toast'; 3 | 4 | import { EmojiButton } from '../emoji-button'; 5 | import { Code } from '../code'; 6 | 7 | const examples: Array<{ 8 | title: string; 9 | action: () => void; 10 | emoji: string; 11 | snippet: string; 12 | }> = [ 13 | { 14 | title: 'Success', 15 | emoji: '✅', 16 | snippet: "toast.success('Successfully toasted!')", 17 | action: () => { 18 | toast.success('Successfully toasted!'); 19 | }, 20 | }, 21 | { 22 | title: 'Error', 23 | emoji: '❌', 24 | snippet: `toast.error("This didn't work.")`, 25 | 26 | action: () => { 27 | toast.error("This didn't work."); 28 | }, 29 | }, 30 | { 31 | title: 'Promise', 32 | emoji: '⏳', 33 | snippet: `toast.promise( 34 | saveSettings(settings), 35 | { 36 | loading: 'Saving...', 37 | success: Settings saved!, 38 | error: Could not save., 39 | } 40 | );`, 41 | action: () => { 42 | const promise = new Promise((res, rej) => { 43 | setTimeout(Math.random() > 0.5 ? res : rej, 1000); 44 | }); 45 | 46 | toast.promise( 47 | promise, 48 | { 49 | loading: 'Saving...', 50 | success: Settings saved!, 51 | error: Could not save., 52 | }, 53 | { 54 | style: { 55 | width: '200px', 56 | paddingRight: '10px', 57 | }, 58 | } 59 | ); 60 | }, 61 | }, 62 | { 63 | title: 'Multi Line', 64 | emoji: '↕️', 65 | snippet: `toast( 66 | "This toast is super big. I don't think anyone could eat it in one bite.\\n\\nIt's larger than you expected. You eat it but it does not seem to get smaller.", 67 | { 68 | duration: 6000, 69 | } 70 | );`, 71 | action: () => { 72 | toast( 73 | "This toast is super big. I don't think anyone could eat it in one bite.\n\n It's larger than you expected. You eat it but it does not seem to get smaller.", 74 | { 75 | duration: 6000, 76 | } 77 | ); 78 | }, 79 | }, 80 | { 81 | title: 'Emoji', 82 | emoji: '👏', 83 | snippet: `toast('Good Job!', { 84 | icon: '👏', 85 | });`, 86 | action: () => { 87 | toast('Good Job!', { 88 | icon: '👏', 89 | }); 90 | }, 91 | }, 92 | { 93 | title: 'Dark Mode', 94 | emoji: '🌚', 95 | snippet: `toast('Hello Darkness!', 96 | { 97 | icon: '👏', 98 | style: { 99 | borderRadius: '10px', 100 | background: '#333', 101 | color: '#fff', 102 | }, 103 | } 104 | );`, 105 | action: () => { 106 | toast('Hello Darkness!', { 107 | icon: '👏', 108 | 109 | style: { 110 | borderRadius: '200px', 111 | background: '#333', 112 | color: '#fff', 113 | }, 114 | }); 115 | }, 116 | }, 117 | { 118 | title: 'JSX Content', 119 | emoji: '🔩', 120 | snippet: `toast((t) => ( 121 | 122 | Custom and bold 123 | 126 | 127 | ));`, 128 | 129 | action: () => { 130 | toast((t) => ( 131 | 132 | Custom and bold 133 | 139 | 140 | )); 141 | }, 142 | }, 143 | { 144 | title: 'Themed', 145 | emoji: '🎨', 146 | snippet: `toast.success('Look at my styles.', { 147 | style: { 148 | border: '1px solid #713200', 149 | padding: '16px', 150 | color: '#713200', 151 | }, 152 | iconTheme: { 153 | primary: '#713200', 154 | secondary: '#FFFAEE', 155 | }, 156 | });`, 157 | 158 | action: () => { 159 | toast.success('Look at my styles.', { 160 | style: { 161 | border: '1px solid #713200', 162 | padding: '16px', 163 | color: '#713200', 164 | }, 165 | iconTheme: { 166 | primary: '#713200', 167 | secondary: '#FFFAEE', 168 | }, 169 | }); 170 | }, 171 | }, 172 | { 173 | title: 'Custom Position', 174 | emoji: '⬆️', 175 | snippet: `toast.success('Always at the bottom.', { 176 | position: "bottom-center" 177 | })`, 178 | action: () => { 179 | toast.success('Always at the bottom.', { 180 | position: 'bottom-center', 181 | duration: 10000, 182 | }); 183 | }, 184 | }, 185 | { 186 | title: 'TailwindCSS', 187 | emoji: '️💨', 188 | snippet: `toast.custom((t) => ( 189 |
194 |
195 |
196 |
197 | 202 |
203 |
204 |

205 | Emilia Gates 206 |

207 |

208 | Sure! 8:30pm works great! 209 |

210 |
211 |
212 |
213 |
214 | 220 |
221 |
222 | ))`, 223 | action: () => { 224 | // toast.custom(); 225 | 226 | toast.custom( 227 | (t) => ( 228 |
233 |
234 |
235 |
236 | 241 |
242 |
243 |

244 | Emilia Gates 245 |

246 |

247 | Sure! 8:30pm works great! 248 |

249 |
250 |
251 |
252 |
253 | 259 |
260 |
261 | ), 262 | { 263 | duration: 10000, 264 | } 265 | ); 266 | }, 267 | }, 268 | ]; 269 | 270 | export const ToastExample = () => { 271 | const [snippet, setSnippet] = useState(examples[0].snippet); 272 | return ( 273 |
274 |
275 |
276 | {examples.map((e) => ( 277 | { 281 | if (e.snippet) { 282 | setSnippet(e.snippet); 283 | } 284 | (window as any).splitbee?.track('Trigger Toast', { 285 | example: e.title, 286 | }); 287 | e.action(); 288 | }} 289 | > 290 | {e.title} 291 | 292 | ))} 293 |
294 |
295 |
296 | 297 |
298 |
299 | ); 300 | }; 301 | -------------------------------------------------------------------------------- /site/components/sections/toaster-example.tsx: -------------------------------------------------------------------------------- 1 | import clsx from 'clsx'; 2 | import toast, { ToastPosition } from 'react-hot-toast'; 3 | import Arrow from '../../assets/arrow.svg'; 4 | import { Code } from '../code'; 5 | 6 | import { EmojiButton } from '../emoji-button'; 7 | 8 | export const positions: Array = [ 9 | 'top-left', 10 | 'top-center', 11 | 'top-right', 12 | 'bottom-left', 13 | 'bottom-center', 14 | 'bottom-right', 15 | ]; 16 | 17 | export const ToasterExample: React.FC<{ 18 | position: ToastPosition; 19 | onPosition: (pos: ToastPosition) => void; 20 | reverse: boolean; 21 | onReverse: (rev: boolean) => void; 22 | }> = ({ position, onPosition, reverse, onReverse }) => { 23 | const reverseIt = () => { 24 | setTimeout(() => { 25 | toast('Notification 1', { 26 | icon: '1️⃣', 27 | id: 'reverse-1', 28 | }); 29 | }, 10); 30 | 31 | setTimeout( 32 | () => 33 | toast('Notification 2', { 34 | icon: '2️⃣', 35 | id: 'reverse-2', 36 | }), 37 | 250 38 | ); 39 | setTimeout( 40 | () => 41 | toast('Notification 3', { 42 | icon: '3️⃣', 43 | id: 'reverse-3', 44 | }), 45 | 500 46 | ); 47 | setTimeout( 48 | () => 49 | toast('Notification 4', { 50 | icon: '4️⃣', 51 | id: 'reverse-4', 52 | }), 53 | 750 54 | ); 55 | (window as any).splitbee?.track('Change Order', { 56 | reverseOrder: !reverse, 57 | }); 58 | onReverse(!reverse); 59 | }; 60 | 61 | const renderPosition = (p: ToastPosition) => ( 62 | 94 | ); 95 | 96 | return ( 97 |
98 | `} 103 | /> 104 |
105 | {positions.map((p) => renderPosition(p))} 106 |
107 |
108 | 118 | } 119 | onClick={reverseIt} 120 | > 121 | Toggle Direction 122 | 123 |
124 |
125 | ); 126 | }; 127 | -------------------------------------------------------------------------------- /site/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /site/next.config.mjs: -------------------------------------------------------------------------------- 1 | import rehypeSlug from 'rehype-slug'; 2 | import remarkGfm from 'remark-gfm'; 3 | import nextMdx from '@next/mdx'; 4 | import withPlugins from 'next-compose-plugins'; 5 | 6 | const withMDX = nextMdx({ 7 | extension: /.mdx?$/, 8 | options: { 9 | rehypePlugins: [rehypeSlug], 10 | remarkPlugins: [remarkGfm], 11 | providerImportSource: '@mdx-js/react', 12 | }, 13 | }); 14 | 15 | const withSvgr = (nextConfig = {}, nextComposePlugins = {}) => { 16 | return Object.assign({}, nextConfig, { 17 | webpack(config, options) { 18 | config.module.rules.push({ 19 | test: /.svg$/, 20 | use: ['@svgr/webpack'], 21 | }); 22 | 23 | if (typeof nextConfig.webpack === 'function') { 24 | return nextConfig.webpack(config, options); 25 | } 26 | 27 | return config; 28 | }, 29 | }); 30 | }; 31 | 32 | export default withPlugins( 33 | [ 34 | withMDX({ 35 | pageExtensions: ['ts', 'tsx', 'md', 'mdx'], 36 | }), 37 | withSvgr, 38 | ], 39 | { 40 | async rewrites() { 41 | return [ 42 | { 43 | source: '/bee.js', 44 | destination: 'https://cdn.splitbee.io/sb.js', 45 | }, 46 | { 47 | source: '/_hive/:slug', 48 | destination: 'https://hive.splitbee.io/:slug', 49 | }, 50 | ]; 51 | }, 52 | } 53 | ); 54 | -------------------------------------------------------------------------------- /site/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "site", 3 | "scripts": { 4 | "dev": "next dev", 5 | "build": "next build", 6 | "start": "next start" 7 | }, 8 | "dependencies": { 9 | "@mdx-js/loader": "^2.1.2", 10 | "@mdx-js/react": "^2.1.2", 11 | "@next/mdx": "^12.2.1", 12 | "@svgr/webpack": "^6.2.1", 13 | "@types/prismjs": "^1.26.0", 14 | "clsx": "^1.1.1", 15 | "next": "^12.2.1", 16 | "next-seo": "^5.4.0", 17 | "postcss": "^8.4.14", 18 | "prism-react-renderer": "^1.3.5", 19 | "react": "^18.2.0", 20 | "react-dom": "^18.2.0", 21 | "react-hot-toast": "link:../", 22 | "rehype-slug": "^5.0.1" 23 | }, 24 | "devDependencies": { 25 | "@tailwindcss/typography": "^0.5.3", 26 | "@types/node": "^18.0.0", 27 | "@types/react": "^18.0.14", 28 | "@types/react-dom": "^18.0.5", 29 | "autoprefixer": "^10.4.7", 30 | "next-compose-plugins": "^2.2.1", 31 | "remark-gfm": "^3.0.1", 32 | "tailwindcss": "^3.1.5", 33 | "typescript": "^4.7.4" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /site/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import '../styles/tailwind-utils.css'; 2 | import '../styles/main.css'; 3 | import * as React from 'react'; 4 | import Link from 'next/link'; 5 | import Head from 'next/head'; 6 | 7 | import { MDXProvider } from '@mdx-js/react'; 8 | import { Code } from '../components/code'; 9 | 10 | const components = { 11 | a: (props) => ( 12 | 13 | 14 | 15 | ), 16 | code: (props) => 17 | props.className ? ( 18 | 19 | ) : ( 20 | 24 | ), 25 | }; 26 | 27 | function MyApp({ Component, pageProps }) { 28 | return ( 29 | <> 30 | 31 | {process.browser && ( 32 |