├── .eslintrc.json ├── .gitignore ├── README.md ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public └── all_sailboats.json ├── src ├── app │ ├── favicon.ico │ ├── layout.tsx │ ├── page.tsx │ └── styles.css ├── components │ ├── InteractionMonitor.tsx │ ├── SailboatPreview.tsx │ ├── SailboatResults.tsx │ └── SearchBar.tsx ├── hooks │ ├── useAbortSignallingTransition.ts │ ├── useAwaitableTransition.ts │ └── useDebouncedEffect.ts └── script │ ├── getSailData.ts │ ├── onInteraction.js │ ├── schedulerDotYield.js │ └── searchResults.ts ├── tailwind.config.js └── tsconfig.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.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 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # INP React (NextJS) Demo: Sail boat Search! 2 | 3 | A interactive demo and workshop for learning about [Interaction to Next Paint (INP)](https://web.dev/inp), using React and NextJS. 4 | 5 | If you like following a long in a video form, here's a session from Google I/O 2023 -> https://www.youtube.com/watch?v=KZ1kxzsJZ5g. 6 | 7 | ## Getting Started 8 | 9 | Clone this repository, or, [open it in a cloud editor such as CloudSandbox](https://codesandbox.io/p/github/mmocny/inp-codesandbox-nextjs)). 10 | 11 | If you cloned the repo, run `npm run dev` or follow the [NextJS development guide](https://nextjs.org/docs/getting-started/installation#run-the-development-server). 12 | 13 | Make edits in `app/page.tsx`, and follow the instructions in this Readme. 14 | 15 | ## 0: Try the default application 16 | 17 | After cloning the repo, try the default application. The search box works, and is fairly responsive -- but the search results are *not actually working*. 18 | 19 | You can check the DevTools console for live Interaction measurements. 20 | 21 | ## 1: Implement simple Search functionality 22 | 23 | To add search, update the `filterResults` function to actually assign a score to each possible search result. 24 | You can do so just by uncommenting a single line in this workshop. 25 | 26 | Notice, that search works much better now -- but the page is very slow to respond to search input. 27 | With each subsequent character, it gets even slower! 28 | 29 | ## 2: Delay search results until after textbox updates 30 | 31 | As an initial improvement, lets delay starting to compute search results until at least the search textbox updates. 32 | There are many ways to do this, but the cleanest way in modern react is to leverage the `useTransition` hook. 33 | 34 | A transition is a way to make a state change-- but to let React delay rendering that part of the Component update until after the initial render. 35 | 36 | ANSWER 37 | 38 | If you type one character at a time, slowly, you will see a small improvement: at least you can see what you are typing! Results are still slow, and rapid text entry is still a problem. 39 | 40 | ## 3. Delay search results even more: Debounce 41 | 42 | Move the `startTransition` and state update to a `debounce` effect. Meaning, delay the transition after the event changes the state of the search term, for 500-1000ms. 43 | 44 | The debounced effect will cancel any work that hasn't started yet, in case the user types quickly. 45 | 46 | This helps for many interactions, perhaps most interactions, but still -- once the work to generate search results does get started-- an interaction at that exact moment will still be slow. 47 | 48 | Also, debounce means intentionally delaying search results. Although the responsiveness of the textbox is much better-- the response of the search results is much worse. 49 | 50 | Not great. 51 | 52 | ## 4. Async search filter that yields 53 | 54 | Lets change our `filterResults` to be async, and to yield to the browser main thread as it processes through search results. 55 | 56 | Instead of generating all the results all in one go, synchronously, it will resolve a Promise when it is done, asynchronously. 57 | 58 | Now, each new import can be handled by the browser, and by react, and it will replace out search term and overwrite our Transition. 59 | 60 | ## 5. Remove the debounce 61 | 62 | Now that we have yieldy `filterResults`, we don't really need to debounce any more. We may still choose to do so -- for example, if filterResults needed to make a fetch call to a server, which could be expensive to do needlessly. 63 | 64 | ## 6. One last improvement: Abortable Transitions 65 | 66 | The previous version is *always* responsive, however, with each new character typed, we will generate the full search results -- even if we already aborted the transition and won't need them any more. 67 | 68 | Let's leverage an `AbortController` to cancel any in-progress work, whenever the search term changes. 69 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {} 3 | 4 | module.exports = nextConfig 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "inp-codesandbox-nextjs", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@types/node": "20.2.3", 13 | "@types/react": "18.2.6", 14 | "@types/react-dom": "18.2.4", 15 | "autoprefixer": "10.4.14", 16 | "eslint": "8.41.0", 17 | "eslint-config-next": "13.4.3", 18 | "fuse.js": "^6.6.2", 19 | "next": "13.4.3", 20 | "postcss": "8.4.23", 21 | "react": "18.2.0", 22 | "react-dom": "18.2.0", 23 | "tailwindcss": "3.3.2", 24 | "typescript": "5.0.4" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@types/node': 9 | specifier: 20.2.3 10 | version: 20.2.3 11 | '@types/react': 12 | specifier: 18.2.6 13 | version: 18.2.6 14 | '@types/react-dom': 15 | specifier: 18.2.4 16 | version: 18.2.4 17 | autoprefixer: 18 | specifier: 10.4.14 19 | version: 10.4.14(postcss@8.4.23) 20 | eslint: 21 | specifier: 8.41.0 22 | version: 8.41.0 23 | eslint-config-next: 24 | specifier: 13.4.3 25 | version: 13.4.3(eslint@8.41.0)(typescript@5.0.4) 26 | fuse.js: 27 | specifier: ^6.6.2 28 | version: 6.6.2 29 | next: 30 | specifier: 13.4.3 31 | version: 13.4.3(react-dom@18.2.0)(react@18.2.0) 32 | postcss: 33 | specifier: 8.4.23 34 | version: 8.4.23 35 | react: 36 | specifier: 18.2.0 37 | version: 18.2.0 38 | react-dom: 39 | specifier: 18.2.0 40 | version: 18.2.0(react@18.2.0) 41 | tailwindcss: 42 | specifier: 3.3.2 43 | version: 3.3.2 44 | typescript: 45 | specifier: 5.0.4 46 | version: 5.0.4 47 | 48 | packages: 49 | 50 | /@aashutoshrathi/word-wrap@1.2.6: 51 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 52 | engines: {node: '>=0.10.0'} 53 | dev: false 54 | 55 | /@alloc/quick-lru@5.2.0: 56 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 57 | engines: {node: '>=10'} 58 | dev: false 59 | 60 | /@babel/runtime@7.24.0: 61 | resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} 62 | engines: {node: '>=6.9.0'} 63 | dependencies: 64 | regenerator-runtime: 0.14.1 65 | dev: false 66 | 67 | /@eslint-community/eslint-utils@4.4.0(eslint@8.41.0): 68 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 69 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 70 | peerDependencies: 71 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 72 | dependencies: 73 | eslint: 8.41.0 74 | eslint-visitor-keys: 3.4.3 75 | dev: false 76 | 77 | /@eslint-community/regexpp@4.10.0: 78 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 79 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 80 | dev: false 81 | 82 | /@eslint/eslintrc@2.1.4: 83 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 84 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 85 | dependencies: 86 | ajv: 6.12.6 87 | debug: 4.3.4 88 | espree: 9.6.1 89 | globals: 13.24.0 90 | ignore: 5.3.1 91 | import-fresh: 3.3.0 92 | js-yaml: 4.1.0 93 | minimatch: 3.1.2 94 | strip-json-comments: 3.1.1 95 | transitivePeerDependencies: 96 | - supports-color 97 | dev: false 98 | 99 | /@eslint/js@8.41.0: 100 | resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==} 101 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 102 | dev: false 103 | 104 | /@humanwhocodes/config-array@0.11.14: 105 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 106 | engines: {node: '>=10.10.0'} 107 | dependencies: 108 | '@humanwhocodes/object-schema': 2.0.2 109 | debug: 4.3.4 110 | minimatch: 3.1.2 111 | transitivePeerDependencies: 112 | - supports-color 113 | dev: false 114 | 115 | /@humanwhocodes/module-importer@1.0.1: 116 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 117 | engines: {node: '>=12.22'} 118 | dev: false 119 | 120 | /@humanwhocodes/object-schema@2.0.2: 121 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 122 | dev: false 123 | 124 | /@isaacs/cliui@8.0.2: 125 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 126 | engines: {node: '>=12'} 127 | dependencies: 128 | string-width: 5.1.2 129 | string-width-cjs: /string-width@4.2.3 130 | strip-ansi: 7.1.0 131 | strip-ansi-cjs: /strip-ansi@6.0.1 132 | wrap-ansi: 8.1.0 133 | wrap-ansi-cjs: /wrap-ansi@7.0.0 134 | dev: false 135 | 136 | /@jridgewell/gen-mapping@0.3.4: 137 | resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} 138 | engines: {node: '>=6.0.0'} 139 | dependencies: 140 | '@jridgewell/set-array': 1.1.2 141 | '@jridgewell/sourcemap-codec': 1.4.15 142 | '@jridgewell/trace-mapping': 0.3.23 143 | dev: false 144 | 145 | /@jridgewell/resolve-uri@3.1.2: 146 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 147 | engines: {node: '>=6.0.0'} 148 | dev: false 149 | 150 | /@jridgewell/set-array@1.1.2: 151 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 152 | engines: {node: '>=6.0.0'} 153 | dev: false 154 | 155 | /@jridgewell/sourcemap-codec@1.4.15: 156 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 157 | dev: false 158 | 159 | /@jridgewell/trace-mapping@0.3.23: 160 | resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} 161 | dependencies: 162 | '@jridgewell/resolve-uri': 3.1.2 163 | '@jridgewell/sourcemap-codec': 1.4.15 164 | dev: false 165 | 166 | /@next/env@13.4.3: 167 | resolution: {integrity: sha512-pa1ErjyFensznttAk3EIv77vFbfSYT6cLzVRK5jx4uiRuCQo+m2wCFAREaHKIy63dlgvOyMlzh6R8Inu8H3KrQ==} 168 | dev: false 169 | 170 | /@next/eslint-plugin-next@13.4.3: 171 | resolution: {integrity: sha512-5B0uOnh7wyUY9vNNdIA6NUvWozhrZaTMZOzdirYAefqD0ZBK5C/h3+KMYdCKrR7JrXGvVpWnHtv54b3dCzwICA==} 172 | dependencies: 173 | glob: 7.1.7 174 | dev: false 175 | 176 | /@next/swc-darwin-arm64@13.4.3: 177 | resolution: {integrity: sha512-yx18udH/ZmR4Bw4M6lIIPE3JxsAZwo04iaucEfA2GMt1unXr2iodHUX/LAKNyi6xoLP2ghi0E+Xi1f4Qb8f1LQ==} 178 | engines: {node: '>= 10'} 179 | cpu: [arm64] 180 | os: [darwin] 181 | requiresBuild: true 182 | dev: false 183 | optional: true 184 | 185 | /@next/swc-darwin-x64@13.4.3: 186 | resolution: {integrity: sha512-Mi8xJWh2IOjryAM1mx18vwmal9eokJ2njY4nDh04scy37F0LEGJ/diL6JL6kTXi0UfUCGbMsOItf7vpReNiD2A==} 187 | engines: {node: '>= 10'} 188 | cpu: [x64] 189 | os: [darwin] 190 | requiresBuild: true 191 | dev: false 192 | optional: true 193 | 194 | /@next/swc-linux-arm64-gnu@13.4.3: 195 | resolution: {integrity: sha512-aBvtry4bxJ1xwKZ/LVPeBGBwWVwxa4bTnNkRRw6YffJnn/f4Tv4EGDPaVeYHZGQVA56wsGbtA6nZMuWs/EIk4Q==} 196 | engines: {node: '>= 10'} 197 | cpu: [arm64] 198 | os: [linux] 199 | requiresBuild: true 200 | dev: false 201 | optional: true 202 | 203 | /@next/swc-linux-arm64-musl@13.4.3: 204 | resolution: {integrity: sha512-krT+2G3kEsEUvZoYte3/2IscscDraYPc2B+fDJFipPktJmrv088Pei/RjrhWm5TMIy5URYjZUoDZdh5k940Dyw==} 205 | engines: {node: '>= 10'} 206 | cpu: [arm64] 207 | os: [linux] 208 | requiresBuild: true 209 | dev: false 210 | optional: true 211 | 212 | /@next/swc-linux-x64-gnu@13.4.3: 213 | resolution: {integrity: sha512-AMdFX6EKJjC0G/CM6hJvkY8wUjCcbdj3Qg7uAQJ7PVejRWaVt0sDTMavbRfgMchx8h8KsAudUCtdFkG9hlEClw==} 214 | engines: {node: '>= 10'} 215 | cpu: [x64] 216 | os: [linux] 217 | requiresBuild: true 218 | dev: false 219 | optional: true 220 | 221 | /@next/swc-linux-x64-musl@13.4.3: 222 | resolution: {integrity: sha512-jySgSXE48shaLtcQbiFO9ajE9mqz7pcAVLnVLvRIlUHyQYR/WyZdK8ehLs65Mz6j9cLrJM+YdmdJPyV4WDaz2g==} 223 | engines: {node: '>= 10'} 224 | cpu: [x64] 225 | os: [linux] 226 | requiresBuild: true 227 | dev: false 228 | optional: true 229 | 230 | /@next/swc-win32-arm64-msvc@13.4.3: 231 | resolution: {integrity: sha512-5DxHo8uYcaADiE9pHrg8o28VMt/1kR8voDehmfs9AqS0qSClxAAl+CchjdboUvbCjdNWL1MISCvEfKY2InJ3JA==} 232 | engines: {node: '>= 10'} 233 | cpu: [arm64] 234 | os: [win32] 235 | requiresBuild: true 236 | dev: false 237 | optional: true 238 | 239 | /@next/swc-win32-ia32-msvc@13.4.3: 240 | resolution: {integrity: sha512-LaqkF3d+GXRA5X6zrUjQUrXm2MN/3E2arXBtn5C7avBCNYfm9G3Xc646AmmmpN3DJZVaMYliMyCIQCMDEzk80w==} 241 | engines: {node: '>= 10'} 242 | cpu: [ia32] 243 | os: [win32] 244 | requiresBuild: true 245 | dev: false 246 | optional: true 247 | 248 | /@next/swc-win32-x64-msvc@13.4.3: 249 | resolution: {integrity: sha512-jglUk/x7ZWeOJWlVoKyIAkHLTI+qEkOriOOV+3hr1GyiywzcqfI7TpFSiwC7kk1scOiH7NTFKp8mA3XPNO9bDw==} 250 | engines: {node: '>= 10'} 251 | cpu: [x64] 252 | os: [win32] 253 | requiresBuild: true 254 | dev: false 255 | optional: true 256 | 257 | /@nodelib/fs.scandir@2.1.5: 258 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 259 | engines: {node: '>= 8'} 260 | dependencies: 261 | '@nodelib/fs.stat': 2.0.5 262 | run-parallel: 1.2.0 263 | dev: false 264 | 265 | /@nodelib/fs.stat@2.0.5: 266 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 267 | engines: {node: '>= 8'} 268 | dev: false 269 | 270 | /@nodelib/fs.walk@1.2.8: 271 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 272 | engines: {node: '>= 8'} 273 | dependencies: 274 | '@nodelib/fs.scandir': 2.1.5 275 | fastq: 1.17.1 276 | dev: false 277 | 278 | /@pkgjs/parseargs@0.11.0: 279 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 280 | engines: {node: '>=14'} 281 | requiresBuild: true 282 | dev: false 283 | optional: true 284 | 285 | /@rushstack/eslint-patch@1.7.2: 286 | resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} 287 | dev: false 288 | 289 | /@swc/helpers@0.5.1: 290 | resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} 291 | dependencies: 292 | tslib: 2.6.2 293 | dev: false 294 | 295 | /@types/json5@0.0.29: 296 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 297 | dev: false 298 | 299 | /@types/node@20.2.3: 300 | resolution: {integrity: sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==} 301 | dev: false 302 | 303 | /@types/prop-types@15.7.11: 304 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} 305 | dev: false 306 | 307 | /@types/react-dom@18.2.4: 308 | resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==} 309 | dependencies: 310 | '@types/react': 18.2.6 311 | dev: false 312 | 313 | /@types/react@18.2.6: 314 | resolution: {integrity: sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==} 315 | dependencies: 316 | '@types/prop-types': 15.7.11 317 | '@types/scheduler': 0.16.8 318 | csstype: 3.1.3 319 | dev: false 320 | 321 | /@types/scheduler@0.16.8: 322 | resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} 323 | dev: false 324 | 325 | /@typescript-eslint/parser@5.62.0(eslint@8.41.0)(typescript@5.0.4): 326 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 327 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 328 | peerDependencies: 329 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 330 | typescript: '*' 331 | peerDependenciesMeta: 332 | typescript: 333 | optional: true 334 | dependencies: 335 | '@typescript-eslint/scope-manager': 5.62.0 336 | '@typescript-eslint/types': 5.62.0 337 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) 338 | debug: 4.3.4 339 | eslint: 8.41.0 340 | typescript: 5.0.4 341 | transitivePeerDependencies: 342 | - supports-color 343 | dev: false 344 | 345 | /@typescript-eslint/scope-manager@5.62.0: 346 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 347 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 348 | dependencies: 349 | '@typescript-eslint/types': 5.62.0 350 | '@typescript-eslint/visitor-keys': 5.62.0 351 | dev: false 352 | 353 | /@typescript-eslint/types@5.62.0: 354 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 355 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 356 | dev: false 357 | 358 | /@typescript-eslint/typescript-estree@5.62.0(typescript@5.0.4): 359 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 360 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 361 | peerDependencies: 362 | typescript: '*' 363 | peerDependenciesMeta: 364 | typescript: 365 | optional: true 366 | dependencies: 367 | '@typescript-eslint/types': 5.62.0 368 | '@typescript-eslint/visitor-keys': 5.62.0 369 | debug: 4.3.4 370 | globby: 11.1.0 371 | is-glob: 4.0.3 372 | semver: 7.6.0 373 | tsutils: 3.21.0(typescript@5.0.4) 374 | typescript: 5.0.4 375 | transitivePeerDependencies: 376 | - supports-color 377 | dev: false 378 | 379 | /@typescript-eslint/visitor-keys@5.62.0: 380 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 381 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 382 | dependencies: 383 | '@typescript-eslint/types': 5.62.0 384 | eslint-visitor-keys: 3.4.3 385 | dev: false 386 | 387 | /acorn-jsx@5.3.2(acorn@8.11.3): 388 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 389 | peerDependencies: 390 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 391 | dependencies: 392 | acorn: 8.11.3 393 | dev: false 394 | 395 | /acorn@8.11.3: 396 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 397 | engines: {node: '>=0.4.0'} 398 | hasBin: true 399 | dev: false 400 | 401 | /ajv@6.12.6: 402 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 403 | dependencies: 404 | fast-deep-equal: 3.1.3 405 | fast-json-stable-stringify: 2.1.0 406 | json-schema-traverse: 0.4.1 407 | uri-js: 4.4.1 408 | dev: false 409 | 410 | /ansi-regex@5.0.1: 411 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 412 | engines: {node: '>=8'} 413 | dev: false 414 | 415 | /ansi-regex@6.0.1: 416 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 417 | engines: {node: '>=12'} 418 | dev: false 419 | 420 | /ansi-styles@4.3.0: 421 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 422 | engines: {node: '>=8'} 423 | dependencies: 424 | color-convert: 2.0.1 425 | dev: false 426 | 427 | /ansi-styles@6.2.1: 428 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 429 | engines: {node: '>=12'} 430 | dev: false 431 | 432 | /any-promise@1.3.0: 433 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 434 | dev: false 435 | 436 | /anymatch@3.1.3: 437 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 438 | engines: {node: '>= 8'} 439 | dependencies: 440 | normalize-path: 3.0.0 441 | picomatch: 2.3.1 442 | dev: false 443 | 444 | /arg@5.0.2: 445 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 446 | dev: false 447 | 448 | /argparse@2.0.1: 449 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 450 | dev: false 451 | 452 | /aria-query@5.3.0: 453 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 454 | dependencies: 455 | dequal: 2.0.3 456 | dev: false 457 | 458 | /array-buffer-byte-length@1.0.1: 459 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 460 | engines: {node: '>= 0.4'} 461 | dependencies: 462 | call-bind: 1.0.7 463 | is-array-buffer: 3.0.4 464 | dev: false 465 | 466 | /array-includes@3.1.7: 467 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} 468 | engines: {node: '>= 0.4'} 469 | dependencies: 470 | call-bind: 1.0.7 471 | define-properties: 1.2.1 472 | es-abstract: 1.22.5 473 | get-intrinsic: 1.2.4 474 | is-string: 1.0.7 475 | dev: false 476 | 477 | /array-union@2.1.0: 478 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 479 | engines: {node: '>=8'} 480 | dev: false 481 | 482 | /array.prototype.filter@1.0.3: 483 | resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} 484 | engines: {node: '>= 0.4'} 485 | dependencies: 486 | call-bind: 1.0.7 487 | define-properties: 1.2.1 488 | es-abstract: 1.22.5 489 | es-array-method-boxes-properly: 1.0.0 490 | is-string: 1.0.7 491 | dev: false 492 | 493 | /array.prototype.findlastindex@1.2.4: 494 | resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} 495 | engines: {node: '>= 0.4'} 496 | dependencies: 497 | call-bind: 1.0.7 498 | define-properties: 1.2.1 499 | es-abstract: 1.22.5 500 | es-errors: 1.3.0 501 | es-shim-unscopables: 1.0.2 502 | dev: false 503 | 504 | /array.prototype.flat@1.3.2: 505 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 506 | engines: {node: '>= 0.4'} 507 | dependencies: 508 | call-bind: 1.0.7 509 | define-properties: 1.2.1 510 | es-abstract: 1.22.5 511 | es-shim-unscopables: 1.0.2 512 | dev: false 513 | 514 | /array.prototype.flatmap@1.3.2: 515 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 516 | engines: {node: '>= 0.4'} 517 | dependencies: 518 | call-bind: 1.0.7 519 | define-properties: 1.2.1 520 | es-abstract: 1.22.5 521 | es-shim-unscopables: 1.0.2 522 | dev: false 523 | 524 | /array.prototype.tosorted@1.1.3: 525 | resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} 526 | dependencies: 527 | call-bind: 1.0.7 528 | define-properties: 1.2.1 529 | es-abstract: 1.22.5 530 | es-errors: 1.3.0 531 | es-shim-unscopables: 1.0.2 532 | dev: false 533 | 534 | /arraybuffer.prototype.slice@1.0.3: 535 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 536 | engines: {node: '>= 0.4'} 537 | dependencies: 538 | array-buffer-byte-length: 1.0.1 539 | call-bind: 1.0.7 540 | define-properties: 1.2.1 541 | es-abstract: 1.22.5 542 | es-errors: 1.3.0 543 | get-intrinsic: 1.2.4 544 | is-array-buffer: 3.0.4 545 | is-shared-array-buffer: 1.0.3 546 | dev: false 547 | 548 | /ast-types-flow@0.0.8: 549 | resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} 550 | dev: false 551 | 552 | /asynciterator.prototype@1.0.0: 553 | resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} 554 | dependencies: 555 | has-symbols: 1.0.3 556 | dev: false 557 | 558 | /autoprefixer@10.4.14(postcss@8.4.23): 559 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} 560 | engines: {node: ^10 || ^12 || >=14} 561 | hasBin: true 562 | peerDependencies: 563 | postcss: ^8.1.0 564 | dependencies: 565 | browserslist: 4.23.0 566 | caniuse-lite: 1.0.30001591 567 | fraction.js: 4.3.7 568 | normalize-range: 0.1.2 569 | picocolors: 1.0.0 570 | postcss: 8.4.23 571 | postcss-value-parser: 4.2.0 572 | dev: false 573 | 574 | /available-typed-arrays@1.0.7: 575 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 576 | engines: {node: '>= 0.4'} 577 | dependencies: 578 | possible-typed-array-names: 1.0.0 579 | dev: false 580 | 581 | /axe-core@4.7.0: 582 | resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} 583 | engines: {node: '>=4'} 584 | dev: false 585 | 586 | /axobject-query@3.2.1: 587 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} 588 | dependencies: 589 | dequal: 2.0.3 590 | dev: false 591 | 592 | /balanced-match@1.0.2: 593 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 594 | dev: false 595 | 596 | /binary-extensions@2.2.0: 597 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 598 | engines: {node: '>=8'} 599 | dev: false 600 | 601 | /brace-expansion@1.1.11: 602 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 603 | dependencies: 604 | balanced-match: 1.0.2 605 | concat-map: 0.0.1 606 | dev: false 607 | 608 | /brace-expansion@2.0.1: 609 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 610 | dependencies: 611 | balanced-match: 1.0.2 612 | dev: false 613 | 614 | /braces@3.0.2: 615 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 616 | engines: {node: '>=8'} 617 | dependencies: 618 | fill-range: 7.0.1 619 | dev: false 620 | 621 | /browserslist@4.23.0: 622 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 623 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 624 | hasBin: true 625 | dependencies: 626 | caniuse-lite: 1.0.30001591 627 | electron-to-chromium: 1.4.686 628 | node-releases: 2.0.14 629 | update-browserslist-db: 1.0.13(browserslist@4.23.0) 630 | dev: false 631 | 632 | /busboy@1.6.0: 633 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 634 | engines: {node: '>=10.16.0'} 635 | dependencies: 636 | streamsearch: 1.1.0 637 | dev: false 638 | 639 | /call-bind@1.0.7: 640 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 641 | engines: {node: '>= 0.4'} 642 | dependencies: 643 | es-define-property: 1.0.0 644 | es-errors: 1.3.0 645 | function-bind: 1.1.2 646 | get-intrinsic: 1.2.4 647 | set-function-length: 1.2.1 648 | dev: false 649 | 650 | /callsites@3.1.0: 651 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 652 | engines: {node: '>=6'} 653 | dev: false 654 | 655 | /camelcase-css@2.0.1: 656 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 657 | engines: {node: '>= 6'} 658 | dev: false 659 | 660 | /caniuse-lite@1.0.30001591: 661 | resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} 662 | dev: false 663 | 664 | /chalk@4.1.2: 665 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 666 | engines: {node: '>=10'} 667 | dependencies: 668 | ansi-styles: 4.3.0 669 | supports-color: 7.2.0 670 | dev: false 671 | 672 | /chokidar@3.6.0: 673 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 674 | engines: {node: '>= 8.10.0'} 675 | dependencies: 676 | anymatch: 3.1.3 677 | braces: 3.0.2 678 | glob-parent: 5.1.2 679 | is-binary-path: 2.1.0 680 | is-glob: 4.0.3 681 | normalize-path: 3.0.0 682 | readdirp: 3.6.0 683 | optionalDependencies: 684 | fsevents: 2.3.3 685 | dev: false 686 | 687 | /client-only@0.0.1: 688 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 689 | dev: false 690 | 691 | /color-convert@2.0.1: 692 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 693 | engines: {node: '>=7.0.0'} 694 | dependencies: 695 | color-name: 1.1.4 696 | dev: false 697 | 698 | /color-name@1.1.4: 699 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 700 | dev: false 701 | 702 | /commander@4.1.1: 703 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 704 | engines: {node: '>= 6'} 705 | dev: false 706 | 707 | /concat-map@0.0.1: 708 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 709 | dev: false 710 | 711 | /cross-spawn@7.0.3: 712 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 713 | engines: {node: '>= 8'} 714 | dependencies: 715 | path-key: 3.1.1 716 | shebang-command: 2.0.0 717 | which: 2.0.2 718 | dev: false 719 | 720 | /cssesc@3.0.0: 721 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 722 | engines: {node: '>=4'} 723 | hasBin: true 724 | dev: false 725 | 726 | /csstype@3.1.3: 727 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 728 | dev: false 729 | 730 | /damerau-levenshtein@1.0.8: 731 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 732 | dev: false 733 | 734 | /debug@3.2.7: 735 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 736 | peerDependencies: 737 | supports-color: '*' 738 | peerDependenciesMeta: 739 | supports-color: 740 | optional: true 741 | dependencies: 742 | ms: 2.1.3 743 | dev: false 744 | 745 | /debug@4.3.4: 746 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 747 | engines: {node: '>=6.0'} 748 | peerDependencies: 749 | supports-color: '*' 750 | peerDependenciesMeta: 751 | supports-color: 752 | optional: true 753 | dependencies: 754 | ms: 2.1.2 755 | dev: false 756 | 757 | /deep-is@0.1.4: 758 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 759 | dev: false 760 | 761 | /define-data-property@1.1.4: 762 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 763 | engines: {node: '>= 0.4'} 764 | dependencies: 765 | es-define-property: 1.0.0 766 | es-errors: 1.3.0 767 | gopd: 1.0.1 768 | dev: false 769 | 770 | /define-properties@1.2.1: 771 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 772 | engines: {node: '>= 0.4'} 773 | dependencies: 774 | define-data-property: 1.1.4 775 | has-property-descriptors: 1.0.2 776 | object-keys: 1.1.1 777 | dev: false 778 | 779 | /dequal@2.0.3: 780 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 781 | engines: {node: '>=6'} 782 | dev: false 783 | 784 | /didyoumean@1.2.2: 785 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 786 | dev: false 787 | 788 | /dir-glob@3.0.1: 789 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 790 | engines: {node: '>=8'} 791 | dependencies: 792 | path-type: 4.0.0 793 | dev: false 794 | 795 | /dlv@1.1.3: 796 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 797 | dev: false 798 | 799 | /doctrine@2.1.0: 800 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 801 | engines: {node: '>=0.10.0'} 802 | dependencies: 803 | esutils: 2.0.3 804 | dev: false 805 | 806 | /doctrine@3.0.0: 807 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 808 | engines: {node: '>=6.0.0'} 809 | dependencies: 810 | esutils: 2.0.3 811 | dev: false 812 | 813 | /eastasianwidth@0.2.0: 814 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 815 | dev: false 816 | 817 | /electron-to-chromium@1.4.686: 818 | resolution: {integrity: sha512-3avY1B+vUzNxEgkBDpKOP8WarvUAEwpRaiCL0He5OKWEFxzaOFiq4WoZEZe7qh0ReS7DiWoHMnYoQCKxNZNzSg==} 819 | dev: false 820 | 821 | /emoji-regex@8.0.0: 822 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 823 | dev: false 824 | 825 | /emoji-regex@9.2.2: 826 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 827 | dev: false 828 | 829 | /enhanced-resolve@5.15.1: 830 | resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==} 831 | engines: {node: '>=10.13.0'} 832 | dependencies: 833 | graceful-fs: 4.2.11 834 | tapable: 2.2.1 835 | dev: false 836 | 837 | /es-abstract@1.22.5: 838 | resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} 839 | engines: {node: '>= 0.4'} 840 | dependencies: 841 | array-buffer-byte-length: 1.0.1 842 | arraybuffer.prototype.slice: 1.0.3 843 | available-typed-arrays: 1.0.7 844 | call-bind: 1.0.7 845 | es-define-property: 1.0.0 846 | es-errors: 1.3.0 847 | es-set-tostringtag: 2.0.3 848 | es-to-primitive: 1.2.1 849 | function.prototype.name: 1.1.6 850 | get-intrinsic: 1.2.4 851 | get-symbol-description: 1.0.2 852 | globalthis: 1.0.3 853 | gopd: 1.0.1 854 | has-property-descriptors: 1.0.2 855 | has-proto: 1.0.3 856 | has-symbols: 1.0.3 857 | hasown: 2.0.1 858 | internal-slot: 1.0.7 859 | is-array-buffer: 3.0.4 860 | is-callable: 1.2.7 861 | is-negative-zero: 2.0.3 862 | is-regex: 1.1.4 863 | is-shared-array-buffer: 1.0.3 864 | is-string: 1.0.7 865 | is-typed-array: 1.1.13 866 | is-weakref: 1.0.2 867 | object-inspect: 1.13.1 868 | object-keys: 1.1.1 869 | object.assign: 4.1.5 870 | regexp.prototype.flags: 1.5.2 871 | safe-array-concat: 1.1.0 872 | safe-regex-test: 1.0.3 873 | string.prototype.trim: 1.2.8 874 | string.prototype.trimend: 1.0.7 875 | string.prototype.trimstart: 1.0.7 876 | typed-array-buffer: 1.0.2 877 | typed-array-byte-length: 1.0.1 878 | typed-array-byte-offset: 1.0.2 879 | typed-array-length: 1.0.5 880 | unbox-primitive: 1.0.2 881 | which-typed-array: 1.1.14 882 | dev: false 883 | 884 | /es-array-method-boxes-properly@1.0.0: 885 | resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} 886 | dev: false 887 | 888 | /es-define-property@1.0.0: 889 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 890 | engines: {node: '>= 0.4'} 891 | dependencies: 892 | get-intrinsic: 1.2.4 893 | dev: false 894 | 895 | /es-errors@1.3.0: 896 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 897 | engines: {node: '>= 0.4'} 898 | dev: false 899 | 900 | /es-iterator-helpers@1.0.17: 901 | resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} 902 | engines: {node: '>= 0.4'} 903 | dependencies: 904 | asynciterator.prototype: 1.0.0 905 | call-bind: 1.0.7 906 | define-properties: 1.2.1 907 | es-abstract: 1.22.5 908 | es-errors: 1.3.0 909 | es-set-tostringtag: 2.0.3 910 | function-bind: 1.1.2 911 | get-intrinsic: 1.2.4 912 | globalthis: 1.0.3 913 | has-property-descriptors: 1.0.2 914 | has-proto: 1.0.3 915 | has-symbols: 1.0.3 916 | internal-slot: 1.0.7 917 | iterator.prototype: 1.1.2 918 | safe-array-concat: 1.1.0 919 | dev: false 920 | 921 | /es-set-tostringtag@2.0.3: 922 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 923 | engines: {node: '>= 0.4'} 924 | dependencies: 925 | get-intrinsic: 1.2.4 926 | has-tostringtag: 1.0.2 927 | hasown: 2.0.1 928 | dev: false 929 | 930 | /es-shim-unscopables@1.0.2: 931 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 932 | dependencies: 933 | hasown: 2.0.1 934 | dev: false 935 | 936 | /es-to-primitive@1.2.1: 937 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 938 | engines: {node: '>= 0.4'} 939 | dependencies: 940 | is-callable: 1.2.7 941 | is-date-object: 1.0.5 942 | is-symbol: 1.0.4 943 | dev: false 944 | 945 | /escalade@3.1.2: 946 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 947 | engines: {node: '>=6'} 948 | dev: false 949 | 950 | /escape-string-regexp@4.0.0: 951 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 952 | engines: {node: '>=10'} 953 | dev: false 954 | 955 | /eslint-config-next@13.4.3(eslint@8.41.0)(typescript@5.0.4): 956 | resolution: {integrity: sha512-1lXwdFi29fKxzeugof/TUE7lpHyJQt5+U4LaUHyvQfHjvsWO77vFNicJv5sX6k0VDVSbnfz0lw+avxI+CinbMg==} 957 | peerDependencies: 958 | eslint: ^7.23.0 || ^8.0.0 959 | typescript: '>=3.3.1' 960 | peerDependenciesMeta: 961 | typescript: 962 | optional: true 963 | dependencies: 964 | '@next/eslint-plugin-next': 13.4.3 965 | '@rushstack/eslint-patch': 1.7.2 966 | '@typescript-eslint/parser': 5.62.0(eslint@8.41.0)(typescript@5.0.4) 967 | eslint: 8.41.0 968 | eslint-import-resolver-node: 0.3.9 969 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.41.0) 970 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.41.0) 971 | eslint-plugin-jsx-a11y: 6.8.0(eslint@8.41.0) 972 | eslint-plugin-react: 7.33.2(eslint@8.41.0) 973 | eslint-plugin-react-hooks: 4.6.0(eslint@8.41.0) 974 | typescript: 5.0.4 975 | transitivePeerDependencies: 976 | - eslint-import-resolver-webpack 977 | - supports-color 978 | dev: false 979 | 980 | /eslint-import-resolver-node@0.3.9: 981 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 982 | dependencies: 983 | debug: 3.2.7 984 | is-core-module: 2.13.1 985 | resolve: 1.22.8 986 | transitivePeerDependencies: 987 | - supports-color 988 | dev: false 989 | 990 | /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.41.0): 991 | resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} 992 | engines: {node: ^14.18.0 || >=16.0.0} 993 | peerDependencies: 994 | eslint: '*' 995 | eslint-plugin-import: '*' 996 | dependencies: 997 | debug: 4.3.4 998 | enhanced-resolve: 5.15.1 999 | eslint: 8.41.0 1000 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.41.0) 1001 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.41.0) 1002 | fast-glob: 3.3.2 1003 | get-tsconfig: 4.7.2 1004 | is-core-module: 2.13.1 1005 | is-glob: 4.0.3 1006 | transitivePeerDependencies: 1007 | - '@typescript-eslint/parser' 1008 | - eslint-import-resolver-node 1009 | - eslint-import-resolver-webpack 1010 | - supports-color 1011 | dev: false 1012 | 1013 | /eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.41.0): 1014 | resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} 1015 | engines: {node: '>=4'} 1016 | peerDependencies: 1017 | '@typescript-eslint/parser': '*' 1018 | eslint: '*' 1019 | eslint-import-resolver-node: '*' 1020 | eslint-import-resolver-typescript: '*' 1021 | eslint-import-resolver-webpack: '*' 1022 | peerDependenciesMeta: 1023 | '@typescript-eslint/parser': 1024 | optional: true 1025 | eslint: 1026 | optional: true 1027 | eslint-import-resolver-node: 1028 | optional: true 1029 | eslint-import-resolver-typescript: 1030 | optional: true 1031 | eslint-import-resolver-webpack: 1032 | optional: true 1033 | dependencies: 1034 | '@typescript-eslint/parser': 5.62.0(eslint@8.41.0)(typescript@5.0.4) 1035 | debug: 3.2.7 1036 | eslint: 8.41.0 1037 | eslint-import-resolver-node: 0.3.9 1038 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.41.0) 1039 | transitivePeerDependencies: 1040 | - supports-color 1041 | dev: false 1042 | 1043 | /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.41.0): 1044 | resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} 1045 | engines: {node: '>=4'} 1046 | peerDependencies: 1047 | '@typescript-eslint/parser': '*' 1048 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1049 | peerDependenciesMeta: 1050 | '@typescript-eslint/parser': 1051 | optional: true 1052 | dependencies: 1053 | '@typescript-eslint/parser': 5.62.0(eslint@8.41.0)(typescript@5.0.4) 1054 | array-includes: 3.1.7 1055 | array.prototype.findlastindex: 1.2.4 1056 | array.prototype.flat: 1.3.2 1057 | array.prototype.flatmap: 1.3.2 1058 | debug: 3.2.7 1059 | doctrine: 2.1.0 1060 | eslint: 8.41.0 1061 | eslint-import-resolver-node: 0.3.9 1062 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.41.0) 1063 | hasown: 2.0.1 1064 | is-core-module: 2.13.1 1065 | is-glob: 4.0.3 1066 | minimatch: 3.1.2 1067 | object.fromentries: 2.0.7 1068 | object.groupby: 1.0.2 1069 | object.values: 1.1.7 1070 | semver: 6.3.1 1071 | tsconfig-paths: 3.15.0 1072 | transitivePeerDependencies: 1073 | - eslint-import-resolver-typescript 1074 | - eslint-import-resolver-webpack 1075 | - supports-color 1076 | dev: false 1077 | 1078 | /eslint-plugin-jsx-a11y@6.8.0(eslint@8.41.0): 1079 | resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} 1080 | engines: {node: '>=4.0'} 1081 | peerDependencies: 1082 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1083 | dependencies: 1084 | '@babel/runtime': 7.24.0 1085 | aria-query: 5.3.0 1086 | array-includes: 3.1.7 1087 | array.prototype.flatmap: 1.3.2 1088 | ast-types-flow: 0.0.8 1089 | axe-core: 4.7.0 1090 | axobject-query: 3.2.1 1091 | damerau-levenshtein: 1.0.8 1092 | emoji-regex: 9.2.2 1093 | es-iterator-helpers: 1.0.17 1094 | eslint: 8.41.0 1095 | hasown: 2.0.1 1096 | jsx-ast-utils: 3.3.5 1097 | language-tags: 1.0.9 1098 | minimatch: 3.1.2 1099 | object.entries: 1.1.7 1100 | object.fromentries: 2.0.7 1101 | dev: false 1102 | 1103 | /eslint-plugin-react-hooks@4.6.0(eslint@8.41.0): 1104 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 1105 | engines: {node: '>=10'} 1106 | peerDependencies: 1107 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 1108 | dependencies: 1109 | eslint: 8.41.0 1110 | dev: false 1111 | 1112 | /eslint-plugin-react@7.33.2(eslint@8.41.0): 1113 | resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} 1114 | engines: {node: '>=4'} 1115 | peerDependencies: 1116 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1117 | dependencies: 1118 | array-includes: 3.1.7 1119 | array.prototype.flatmap: 1.3.2 1120 | array.prototype.tosorted: 1.1.3 1121 | doctrine: 2.1.0 1122 | es-iterator-helpers: 1.0.17 1123 | eslint: 8.41.0 1124 | estraverse: 5.3.0 1125 | jsx-ast-utils: 3.3.5 1126 | minimatch: 3.1.2 1127 | object.entries: 1.1.7 1128 | object.fromentries: 2.0.7 1129 | object.hasown: 1.1.3 1130 | object.values: 1.1.7 1131 | prop-types: 15.8.1 1132 | resolve: 2.0.0-next.5 1133 | semver: 6.3.1 1134 | string.prototype.matchall: 4.0.10 1135 | dev: false 1136 | 1137 | /eslint-scope@7.2.2: 1138 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1139 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1140 | dependencies: 1141 | esrecurse: 4.3.0 1142 | estraverse: 5.3.0 1143 | dev: false 1144 | 1145 | /eslint-visitor-keys@3.4.3: 1146 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1147 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1148 | dev: false 1149 | 1150 | /eslint@8.41.0: 1151 | resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==} 1152 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1153 | hasBin: true 1154 | dependencies: 1155 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) 1156 | '@eslint-community/regexpp': 4.10.0 1157 | '@eslint/eslintrc': 2.1.4 1158 | '@eslint/js': 8.41.0 1159 | '@humanwhocodes/config-array': 0.11.14 1160 | '@humanwhocodes/module-importer': 1.0.1 1161 | '@nodelib/fs.walk': 1.2.8 1162 | ajv: 6.12.6 1163 | chalk: 4.1.2 1164 | cross-spawn: 7.0.3 1165 | debug: 4.3.4 1166 | doctrine: 3.0.0 1167 | escape-string-regexp: 4.0.0 1168 | eslint-scope: 7.2.2 1169 | eslint-visitor-keys: 3.4.3 1170 | espree: 9.6.1 1171 | esquery: 1.5.0 1172 | esutils: 2.0.3 1173 | fast-deep-equal: 3.1.3 1174 | file-entry-cache: 6.0.1 1175 | find-up: 5.0.0 1176 | glob-parent: 6.0.2 1177 | globals: 13.24.0 1178 | graphemer: 1.4.0 1179 | ignore: 5.3.1 1180 | import-fresh: 3.3.0 1181 | imurmurhash: 0.1.4 1182 | is-glob: 4.0.3 1183 | is-path-inside: 3.0.3 1184 | js-yaml: 4.1.0 1185 | json-stable-stringify-without-jsonify: 1.0.1 1186 | levn: 0.4.1 1187 | lodash.merge: 4.6.2 1188 | minimatch: 3.1.2 1189 | natural-compare: 1.4.0 1190 | optionator: 0.9.3 1191 | strip-ansi: 6.0.1 1192 | strip-json-comments: 3.1.1 1193 | text-table: 0.2.0 1194 | transitivePeerDependencies: 1195 | - supports-color 1196 | dev: false 1197 | 1198 | /espree@9.6.1: 1199 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1200 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1201 | dependencies: 1202 | acorn: 8.11.3 1203 | acorn-jsx: 5.3.2(acorn@8.11.3) 1204 | eslint-visitor-keys: 3.4.3 1205 | dev: false 1206 | 1207 | /esquery@1.5.0: 1208 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1209 | engines: {node: '>=0.10'} 1210 | dependencies: 1211 | estraverse: 5.3.0 1212 | dev: false 1213 | 1214 | /esrecurse@4.3.0: 1215 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1216 | engines: {node: '>=4.0'} 1217 | dependencies: 1218 | estraverse: 5.3.0 1219 | dev: false 1220 | 1221 | /estraverse@5.3.0: 1222 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1223 | engines: {node: '>=4.0'} 1224 | dev: false 1225 | 1226 | /esutils@2.0.3: 1227 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1228 | engines: {node: '>=0.10.0'} 1229 | dev: false 1230 | 1231 | /fast-deep-equal@3.1.3: 1232 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1233 | dev: false 1234 | 1235 | /fast-glob@3.3.2: 1236 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1237 | engines: {node: '>=8.6.0'} 1238 | dependencies: 1239 | '@nodelib/fs.stat': 2.0.5 1240 | '@nodelib/fs.walk': 1.2.8 1241 | glob-parent: 5.1.2 1242 | merge2: 1.4.1 1243 | micromatch: 4.0.5 1244 | dev: false 1245 | 1246 | /fast-json-stable-stringify@2.1.0: 1247 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1248 | dev: false 1249 | 1250 | /fast-levenshtein@2.0.6: 1251 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1252 | dev: false 1253 | 1254 | /fastq@1.17.1: 1255 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1256 | dependencies: 1257 | reusify: 1.0.4 1258 | dev: false 1259 | 1260 | /file-entry-cache@6.0.1: 1261 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1262 | engines: {node: ^10.12.0 || >=12.0.0} 1263 | dependencies: 1264 | flat-cache: 3.2.0 1265 | dev: false 1266 | 1267 | /fill-range@7.0.1: 1268 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1269 | engines: {node: '>=8'} 1270 | dependencies: 1271 | to-regex-range: 5.0.1 1272 | dev: false 1273 | 1274 | /find-up@5.0.0: 1275 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1276 | engines: {node: '>=10'} 1277 | dependencies: 1278 | locate-path: 6.0.0 1279 | path-exists: 4.0.0 1280 | dev: false 1281 | 1282 | /flat-cache@3.2.0: 1283 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1284 | engines: {node: ^10.12.0 || >=12.0.0} 1285 | dependencies: 1286 | flatted: 3.3.1 1287 | keyv: 4.5.4 1288 | rimraf: 3.0.2 1289 | dev: false 1290 | 1291 | /flatted@3.3.1: 1292 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1293 | dev: false 1294 | 1295 | /for-each@0.3.3: 1296 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1297 | dependencies: 1298 | is-callable: 1.2.7 1299 | dev: false 1300 | 1301 | /foreground-child@3.1.1: 1302 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 1303 | engines: {node: '>=14'} 1304 | dependencies: 1305 | cross-spawn: 7.0.3 1306 | signal-exit: 4.1.0 1307 | dev: false 1308 | 1309 | /fraction.js@4.3.7: 1310 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 1311 | dev: false 1312 | 1313 | /fs.realpath@1.0.0: 1314 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1315 | dev: false 1316 | 1317 | /fsevents@2.3.3: 1318 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1319 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1320 | os: [darwin] 1321 | requiresBuild: true 1322 | dev: false 1323 | optional: true 1324 | 1325 | /function-bind@1.1.2: 1326 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1327 | dev: false 1328 | 1329 | /function.prototype.name@1.1.6: 1330 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1331 | engines: {node: '>= 0.4'} 1332 | dependencies: 1333 | call-bind: 1.0.7 1334 | define-properties: 1.2.1 1335 | es-abstract: 1.22.5 1336 | functions-have-names: 1.2.3 1337 | dev: false 1338 | 1339 | /functions-have-names@1.2.3: 1340 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1341 | dev: false 1342 | 1343 | /fuse.js@6.6.2: 1344 | resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==} 1345 | engines: {node: '>=10'} 1346 | dev: false 1347 | 1348 | /get-intrinsic@1.2.4: 1349 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 1350 | engines: {node: '>= 0.4'} 1351 | dependencies: 1352 | es-errors: 1.3.0 1353 | function-bind: 1.1.2 1354 | has-proto: 1.0.3 1355 | has-symbols: 1.0.3 1356 | hasown: 2.0.1 1357 | dev: false 1358 | 1359 | /get-symbol-description@1.0.2: 1360 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 1361 | engines: {node: '>= 0.4'} 1362 | dependencies: 1363 | call-bind: 1.0.7 1364 | es-errors: 1.3.0 1365 | get-intrinsic: 1.2.4 1366 | dev: false 1367 | 1368 | /get-tsconfig@4.7.2: 1369 | resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} 1370 | dependencies: 1371 | resolve-pkg-maps: 1.0.0 1372 | dev: false 1373 | 1374 | /glob-parent@5.1.2: 1375 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1376 | engines: {node: '>= 6'} 1377 | dependencies: 1378 | is-glob: 4.0.3 1379 | dev: false 1380 | 1381 | /glob-parent@6.0.2: 1382 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1383 | engines: {node: '>=10.13.0'} 1384 | dependencies: 1385 | is-glob: 4.0.3 1386 | dev: false 1387 | 1388 | /glob@10.3.10: 1389 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} 1390 | engines: {node: '>=16 || 14 >=14.17'} 1391 | hasBin: true 1392 | dependencies: 1393 | foreground-child: 3.1.1 1394 | jackspeak: 2.3.6 1395 | minimatch: 9.0.3 1396 | minipass: 7.0.4 1397 | path-scurry: 1.10.1 1398 | dev: false 1399 | 1400 | /glob@7.1.7: 1401 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} 1402 | dependencies: 1403 | fs.realpath: 1.0.0 1404 | inflight: 1.0.6 1405 | inherits: 2.0.4 1406 | minimatch: 3.1.2 1407 | once: 1.4.0 1408 | path-is-absolute: 1.0.1 1409 | dev: false 1410 | 1411 | /glob@7.2.3: 1412 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1413 | dependencies: 1414 | fs.realpath: 1.0.0 1415 | inflight: 1.0.6 1416 | inherits: 2.0.4 1417 | minimatch: 3.1.2 1418 | once: 1.4.0 1419 | path-is-absolute: 1.0.1 1420 | dev: false 1421 | 1422 | /globals@13.24.0: 1423 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1424 | engines: {node: '>=8'} 1425 | dependencies: 1426 | type-fest: 0.20.2 1427 | dev: false 1428 | 1429 | /globalthis@1.0.3: 1430 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1431 | engines: {node: '>= 0.4'} 1432 | dependencies: 1433 | define-properties: 1.2.1 1434 | dev: false 1435 | 1436 | /globby@11.1.0: 1437 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1438 | engines: {node: '>=10'} 1439 | dependencies: 1440 | array-union: 2.1.0 1441 | dir-glob: 3.0.1 1442 | fast-glob: 3.3.2 1443 | ignore: 5.3.1 1444 | merge2: 1.4.1 1445 | slash: 3.0.0 1446 | dev: false 1447 | 1448 | /gopd@1.0.1: 1449 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1450 | dependencies: 1451 | get-intrinsic: 1.2.4 1452 | dev: false 1453 | 1454 | /graceful-fs@4.2.11: 1455 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1456 | dev: false 1457 | 1458 | /graphemer@1.4.0: 1459 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1460 | dev: false 1461 | 1462 | /has-bigints@1.0.2: 1463 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1464 | dev: false 1465 | 1466 | /has-flag@4.0.0: 1467 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1468 | engines: {node: '>=8'} 1469 | dev: false 1470 | 1471 | /has-property-descriptors@1.0.2: 1472 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1473 | dependencies: 1474 | es-define-property: 1.0.0 1475 | dev: false 1476 | 1477 | /has-proto@1.0.3: 1478 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 1479 | engines: {node: '>= 0.4'} 1480 | dev: false 1481 | 1482 | /has-symbols@1.0.3: 1483 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1484 | engines: {node: '>= 0.4'} 1485 | dev: false 1486 | 1487 | /has-tostringtag@1.0.2: 1488 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1489 | engines: {node: '>= 0.4'} 1490 | dependencies: 1491 | has-symbols: 1.0.3 1492 | dev: false 1493 | 1494 | /hasown@2.0.1: 1495 | resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} 1496 | engines: {node: '>= 0.4'} 1497 | dependencies: 1498 | function-bind: 1.1.2 1499 | dev: false 1500 | 1501 | /ignore@5.3.1: 1502 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 1503 | engines: {node: '>= 4'} 1504 | dev: false 1505 | 1506 | /import-fresh@3.3.0: 1507 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1508 | engines: {node: '>=6'} 1509 | dependencies: 1510 | parent-module: 1.0.1 1511 | resolve-from: 4.0.0 1512 | dev: false 1513 | 1514 | /imurmurhash@0.1.4: 1515 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1516 | engines: {node: '>=0.8.19'} 1517 | dev: false 1518 | 1519 | /inflight@1.0.6: 1520 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1521 | dependencies: 1522 | once: 1.4.0 1523 | wrappy: 1.0.2 1524 | dev: false 1525 | 1526 | /inherits@2.0.4: 1527 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1528 | dev: false 1529 | 1530 | /internal-slot@1.0.7: 1531 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 1532 | engines: {node: '>= 0.4'} 1533 | dependencies: 1534 | es-errors: 1.3.0 1535 | hasown: 2.0.1 1536 | side-channel: 1.0.5 1537 | dev: false 1538 | 1539 | /is-array-buffer@3.0.4: 1540 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 1541 | engines: {node: '>= 0.4'} 1542 | dependencies: 1543 | call-bind: 1.0.7 1544 | get-intrinsic: 1.2.4 1545 | dev: false 1546 | 1547 | /is-async-function@2.0.0: 1548 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 1549 | engines: {node: '>= 0.4'} 1550 | dependencies: 1551 | has-tostringtag: 1.0.2 1552 | dev: false 1553 | 1554 | /is-bigint@1.0.4: 1555 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1556 | dependencies: 1557 | has-bigints: 1.0.2 1558 | dev: false 1559 | 1560 | /is-binary-path@2.1.0: 1561 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1562 | engines: {node: '>=8'} 1563 | dependencies: 1564 | binary-extensions: 2.2.0 1565 | dev: false 1566 | 1567 | /is-boolean-object@1.1.2: 1568 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1569 | engines: {node: '>= 0.4'} 1570 | dependencies: 1571 | call-bind: 1.0.7 1572 | has-tostringtag: 1.0.2 1573 | dev: false 1574 | 1575 | /is-callable@1.2.7: 1576 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1577 | engines: {node: '>= 0.4'} 1578 | dev: false 1579 | 1580 | /is-core-module@2.13.1: 1581 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1582 | dependencies: 1583 | hasown: 2.0.1 1584 | dev: false 1585 | 1586 | /is-date-object@1.0.5: 1587 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1588 | engines: {node: '>= 0.4'} 1589 | dependencies: 1590 | has-tostringtag: 1.0.2 1591 | dev: false 1592 | 1593 | /is-extglob@2.1.1: 1594 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1595 | engines: {node: '>=0.10.0'} 1596 | dev: false 1597 | 1598 | /is-finalizationregistry@1.0.2: 1599 | resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} 1600 | dependencies: 1601 | call-bind: 1.0.7 1602 | dev: false 1603 | 1604 | /is-fullwidth-code-point@3.0.0: 1605 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1606 | engines: {node: '>=8'} 1607 | dev: false 1608 | 1609 | /is-generator-function@1.0.10: 1610 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 1611 | engines: {node: '>= 0.4'} 1612 | dependencies: 1613 | has-tostringtag: 1.0.2 1614 | dev: false 1615 | 1616 | /is-glob@4.0.3: 1617 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1618 | engines: {node: '>=0.10.0'} 1619 | dependencies: 1620 | is-extglob: 2.1.1 1621 | dev: false 1622 | 1623 | /is-map@2.0.2: 1624 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} 1625 | dev: false 1626 | 1627 | /is-negative-zero@2.0.3: 1628 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 1629 | engines: {node: '>= 0.4'} 1630 | dev: false 1631 | 1632 | /is-number-object@1.0.7: 1633 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1634 | engines: {node: '>= 0.4'} 1635 | dependencies: 1636 | has-tostringtag: 1.0.2 1637 | dev: false 1638 | 1639 | /is-number@7.0.0: 1640 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1641 | engines: {node: '>=0.12.0'} 1642 | dev: false 1643 | 1644 | /is-path-inside@3.0.3: 1645 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1646 | engines: {node: '>=8'} 1647 | dev: false 1648 | 1649 | /is-regex@1.1.4: 1650 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1651 | engines: {node: '>= 0.4'} 1652 | dependencies: 1653 | call-bind: 1.0.7 1654 | has-tostringtag: 1.0.2 1655 | dev: false 1656 | 1657 | /is-set@2.0.2: 1658 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} 1659 | dev: false 1660 | 1661 | /is-shared-array-buffer@1.0.3: 1662 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 1663 | engines: {node: '>= 0.4'} 1664 | dependencies: 1665 | call-bind: 1.0.7 1666 | dev: false 1667 | 1668 | /is-string@1.0.7: 1669 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1670 | engines: {node: '>= 0.4'} 1671 | dependencies: 1672 | has-tostringtag: 1.0.2 1673 | dev: false 1674 | 1675 | /is-symbol@1.0.4: 1676 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1677 | engines: {node: '>= 0.4'} 1678 | dependencies: 1679 | has-symbols: 1.0.3 1680 | dev: false 1681 | 1682 | /is-typed-array@1.1.13: 1683 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 1684 | engines: {node: '>= 0.4'} 1685 | dependencies: 1686 | which-typed-array: 1.1.14 1687 | dev: false 1688 | 1689 | /is-weakmap@2.0.1: 1690 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} 1691 | dev: false 1692 | 1693 | /is-weakref@1.0.2: 1694 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1695 | dependencies: 1696 | call-bind: 1.0.7 1697 | dev: false 1698 | 1699 | /is-weakset@2.0.2: 1700 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} 1701 | dependencies: 1702 | call-bind: 1.0.7 1703 | get-intrinsic: 1.2.4 1704 | dev: false 1705 | 1706 | /isarray@2.0.5: 1707 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1708 | dev: false 1709 | 1710 | /isexe@2.0.0: 1711 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1712 | dev: false 1713 | 1714 | /iterator.prototype@1.1.2: 1715 | resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} 1716 | dependencies: 1717 | define-properties: 1.2.1 1718 | get-intrinsic: 1.2.4 1719 | has-symbols: 1.0.3 1720 | reflect.getprototypeof: 1.0.5 1721 | set-function-name: 2.0.2 1722 | dev: false 1723 | 1724 | /jackspeak@2.3.6: 1725 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 1726 | engines: {node: '>=14'} 1727 | dependencies: 1728 | '@isaacs/cliui': 8.0.2 1729 | optionalDependencies: 1730 | '@pkgjs/parseargs': 0.11.0 1731 | dev: false 1732 | 1733 | /jiti@1.21.0: 1734 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 1735 | hasBin: true 1736 | dev: false 1737 | 1738 | /js-tokens@4.0.0: 1739 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1740 | dev: false 1741 | 1742 | /js-yaml@4.1.0: 1743 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1744 | hasBin: true 1745 | dependencies: 1746 | argparse: 2.0.1 1747 | dev: false 1748 | 1749 | /json-buffer@3.0.1: 1750 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1751 | dev: false 1752 | 1753 | /json-schema-traverse@0.4.1: 1754 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1755 | dev: false 1756 | 1757 | /json-stable-stringify-without-jsonify@1.0.1: 1758 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1759 | dev: false 1760 | 1761 | /json5@1.0.2: 1762 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1763 | hasBin: true 1764 | dependencies: 1765 | minimist: 1.2.8 1766 | dev: false 1767 | 1768 | /jsx-ast-utils@3.3.5: 1769 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 1770 | engines: {node: '>=4.0'} 1771 | dependencies: 1772 | array-includes: 3.1.7 1773 | array.prototype.flat: 1.3.2 1774 | object.assign: 4.1.5 1775 | object.values: 1.1.7 1776 | dev: false 1777 | 1778 | /keyv@4.5.4: 1779 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1780 | dependencies: 1781 | json-buffer: 3.0.1 1782 | dev: false 1783 | 1784 | /language-subtag-registry@0.3.22: 1785 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} 1786 | dev: false 1787 | 1788 | /language-tags@1.0.9: 1789 | resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} 1790 | engines: {node: '>=0.10'} 1791 | dependencies: 1792 | language-subtag-registry: 0.3.22 1793 | dev: false 1794 | 1795 | /levn@0.4.1: 1796 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1797 | engines: {node: '>= 0.8.0'} 1798 | dependencies: 1799 | prelude-ls: 1.2.1 1800 | type-check: 0.4.0 1801 | dev: false 1802 | 1803 | /lilconfig@2.1.0: 1804 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1805 | engines: {node: '>=10'} 1806 | dev: false 1807 | 1808 | /lilconfig@3.1.1: 1809 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} 1810 | engines: {node: '>=14'} 1811 | dev: false 1812 | 1813 | /lines-and-columns@1.2.4: 1814 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1815 | dev: false 1816 | 1817 | /locate-path@6.0.0: 1818 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1819 | engines: {node: '>=10'} 1820 | dependencies: 1821 | p-locate: 5.0.0 1822 | dev: false 1823 | 1824 | /lodash.merge@4.6.2: 1825 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1826 | dev: false 1827 | 1828 | /loose-envify@1.4.0: 1829 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1830 | hasBin: true 1831 | dependencies: 1832 | js-tokens: 4.0.0 1833 | dev: false 1834 | 1835 | /lru-cache@10.2.0: 1836 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} 1837 | engines: {node: 14 || >=16.14} 1838 | dev: false 1839 | 1840 | /lru-cache@6.0.0: 1841 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1842 | engines: {node: '>=10'} 1843 | dependencies: 1844 | yallist: 4.0.0 1845 | dev: false 1846 | 1847 | /merge2@1.4.1: 1848 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1849 | engines: {node: '>= 8'} 1850 | dev: false 1851 | 1852 | /micromatch@4.0.5: 1853 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1854 | engines: {node: '>=8.6'} 1855 | dependencies: 1856 | braces: 3.0.2 1857 | picomatch: 2.3.1 1858 | dev: false 1859 | 1860 | /minimatch@3.1.2: 1861 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1862 | dependencies: 1863 | brace-expansion: 1.1.11 1864 | dev: false 1865 | 1866 | /minimatch@9.0.3: 1867 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1868 | engines: {node: '>=16 || 14 >=14.17'} 1869 | dependencies: 1870 | brace-expansion: 2.0.1 1871 | dev: false 1872 | 1873 | /minimist@1.2.8: 1874 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1875 | dev: false 1876 | 1877 | /minipass@7.0.4: 1878 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} 1879 | engines: {node: '>=16 || 14 >=14.17'} 1880 | dev: false 1881 | 1882 | /ms@2.1.2: 1883 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1884 | dev: false 1885 | 1886 | /ms@2.1.3: 1887 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1888 | dev: false 1889 | 1890 | /mz@2.7.0: 1891 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1892 | dependencies: 1893 | any-promise: 1.3.0 1894 | object-assign: 4.1.1 1895 | thenify-all: 1.6.0 1896 | dev: false 1897 | 1898 | /nanoid@3.3.7: 1899 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1900 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1901 | hasBin: true 1902 | dev: false 1903 | 1904 | /natural-compare@1.4.0: 1905 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1906 | dev: false 1907 | 1908 | /next@13.4.3(react-dom@18.2.0)(react@18.2.0): 1909 | resolution: {integrity: sha512-FV3pBrAAnAIfOclTvncw9dDohyeuEEXPe5KNcva91anT/rdycWbgtu3IjUj4n5yHnWK8YEPo0vrUecHmnmUNbA==} 1910 | engines: {node: '>=16.8.0'} 1911 | hasBin: true 1912 | peerDependencies: 1913 | '@opentelemetry/api': ^1.1.0 1914 | fibers: '>= 3.1.0' 1915 | node-sass: ^6.0.0 || ^7.0.0 1916 | react: ^18.2.0 1917 | react-dom: ^18.2.0 1918 | sass: ^1.3.0 1919 | peerDependenciesMeta: 1920 | '@opentelemetry/api': 1921 | optional: true 1922 | fibers: 1923 | optional: true 1924 | node-sass: 1925 | optional: true 1926 | sass: 1927 | optional: true 1928 | dependencies: 1929 | '@next/env': 13.4.3 1930 | '@swc/helpers': 0.5.1 1931 | busboy: 1.6.0 1932 | caniuse-lite: 1.0.30001591 1933 | postcss: 8.4.14 1934 | react: 18.2.0 1935 | react-dom: 18.2.0(react@18.2.0) 1936 | styled-jsx: 5.1.1(react@18.2.0) 1937 | zod: 3.21.4 1938 | optionalDependencies: 1939 | '@next/swc-darwin-arm64': 13.4.3 1940 | '@next/swc-darwin-x64': 13.4.3 1941 | '@next/swc-linux-arm64-gnu': 13.4.3 1942 | '@next/swc-linux-arm64-musl': 13.4.3 1943 | '@next/swc-linux-x64-gnu': 13.4.3 1944 | '@next/swc-linux-x64-musl': 13.4.3 1945 | '@next/swc-win32-arm64-msvc': 13.4.3 1946 | '@next/swc-win32-ia32-msvc': 13.4.3 1947 | '@next/swc-win32-x64-msvc': 13.4.3 1948 | transitivePeerDependencies: 1949 | - '@babel/core' 1950 | - babel-plugin-macros 1951 | dev: false 1952 | 1953 | /node-releases@2.0.14: 1954 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1955 | dev: false 1956 | 1957 | /normalize-path@3.0.0: 1958 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1959 | engines: {node: '>=0.10.0'} 1960 | dev: false 1961 | 1962 | /normalize-range@0.1.2: 1963 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1964 | engines: {node: '>=0.10.0'} 1965 | dev: false 1966 | 1967 | /object-assign@4.1.1: 1968 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1969 | engines: {node: '>=0.10.0'} 1970 | dev: false 1971 | 1972 | /object-hash@3.0.0: 1973 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1974 | engines: {node: '>= 6'} 1975 | dev: false 1976 | 1977 | /object-inspect@1.13.1: 1978 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 1979 | dev: false 1980 | 1981 | /object-keys@1.1.1: 1982 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1983 | engines: {node: '>= 0.4'} 1984 | dev: false 1985 | 1986 | /object.assign@4.1.5: 1987 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1988 | engines: {node: '>= 0.4'} 1989 | dependencies: 1990 | call-bind: 1.0.7 1991 | define-properties: 1.2.1 1992 | has-symbols: 1.0.3 1993 | object-keys: 1.1.1 1994 | dev: false 1995 | 1996 | /object.entries@1.1.7: 1997 | resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} 1998 | engines: {node: '>= 0.4'} 1999 | dependencies: 2000 | call-bind: 1.0.7 2001 | define-properties: 1.2.1 2002 | es-abstract: 1.22.5 2003 | dev: false 2004 | 2005 | /object.fromentries@2.0.7: 2006 | resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} 2007 | engines: {node: '>= 0.4'} 2008 | dependencies: 2009 | call-bind: 1.0.7 2010 | define-properties: 1.2.1 2011 | es-abstract: 1.22.5 2012 | dev: false 2013 | 2014 | /object.groupby@1.0.2: 2015 | resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} 2016 | dependencies: 2017 | array.prototype.filter: 1.0.3 2018 | call-bind: 1.0.7 2019 | define-properties: 1.2.1 2020 | es-abstract: 1.22.5 2021 | es-errors: 1.3.0 2022 | dev: false 2023 | 2024 | /object.hasown@1.1.3: 2025 | resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} 2026 | dependencies: 2027 | define-properties: 1.2.1 2028 | es-abstract: 1.22.5 2029 | dev: false 2030 | 2031 | /object.values@1.1.7: 2032 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} 2033 | engines: {node: '>= 0.4'} 2034 | dependencies: 2035 | call-bind: 1.0.7 2036 | define-properties: 1.2.1 2037 | es-abstract: 1.22.5 2038 | dev: false 2039 | 2040 | /once@1.4.0: 2041 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2042 | dependencies: 2043 | wrappy: 1.0.2 2044 | dev: false 2045 | 2046 | /optionator@0.9.3: 2047 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2048 | engines: {node: '>= 0.8.0'} 2049 | dependencies: 2050 | '@aashutoshrathi/word-wrap': 1.2.6 2051 | deep-is: 0.1.4 2052 | fast-levenshtein: 2.0.6 2053 | levn: 0.4.1 2054 | prelude-ls: 1.2.1 2055 | type-check: 0.4.0 2056 | dev: false 2057 | 2058 | /p-limit@3.1.0: 2059 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2060 | engines: {node: '>=10'} 2061 | dependencies: 2062 | yocto-queue: 0.1.0 2063 | dev: false 2064 | 2065 | /p-locate@5.0.0: 2066 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2067 | engines: {node: '>=10'} 2068 | dependencies: 2069 | p-limit: 3.1.0 2070 | dev: false 2071 | 2072 | /parent-module@1.0.1: 2073 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2074 | engines: {node: '>=6'} 2075 | dependencies: 2076 | callsites: 3.1.0 2077 | dev: false 2078 | 2079 | /path-exists@4.0.0: 2080 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2081 | engines: {node: '>=8'} 2082 | dev: false 2083 | 2084 | /path-is-absolute@1.0.1: 2085 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2086 | engines: {node: '>=0.10.0'} 2087 | dev: false 2088 | 2089 | /path-key@3.1.1: 2090 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2091 | engines: {node: '>=8'} 2092 | dev: false 2093 | 2094 | /path-parse@1.0.7: 2095 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2096 | dev: false 2097 | 2098 | /path-scurry@1.10.1: 2099 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} 2100 | engines: {node: '>=16 || 14 >=14.17'} 2101 | dependencies: 2102 | lru-cache: 10.2.0 2103 | minipass: 7.0.4 2104 | dev: false 2105 | 2106 | /path-type@4.0.0: 2107 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2108 | engines: {node: '>=8'} 2109 | dev: false 2110 | 2111 | /picocolors@1.0.0: 2112 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2113 | dev: false 2114 | 2115 | /picomatch@2.3.1: 2116 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2117 | engines: {node: '>=8.6'} 2118 | dev: false 2119 | 2120 | /pify@2.3.0: 2121 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2122 | engines: {node: '>=0.10.0'} 2123 | dev: false 2124 | 2125 | /pirates@4.0.6: 2126 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2127 | engines: {node: '>= 6'} 2128 | dev: false 2129 | 2130 | /possible-typed-array-names@1.0.0: 2131 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 2132 | engines: {node: '>= 0.4'} 2133 | dev: false 2134 | 2135 | /postcss-import@15.1.0(postcss@8.4.23): 2136 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2137 | engines: {node: '>=14.0.0'} 2138 | peerDependencies: 2139 | postcss: ^8.0.0 2140 | dependencies: 2141 | postcss: 8.4.23 2142 | postcss-value-parser: 4.2.0 2143 | read-cache: 1.0.0 2144 | resolve: 1.22.8 2145 | dev: false 2146 | 2147 | /postcss-js@4.0.1(postcss@8.4.23): 2148 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2149 | engines: {node: ^12 || ^14 || >= 16} 2150 | peerDependencies: 2151 | postcss: ^8.4.21 2152 | dependencies: 2153 | camelcase-css: 2.0.1 2154 | postcss: 8.4.23 2155 | dev: false 2156 | 2157 | /postcss-load-config@4.0.2(postcss@8.4.23): 2158 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 2159 | engines: {node: '>= 14'} 2160 | peerDependencies: 2161 | postcss: '>=8.0.9' 2162 | ts-node: '>=9.0.0' 2163 | peerDependenciesMeta: 2164 | postcss: 2165 | optional: true 2166 | ts-node: 2167 | optional: true 2168 | dependencies: 2169 | lilconfig: 3.1.1 2170 | postcss: 8.4.23 2171 | yaml: 2.4.0 2172 | dev: false 2173 | 2174 | /postcss-nested@6.0.1(postcss@8.4.23): 2175 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2176 | engines: {node: '>=12.0'} 2177 | peerDependencies: 2178 | postcss: ^8.2.14 2179 | dependencies: 2180 | postcss: 8.4.23 2181 | postcss-selector-parser: 6.0.15 2182 | dev: false 2183 | 2184 | /postcss-selector-parser@6.0.15: 2185 | resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} 2186 | engines: {node: '>=4'} 2187 | dependencies: 2188 | cssesc: 3.0.0 2189 | util-deprecate: 1.0.2 2190 | dev: false 2191 | 2192 | /postcss-value-parser@4.2.0: 2193 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2194 | dev: false 2195 | 2196 | /postcss@8.4.14: 2197 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 2198 | engines: {node: ^10 || ^12 || >=14} 2199 | dependencies: 2200 | nanoid: 3.3.7 2201 | picocolors: 1.0.0 2202 | source-map-js: 1.0.2 2203 | dev: false 2204 | 2205 | /postcss@8.4.23: 2206 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} 2207 | engines: {node: ^10 || ^12 || >=14} 2208 | dependencies: 2209 | nanoid: 3.3.7 2210 | picocolors: 1.0.0 2211 | source-map-js: 1.0.2 2212 | dev: false 2213 | 2214 | /prelude-ls@1.2.1: 2215 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2216 | engines: {node: '>= 0.8.0'} 2217 | dev: false 2218 | 2219 | /prop-types@15.8.1: 2220 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 2221 | dependencies: 2222 | loose-envify: 1.4.0 2223 | object-assign: 4.1.1 2224 | react-is: 16.13.1 2225 | dev: false 2226 | 2227 | /punycode@2.3.1: 2228 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2229 | engines: {node: '>=6'} 2230 | dev: false 2231 | 2232 | /queue-microtask@1.2.3: 2233 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2234 | dev: false 2235 | 2236 | /react-dom@18.2.0(react@18.2.0): 2237 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 2238 | peerDependencies: 2239 | react: ^18.2.0 2240 | dependencies: 2241 | loose-envify: 1.4.0 2242 | react: 18.2.0 2243 | scheduler: 0.23.0 2244 | dev: false 2245 | 2246 | /react-is@16.13.1: 2247 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 2248 | dev: false 2249 | 2250 | /react@18.2.0: 2251 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 2252 | engines: {node: '>=0.10.0'} 2253 | dependencies: 2254 | loose-envify: 1.4.0 2255 | dev: false 2256 | 2257 | /read-cache@1.0.0: 2258 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2259 | dependencies: 2260 | pify: 2.3.0 2261 | dev: false 2262 | 2263 | /readdirp@3.6.0: 2264 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2265 | engines: {node: '>=8.10.0'} 2266 | dependencies: 2267 | picomatch: 2.3.1 2268 | dev: false 2269 | 2270 | /reflect.getprototypeof@1.0.5: 2271 | resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} 2272 | engines: {node: '>= 0.4'} 2273 | dependencies: 2274 | call-bind: 1.0.7 2275 | define-properties: 1.2.1 2276 | es-abstract: 1.22.5 2277 | es-errors: 1.3.0 2278 | get-intrinsic: 1.2.4 2279 | globalthis: 1.0.3 2280 | which-builtin-type: 1.1.3 2281 | dev: false 2282 | 2283 | /regenerator-runtime@0.14.1: 2284 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 2285 | dev: false 2286 | 2287 | /regexp.prototype.flags@1.5.2: 2288 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} 2289 | engines: {node: '>= 0.4'} 2290 | dependencies: 2291 | call-bind: 1.0.7 2292 | define-properties: 1.2.1 2293 | es-errors: 1.3.0 2294 | set-function-name: 2.0.2 2295 | dev: false 2296 | 2297 | /resolve-from@4.0.0: 2298 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2299 | engines: {node: '>=4'} 2300 | dev: false 2301 | 2302 | /resolve-pkg-maps@1.0.0: 2303 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2304 | dev: false 2305 | 2306 | /resolve@1.22.8: 2307 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2308 | hasBin: true 2309 | dependencies: 2310 | is-core-module: 2.13.1 2311 | path-parse: 1.0.7 2312 | supports-preserve-symlinks-flag: 1.0.0 2313 | dev: false 2314 | 2315 | /resolve@2.0.0-next.5: 2316 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 2317 | hasBin: true 2318 | dependencies: 2319 | is-core-module: 2.13.1 2320 | path-parse: 1.0.7 2321 | supports-preserve-symlinks-flag: 1.0.0 2322 | dev: false 2323 | 2324 | /reusify@1.0.4: 2325 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2326 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2327 | dev: false 2328 | 2329 | /rimraf@3.0.2: 2330 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2331 | hasBin: true 2332 | dependencies: 2333 | glob: 7.2.3 2334 | dev: false 2335 | 2336 | /run-parallel@1.2.0: 2337 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2338 | dependencies: 2339 | queue-microtask: 1.2.3 2340 | dev: false 2341 | 2342 | /safe-array-concat@1.1.0: 2343 | resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} 2344 | engines: {node: '>=0.4'} 2345 | dependencies: 2346 | call-bind: 1.0.7 2347 | get-intrinsic: 1.2.4 2348 | has-symbols: 1.0.3 2349 | isarray: 2.0.5 2350 | dev: false 2351 | 2352 | /safe-regex-test@1.0.3: 2353 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 2354 | engines: {node: '>= 0.4'} 2355 | dependencies: 2356 | call-bind: 1.0.7 2357 | es-errors: 1.3.0 2358 | is-regex: 1.1.4 2359 | dev: false 2360 | 2361 | /scheduler@0.23.0: 2362 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 2363 | dependencies: 2364 | loose-envify: 1.4.0 2365 | dev: false 2366 | 2367 | /semver@6.3.1: 2368 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2369 | hasBin: true 2370 | dev: false 2371 | 2372 | /semver@7.6.0: 2373 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 2374 | engines: {node: '>=10'} 2375 | hasBin: true 2376 | dependencies: 2377 | lru-cache: 6.0.0 2378 | dev: false 2379 | 2380 | /set-function-length@1.2.1: 2381 | resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} 2382 | engines: {node: '>= 0.4'} 2383 | dependencies: 2384 | define-data-property: 1.1.4 2385 | es-errors: 1.3.0 2386 | function-bind: 1.1.2 2387 | get-intrinsic: 1.2.4 2388 | gopd: 1.0.1 2389 | has-property-descriptors: 1.0.2 2390 | dev: false 2391 | 2392 | /set-function-name@2.0.2: 2393 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 2394 | engines: {node: '>= 0.4'} 2395 | dependencies: 2396 | define-data-property: 1.1.4 2397 | es-errors: 1.3.0 2398 | functions-have-names: 1.2.3 2399 | has-property-descriptors: 1.0.2 2400 | dev: false 2401 | 2402 | /shebang-command@2.0.0: 2403 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2404 | engines: {node: '>=8'} 2405 | dependencies: 2406 | shebang-regex: 3.0.0 2407 | dev: false 2408 | 2409 | /shebang-regex@3.0.0: 2410 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2411 | engines: {node: '>=8'} 2412 | dev: false 2413 | 2414 | /side-channel@1.0.5: 2415 | resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} 2416 | engines: {node: '>= 0.4'} 2417 | dependencies: 2418 | call-bind: 1.0.7 2419 | es-errors: 1.3.0 2420 | get-intrinsic: 1.2.4 2421 | object-inspect: 1.13.1 2422 | dev: false 2423 | 2424 | /signal-exit@4.1.0: 2425 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2426 | engines: {node: '>=14'} 2427 | dev: false 2428 | 2429 | /slash@3.0.0: 2430 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2431 | engines: {node: '>=8'} 2432 | dev: false 2433 | 2434 | /source-map-js@1.0.2: 2435 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2436 | engines: {node: '>=0.10.0'} 2437 | dev: false 2438 | 2439 | /streamsearch@1.1.0: 2440 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2441 | engines: {node: '>=10.0.0'} 2442 | dev: false 2443 | 2444 | /string-width@4.2.3: 2445 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2446 | engines: {node: '>=8'} 2447 | dependencies: 2448 | emoji-regex: 8.0.0 2449 | is-fullwidth-code-point: 3.0.0 2450 | strip-ansi: 6.0.1 2451 | dev: false 2452 | 2453 | /string-width@5.1.2: 2454 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 2455 | engines: {node: '>=12'} 2456 | dependencies: 2457 | eastasianwidth: 0.2.0 2458 | emoji-regex: 9.2.2 2459 | strip-ansi: 7.1.0 2460 | dev: false 2461 | 2462 | /string.prototype.matchall@4.0.10: 2463 | resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} 2464 | dependencies: 2465 | call-bind: 1.0.7 2466 | define-properties: 1.2.1 2467 | es-abstract: 1.22.5 2468 | get-intrinsic: 1.2.4 2469 | has-symbols: 1.0.3 2470 | internal-slot: 1.0.7 2471 | regexp.prototype.flags: 1.5.2 2472 | set-function-name: 2.0.2 2473 | side-channel: 1.0.5 2474 | dev: false 2475 | 2476 | /string.prototype.trim@1.2.8: 2477 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} 2478 | engines: {node: '>= 0.4'} 2479 | dependencies: 2480 | call-bind: 1.0.7 2481 | define-properties: 1.2.1 2482 | es-abstract: 1.22.5 2483 | dev: false 2484 | 2485 | /string.prototype.trimend@1.0.7: 2486 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} 2487 | dependencies: 2488 | call-bind: 1.0.7 2489 | define-properties: 1.2.1 2490 | es-abstract: 1.22.5 2491 | dev: false 2492 | 2493 | /string.prototype.trimstart@1.0.7: 2494 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} 2495 | dependencies: 2496 | call-bind: 1.0.7 2497 | define-properties: 1.2.1 2498 | es-abstract: 1.22.5 2499 | dev: false 2500 | 2501 | /strip-ansi@6.0.1: 2502 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2503 | engines: {node: '>=8'} 2504 | dependencies: 2505 | ansi-regex: 5.0.1 2506 | dev: false 2507 | 2508 | /strip-ansi@7.1.0: 2509 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 2510 | engines: {node: '>=12'} 2511 | dependencies: 2512 | ansi-regex: 6.0.1 2513 | dev: false 2514 | 2515 | /strip-bom@3.0.0: 2516 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2517 | engines: {node: '>=4'} 2518 | dev: false 2519 | 2520 | /strip-json-comments@3.1.1: 2521 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2522 | engines: {node: '>=8'} 2523 | dev: false 2524 | 2525 | /styled-jsx@5.1.1(react@18.2.0): 2526 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 2527 | engines: {node: '>= 12.0.0'} 2528 | peerDependencies: 2529 | '@babel/core': '*' 2530 | babel-plugin-macros: '*' 2531 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 2532 | peerDependenciesMeta: 2533 | '@babel/core': 2534 | optional: true 2535 | babel-plugin-macros: 2536 | optional: true 2537 | dependencies: 2538 | client-only: 0.0.1 2539 | react: 18.2.0 2540 | dev: false 2541 | 2542 | /sucrase@3.35.0: 2543 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 2544 | engines: {node: '>=16 || 14 >=14.17'} 2545 | hasBin: true 2546 | dependencies: 2547 | '@jridgewell/gen-mapping': 0.3.4 2548 | commander: 4.1.1 2549 | glob: 10.3.10 2550 | lines-and-columns: 1.2.4 2551 | mz: 2.7.0 2552 | pirates: 4.0.6 2553 | ts-interface-checker: 0.1.13 2554 | dev: false 2555 | 2556 | /supports-color@7.2.0: 2557 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2558 | engines: {node: '>=8'} 2559 | dependencies: 2560 | has-flag: 4.0.0 2561 | dev: false 2562 | 2563 | /supports-preserve-symlinks-flag@1.0.0: 2564 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2565 | engines: {node: '>= 0.4'} 2566 | dev: false 2567 | 2568 | /tailwindcss@3.3.2: 2569 | resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} 2570 | engines: {node: '>=14.0.0'} 2571 | hasBin: true 2572 | dependencies: 2573 | '@alloc/quick-lru': 5.2.0 2574 | arg: 5.0.2 2575 | chokidar: 3.6.0 2576 | didyoumean: 1.2.2 2577 | dlv: 1.1.3 2578 | fast-glob: 3.3.2 2579 | glob-parent: 6.0.2 2580 | is-glob: 4.0.3 2581 | jiti: 1.21.0 2582 | lilconfig: 2.1.0 2583 | micromatch: 4.0.5 2584 | normalize-path: 3.0.0 2585 | object-hash: 3.0.0 2586 | picocolors: 1.0.0 2587 | postcss: 8.4.23 2588 | postcss-import: 15.1.0(postcss@8.4.23) 2589 | postcss-js: 4.0.1(postcss@8.4.23) 2590 | postcss-load-config: 4.0.2(postcss@8.4.23) 2591 | postcss-nested: 6.0.1(postcss@8.4.23) 2592 | postcss-selector-parser: 6.0.15 2593 | postcss-value-parser: 4.2.0 2594 | resolve: 1.22.8 2595 | sucrase: 3.35.0 2596 | transitivePeerDependencies: 2597 | - ts-node 2598 | dev: false 2599 | 2600 | /tapable@2.2.1: 2601 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 2602 | engines: {node: '>=6'} 2603 | dev: false 2604 | 2605 | /text-table@0.2.0: 2606 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2607 | dev: false 2608 | 2609 | /thenify-all@1.6.0: 2610 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2611 | engines: {node: '>=0.8'} 2612 | dependencies: 2613 | thenify: 3.3.1 2614 | dev: false 2615 | 2616 | /thenify@3.3.1: 2617 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2618 | dependencies: 2619 | any-promise: 1.3.0 2620 | dev: false 2621 | 2622 | /to-regex-range@5.0.1: 2623 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2624 | engines: {node: '>=8.0'} 2625 | dependencies: 2626 | is-number: 7.0.0 2627 | dev: false 2628 | 2629 | /ts-interface-checker@0.1.13: 2630 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2631 | dev: false 2632 | 2633 | /tsconfig-paths@3.15.0: 2634 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 2635 | dependencies: 2636 | '@types/json5': 0.0.29 2637 | json5: 1.0.2 2638 | minimist: 1.2.8 2639 | strip-bom: 3.0.0 2640 | dev: false 2641 | 2642 | /tslib@1.14.1: 2643 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2644 | dev: false 2645 | 2646 | /tslib@2.6.2: 2647 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2648 | dev: false 2649 | 2650 | /tsutils@3.21.0(typescript@5.0.4): 2651 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2652 | engines: {node: '>= 6'} 2653 | peerDependencies: 2654 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2655 | dependencies: 2656 | tslib: 1.14.1 2657 | typescript: 5.0.4 2658 | dev: false 2659 | 2660 | /type-check@0.4.0: 2661 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2662 | engines: {node: '>= 0.8.0'} 2663 | dependencies: 2664 | prelude-ls: 1.2.1 2665 | dev: false 2666 | 2667 | /type-fest@0.20.2: 2668 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2669 | engines: {node: '>=10'} 2670 | dev: false 2671 | 2672 | /typed-array-buffer@1.0.2: 2673 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 2674 | engines: {node: '>= 0.4'} 2675 | dependencies: 2676 | call-bind: 1.0.7 2677 | es-errors: 1.3.0 2678 | is-typed-array: 1.1.13 2679 | dev: false 2680 | 2681 | /typed-array-byte-length@1.0.1: 2682 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 2683 | engines: {node: '>= 0.4'} 2684 | dependencies: 2685 | call-bind: 1.0.7 2686 | for-each: 0.3.3 2687 | gopd: 1.0.1 2688 | has-proto: 1.0.3 2689 | is-typed-array: 1.1.13 2690 | dev: false 2691 | 2692 | /typed-array-byte-offset@1.0.2: 2693 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 2694 | engines: {node: '>= 0.4'} 2695 | dependencies: 2696 | available-typed-arrays: 1.0.7 2697 | call-bind: 1.0.7 2698 | for-each: 0.3.3 2699 | gopd: 1.0.1 2700 | has-proto: 1.0.3 2701 | is-typed-array: 1.1.13 2702 | dev: false 2703 | 2704 | /typed-array-length@1.0.5: 2705 | resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} 2706 | engines: {node: '>= 0.4'} 2707 | dependencies: 2708 | call-bind: 1.0.7 2709 | for-each: 0.3.3 2710 | gopd: 1.0.1 2711 | has-proto: 1.0.3 2712 | is-typed-array: 1.1.13 2713 | possible-typed-array-names: 1.0.0 2714 | dev: false 2715 | 2716 | /typescript@5.0.4: 2717 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} 2718 | engines: {node: '>=12.20'} 2719 | hasBin: true 2720 | dev: false 2721 | 2722 | /unbox-primitive@1.0.2: 2723 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2724 | dependencies: 2725 | call-bind: 1.0.7 2726 | has-bigints: 1.0.2 2727 | has-symbols: 1.0.3 2728 | which-boxed-primitive: 1.0.2 2729 | dev: false 2730 | 2731 | /update-browserslist-db@1.0.13(browserslist@4.23.0): 2732 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 2733 | hasBin: true 2734 | peerDependencies: 2735 | browserslist: '>= 4.21.0' 2736 | dependencies: 2737 | browserslist: 4.23.0 2738 | escalade: 3.1.2 2739 | picocolors: 1.0.0 2740 | dev: false 2741 | 2742 | /uri-js@4.4.1: 2743 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2744 | dependencies: 2745 | punycode: 2.3.1 2746 | dev: false 2747 | 2748 | /util-deprecate@1.0.2: 2749 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2750 | dev: false 2751 | 2752 | /which-boxed-primitive@1.0.2: 2753 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2754 | dependencies: 2755 | is-bigint: 1.0.4 2756 | is-boolean-object: 1.1.2 2757 | is-number-object: 1.0.7 2758 | is-string: 1.0.7 2759 | is-symbol: 1.0.4 2760 | dev: false 2761 | 2762 | /which-builtin-type@1.1.3: 2763 | resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} 2764 | engines: {node: '>= 0.4'} 2765 | dependencies: 2766 | function.prototype.name: 1.1.6 2767 | has-tostringtag: 1.0.2 2768 | is-async-function: 2.0.0 2769 | is-date-object: 1.0.5 2770 | is-finalizationregistry: 1.0.2 2771 | is-generator-function: 1.0.10 2772 | is-regex: 1.1.4 2773 | is-weakref: 1.0.2 2774 | isarray: 2.0.5 2775 | which-boxed-primitive: 1.0.2 2776 | which-collection: 1.0.1 2777 | which-typed-array: 1.1.14 2778 | dev: false 2779 | 2780 | /which-collection@1.0.1: 2781 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} 2782 | dependencies: 2783 | is-map: 2.0.2 2784 | is-set: 2.0.2 2785 | is-weakmap: 2.0.1 2786 | is-weakset: 2.0.2 2787 | dev: false 2788 | 2789 | /which-typed-array@1.1.14: 2790 | resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} 2791 | engines: {node: '>= 0.4'} 2792 | dependencies: 2793 | available-typed-arrays: 1.0.7 2794 | call-bind: 1.0.7 2795 | for-each: 0.3.3 2796 | gopd: 1.0.1 2797 | has-tostringtag: 1.0.2 2798 | dev: false 2799 | 2800 | /which@2.0.2: 2801 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2802 | engines: {node: '>= 8'} 2803 | hasBin: true 2804 | dependencies: 2805 | isexe: 2.0.0 2806 | dev: false 2807 | 2808 | /wrap-ansi@7.0.0: 2809 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2810 | engines: {node: '>=10'} 2811 | dependencies: 2812 | ansi-styles: 4.3.0 2813 | string-width: 4.2.3 2814 | strip-ansi: 6.0.1 2815 | dev: false 2816 | 2817 | /wrap-ansi@8.1.0: 2818 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2819 | engines: {node: '>=12'} 2820 | dependencies: 2821 | ansi-styles: 6.2.1 2822 | string-width: 5.1.2 2823 | strip-ansi: 7.1.0 2824 | dev: false 2825 | 2826 | /wrappy@1.0.2: 2827 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2828 | dev: false 2829 | 2830 | /yallist@4.0.0: 2831 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2832 | dev: false 2833 | 2834 | /yaml@2.4.0: 2835 | resolution: {integrity: sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==} 2836 | engines: {node: '>= 14'} 2837 | hasBin: true 2838 | dev: false 2839 | 2840 | /yocto-queue@0.1.0: 2841 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2842 | engines: {node: '>=10'} 2843 | dev: false 2844 | 2845 | /zod@3.21.4: 2846 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} 2847 | dev: false 2848 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mmocny/inp-workshop-nextjs/6f5d79cf25b7c2b9d834153c165f1ece771b1676/src/app/favicon.ico -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './styles.css'; 2 | import InteractionMonitor from '@/components/InteractionMonitor'; 3 | import { Suspense } from 'react' 4 | 5 | export const metadata = { 6 | title: 'Sailoogle', 7 | description: '', 8 | } 9 | 10 | export default function RootLayout({ 11 | children, 12 | }: { 13 | children: React.ReactNode 14 | }) { 15 | return ( 16 | 17 | 18 | 19 | 20 | {children} 21 | 22 | 23 | 24 | ) 25 | } -------------------------------------------------------------------------------- /src/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { ChangeEvent, Suspense, cache, use, useState, useTransition } from "react"; 4 | import dynamic from "next/dynamic"; 5 | 6 | import { SearchBar } from "@/components/SearchBar"; 7 | import { SailboatResults } from "@/components/SailboatResults"; 8 | import { SailboatPreview } from "@/components/SailboatPreview"; 9 | import { SearchResult, scoreMatch } from "@/script/searchResults"; 10 | import getSailData, { SailData } from "@/script/getSailData"; 11 | 12 | import useAbortSignallingTransition from "@/hooks/useAbortSignallingTransition"; 13 | import useDebouncedEffect from "@/hooks/useDebouncedEffect"; 14 | import { schedulerDotYield } from "@/script/schedulerDotYield"; 15 | 16 | /* 17 | * 18 | */ 19 | async function filterResults(sailData: SailData, searchTerm: string, abortSignal?: AbortSignal) { 20 | if (searchTerm == "") return []; 21 | 22 | const start = performance.now(); 23 | const results: SearchResult[] = []; 24 | 25 | for (let sailBoat of sailData.data) { 26 | // 4: 27 | await schedulerDotYield(); 28 | 29 | // 6: 30 | if (abortSignal?.aborted) { 31 | performance.measure("Abort filterResults for: " + searchTerm, { start }); 32 | return []; 33 | } 34 | 35 | let result: SearchResult = { score: 1.0, item: sailBoat }; 36 | // 1: 37 | result = scoreMatch(sailBoat, searchTerm); 38 | if (result) { 39 | results.push(result); 40 | } 41 | } 42 | 43 | results.sort((a, b) => a.score! - b.score!); 44 | 45 | performance.measure("Done filterResults for: " + searchTerm, { start }); 46 | return results; 47 | } 48 | 49 | /* 50 | * 51 | */ 52 | function AutoComplete({ searchTerm, sailData, abortSignal }: { searchTerm: string; sailData: SailData; abortSignal?: AbortSignal }) { 53 | const results = use(cache(filterResults)(sailData, searchTerm, abortSignal)); 54 | const slicedResults = results.slice(0, 10); 55 | 56 | return results.length == 0 ? ( 57 | <> 58 | ) : ( 59 | <> 60 | 61 | {slicedResults.map((result: SearchResult) => ( 62 | 63 | ))} 64 | 65 | ); 66 | } 67 | 68 | /* 69 | * 70 | */ 71 | function SearchPage() { 72 | const sailData = use(cache(getSailData)()); 73 | 74 | const [isPending, startTransition, signal] = useAbortSignallingTransition(); 75 | const [searchTerm, setSearchTerm] = useState(""); 76 | const [autoCompleteTerm, setAutoCompleteTerm] = useState(""); 77 | 78 | // 3: 79 | // useDebouncedEffect(() => { 80 | // startTransition(() => { 81 | // setAutoCompleteTerm(searchTerm); 82 | // }); 83 | // }, 1000, [searchTerm]); 84 | 85 | const onInput = async (e: ChangeEvent) => { 86 | const searchTerm = e.target.value; 87 | setSearchTerm(searchTerm); 88 | // 2: 89 | startTransition(() => { 90 | setAutoCompleteTerm(searchTerm); 91 | }); 92 | }; 93 | 94 | return ( 95 |
96 | 97 | 98 | 99 | 100 |
101 | ); 102 | } 103 | 104 | // This disables SSR in NextJS for this Page 105 | const Page = dynamic(async () => SearchPage, { ssr: false }); 106 | export default Page; 107 | -------------------------------------------------------------------------------- /src/app/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 7 | line-height: 1.5; 8 | font-weight: 400; 9 | 10 | color-scheme: light dark; 11 | color: rgba(255, 255, 255, 0.87); 12 | background-color: #242424; 13 | } 14 | 15 | a { 16 | font-weight: 500; 17 | color: #646cff; 18 | text-decoration: inherit; 19 | } 20 | 21 | a:hover { 22 | color: #535bf2; 23 | } 24 | 25 | @media (prefers-color-scheme: light) { 26 | :root { 27 | color: #213547; 28 | background-color: #ffffff; 29 | } 30 | a:hover { 31 | color: #747bff; 32 | } 33 | } 34 | 35 | 36 | body { 37 | margin: 0; 38 | min-width: 320px; 39 | min-height: 100vh; 40 | } 41 | 42 | main { 43 | min-height: 100vh; 44 | width: max(400px, 60vw); 45 | max-width: 100%; 46 | margin: 0 auto; 47 | padding: 10vw 0 5vw 0; 48 | 49 | display: grid; 50 | grid-template-rows: min-content repeat(10, min-content); 51 | gap: 1em; 52 | } 53 | 54 | @media only screen and (max-height: 900px) { 55 | main { 56 | padding-top: 5vw; 57 | } 58 | } 59 | 60 | 61 | .searchbox { 62 | width: 100%; 63 | padding: 1em; 64 | } 65 | 66 | .result { 67 | justify-self: stretch; 68 | } 69 | 70 | .result.item { 71 | justify-self: stretch; 72 | } 73 | 74 | .blurred .result { 75 | filter: blur(4px); 76 | } -------------------------------------------------------------------------------- /src/components/InteractionMonitor.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useEffect } from "react"; 4 | import { logAllInteractions } from "@/script/onInteraction.js"; 5 | 6 | export default function InteractionMonitor() { 7 | useEffect(() => { 8 | logAllInteractions(); 9 | }, []); 10 | return <>; 11 | } -------------------------------------------------------------------------------- /src/components/SailboatPreview.tsx: -------------------------------------------------------------------------------- 1 | import { SearchResult } from "../script/searchResults"; 2 | 3 | export function SailboatPreview({ result }: { result: SearchResult }) { 4 | const boat = result.item; 5 | return ( 6 |
7 |
{boat.name}
8 |
9 |
Designer: {boat.designer}
10 |
Builder: {boat.builder}
11 |
Years: {boat["first-built"]} - {boat["last-built"]}
12 |
13 |
14 | ); 15 | } -------------------------------------------------------------------------------- /src/components/SailboatResults.tsx: -------------------------------------------------------------------------------- 1 | import { SearchResult } from "../script/searchResults"; 2 | 3 | export function SailboatResults({ results }: { results: SearchResult[] }) { 4 | return ( 5 |
Results ({results.length}):
6 | ); 7 | } 8 | -------------------------------------------------------------------------------- /src/components/SearchBar.tsx: -------------------------------------------------------------------------------- 1 | type SearchBarProps = { 2 | searchTerm: string, 3 | onInput: (e: any) => void, 4 | }; 5 | 6 | export function SearchBar({ searchTerm, onInput: onInput }: SearchBarProps) { 7 | return ( 8 |
e.preventDefault()} action="#"> 9 | 10 |
11 | ); 12 | } -------------------------------------------------------------------------------- /src/hooks/useAbortSignallingTransition.ts: -------------------------------------------------------------------------------- 1 | import { TransitionFunction, TransitionStartFunction, useCallback, useState } from "react"; 2 | import useAwaitableTransition, { AwaitableTransitionStartFunction } from "./useAwaitableTransition"; 3 | 4 | export default function useAbortSignallingTransition() : [boolean, AwaitableTransitionStartFunction, AbortSignal] { 5 | const [isPending, startAwaitableTransition] = useAwaitableTransition(); 6 | const [abortController, setAbortController] = useState(new AbortController); 7 | 8 | const startAbortSignallingTransition = useCallback(async (callback: TransitionFunction) => { 9 | const newAbortController = new AbortController(); 10 | 11 | try { 12 | await startAwaitableTransition(() => { 13 | setAbortController(newAbortController); 14 | callback(); 15 | }); 16 | // Cleanup here 17 | } catch (ex) { 18 | newAbortController.abort(); 19 | // throw ex; 20 | } 21 | }, [startAwaitableTransition, setAbortController]); 22 | 23 | return [isPending, startAbortSignallingTransition, abortController.signal]; 24 | }; -------------------------------------------------------------------------------- /src/hooks/useAwaitableTransition.ts: -------------------------------------------------------------------------------- 1 | import { TransitionFunction, TransitionStartFunction, useCallback, useLayoutEffect, useRef, useTransition } from "react"; 2 | 3 | export type AwaitableTransitionStartFunction = (callback: TransitionFunction) => Promise; 4 | 5 | export default function useAwaitableTransition() : [boolean, AwaitableTransitionStartFunction] { 6 | const [isPending, startTransition] = useTransition(); 7 | const resolveRef = useRef<(value?: unknown) => void>(); 8 | const rejectRef = useRef<(reason?: any) => void>(); 9 | 10 | // This callback will start a new transition, returning a promise that resolves when the transition is complete, 11 | // or rejects if the transition is interrupted. 12 | const startAwaitableTransition: AwaitableTransitionStartFunction = useCallback( 13 | (callback: TransitionFunction) => new Promise((resolve, reject) => { 14 | // Reject previous transition-- only if a new transition is started before the previous one is complete. 15 | rejectRef.current?.(); 16 | // @ts-ignore 17 | resolveRef.current = resolve; 18 | rejectRef.current = reject; 19 | 20 | startTransition(callback); 21 | }), [startTransition]); 22 | 23 | // Now, we need a way to detect transition completionion, in order to resolve()... 24 | // I don't know of a better way to detect this, except to leverage useEffect, since these don't trigger for 25 | // rendering inside transitions, and wait until after next React commit. 26 | useLayoutEffect(() => { 27 | if (isPending) return; 28 | performance.mark('useLayoutEffect'); 29 | 30 | // Resovlve the current transition-- but this waits for next LayoutEffect + microtask to complete... 31 | // Which may be everso a bit later than we might otherwise want, but still in the same macrotask as rendering. 32 | resolveRef.current?.(); 33 | 34 | resolveRef.current = undefined; 35 | rejectRef.current = undefined; 36 | }, [isPending]); 37 | 38 | return [isPending, startAwaitableTransition]; 39 | }; -------------------------------------------------------------------------------- /src/hooks/useDebouncedEffect.ts: -------------------------------------------------------------------------------- 1 | import { DependencyList, EffectCallback, useEffect } from "react"; 2 | 3 | // This is a very trivial version of this hook. 4 | // There are several libraries that provide more robust versions. 5 | export default function useDebouncedEffect(callback: EffectCallback, delay: number, deps: DependencyList) { 6 | useEffect(() => { 7 | const timerid = setTimeout(callback, delay); 8 | return () => clearTimeout(timerid); 9 | }, deps); // eslint-disable-line react-hooks/exhaustive-deps 10 | } 11 | 12 | -------------------------------------------------------------------------------- /src/script/getSailData.ts: -------------------------------------------------------------------------------- 1 | // TODO: Can I avoid duplication? Can I automate this from JSON data? 2 | export type SailBoat = { 3 | 'builder': string, 4 | 'designer': string, 5 | 'disp': string, 6 | 'disp-len': string, 7 | 'draft-max': string, 8 | 'first-built': string, 9 | 'last-built': string, 10 | 'hull-type': string, 11 | 'id': string, 12 | 'loa': string, 13 | 'lwl': string, 14 | 'name': string, 15 | } 16 | export type SailData = { 17 | data: SailBoat[], 18 | keys: string[], 19 | }; 20 | 21 | export function getSailDataKeys() { 22 | return [ 23 | 'builder', 24 | 'designer', 25 | 'disp', 26 | 'disp-len', 27 | 'draft-max', 28 | 'first-built', 29 | 'last-built', 30 | 'hull-type', 31 | 'id', 32 | 'loa', 33 | 'lwl', 34 | 'name', 35 | ]; 36 | } 37 | 38 | export default async function getSailData() { 39 | const contents = await fetch('./all_sailboats.json'); 40 | const data = await contents.json(); 41 | return { 42 | data, 43 | keys: getSailDataKeys(), 44 | }; 45 | } 46 | -------------------------------------------------------------------------------- /src/script/onInteraction.js: -------------------------------------------------------------------------------- 1 | const RATING_COLORS = { 2 | good: "#0CCE6A", 3 | "needs-improvement": "#FFA400", 4 | poor: "#FF4E42" 5 | }; 6 | 7 | export function onInteraction(callback) { 8 | const valueToRating = (score) => 9 | score <= 200 ? "good" : score <= 500 ? "needs-improvement" : "poor"; 10 | 11 | const observer = new PerformanceObserver((list) => { 12 | const interactions = {}; 13 | 14 | for (let entry of list 15 | .getEntries() 16 | .filter((entry) => entry.interactionId)) { 17 | interactions[entry.interactionId] = 18 | interactions[entry.interactionId] || []; 19 | interactions[entry.interactionId].push(entry); 20 | } 21 | 22 | for (let interaction of Object.values(interactions)) { 23 | const entry = interaction.reduce((prev, curr) => 24 | prev.duration >= curr.duration ? prev : curr 25 | ); 26 | const entryTarget = interaction.map(entry => entry.target).find(target => !!target); 27 | const value = entry.duration; 28 | 29 | callback({ 30 | attribution: { 31 | eventEntry: entry, 32 | eventTarget: entryTarget, 33 | eventTime: entry.startTime, 34 | eventType: entry.name 35 | }, 36 | entries: interaction, 37 | name: "Interaction", 38 | rating: valueToRating(value), 39 | value 40 | }); 41 | } 42 | }); 43 | 44 | observer.observe({ 45 | type: "event", 46 | durationThreshold: 0, 47 | buffered: true 48 | }); 49 | } 50 | 51 | export function logInteraction(interaction) { 52 | console.groupCollapsed( 53 | `[${interaction.name}] %c${interaction.value.toFixed(0)} ms (${ 54 | interaction.rating 55 | })`, 56 | `color: ${RATING_COLORS[interaction.rating] || "inherit"}` 57 | ); 58 | 59 | console.log("Interaction target:", interaction.attribution.eventTarget); 60 | 61 | for (let entry of interaction.entries) { 62 | console.log( 63 | `Interaction event type: %c${entry.name}`, 64 | "font-family: monospace" 65 | ); 66 | 67 | const adjustedPresentationTime = Math.max( 68 | entry.processingEnd, 69 | entry.startTime + entry.duration 70 | ); 71 | 72 | console.table([ 73 | { 74 | subPartString: "Input delay", 75 | "Time (ms)": Math.round(entry.processingStart - entry.startTime, 0) 76 | }, 77 | { 78 | subPartString: "Processing time", 79 | "Time (ms)": Math.round(entry.processingEnd - entry.processingStart, 0) 80 | }, 81 | { 82 | subPartString: "Presentation delay", 83 | "Time (ms)": Math.round( 84 | adjustedPresentationTime - entry.processingEnd, 85 | 0 86 | ) 87 | } 88 | ]); 89 | } 90 | 91 | console.log(interaction); 92 | console.groupEnd(); 93 | } 94 | 95 | export function logAllInteractions() { 96 | // Some HMR systems will re-run and not clean up observers 97 | // if (window.loaded) return; 98 | // window.loaded = true; 99 | onInteraction(logInteraction); 100 | } 101 | -------------------------------------------------------------------------------- /src/script/schedulerDotYield.js: -------------------------------------------------------------------------------- 1 | function setImmediate(callback, ...args) { 2 | var channel = new MessageChannel(); 3 | channel.port1.onmessage = function() { 4 | callback(...args); 5 | }; 6 | channel.port2.postMessage(null); 7 | } 8 | 9 | async function schedulerDotYield() { 10 | return new Promise(resolve => { 11 | setImmediate(resolve); 12 | }); 13 | } 14 | 15 | async function rAF() { 16 | return new Promise(resolve => { 17 | requestAnimationFrame(resolve); 18 | }); 19 | } 20 | 21 | async function rPAF() { 22 | await rAF(); 23 | await schedulerDotYield(); 24 | } 25 | 26 | // TODO: (Perhaps) ideally this would be scheduler API, based on dom imvalidation or something 27 | let needsNextPaint_ = false; 28 | function needsNextPaint() { 29 | return needsNextPaint_; 30 | } 31 | 32 | // TODO: Ideally we don't need to mark ourselves 33 | async function markNeedsNextPaint() { 34 | needsNextPaint_ = true; 35 | await rPAF(); 36 | needsNextPaint_ = false; 37 | } 38 | 39 | async function schedulerDotYieldIfNeeded() { 40 | // Technically pending input isn't proof that we require next paint..., just that we should yield. 41 | // But unless all event handlers call markNeedsNextPaint correctly, lets just mark it anyway. 42 | if (navigator.scheduling.isInputPending()) { 43 | markNeedsNextPaint(); 44 | } 45 | if (needsNextPaint()) { 46 | await rPAF(); 47 | // Mark after a frame (so deadline resets after) 48 | markDidYield(); 49 | } 50 | } 51 | 52 | const DEADLINE = 100; 53 | let last_yield_ = 0; 54 | function needsYield() { 55 | return (performance.now() - last_yield_) > DEADLINE; 56 | } 57 | function markDidYield() { 58 | last_yield_ = performance.now(); 59 | } 60 | 61 | async function schedulerDotYieldIfNeededWithDeadlines() { 62 | await schedulerDotYieldIfNeeded(); 63 | if (needsYield()) { 64 | // Mark before yielding (so deadline resets before) 65 | markDidYield(); 66 | await schedulerDotYield(); 67 | } 68 | } 69 | 70 | 71 | export { 72 | markNeedsNextPaint, 73 | schedulerDotYield, 74 | schedulerDotYieldIfNeeded, 75 | schedulerDotYieldIfNeededWithDeadlines, 76 | } -------------------------------------------------------------------------------- /src/script/searchResults.ts: -------------------------------------------------------------------------------- 1 | import Fuse from 'fuse.js'; 2 | import { SailBoat, getSailDataKeys } from './getSailData'; 3 | 4 | export type SearchResult = { score?: number | undefined, item: SailBoat }; 5 | 6 | const defaultOptions = { 7 | isCaseSensitive: false, 8 | includeScore: true, 9 | shouldSort: true, 10 | includeMatches: false, 11 | // findAllMatches: true, 12 | minMatchCharLength: 0, 13 | // location: 0, 14 | threshold: 0.3, 15 | // distance: 100, 16 | // useExtendedSearch: false, 17 | // ignoreLocation: false, 18 | // ignoreFieldNorm: false, 19 | // fieldNormWeight: 1, 20 | keys: [], 21 | }; 22 | 23 | export function scoreMatch(data: SailBoat, searchTerm: string) { 24 | const target = performance.now() + 0.1; 25 | const fuse = new Fuse([data], { 26 | ...defaultOptions, 27 | keys: getSailDataKeys(), 28 | }); 29 | 30 | // Add a little bit of latency to search. 31 | // This just helps demonstrate the issue on faster machines. 32 | while (performance.now() < target); 33 | 34 | return fuse.search(searchTerm)[0]; 35 | } -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}', 5 | './src/components/**/*.{js,ts,jsx,tsx,mdx}', 6 | './src/app/**/*.{js,ts,jsx,tsx,mdx}', 7 | ], 8 | theme: { 9 | extend: { 10 | backgroundImage: { 11 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 12 | 'gradient-conic': 13 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | } 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "plugins": [ 18 | { 19 | "name": "next" 20 | } 21 | ], 22 | "paths": { 23 | "@/*": ["./src/*"] 24 | } 25 | }, 26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "src/components/AutocompleteResultst.tssx"], 27 | "exclude": ["node_modules"] 28 | } 29 | --------------------------------------------------------------------------------