├── .eslintrc.cjs ├── .gitignore ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public └── vite.svg ├── src ├── App.css ├── App.tsx ├── api │ ├── data.json │ ├── types.ts │ └── user.ts ├── assets │ └── react.svg ├── components │ ├── debouncedInput.tsx │ └── table.tsx ├── hooks │ └── useFilters.ts ├── index.css ├── main.tsx ├── routeTree.gen.ts ├── routes │ ├── __root.tsx │ ├── anotherRoute.tsx │ └── users.tsx ├── utils │ ├── cleanEmptyParams.ts │ ├── tableSortMapper.ts │ └── userColumns.tsx └── vite-env.d.ts ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | 'eslint:recommended', 6 | 'plugin:@typescript-eslint/recommended', 7 | 'plugin:react-hooks/recommended', 8 | ], 9 | ignorePatterns: ['dist', '.eslintrc.cjs'], 10 | parser: '@typescript-eslint/parser', 11 | plugins: ['react-refresh'], 12 | rules: { 13 | 'react-refresh/only-export-components': [ 14 | 'warn', 15 | { allowConstantExport: true }, 16 | ], 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TanStack Table + Router + Query 2 | 3 | A demo implementing backend pagination, filtering and sorting on TanStack Table, with TanStack Query holding the async state and TanStack Router managing the local state in the URL query parameters. 4 | 5 | Watch me doing a walkthrough of the code on [YouTube](https://www.youtube.com/watch?v=F4zshDInsJY). 6 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | TanStack Table + Router + Query 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tanstack-filtered-table-demo", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@faker-js/faker": "^8.4.1", 14 | "@tanstack/react-query": "^5.62.1", 15 | "@tanstack/react-router": "^1.85.0", 16 | "@tanstack/react-table": "^8.20.5", 17 | "react": "^18.2.0", 18 | "react-dom": "^18.2.0" 19 | }, 20 | "devDependencies": { 21 | "@tanstack/router-vite-plugin": "^1.37.0", 22 | "@types/react": "^18.2.66", 23 | "@types/react-dom": "^18.2.22", 24 | "@typescript-eslint/eslint-plugin": "^7.2.0", 25 | "@typescript-eslint/parser": "^7.2.0", 26 | "@vitejs/plugin-react": "^4.2.1", 27 | "eslint": "^8.57.0", 28 | "eslint-plugin-react-hooks": "^4.6.0", 29 | "eslint-plugin-react-refresh": "^0.4.6", 30 | "typescript": "^5.2.2", 31 | "vite": "^5.2.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@faker-js/faker': 12 | specifier: ^8.4.1 13 | version: 8.4.1 14 | '@tanstack/react-query': 15 | specifier: ^5.62.1 16 | version: 5.62.1(react@18.3.1) 17 | '@tanstack/react-router': 18 | specifier: ^1.85.0 19 | version: 1.85.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 20 | '@tanstack/react-table': 21 | specifier: ^8.20.5 22 | version: 8.20.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 23 | react: 24 | specifier: ^18.2.0 25 | version: 18.3.1 26 | react-dom: 27 | specifier: ^18.2.0 28 | version: 18.3.1(react@18.3.1) 29 | devDependencies: 30 | '@tanstack/router-vite-plugin': 31 | specifier: ^1.37.0 32 | version: 1.37.0(vite@5.2.13) 33 | '@types/react': 34 | specifier: ^18.2.66 35 | version: 18.3.3 36 | '@types/react-dom': 37 | specifier: ^18.2.22 38 | version: 18.3.0 39 | '@typescript-eslint/eslint-plugin': 40 | specifier: ^7.2.0 41 | version: 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) 42 | '@typescript-eslint/parser': 43 | specifier: ^7.2.0 44 | version: 7.13.0(eslint@8.57.0)(typescript@5.4.5) 45 | '@vitejs/plugin-react': 46 | specifier: ^4.2.1 47 | version: 4.3.1(vite@5.2.13) 48 | eslint: 49 | specifier: ^8.57.0 50 | version: 8.57.0 51 | eslint-plugin-react-hooks: 52 | specifier: ^4.6.0 53 | version: 4.6.2(eslint@8.57.0) 54 | eslint-plugin-react-refresh: 55 | specifier: ^0.4.6 56 | version: 0.4.7(eslint@8.57.0) 57 | typescript: 58 | specifier: ^5.2.2 59 | version: 5.4.5 60 | vite: 61 | specifier: ^5.2.0 62 | version: 5.2.13 63 | 64 | packages: 65 | 66 | '@ampproject/remapping@2.3.0': 67 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 68 | engines: {node: '>=6.0.0'} 69 | 70 | '@babel/code-frame@7.24.7': 71 | resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} 72 | engines: {node: '>=6.9.0'} 73 | 74 | '@babel/compat-data@7.24.7': 75 | resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} 76 | engines: {node: '>=6.9.0'} 77 | 78 | '@babel/core@7.24.7': 79 | resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} 80 | engines: {node: '>=6.9.0'} 81 | 82 | '@babel/generator@7.24.7': 83 | resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} 84 | engines: {node: '>=6.9.0'} 85 | 86 | '@babel/helper-annotate-as-pure@7.24.7': 87 | resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} 88 | engines: {node: '>=6.9.0'} 89 | 90 | '@babel/helper-compilation-targets@7.24.7': 91 | resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} 92 | engines: {node: '>=6.9.0'} 93 | 94 | '@babel/helper-create-class-features-plugin@7.24.7': 95 | resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} 96 | engines: {node: '>=6.9.0'} 97 | peerDependencies: 98 | '@babel/core': ^7.0.0 99 | 100 | '@babel/helper-environment-visitor@7.24.7': 101 | resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} 102 | engines: {node: '>=6.9.0'} 103 | 104 | '@babel/helper-function-name@7.24.7': 105 | resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} 106 | engines: {node: '>=6.9.0'} 107 | 108 | '@babel/helper-hoist-variables@7.24.7': 109 | resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} 110 | engines: {node: '>=6.9.0'} 111 | 112 | '@babel/helper-member-expression-to-functions@7.24.7': 113 | resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} 114 | engines: {node: '>=6.9.0'} 115 | 116 | '@babel/helper-module-imports@7.24.7': 117 | resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} 118 | engines: {node: '>=6.9.0'} 119 | 120 | '@babel/helper-module-transforms@7.24.7': 121 | resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} 122 | engines: {node: '>=6.9.0'} 123 | peerDependencies: 124 | '@babel/core': ^7.0.0 125 | 126 | '@babel/helper-optimise-call-expression@7.24.7': 127 | resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} 128 | engines: {node: '>=6.9.0'} 129 | 130 | '@babel/helper-plugin-utils@7.24.7': 131 | resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} 132 | engines: {node: '>=6.9.0'} 133 | 134 | '@babel/helper-replace-supers@7.24.7': 135 | resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} 136 | engines: {node: '>=6.9.0'} 137 | peerDependencies: 138 | '@babel/core': ^7.0.0 139 | 140 | '@babel/helper-simple-access@7.24.7': 141 | resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} 142 | engines: {node: '>=6.9.0'} 143 | 144 | '@babel/helper-skip-transparent-expression-wrappers@7.24.7': 145 | resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} 146 | engines: {node: '>=6.9.0'} 147 | 148 | '@babel/helper-split-export-declaration@7.24.7': 149 | resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} 150 | engines: {node: '>=6.9.0'} 151 | 152 | '@babel/helper-string-parser@7.24.7': 153 | resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} 154 | engines: {node: '>=6.9.0'} 155 | 156 | '@babel/helper-validator-identifier@7.24.7': 157 | resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 158 | engines: {node: '>=6.9.0'} 159 | 160 | '@babel/helper-validator-option@7.24.7': 161 | resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} 162 | engines: {node: '>=6.9.0'} 163 | 164 | '@babel/helpers@7.24.7': 165 | resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} 166 | engines: {node: '>=6.9.0'} 167 | 168 | '@babel/highlight@7.24.7': 169 | resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} 170 | engines: {node: '>=6.9.0'} 171 | 172 | '@babel/parser@7.24.7': 173 | resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} 174 | engines: {node: '>=6.0.0'} 175 | hasBin: true 176 | 177 | '@babel/plugin-syntax-jsx@7.24.7': 178 | resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} 179 | engines: {node: '>=6.9.0'} 180 | peerDependencies: 181 | '@babel/core': ^7.0.0-0 182 | 183 | '@babel/plugin-syntax-typescript@7.24.7': 184 | resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} 185 | engines: {node: '>=6.9.0'} 186 | peerDependencies: 187 | '@babel/core': ^7.0.0-0 188 | 189 | '@babel/plugin-transform-react-jsx-self@7.24.7': 190 | resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} 191 | engines: {node: '>=6.9.0'} 192 | peerDependencies: 193 | '@babel/core': ^7.0.0-0 194 | 195 | '@babel/plugin-transform-react-jsx-source@7.24.7': 196 | resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} 197 | engines: {node: '>=6.9.0'} 198 | peerDependencies: 199 | '@babel/core': ^7.0.0-0 200 | 201 | '@babel/plugin-transform-react-jsx@7.24.7': 202 | resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} 203 | engines: {node: '>=6.9.0'} 204 | peerDependencies: 205 | '@babel/core': ^7.0.0-0 206 | 207 | '@babel/plugin-transform-typescript@7.24.7': 208 | resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} 209 | engines: {node: '>=6.9.0'} 210 | peerDependencies: 211 | '@babel/core': ^7.0.0-0 212 | 213 | '@babel/template@7.24.7': 214 | resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} 215 | engines: {node: '>=6.9.0'} 216 | 217 | '@babel/traverse@7.24.7': 218 | resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} 219 | engines: {node: '>=6.9.0'} 220 | 221 | '@babel/types@7.24.7': 222 | resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} 223 | engines: {node: '>=6.9.0'} 224 | 225 | '@esbuild/aix-ppc64@0.20.2': 226 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 227 | engines: {node: '>=12'} 228 | cpu: [ppc64] 229 | os: [aix] 230 | 231 | '@esbuild/android-arm64@0.20.2': 232 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 233 | engines: {node: '>=12'} 234 | cpu: [arm64] 235 | os: [android] 236 | 237 | '@esbuild/android-arm@0.20.2': 238 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 239 | engines: {node: '>=12'} 240 | cpu: [arm] 241 | os: [android] 242 | 243 | '@esbuild/android-x64@0.20.2': 244 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 245 | engines: {node: '>=12'} 246 | cpu: [x64] 247 | os: [android] 248 | 249 | '@esbuild/darwin-arm64@0.20.2': 250 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 251 | engines: {node: '>=12'} 252 | cpu: [arm64] 253 | os: [darwin] 254 | 255 | '@esbuild/darwin-x64@0.20.2': 256 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 257 | engines: {node: '>=12'} 258 | cpu: [x64] 259 | os: [darwin] 260 | 261 | '@esbuild/freebsd-arm64@0.20.2': 262 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 263 | engines: {node: '>=12'} 264 | cpu: [arm64] 265 | os: [freebsd] 266 | 267 | '@esbuild/freebsd-x64@0.20.2': 268 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 269 | engines: {node: '>=12'} 270 | cpu: [x64] 271 | os: [freebsd] 272 | 273 | '@esbuild/linux-arm64@0.20.2': 274 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 275 | engines: {node: '>=12'} 276 | cpu: [arm64] 277 | os: [linux] 278 | 279 | '@esbuild/linux-arm@0.20.2': 280 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 281 | engines: {node: '>=12'} 282 | cpu: [arm] 283 | os: [linux] 284 | 285 | '@esbuild/linux-ia32@0.20.2': 286 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 287 | engines: {node: '>=12'} 288 | cpu: [ia32] 289 | os: [linux] 290 | 291 | '@esbuild/linux-loong64@0.20.2': 292 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 293 | engines: {node: '>=12'} 294 | cpu: [loong64] 295 | os: [linux] 296 | 297 | '@esbuild/linux-mips64el@0.20.2': 298 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 299 | engines: {node: '>=12'} 300 | cpu: [mips64el] 301 | os: [linux] 302 | 303 | '@esbuild/linux-ppc64@0.20.2': 304 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 305 | engines: {node: '>=12'} 306 | cpu: [ppc64] 307 | os: [linux] 308 | 309 | '@esbuild/linux-riscv64@0.20.2': 310 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 311 | engines: {node: '>=12'} 312 | cpu: [riscv64] 313 | os: [linux] 314 | 315 | '@esbuild/linux-s390x@0.20.2': 316 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 317 | engines: {node: '>=12'} 318 | cpu: [s390x] 319 | os: [linux] 320 | 321 | '@esbuild/linux-x64@0.20.2': 322 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 323 | engines: {node: '>=12'} 324 | cpu: [x64] 325 | os: [linux] 326 | 327 | '@esbuild/netbsd-x64@0.20.2': 328 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 329 | engines: {node: '>=12'} 330 | cpu: [x64] 331 | os: [netbsd] 332 | 333 | '@esbuild/openbsd-x64@0.20.2': 334 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 335 | engines: {node: '>=12'} 336 | cpu: [x64] 337 | os: [openbsd] 338 | 339 | '@esbuild/sunos-x64@0.20.2': 340 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 341 | engines: {node: '>=12'} 342 | cpu: [x64] 343 | os: [sunos] 344 | 345 | '@esbuild/win32-arm64@0.20.2': 346 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 347 | engines: {node: '>=12'} 348 | cpu: [arm64] 349 | os: [win32] 350 | 351 | '@esbuild/win32-ia32@0.20.2': 352 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 353 | engines: {node: '>=12'} 354 | cpu: [ia32] 355 | os: [win32] 356 | 357 | '@esbuild/win32-x64@0.20.2': 358 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 359 | engines: {node: '>=12'} 360 | cpu: [x64] 361 | os: [win32] 362 | 363 | '@eslint-community/eslint-utils@4.4.0': 364 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 365 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 366 | peerDependencies: 367 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 368 | 369 | '@eslint-community/regexpp@4.10.1': 370 | resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} 371 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 372 | 373 | '@eslint/eslintrc@2.1.4': 374 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 375 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 376 | 377 | '@eslint/js@8.57.0': 378 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 379 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 380 | 381 | '@faker-js/faker@8.4.1': 382 | resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==} 383 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} 384 | 385 | '@humanwhocodes/config-array@0.11.14': 386 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 387 | engines: {node: '>=10.10.0'} 388 | deprecated: Use @eslint/config-array instead 389 | 390 | '@humanwhocodes/module-importer@1.0.1': 391 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 392 | engines: {node: '>=12.22'} 393 | 394 | '@humanwhocodes/object-schema@2.0.3': 395 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 396 | deprecated: Use @eslint/object-schema instead 397 | 398 | '@jridgewell/gen-mapping@0.3.5': 399 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 400 | engines: {node: '>=6.0.0'} 401 | 402 | '@jridgewell/resolve-uri@3.1.2': 403 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 404 | engines: {node: '>=6.0.0'} 405 | 406 | '@jridgewell/set-array@1.2.1': 407 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 408 | engines: {node: '>=6.0.0'} 409 | 410 | '@jridgewell/sourcemap-codec@1.4.15': 411 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 412 | 413 | '@jridgewell/trace-mapping@0.3.25': 414 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 415 | 416 | '@nodelib/fs.scandir@2.1.5': 417 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 418 | engines: {node: '>= 8'} 419 | 420 | '@nodelib/fs.stat@2.0.5': 421 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 422 | engines: {node: '>= 8'} 423 | 424 | '@nodelib/fs.walk@1.2.8': 425 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 426 | engines: {node: '>= 8'} 427 | 428 | '@rollup/rollup-android-arm-eabi@4.18.0': 429 | resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} 430 | cpu: [arm] 431 | os: [android] 432 | 433 | '@rollup/rollup-android-arm64@4.18.0': 434 | resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} 435 | cpu: [arm64] 436 | os: [android] 437 | 438 | '@rollup/rollup-darwin-arm64@4.18.0': 439 | resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} 440 | cpu: [arm64] 441 | os: [darwin] 442 | 443 | '@rollup/rollup-darwin-x64@4.18.0': 444 | resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} 445 | cpu: [x64] 446 | os: [darwin] 447 | 448 | '@rollup/rollup-linux-arm-gnueabihf@4.18.0': 449 | resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} 450 | cpu: [arm] 451 | os: [linux] 452 | 453 | '@rollup/rollup-linux-arm-musleabihf@4.18.0': 454 | resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} 455 | cpu: [arm] 456 | os: [linux] 457 | 458 | '@rollup/rollup-linux-arm64-gnu@4.18.0': 459 | resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} 460 | cpu: [arm64] 461 | os: [linux] 462 | 463 | '@rollup/rollup-linux-arm64-musl@4.18.0': 464 | resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} 465 | cpu: [arm64] 466 | os: [linux] 467 | 468 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': 469 | resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} 470 | cpu: [ppc64] 471 | os: [linux] 472 | 473 | '@rollup/rollup-linux-riscv64-gnu@4.18.0': 474 | resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} 475 | cpu: [riscv64] 476 | os: [linux] 477 | 478 | '@rollup/rollup-linux-s390x-gnu@4.18.0': 479 | resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} 480 | cpu: [s390x] 481 | os: [linux] 482 | 483 | '@rollup/rollup-linux-x64-gnu@4.18.0': 484 | resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} 485 | cpu: [x64] 486 | os: [linux] 487 | 488 | '@rollup/rollup-linux-x64-musl@4.18.0': 489 | resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} 490 | cpu: [x64] 491 | os: [linux] 492 | 493 | '@rollup/rollup-win32-arm64-msvc@4.18.0': 494 | resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} 495 | cpu: [arm64] 496 | os: [win32] 497 | 498 | '@rollup/rollup-win32-ia32-msvc@4.18.0': 499 | resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} 500 | cpu: [ia32] 501 | os: [win32] 502 | 503 | '@rollup/rollup-win32-x64-msvc@4.18.0': 504 | resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} 505 | cpu: [x64] 506 | os: [win32] 507 | 508 | '@tanstack/history@1.81.9': 509 | resolution: {integrity: sha512-9MPknhhnvZKifK4jSvva6NDqYQwsNaptrRzO4ejk6yCLyi4koVG4u3C4VCeClYZY5etLEQbO8wXU9knEFZpMeg==} 510 | engines: {node: '>=12'} 511 | 512 | '@tanstack/query-core@5.62.1': 513 | resolution: {integrity: sha512-thYv90GkMcfumgmtp6sptC18SqxWwXTCKUuk7jyeHHn7kYouh0VJrowuuBffAIBiR3Z8OnsccmPUnP1leKJBVQ==} 514 | 515 | '@tanstack/react-query@5.62.1': 516 | resolution: {integrity: sha512-gb4eglrgW+yOeiNPkpqFyN8oLrFafHrHE+q2LzVl7TfyA4fuQluH92NTl6Jed7ae35v+BNtAQng9mykywWLzfA==} 517 | peerDependencies: 518 | react: ^18 || ^19 519 | 520 | '@tanstack/react-router@1.85.0': 521 | resolution: {integrity: sha512-97v99aupSRajxM3jESPhJ4cq/Jxy1cdN4SYizS6eQu3106QCaOz6nciQGbcRJvwAhWyElKWhs9NYHYK4hc4PVA==} 522 | engines: {node: '>=12'} 523 | peerDependencies: 524 | '@tanstack/router-generator': 1.84.4 525 | react: '>=18' 526 | react-dom: '>=18' 527 | peerDependenciesMeta: 528 | '@tanstack/router-generator': 529 | optional: true 530 | 531 | '@tanstack/react-store@0.6.1': 532 | resolution: {integrity: sha512-6gOopOpPp1cAXkEyTEv6tMbAywwFunvIdCKN/SpEiButUayjXU+Q5Sp5Y3hREN3VMR4OA5+RI5SPhhJoqP9e4w==} 533 | peerDependencies: 534 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 535 | react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 536 | 537 | '@tanstack/react-table@8.20.5': 538 | resolution: {integrity: sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==} 539 | engines: {node: '>=12'} 540 | peerDependencies: 541 | react: '>=16.8' 542 | react-dom: '>=16.8' 543 | 544 | '@tanstack/router-generator@1.37.0': 545 | resolution: {integrity: sha512-sI1B1Zd1SjeY1Uc6Tehi4BfBEl+e5mR7c4COWYRkZRIC3P4870Q54t+7aMGDY/lw4Yd9J2vUcxZ7F4qiTgo62w==} 546 | engines: {node: '>=12'} 547 | 548 | '@tanstack/router-vite-plugin@1.37.0': 549 | resolution: {integrity: sha512-2H2zNB0WtS1g/Tk6njAhcXIJIhKsODSfYu0BwXjzG9+DZhlYa8mvGzffMTnjQe3oioump19pW7fRapaCBuRXng==} 550 | engines: {node: '>=12'} 551 | 552 | '@tanstack/store@0.6.0': 553 | resolution: {integrity: sha512-+m2OBglsjXcLmmKOX6/9v8BDOCtyxhMmZLsRUDswOOSdIIR9mvv6i0XNKsmTh3AlYU8c1mRcodC8/Vyf+69VlQ==} 554 | 555 | '@tanstack/table-core@8.20.5': 556 | resolution: {integrity: sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==} 557 | engines: {node: '>=12'} 558 | 559 | '@types/babel__core@7.20.5': 560 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 561 | 562 | '@types/babel__generator@7.6.8': 563 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 564 | 565 | '@types/babel__template@7.4.4': 566 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 567 | 568 | '@types/babel__traverse@7.20.6': 569 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 570 | 571 | '@types/estree@1.0.5': 572 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 573 | 574 | '@types/prop-types@15.7.12': 575 | resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} 576 | 577 | '@types/react-dom@18.3.0': 578 | resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} 579 | 580 | '@types/react@18.3.3': 581 | resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} 582 | 583 | '@typescript-eslint/eslint-plugin@7.13.0': 584 | resolution: {integrity: sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==} 585 | engines: {node: ^18.18.0 || >=20.0.0} 586 | peerDependencies: 587 | '@typescript-eslint/parser': ^7.0.0 588 | eslint: ^8.56.0 589 | typescript: '*' 590 | peerDependenciesMeta: 591 | typescript: 592 | optional: true 593 | 594 | '@typescript-eslint/parser@7.13.0': 595 | resolution: {integrity: sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==} 596 | engines: {node: ^18.18.0 || >=20.0.0} 597 | peerDependencies: 598 | eslint: ^8.56.0 599 | typescript: '*' 600 | peerDependenciesMeta: 601 | typescript: 602 | optional: true 603 | 604 | '@typescript-eslint/scope-manager@7.13.0': 605 | resolution: {integrity: sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==} 606 | engines: {node: ^18.18.0 || >=20.0.0} 607 | 608 | '@typescript-eslint/type-utils@7.13.0': 609 | resolution: {integrity: sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==} 610 | engines: {node: ^18.18.0 || >=20.0.0} 611 | peerDependencies: 612 | eslint: ^8.56.0 613 | typescript: '*' 614 | peerDependenciesMeta: 615 | typescript: 616 | optional: true 617 | 618 | '@typescript-eslint/types@7.13.0': 619 | resolution: {integrity: sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==} 620 | engines: {node: ^18.18.0 || >=20.0.0} 621 | 622 | '@typescript-eslint/typescript-estree@7.13.0': 623 | resolution: {integrity: sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==} 624 | engines: {node: ^18.18.0 || >=20.0.0} 625 | peerDependencies: 626 | typescript: '*' 627 | peerDependenciesMeta: 628 | typescript: 629 | optional: true 630 | 631 | '@typescript-eslint/utils@7.13.0': 632 | resolution: {integrity: sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==} 633 | engines: {node: ^18.18.0 || >=20.0.0} 634 | peerDependencies: 635 | eslint: ^8.56.0 636 | 637 | '@typescript-eslint/visitor-keys@7.13.0': 638 | resolution: {integrity: sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==} 639 | engines: {node: ^18.18.0 || >=20.0.0} 640 | 641 | '@ungap/structured-clone@1.2.0': 642 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 643 | 644 | '@vitejs/plugin-react@4.3.1': 645 | resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} 646 | engines: {node: ^14.18.0 || >=16.0.0} 647 | peerDependencies: 648 | vite: ^4.2.0 || ^5.0.0 649 | 650 | acorn-jsx@5.3.2: 651 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 652 | peerDependencies: 653 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 654 | 655 | acorn@8.11.3: 656 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 657 | engines: {node: '>=0.4.0'} 658 | hasBin: true 659 | 660 | ajv@6.12.6: 661 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 662 | 663 | ansi-regex@5.0.1: 664 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 665 | engines: {node: '>=8'} 666 | 667 | ansi-styles@3.2.1: 668 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 669 | engines: {node: '>=4'} 670 | 671 | ansi-styles@4.3.0: 672 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 673 | engines: {node: '>=8'} 674 | 675 | argparse@2.0.1: 676 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 677 | 678 | array-union@2.1.0: 679 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 680 | engines: {node: '>=8'} 681 | 682 | balanced-match@1.0.2: 683 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 684 | 685 | brace-expansion@1.1.11: 686 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 687 | 688 | brace-expansion@2.0.1: 689 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 690 | 691 | braces@3.0.3: 692 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 693 | engines: {node: '>=8'} 694 | 695 | browserslist@4.23.1: 696 | resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} 697 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 698 | hasBin: true 699 | 700 | callsites@3.1.0: 701 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 702 | engines: {node: '>=6'} 703 | 704 | caniuse-lite@1.0.30001632: 705 | resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} 706 | 707 | chalk@2.4.2: 708 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 709 | engines: {node: '>=4'} 710 | 711 | chalk@4.1.2: 712 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 713 | engines: {node: '>=10'} 714 | 715 | color-convert@1.9.3: 716 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 717 | 718 | color-convert@2.0.1: 719 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 720 | engines: {node: '>=7.0.0'} 721 | 722 | color-name@1.1.3: 723 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 724 | 725 | color-name@1.1.4: 726 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 727 | 728 | concat-map@0.0.1: 729 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 730 | 731 | convert-source-map@2.0.0: 732 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 733 | 734 | cross-spawn@7.0.3: 735 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 736 | engines: {node: '>= 8'} 737 | 738 | csstype@3.1.3: 739 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 740 | 741 | debug@4.3.5: 742 | resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} 743 | engines: {node: '>=6.0'} 744 | peerDependencies: 745 | supports-color: '*' 746 | peerDependenciesMeta: 747 | supports-color: 748 | optional: true 749 | 750 | deep-is@0.1.4: 751 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 752 | 753 | dir-glob@3.0.1: 754 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 755 | engines: {node: '>=8'} 756 | 757 | doctrine@3.0.0: 758 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 759 | engines: {node: '>=6.0.0'} 760 | 761 | electron-to-chromium@1.4.798: 762 | resolution: {integrity: sha512-by9J2CiM9KPGj9qfp5U4FcPSbXJG7FNzqnYaY4WLzX+v2PHieVGmnsA4dxfpGE3QEC7JofpPZmn7Vn1B9NR2+Q==} 763 | 764 | esbuild@0.20.2: 765 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 766 | engines: {node: '>=12'} 767 | hasBin: true 768 | 769 | escalade@3.1.2: 770 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 771 | engines: {node: '>=6'} 772 | 773 | escape-string-regexp@1.0.5: 774 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 775 | engines: {node: '>=0.8.0'} 776 | 777 | escape-string-regexp@4.0.0: 778 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 779 | engines: {node: '>=10'} 780 | 781 | eslint-plugin-react-hooks@4.6.2: 782 | resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} 783 | engines: {node: '>=10'} 784 | peerDependencies: 785 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 786 | 787 | eslint-plugin-react-refresh@0.4.7: 788 | resolution: {integrity: sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==} 789 | peerDependencies: 790 | eslint: '>=7' 791 | 792 | eslint-scope@7.2.2: 793 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 794 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 795 | 796 | eslint-visitor-keys@3.4.3: 797 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 798 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 799 | 800 | eslint@8.57.0: 801 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 802 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 803 | hasBin: true 804 | 805 | espree@9.6.1: 806 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 807 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 808 | 809 | esquery@1.5.0: 810 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 811 | engines: {node: '>=0.10'} 812 | 813 | esrecurse@4.3.0: 814 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 815 | engines: {node: '>=4.0'} 816 | 817 | estraverse@5.3.0: 818 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 819 | engines: {node: '>=4.0'} 820 | 821 | esutils@2.0.3: 822 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 823 | engines: {node: '>=0.10.0'} 824 | 825 | fast-deep-equal@3.1.3: 826 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 827 | 828 | fast-glob@3.3.2: 829 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 830 | engines: {node: '>=8.6.0'} 831 | 832 | fast-json-stable-stringify@2.1.0: 833 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 834 | 835 | fast-levenshtein@2.0.6: 836 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 837 | 838 | fastq@1.17.1: 839 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 840 | 841 | file-entry-cache@6.0.1: 842 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 843 | engines: {node: ^10.12.0 || >=12.0.0} 844 | 845 | fill-range@7.1.1: 846 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 847 | engines: {node: '>=8'} 848 | 849 | find-up@5.0.0: 850 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 851 | engines: {node: '>=10'} 852 | 853 | flat-cache@3.2.0: 854 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 855 | engines: {node: ^10.12.0 || >=12.0.0} 856 | 857 | flatted@3.3.1: 858 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 859 | 860 | fs.realpath@1.0.0: 861 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 862 | 863 | fsevents@2.3.3: 864 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 865 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 866 | os: [darwin] 867 | 868 | gensync@1.0.0-beta.2: 869 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 870 | engines: {node: '>=6.9.0'} 871 | 872 | glob-parent@5.1.2: 873 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 874 | engines: {node: '>= 6'} 875 | 876 | glob-parent@6.0.2: 877 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 878 | engines: {node: '>=10.13.0'} 879 | 880 | glob@7.2.3: 881 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 882 | deprecated: Glob versions prior to v9 are no longer supported 883 | 884 | globals@11.12.0: 885 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 886 | engines: {node: '>=4'} 887 | 888 | globals@13.24.0: 889 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 890 | engines: {node: '>=8'} 891 | 892 | globby@11.1.0: 893 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 894 | engines: {node: '>=10'} 895 | 896 | graphemer@1.4.0: 897 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 898 | 899 | has-flag@3.0.0: 900 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 901 | engines: {node: '>=4'} 902 | 903 | has-flag@4.0.0: 904 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 905 | engines: {node: '>=8'} 906 | 907 | ignore@5.3.1: 908 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 909 | engines: {node: '>= 4'} 910 | 911 | import-fresh@3.3.0: 912 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 913 | engines: {node: '>=6'} 914 | 915 | imurmurhash@0.1.4: 916 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 917 | engines: {node: '>=0.8.19'} 918 | 919 | inflight@1.0.6: 920 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 921 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 922 | 923 | inherits@2.0.4: 924 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 925 | 926 | is-extglob@2.1.1: 927 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 928 | engines: {node: '>=0.10.0'} 929 | 930 | is-glob@4.0.3: 931 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 932 | engines: {node: '>=0.10.0'} 933 | 934 | is-number@7.0.0: 935 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 936 | engines: {node: '>=0.12.0'} 937 | 938 | is-path-inside@3.0.3: 939 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 940 | engines: {node: '>=8'} 941 | 942 | isexe@2.0.0: 943 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 944 | 945 | js-tokens@4.0.0: 946 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 947 | 948 | js-yaml@4.1.0: 949 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 950 | hasBin: true 951 | 952 | jsesc@2.5.2: 953 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 954 | engines: {node: '>=4'} 955 | hasBin: true 956 | 957 | jsesc@3.0.2: 958 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 959 | engines: {node: '>=6'} 960 | hasBin: true 961 | 962 | json-buffer@3.0.1: 963 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 964 | 965 | json-schema-traverse@0.4.1: 966 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 967 | 968 | json-stable-stringify-without-jsonify@1.0.1: 969 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 970 | 971 | json5@2.2.3: 972 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 973 | engines: {node: '>=6'} 974 | hasBin: true 975 | 976 | keyv@4.5.4: 977 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 978 | 979 | levn@0.4.1: 980 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 981 | engines: {node: '>= 0.8.0'} 982 | 983 | locate-path@6.0.0: 984 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 985 | engines: {node: '>=10'} 986 | 987 | lodash.merge@4.6.2: 988 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 989 | 990 | loose-envify@1.4.0: 991 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 992 | hasBin: true 993 | 994 | lru-cache@5.1.1: 995 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 996 | 997 | merge2@1.4.1: 998 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 999 | engines: {node: '>= 8'} 1000 | 1001 | micromatch@4.0.7: 1002 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} 1003 | engines: {node: '>=8.6'} 1004 | 1005 | minimatch@3.1.2: 1006 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1007 | 1008 | minimatch@9.0.4: 1009 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 1010 | engines: {node: '>=16 || 14 >=14.17'} 1011 | 1012 | ms@2.1.2: 1013 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1014 | 1015 | nanoid@3.3.7: 1016 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1017 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1018 | hasBin: true 1019 | 1020 | natural-compare@1.4.0: 1021 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1022 | 1023 | node-releases@2.0.14: 1024 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1025 | 1026 | once@1.4.0: 1027 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1028 | 1029 | optionator@0.9.4: 1030 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1031 | engines: {node: '>= 0.8.0'} 1032 | 1033 | p-limit@3.1.0: 1034 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1035 | engines: {node: '>=10'} 1036 | 1037 | p-locate@5.0.0: 1038 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1039 | engines: {node: '>=10'} 1040 | 1041 | parent-module@1.0.1: 1042 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1043 | engines: {node: '>=6'} 1044 | 1045 | path-exists@4.0.0: 1046 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1047 | engines: {node: '>=8'} 1048 | 1049 | path-is-absolute@1.0.1: 1050 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1051 | engines: {node: '>=0.10.0'} 1052 | 1053 | path-key@3.1.1: 1054 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1055 | engines: {node: '>=8'} 1056 | 1057 | path-type@4.0.0: 1058 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1059 | engines: {node: '>=8'} 1060 | 1061 | picocolors@1.0.1: 1062 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1063 | 1064 | picomatch@2.3.1: 1065 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1066 | engines: {node: '>=8.6'} 1067 | 1068 | postcss@8.4.38: 1069 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 1070 | engines: {node: ^10 || ^12 || >=14} 1071 | 1072 | prelude-ls@1.2.1: 1073 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1074 | engines: {node: '>= 0.8.0'} 1075 | 1076 | prettier@3.3.2: 1077 | resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} 1078 | engines: {node: '>=14'} 1079 | hasBin: true 1080 | 1081 | punycode@2.3.1: 1082 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1083 | engines: {node: '>=6'} 1084 | 1085 | queue-microtask@1.2.3: 1086 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1087 | 1088 | react-dom@18.3.1: 1089 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1090 | peerDependencies: 1091 | react: ^18.3.1 1092 | 1093 | react-refresh@0.14.2: 1094 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} 1095 | engines: {node: '>=0.10.0'} 1096 | 1097 | react@18.3.1: 1098 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1099 | engines: {node: '>=0.10.0'} 1100 | 1101 | resolve-from@4.0.0: 1102 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1103 | engines: {node: '>=4'} 1104 | 1105 | reusify@1.0.4: 1106 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1107 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1108 | 1109 | rimraf@3.0.2: 1110 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1111 | deprecated: Rimraf versions prior to v4 are no longer supported 1112 | hasBin: true 1113 | 1114 | rollup@4.18.0: 1115 | resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} 1116 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1117 | hasBin: true 1118 | 1119 | run-parallel@1.2.0: 1120 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1121 | 1122 | scheduler@0.23.2: 1123 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1124 | 1125 | semver@6.3.1: 1126 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1127 | hasBin: true 1128 | 1129 | semver@7.6.2: 1130 | resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} 1131 | engines: {node: '>=10'} 1132 | hasBin: true 1133 | 1134 | shebang-command@2.0.0: 1135 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1136 | engines: {node: '>=8'} 1137 | 1138 | shebang-regex@3.0.0: 1139 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1140 | engines: {node: '>=8'} 1141 | 1142 | slash@3.0.0: 1143 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1144 | engines: {node: '>=8'} 1145 | 1146 | source-map-js@1.2.0: 1147 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1148 | engines: {node: '>=0.10.0'} 1149 | 1150 | strip-ansi@6.0.1: 1151 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1152 | engines: {node: '>=8'} 1153 | 1154 | strip-json-comments@3.1.1: 1155 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1156 | engines: {node: '>=8'} 1157 | 1158 | supports-color@5.5.0: 1159 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1160 | engines: {node: '>=4'} 1161 | 1162 | supports-color@7.2.0: 1163 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1164 | engines: {node: '>=8'} 1165 | 1166 | text-table@0.2.0: 1167 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1168 | 1169 | tiny-invariant@1.3.3: 1170 | resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} 1171 | 1172 | tiny-warning@1.0.3: 1173 | resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} 1174 | 1175 | to-fast-properties@2.0.0: 1176 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1177 | engines: {node: '>=4'} 1178 | 1179 | to-regex-range@5.0.1: 1180 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1181 | engines: {node: '>=8.0'} 1182 | 1183 | ts-api-utils@1.3.0: 1184 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1185 | engines: {node: '>=16'} 1186 | peerDependencies: 1187 | typescript: '>=4.2.0' 1188 | 1189 | type-check@0.4.0: 1190 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1191 | engines: {node: '>= 0.8.0'} 1192 | 1193 | type-fest@0.20.2: 1194 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1195 | engines: {node: '>=10'} 1196 | 1197 | typescript@5.4.5: 1198 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 1199 | engines: {node: '>=14.17'} 1200 | hasBin: true 1201 | 1202 | update-browserslist-db@1.0.16: 1203 | resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} 1204 | hasBin: true 1205 | peerDependencies: 1206 | browserslist: '>= 4.21.0' 1207 | 1208 | uri-js@4.4.1: 1209 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1210 | 1211 | use-sync-external-store@1.2.2: 1212 | resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} 1213 | peerDependencies: 1214 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1215 | 1216 | vite@5.2.13: 1217 | resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==} 1218 | engines: {node: ^18.0.0 || >=20.0.0} 1219 | hasBin: true 1220 | peerDependencies: 1221 | '@types/node': ^18.0.0 || >=20.0.0 1222 | less: '*' 1223 | lightningcss: ^1.21.0 1224 | sass: '*' 1225 | stylus: '*' 1226 | sugarss: '*' 1227 | terser: ^5.4.0 1228 | peerDependenciesMeta: 1229 | '@types/node': 1230 | optional: true 1231 | less: 1232 | optional: true 1233 | lightningcss: 1234 | optional: true 1235 | sass: 1236 | optional: true 1237 | stylus: 1238 | optional: true 1239 | sugarss: 1240 | optional: true 1241 | terser: 1242 | optional: true 1243 | 1244 | which@2.0.2: 1245 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1246 | engines: {node: '>= 8'} 1247 | hasBin: true 1248 | 1249 | word-wrap@1.2.5: 1250 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1251 | engines: {node: '>=0.10.0'} 1252 | 1253 | wrappy@1.0.2: 1254 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1255 | 1256 | yallist@3.1.1: 1257 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1258 | 1259 | yocto-queue@0.1.0: 1260 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1261 | engines: {node: '>=10'} 1262 | 1263 | zod@3.23.8: 1264 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 1265 | 1266 | snapshots: 1267 | 1268 | '@ampproject/remapping@2.3.0': 1269 | dependencies: 1270 | '@jridgewell/gen-mapping': 0.3.5 1271 | '@jridgewell/trace-mapping': 0.3.25 1272 | 1273 | '@babel/code-frame@7.24.7': 1274 | dependencies: 1275 | '@babel/highlight': 7.24.7 1276 | picocolors: 1.0.1 1277 | 1278 | '@babel/compat-data@7.24.7': {} 1279 | 1280 | '@babel/core@7.24.7': 1281 | dependencies: 1282 | '@ampproject/remapping': 2.3.0 1283 | '@babel/code-frame': 7.24.7 1284 | '@babel/generator': 7.24.7 1285 | '@babel/helper-compilation-targets': 7.24.7 1286 | '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) 1287 | '@babel/helpers': 7.24.7 1288 | '@babel/parser': 7.24.7 1289 | '@babel/template': 7.24.7 1290 | '@babel/traverse': 7.24.7 1291 | '@babel/types': 7.24.7 1292 | convert-source-map: 2.0.0 1293 | debug: 4.3.5 1294 | gensync: 1.0.0-beta.2 1295 | json5: 2.2.3 1296 | semver: 6.3.1 1297 | transitivePeerDependencies: 1298 | - supports-color 1299 | 1300 | '@babel/generator@7.24.7': 1301 | dependencies: 1302 | '@babel/types': 7.24.7 1303 | '@jridgewell/gen-mapping': 0.3.5 1304 | '@jridgewell/trace-mapping': 0.3.25 1305 | jsesc: 2.5.2 1306 | 1307 | '@babel/helper-annotate-as-pure@7.24.7': 1308 | dependencies: 1309 | '@babel/types': 7.24.7 1310 | 1311 | '@babel/helper-compilation-targets@7.24.7': 1312 | dependencies: 1313 | '@babel/compat-data': 7.24.7 1314 | '@babel/helper-validator-option': 7.24.7 1315 | browserslist: 4.23.1 1316 | lru-cache: 5.1.1 1317 | semver: 6.3.1 1318 | 1319 | '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)': 1320 | dependencies: 1321 | '@babel/core': 7.24.7 1322 | '@babel/helper-annotate-as-pure': 7.24.7 1323 | '@babel/helper-environment-visitor': 7.24.7 1324 | '@babel/helper-function-name': 7.24.7 1325 | '@babel/helper-member-expression-to-functions': 7.24.7 1326 | '@babel/helper-optimise-call-expression': 7.24.7 1327 | '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) 1328 | '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 1329 | '@babel/helper-split-export-declaration': 7.24.7 1330 | semver: 6.3.1 1331 | transitivePeerDependencies: 1332 | - supports-color 1333 | 1334 | '@babel/helper-environment-visitor@7.24.7': 1335 | dependencies: 1336 | '@babel/types': 7.24.7 1337 | 1338 | '@babel/helper-function-name@7.24.7': 1339 | dependencies: 1340 | '@babel/template': 7.24.7 1341 | '@babel/types': 7.24.7 1342 | 1343 | '@babel/helper-hoist-variables@7.24.7': 1344 | dependencies: 1345 | '@babel/types': 7.24.7 1346 | 1347 | '@babel/helper-member-expression-to-functions@7.24.7': 1348 | dependencies: 1349 | '@babel/traverse': 7.24.7 1350 | '@babel/types': 7.24.7 1351 | transitivePeerDependencies: 1352 | - supports-color 1353 | 1354 | '@babel/helper-module-imports@7.24.7': 1355 | dependencies: 1356 | '@babel/traverse': 7.24.7 1357 | '@babel/types': 7.24.7 1358 | transitivePeerDependencies: 1359 | - supports-color 1360 | 1361 | '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': 1362 | dependencies: 1363 | '@babel/core': 7.24.7 1364 | '@babel/helper-environment-visitor': 7.24.7 1365 | '@babel/helper-module-imports': 7.24.7 1366 | '@babel/helper-simple-access': 7.24.7 1367 | '@babel/helper-split-export-declaration': 7.24.7 1368 | '@babel/helper-validator-identifier': 7.24.7 1369 | transitivePeerDependencies: 1370 | - supports-color 1371 | 1372 | '@babel/helper-optimise-call-expression@7.24.7': 1373 | dependencies: 1374 | '@babel/types': 7.24.7 1375 | 1376 | '@babel/helper-plugin-utils@7.24.7': {} 1377 | 1378 | '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': 1379 | dependencies: 1380 | '@babel/core': 7.24.7 1381 | '@babel/helper-environment-visitor': 7.24.7 1382 | '@babel/helper-member-expression-to-functions': 7.24.7 1383 | '@babel/helper-optimise-call-expression': 7.24.7 1384 | transitivePeerDependencies: 1385 | - supports-color 1386 | 1387 | '@babel/helper-simple-access@7.24.7': 1388 | dependencies: 1389 | '@babel/traverse': 7.24.7 1390 | '@babel/types': 7.24.7 1391 | transitivePeerDependencies: 1392 | - supports-color 1393 | 1394 | '@babel/helper-skip-transparent-expression-wrappers@7.24.7': 1395 | dependencies: 1396 | '@babel/traverse': 7.24.7 1397 | '@babel/types': 7.24.7 1398 | transitivePeerDependencies: 1399 | - supports-color 1400 | 1401 | '@babel/helper-split-export-declaration@7.24.7': 1402 | dependencies: 1403 | '@babel/types': 7.24.7 1404 | 1405 | '@babel/helper-string-parser@7.24.7': {} 1406 | 1407 | '@babel/helper-validator-identifier@7.24.7': {} 1408 | 1409 | '@babel/helper-validator-option@7.24.7': {} 1410 | 1411 | '@babel/helpers@7.24.7': 1412 | dependencies: 1413 | '@babel/template': 7.24.7 1414 | '@babel/types': 7.24.7 1415 | 1416 | '@babel/highlight@7.24.7': 1417 | dependencies: 1418 | '@babel/helper-validator-identifier': 7.24.7 1419 | chalk: 2.4.2 1420 | js-tokens: 4.0.0 1421 | picocolors: 1.0.1 1422 | 1423 | '@babel/parser@7.24.7': 1424 | dependencies: 1425 | '@babel/types': 7.24.7 1426 | 1427 | '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': 1428 | dependencies: 1429 | '@babel/core': 7.24.7 1430 | '@babel/helper-plugin-utils': 7.24.7 1431 | 1432 | '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': 1433 | dependencies: 1434 | '@babel/core': 7.24.7 1435 | '@babel/helper-plugin-utils': 7.24.7 1436 | 1437 | '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.24.7)': 1438 | dependencies: 1439 | '@babel/core': 7.24.7 1440 | '@babel/helper-plugin-utils': 7.24.7 1441 | 1442 | '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.24.7)': 1443 | dependencies: 1444 | '@babel/core': 7.24.7 1445 | '@babel/helper-plugin-utils': 7.24.7 1446 | 1447 | '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7)': 1448 | dependencies: 1449 | '@babel/core': 7.24.7 1450 | '@babel/helper-annotate-as-pure': 7.24.7 1451 | '@babel/helper-module-imports': 7.24.7 1452 | '@babel/helper-plugin-utils': 7.24.7 1453 | '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) 1454 | '@babel/types': 7.24.7 1455 | transitivePeerDependencies: 1456 | - supports-color 1457 | 1458 | '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)': 1459 | dependencies: 1460 | '@babel/core': 7.24.7 1461 | '@babel/helper-annotate-as-pure': 7.24.7 1462 | '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) 1463 | '@babel/helper-plugin-utils': 7.24.7 1464 | '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) 1465 | transitivePeerDependencies: 1466 | - supports-color 1467 | 1468 | '@babel/template@7.24.7': 1469 | dependencies: 1470 | '@babel/code-frame': 7.24.7 1471 | '@babel/parser': 7.24.7 1472 | '@babel/types': 7.24.7 1473 | 1474 | '@babel/traverse@7.24.7': 1475 | dependencies: 1476 | '@babel/code-frame': 7.24.7 1477 | '@babel/generator': 7.24.7 1478 | '@babel/helper-environment-visitor': 7.24.7 1479 | '@babel/helper-function-name': 7.24.7 1480 | '@babel/helper-hoist-variables': 7.24.7 1481 | '@babel/helper-split-export-declaration': 7.24.7 1482 | '@babel/parser': 7.24.7 1483 | '@babel/types': 7.24.7 1484 | debug: 4.3.5 1485 | globals: 11.12.0 1486 | transitivePeerDependencies: 1487 | - supports-color 1488 | 1489 | '@babel/types@7.24.7': 1490 | dependencies: 1491 | '@babel/helper-string-parser': 7.24.7 1492 | '@babel/helper-validator-identifier': 7.24.7 1493 | to-fast-properties: 2.0.0 1494 | 1495 | '@esbuild/aix-ppc64@0.20.2': 1496 | optional: true 1497 | 1498 | '@esbuild/android-arm64@0.20.2': 1499 | optional: true 1500 | 1501 | '@esbuild/android-arm@0.20.2': 1502 | optional: true 1503 | 1504 | '@esbuild/android-x64@0.20.2': 1505 | optional: true 1506 | 1507 | '@esbuild/darwin-arm64@0.20.2': 1508 | optional: true 1509 | 1510 | '@esbuild/darwin-x64@0.20.2': 1511 | optional: true 1512 | 1513 | '@esbuild/freebsd-arm64@0.20.2': 1514 | optional: true 1515 | 1516 | '@esbuild/freebsd-x64@0.20.2': 1517 | optional: true 1518 | 1519 | '@esbuild/linux-arm64@0.20.2': 1520 | optional: true 1521 | 1522 | '@esbuild/linux-arm@0.20.2': 1523 | optional: true 1524 | 1525 | '@esbuild/linux-ia32@0.20.2': 1526 | optional: true 1527 | 1528 | '@esbuild/linux-loong64@0.20.2': 1529 | optional: true 1530 | 1531 | '@esbuild/linux-mips64el@0.20.2': 1532 | optional: true 1533 | 1534 | '@esbuild/linux-ppc64@0.20.2': 1535 | optional: true 1536 | 1537 | '@esbuild/linux-riscv64@0.20.2': 1538 | optional: true 1539 | 1540 | '@esbuild/linux-s390x@0.20.2': 1541 | optional: true 1542 | 1543 | '@esbuild/linux-x64@0.20.2': 1544 | optional: true 1545 | 1546 | '@esbuild/netbsd-x64@0.20.2': 1547 | optional: true 1548 | 1549 | '@esbuild/openbsd-x64@0.20.2': 1550 | optional: true 1551 | 1552 | '@esbuild/sunos-x64@0.20.2': 1553 | optional: true 1554 | 1555 | '@esbuild/win32-arm64@0.20.2': 1556 | optional: true 1557 | 1558 | '@esbuild/win32-ia32@0.20.2': 1559 | optional: true 1560 | 1561 | '@esbuild/win32-x64@0.20.2': 1562 | optional: true 1563 | 1564 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': 1565 | dependencies: 1566 | eslint: 8.57.0 1567 | eslint-visitor-keys: 3.4.3 1568 | 1569 | '@eslint-community/regexpp@4.10.1': {} 1570 | 1571 | '@eslint/eslintrc@2.1.4': 1572 | dependencies: 1573 | ajv: 6.12.6 1574 | debug: 4.3.5 1575 | espree: 9.6.1 1576 | globals: 13.24.0 1577 | ignore: 5.3.1 1578 | import-fresh: 3.3.0 1579 | js-yaml: 4.1.0 1580 | minimatch: 3.1.2 1581 | strip-json-comments: 3.1.1 1582 | transitivePeerDependencies: 1583 | - supports-color 1584 | 1585 | '@eslint/js@8.57.0': {} 1586 | 1587 | '@faker-js/faker@8.4.1': {} 1588 | 1589 | '@humanwhocodes/config-array@0.11.14': 1590 | dependencies: 1591 | '@humanwhocodes/object-schema': 2.0.3 1592 | debug: 4.3.5 1593 | minimatch: 3.1.2 1594 | transitivePeerDependencies: 1595 | - supports-color 1596 | 1597 | '@humanwhocodes/module-importer@1.0.1': {} 1598 | 1599 | '@humanwhocodes/object-schema@2.0.3': {} 1600 | 1601 | '@jridgewell/gen-mapping@0.3.5': 1602 | dependencies: 1603 | '@jridgewell/set-array': 1.2.1 1604 | '@jridgewell/sourcemap-codec': 1.4.15 1605 | '@jridgewell/trace-mapping': 0.3.25 1606 | 1607 | '@jridgewell/resolve-uri@3.1.2': {} 1608 | 1609 | '@jridgewell/set-array@1.2.1': {} 1610 | 1611 | '@jridgewell/sourcemap-codec@1.4.15': {} 1612 | 1613 | '@jridgewell/trace-mapping@0.3.25': 1614 | dependencies: 1615 | '@jridgewell/resolve-uri': 3.1.2 1616 | '@jridgewell/sourcemap-codec': 1.4.15 1617 | 1618 | '@nodelib/fs.scandir@2.1.5': 1619 | dependencies: 1620 | '@nodelib/fs.stat': 2.0.5 1621 | run-parallel: 1.2.0 1622 | 1623 | '@nodelib/fs.stat@2.0.5': {} 1624 | 1625 | '@nodelib/fs.walk@1.2.8': 1626 | dependencies: 1627 | '@nodelib/fs.scandir': 2.1.5 1628 | fastq: 1.17.1 1629 | 1630 | '@rollup/rollup-android-arm-eabi@4.18.0': 1631 | optional: true 1632 | 1633 | '@rollup/rollup-android-arm64@4.18.0': 1634 | optional: true 1635 | 1636 | '@rollup/rollup-darwin-arm64@4.18.0': 1637 | optional: true 1638 | 1639 | '@rollup/rollup-darwin-x64@4.18.0': 1640 | optional: true 1641 | 1642 | '@rollup/rollup-linux-arm-gnueabihf@4.18.0': 1643 | optional: true 1644 | 1645 | '@rollup/rollup-linux-arm-musleabihf@4.18.0': 1646 | optional: true 1647 | 1648 | '@rollup/rollup-linux-arm64-gnu@4.18.0': 1649 | optional: true 1650 | 1651 | '@rollup/rollup-linux-arm64-musl@4.18.0': 1652 | optional: true 1653 | 1654 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': 1655 | optional: true 1656 | 1657 | '@rollup/rollup-linux-riscv64-gnu@4.18.0': 1658 | optional: true 1659 | 1660 | '@rollup/rollup-linux-s390x-gnu@4.18.0': 1661 | optional: true 1662 | 1663 | '@rollup/rollup-linux-x64-gnu@4.18.0': 1664 | optional: true 1665 | 1666 | '@rollup/rollup-linux-x64-musl@4.18.0': 1667 | optional: true 1668 | 1669 | '@rollup/rollup-win32-arm64-msvc@4.18.0': 1670 | optional: true 1671 | 1672 | '@rollup/rollup-win32-ia32-msvc@4.18.0': 1673 | optional: true 1674 | 1675 | '@rollup/rollup-win32-x64-msvc@4.18.0': 1676 | optional: true 1677 | 1678 | '@tanstack/history@1.81.9': {} 1679 | 1680 | '@tanstack/query-core@5.62.1': {} 1681 | 1682 | '@tanstack/react-query@5.62.1(react@18.3.1)': 1683 | dependencies: 1684 | '@tanstack/query-core': 5.62.1 1685 | react: 18.3.1 1686 | 1687 | '@tanstack/react-router@1.85.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1688 | dependencies: 1689 | '@tanstack/history': 1.81.9 1690 | '@tanstack/react-store': 0.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1691 | jsesc: 3.0.2 1692 | react: 18.3.1 1693 | react-dom: 18.3.1(react@18.3.1) 1694 | tiny-invariant: 1.3.3 1695 | tiny-warning: 1.0.3 1696 | 1697 | '@tanstack/react-store@0.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1698 | dependencies: 1699 | '@tanstack/store': 0.6.0 1700 | react: 18.3.1 1701 | react-dom: 18.3.1(react@18.3.1) 1702 | use-sync-external-store: 1.2.2(react@18.3.1) 1703 | 1704 | '@tanstack/react-table@8.20.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1705 | dependencies: 1706 | '@tanstack/table-core': 8.20.5 1707 | react: 18.3.1 1708 | react-dom: 18.3.1(react@18.3.1) 1709 | 1710 | '@tanstack/router-generator@1.37.0': 1711 | dependencies: 1712 | prettier: 3.3.2 1713 | zod: 3.23.8 1714 | 1715 | '@tanstack/router-vite-plugin@1.37.0(vite@5.2.13)': 1716 | dependencies: 1717 | '@babel/core': 7.24.7 1718 | '@babel/generator': 7.24.7 1719 | '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) 1720 | '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) 1721 | '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) 1722 | '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) 1723 | '@babel/template': 7.24.7 1724 | '@babel/traverse': 7.24.7 1725 | '@babel/types': 7.24.7 1726 | '@tanstack/router-generator': 1.37.0 1727 | '@types/babel__core': 7.20.5 1728 | '@types/babel__generator': 7.6.8 1729 | '@types/babel__template': 7.4.4 1730 | '@types/babel__traverse': 7.20.6 1731 | '@vitejs/plugin-react': 4.3.1(vite@5.2.13) 1732 | zod: 3.23.8 1733 | transitivePeerDependencies: 1734 | - supports-color 1735 | - vite 1736 | 1737 | '@tanstack/store@0.6.0': {} 1738 | 1739 | '@tanstack/table-core@8.20.5': {} 1740 | 1741 | '@types/babel__core@7.20.5': 1742 | dependencies: 1743 | '@babel/parser': 7.24.7 1744 | '@babel/types': 7.24.7 1745 | '@types/babel__generator': 7.6.8 1746 | '@types/babel__template': 7.4.4 1747 | '@types/babel__traverse': 7.20.6 1748 | 1749 | '@types/babel__generator@7.6.8': 1750 | dependencies: 1751 | '@babel/types': 7.24.7 1752 | 1753 | '@types/babel__template@7.4.4': 1754 | dependencies: 1755 | '@babel/parser': 7.24.7 1756 | '@babel/types': 7.24.7 1757 | 1758 | '@types/babel__traverse@7.20.6': 1759 | dependencies: 1760 | '@babel/types': 7.24.7 1761 | 1762 | '@types/estree@1.0.5': {} 1763 | 1764 | '@types/prop-types@15.7.12': {} 1765 | 1766 | '@types/react-dom@18.3.0': 1767 | dependencies: 1768 | '@types/react': 18.3.3 1769 | 1770 | '@types/react@18.3.3': 1771 | dependencies: 1772 | '@types/prop-types': 15.7.12 1773 | csstype: 3.1.3 1774 | 1775 | '@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': 1776 | dependencies: 1777 | '@eslint-community/regexpp': 4.10.1 1778 | '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5) 1779 | '@typescript-eslint/scope-manager': 7.13.0 1780 | '@typescript-eslint/type-utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) 1781 | '@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) 1782 | '@typescript-eslint/visitor-keys': 7.13.0 1783 | eslint: 8.57.0 1784 | graphemer: 1.4.0 1785 | ignore: 5.3.1 1786 | natural-compare: 1.4.0 1787 | ts-api-utils: 1.3.0(typescript@5.4.5) 1788 | optionalDependencies: 1789 | typescript: 5.4.5 1790 | transitivePeerDependencies: 1791 | - supports-color 1792 | 1793 | '@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5)': 1794 | dependencies: 1795 | '@typescript-eslint/scope-manager': 7.13.0 1796 | '@typescript-eslint/types': 7.13.0 1797 | '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) 1798 | '@typescript-eslint/visitor-keys': 7.13.0 1799 | debug: 4.3.5 1800 | eslint: 8.57.0 1801 | optionalDependencies: 1802 | typescript: 5.4.5 1803 | transitivePeerDependencies: 1804 | - supports-color 1805 | 1806 | '@typescript-eslint/scope-manager@7.13.0': 1807 | dependencies: 1808 | '@typescript-eslint/types': 7.13.0 1809 | '@typescript-eslint/visitor-keys': 7.13.0 1810 | 1811 | '@typescript-eslint/type-utils@7.13.0(eslint@8.57.0)(typescript@5.4.5)': 1812 | dependencies: 1813 | '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) 1814 | '@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) 1815 | debug: 4.3.5 1816 | eslint: 8.57.0 1817 | ts-api-utils: 1.3.0(typescript@5.4.5) 1818 | optionalDependencies: 1819 | typescript: 5.4.5 1820 | transitivePeerDependencies: 1821 | - supports-color 1822 | 1823 | '@typescript-eslint/types@7.13.0': {} 1824 | 1825 | '@typescript-eslint/typescript-estree@7.13.0(typescript@5.4.5)': 1826 | dependencies: 1827 | '@typescript-eslint/types': 7.13.0 1828 | '@typescript-eslint/visitor-keys': 7.13.0 1829 | debug: 4.3.5 1830 | globby: 11.1.0 1831 | is-glob: 4.0.3 1832 | minimatch: 9.0.4 1833 | semver: 7.6.2 1834 | ts-api-utils: 1.3.0(typescript@5.4.5) 1835 | optionalDependencies: 1836 | typescript: 5.4.5 1837 | transitivePeerDependencies: 1838 | - supports-color 1839 | 1840 | '@typescript-eslint/utils@7.13.0(eslint@8.57.0)(typescript@5.4.5)': 1841 | dependencies: 1842 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 1843 | '@typescript-eslint/scope-manager': 7.13.0 1844 | '@typescript-eslint/types': 7.13.0 1845 | '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) 1846 | eslint: 8.57.0 1847 | transitivePeerDependencies: 1848 | - supports-color 1849 | - typescript 1850 | 1851 | '@typescript-eslint/visitor-keys@7.13.0': 1852 | dependencies: 1853 | '@typescript-eslint/types': 7.13.0 1854 | eslint-visitor-keys: 3.4.3 1855 | 1856 | '@ungap/structured-clone@1.2.0': {} 1857 | 1858 | '@vitejs/plugin-react@4.3.1(vite@5.2.13)': 1859 | dependencies: 1860 | '@babel/core': 7.24.7 1861 | '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.7) 1862 | '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) 1863 | '@types/babel__core': 7.20.5 1864 | react-refresh: 0.14.2 1865 | vite: 5.2.13 1866 | transitivePeerDependencies: 1867 | - supports-color 1868 | 1869 | acorn-jsx@5.3.2(acorn@8.11.3): 1870 | dependencies: 1871 | acorn: 8.11.3 1872 | 1873 | acorn@8.11.3: {} 1874 | 1875 | ajv@6.12.6: 1876 | dependencies: 1877 | fast-deep-equal: 3.1.3 1878 | fast-json-stable-stringify: 2.1.0 1879 | json-schema-traverse: 0.4.1 1880 | uri-js: 4.4.1 1881 | 1882 | ansi-regex@5.0.1: {} 1883 | 1884 | ansi-styles@3.2.1: 1885 | dependencies: 1886 | color-convert: 1.9.3 1887 | 1888 | ansi-styles@4.3.0: 1889 | dependencies: 1890 | color-convert: 2.0.1 1891 | 1892 | argparse@2.0.1: {} 1893 | 1894 | array-union@2.1.0: {} 1895 | 1896 | balanced-match@1.0.2: {} 1897 | 1898 | brace-expansion@1.1.11: 1899 | dependencies: 1900 | balanced-match: 1.0.2 1901 | concat-map: 0.0.1 1902 | 1903 | brace-expansion@2.0.1: 1904 | dependencies: 1905 | balanced-match: 1.0.2 1906 | 1907 | braces@3.0.3: 1908 | dependencies: 1909 | fill-range: 7.1.1 1910 | 1911 | browserslist@4.23.1: 1912 | dependencies: 1913 | caniuse-lite: 1.0.30001632 1914 | electron-to-chromium: 1.4.798 1915 | node-releases: 2.0.14 1916 | update-browserslist-db: 1.0.16(browserslist@4.23.1) 1917 | 1918 | callsites@3.1.0: {} 1919 | 1920 | caniuse-lite@1.0.30001632: {} 1921 | 1922 | chalk@2.4.2: 1923 | dependencies: 1924 | ansi-styles: 3.2.1 1925 | escape-string-regexp: 1.0.5 1926 | supports-color: 5.5.0 1927 | 1928 | chalk@4.1.2: 1929 | dependencies: 1930 | ansi-styles: 4.3.0 1931 | supports-color: 7.2.0 1932 | 1933 | color-convert@1.9.3: 1934 | dependencies: 1935 | color-name: 1.1.3 1936 | 1937 | color-convert@2.0.1: 1938 | dependencies: 1939 | color-name: 1.1.4 1940 | 1941 | color-name@1.1.3: {} 1942 | 1943 | color-name@1.1.4: {} 1944 | 1945 | concat-map@0.0.1: {} 1946 | 1947 | convert-source-map@2.0.0: {} 1948 | 1949 | cross-spawn@7.0.3: 1950 | dependencies: 1951 | path-key: 3.1.1 1952 | shebang-command: 2.0.0 1953 | which: 2.0.2 1954 | 1955 | csstype@3.1.3: {} 1956 | 1957 | debug@4.3.5: 1958 | dependencies: 1959 | ms: 2.1.2 1960 | 1961 | deep-is@0.1.4: {} 1962 | 1963 | dir-glob@3.0.1: 1964 | dependencies: 1965 | path-type: 4.0.0 1966 | 1967 | doctrine@3.0.0: 1968 | dependencies: 1969 | esutils: 2.0.3 1970 | 1971 | electron-to-chromium@1.4.798: {} 1972 | 1973 | esbuild@0.20.2: 1974 | optionalDependencies: 1975 | '@esbuild/aix-ppc64': 0.20.2 1976 | '@esbuild/android-arm': 0.20.2 1977 | '@esbuild/android-arm64': 0.20.2 1978 | '@esbuild/android-x64': 0.20.2 1979 | '@esbuild/darwin-arm64': 0.20.2 1980 | '@esbuild/darwin-x64': 0.20.2 1981 | '@esbuild/freebsd-arm64': 0.20.2 1982 | '@esbuild/freebsd-x64': 0.20.2 1983 | '@esbuild/linux-arm': 0.20.2 1984 | '@esbuild/linux-arm64': 0.20.2 1985 | '@esbuild/linux-ia32': 0.20.2 1986 | '@esbuild/linux-loong64': 0.20.2 1987 | '@esbuild/linux-mips64el': 0.20.2 1988 | '@esbuild/linux-ppc64': 0.20.2 1989 | '@esbuild/linux-riscv64': 0.20.2 1990 | '@esbuild/linux-s390x': 0.20.2 1991 | '@esbuild/linux-x64': 0.20.2 1992 | '@esbuild/netbsd-x64': 0.20.2 1993 | '@esbuild/openbsd-x64': 0.20.2 1994 | '@esbuild/sunos-x64': 0.20.2 1995 | '@esbuild/win32-arm64': 0.20.2 1996 | '@esbuild/win32-ia32': 0.20.2 1997 | '@esbuild/win32-x64': 0.20.2 1998 | 1999 | escalade@3.1.2: {} 2000 | 2001 | escape-string-regexp@1.0.5: {} 2002 | 2003 | escape-string-regexp@4.0.0: {} 2004 | 2005 | eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): 2006 | dependencies: 2007 | eslint: 8.57.0 2008 | 2009 | eslint-plugin-react-refresh@0.4.7(eslint@8.57.0): 2010 | dependencies: 2011 | eslint: 8.57.0 2012 | 2013 | eslint-scope@7.2.2: 2014 | dependencies: 2015 | esrecurse: 4.3.0 2016 | estraverse: 5.3.0 2017 | 2018 | eslint-visitor-keys@3.4.3: {} 2019 | 2020 | eslint@8.57.0: 2021 | dependencies: 2022 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 2023 | '@eslint-community/regexpp': 4.10.1 2024 | '@eslint/eslintrc': 2.1.4 2025 | '@eslint/js': 8.57.0 2026 | '@humanwhocodes/config-array': 0.11.14 2027 | '@humanwhocodes/module-importer': 1.0.1 2028 | '@nodelib/fs.walk': 1.2.8 2029 | '@ungap/structured-clone': 1.2.0 2030 | ajv: 6.12.6 2031 | chalk: 4.1.2 2032 | cross-spawn: 7.0.3 2033 | debug: 4.3.5 2034 | doctrine: 3.0.0 2035 | escape-string-regexp: 4.0.0 2036 | eslint-scope: 7.2.2 2037 | eslint-visitor-keys: 3.4.3 2038 | espree: 9.6.1 2039 | esquery: 1.5.0 2040 | esutils: 2.0.3 2041 | fast-deep-equal: 3.1.3 2042 | file-entry-cache: 6.0.1 2043 | find-up: 5.0.0 2044 | glob-parent: 6.0.2 2045 | globals: 13.24.0 2046 | graphemer: 1.4.0 2047 | ignore: 5.3.1 2048 | imurmurhash: 0.1.4 2049 | is-glob: 4.0.3 2050 | is-path-inside: 3.0.3 2051 | js-yaml: 4.1.0 2052 | json-stable-stringify-without-jsonify: 1.0.1 2053 | levn: 0.4.1 2054 | lodash.merge: 4.6.2 2055 | minimatch: 3.1.2 2056 | natural-compare: 1.4.0 2057 | optionator: 0.9.4 2058 | strip-ansi: 6.0.1 2059 | text-table: 0.2.0 2060 | transitivePeerDependencies: 2061 | - supports-color 2062 | 2063 | espree@9.6.1: 2064 | dependencies: 2065 | acorn: 8.11.3 2066 | acorn-jsx: 5.3.2(acorn@8.11.3) 2067 | eslint-visitor-keys: 3.4.3 2068 | 2069 | esquery@1.5.0: 2070 | dependencies: 2071 | estraverse: 5.3.0 2072 | 2073 | esrecurse@4.3.0: 2074 | dependencies: 2075 | estraverse: 5.3.0 2076 | 2077 | estraverse@5.3.0: {} 2078 | 2079 | esutils@2.0.3: {} 2080 | 2081 | fast-deep-equal@3.1.3: {} 2082 | 2083 | fast-glob@3.3.2: 2084 | dependencies: 2085 | '@nodelib/fs.stat': 2.0.5 2086 | '@nodelib/fs.walk': 1.2.8 2087 | glob-parent: 5.1.2 2088 | merge2: 1.4.1 2089 | micromatch: 4.0.7 2090 | 2091 | fast-json-stable-stringify@2.1.0: {} 2092 | 2093 | fast-levenshtein@2.0.6: {} 2094 | 2095 | fastq@1.17.1: 2096 | dependencies: 2097 | reusify: 1.0.4 2098 | 2099 | file-entry-cache@6.0.1: 2100 | dependencies: 2101 | flat-cache: 3.2.0 2102 | 2103 | fill-range@7.1.1: 2104 | dependencies: 2105 | to-regex-range: 5.0.1 2106 | 2107 | find-up@5.0.0: 2108 | dependencies: 2109 | locate-path: 6.0.0 2110 | path-exists: 4.0.0 2111 | 2112 | flat-cache@3.2.0: 2113 | dependencies: 2114 | flatted: 3.3.1 2115 | keyv: 4.5.4 2116 | rimraf: 3.0.2 2117 | 2118 | flatted@3.3.1: {} 2119 | 2120 | fs.realpath@1.0.0: {} 2121 | 2122 | fsevents@2.3.3: 2123 | optional: true 2124 | 2125 | gensync@1.0.0-beta.2: {} 2126 | 2127 | glob-parent@5.1.2: 2128 | dependencies: 2129 | is-glob: 4.0.3 2130 | 2131 | glob-parent@6.0.2: 2132 | dependencies: 2133 | is-glob: 4.0.3 2134 | 2135 | glob@7.2.3: 2136 | dependencies: 2137 | fs.realpath: 1.0.0 2138 | inflight: 1.0.6 2139 | inherits: 2.0.4 2140 | minimatch: 3.1.2 2141 | once: 1.4.0 2142 | path-is-absolute: 1.0.1 2143 | 2144 | globals@11.12.0: {} 2145 | 2146 | globals@13.24.0: 2147 | dependencies: 2148 | type-fest: 0.20.2 2149 | 2150 | globby@11.1.0: 2151 | dependencies: 2152 | array-union: 2.1.0 2153 | dir-glob: 3.0.1 2154 | fast-glob: 3.3.2 2155 | ignore: 5.3.1 2156 | merge2: 1.4.1 2157 | slash: 3.0.0 2158 | 2159 | graphemer@1.4.0: {} 2160 | 2161 | has-flag@3.0.0: {} 2162 | 2163 | has-flag@4.0.0: {} 2164 | 2165 | ignore@5.3.1: {} 2166 | 2167 | import-fresh@3.3.0: 2168 | dependencies: 2169 | parent-module: 1.0.1 2170 | resolve-from: 4.0.0 2171 | 2172 | imurmurhash@0.1.4: {} 2173 | 2174 | inflight@1.0.6: 2175 | dependencies: 2176 | once: 1.4.0 2177 | wrappy: 1.0.2 2178 | 2179 | inherits@2.0.4: {} 2180 | 2181 | is-extglob@2.1.1: {} 2182 | 2183 | is-glob@4.0.3: 2184 | dependencies: 2185 | is-extglob: 2.1.1 2186 | 2187 | is-number@7.0.0: {} 2188 | 2189 | is-path-inside@3.0.3: {} 2190 | 2191 | isexe@2.0.0: {} 2192 | 2193 | js-tokens@4.0.0: {} 2194 | 2195 | js-yaml@4.1.0: 2196 | dependencies: 2197 | argparse: 2.0.1 2198 | 2199 | jsesc@2.5.2: {} 2200 | 2201 | jsesc@3.0.2: {} 2202 | 2203 | json-buffer@3.0.1: {} 2204 | 2205 | json-schema-traverse@0.4.1: {} 2206 | 2207 | json-stable-stringify-without-jsonify@1.0.1: {} 2208 | 2209 | json5@2.2.3: {} 2210 | 2211 | keyv@4.5.4: 2212 | dependencies: 2213 | json-buffer: 3.0.1 2214 | 2215 | levn@0.4.1: 2216 | dependencies: 2217 | prelude-ls: 1.2.1 2218 | type-check: 0.4.0 2219 | 2220 | locate-path@6.0.0: 2221 | dependencies: 2222 | p-locate: 5.0.0 2223 | 2224 | lodash.merge@4.6.2: {} 2225 | 2226 | loose-envify@1.4.0: 2227 | dependencies: 2228 | js-tokens: 4.0.0 2229 | 2230 | lru-cache@5.1.1: 2231 | dependencies: 2232 | yallist: 3.1.1 2233 | 2234 | merge2@1.4.1: {} 2235 | 2236 | micromatch@4.0.7: 2237 | dependencies: 2238 | braces: 3.0.3 2239 | picomatch: 2.3.1 2240 | 2241 | minimatch@3.1.2: 2242 | dependencies: 2243 | brace-expansion: 1.1.11 2244 | 2245 | minimatch@9.0.4: 2246 | dependencies: 2247 | brace-expansion: 2.0.1 2248 | 2249 | ms@2.1.2: {} 2250 | 2251 | nanoid@3.3.7: {} 2252 | 2253 | natural-compare@1.4.0: {} 2254 | 2255 | node-releases@2.0.14: {} 2256 | 2257 | once@1.4.0: 2258 | dependencies: 2259 | wrappy: 1.0.2 2260 | 2261 | optionator@0.9.4: 2262 | dependencies: 2263 | deep-is: 0.1.4 2264 | fast-levenshtein: 2.0.6 2265 | levn: 0.4.1 2266 | prelude-ls: 1.2.1 2267 | type-check: 0.4.0 2268 | word-wrap: 1.2.5 2269 | 2270 | p-limit@3.1.0: 2271 | dependencies: 2272 | yocto-queue: 0.1.0 2273 | 2274 | p-locate@5.0.0: 2275 | dependencies: 2276 | p-limit: 3.1.0 2277 | 2278 | parent-module@1.0.1: 2279 | dependencies: 2280 | callsites: 3.1.0 2281 | 2282 | path-exists@4.0.0: {} 2283 | 2284 | path-is-absolute@1.0.1: {} 2285 | 2286 | path-key@3.1.1: {} 2287 | 2288 | path-type@4.0.0: {} 2289 | 2290 | picocolors@1.0.1: {} 2291 | 2292 | picomatch@2.3.1: {} 2293 | 2294 | postcss@8.4.38: 2295 | dependencies: 2296 | nanoid: 3.3.7 2297 | picocolors: 1.0.1 2298 | source-map-js: 1.2.0 2299 | 2300 | prelude-ls@1.2.1: {} 2301 | 2302 | prettier@3.3.2: {} 2303 | 2304 | punycode@2.3.1: {} 2305 | 2306 | queue-microtask@1.2.3: {} 2307 | 2308 | react-dom@18.3.1(react@18.3.1): 2309 | dependencies: 2310 | loose-envify: 1.4.0 2311 | react: 18.3.1 2312 | scheduler: 0.23.2 2313 | 2314 | react-refresh@0.14.2: {} 2315 | 2316 | react@18.3.1: 2317 | dependencies: 2318 | loose-envify: 1.4.0 2319 | 2320 | resolve-from@4.0.0: {} 2321 | 2322 | reusify@1.0.4: {} 2323 | 2324 | rimraf@3.0.2: 2325 | dependencies: 2326 | glob: 7.2.3 2327 | 2328 | rollup@4.18.0: 2329 | dependencies: 2330 | '@types/estree': 1.0.5 2331 | optionalDependencies: 2332 | '@rollup/rollup-android-arm-eabi': 4.18.0 2333 | '@rollup/rollup-android-arm64': 4.18.0 2334 | '@rollup/rollup-darwin-arm64': 4.18.0 2335 | '@rollup/rollup-darwin-x64': 4.18.0 2336 | '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 2337 | '@rollup/rollup-linux-arm-musleabihf': 4.18.0 2338 | '@rollup/rollup-linux-arm64-gnu': 4.18.0 2339 | '@rollup/rollup-linux-arm64-musl': 4.18.0 2340 | '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 2341 | '@rollup/rollup-linux-riscv64-gnu': 4.18.0 2342 | '@rollup/rollup-linux-s390x-gnu': 4.18.0 2343 | '@rollup/rollup-linux-x64-gnu': 4.18.0 2344 | '@rollup/rollup-linux-x64-musl': 4.18.0 2345 | '@rollup/rollup-win32-arm64-msvc': 4.18.0 2346 | '@rollup/rollup-win32-ia32-msvc': 4.18.0 2347 | '@rollup/rollup-win32-x64-msvc': 4.18.0 2348 | fsevents: 2.3.3 2349 | 2350 | run-parallel@1.2.0: 2351 | dependencies: 2352 | queue-microtask: 1.2.3 2353 | 2354 | scheduler@0.23.2: 2355 | dependencies: 2356 | loose-envify: 1.4.0 2357 | 2358 | semver@6.3.1: {} 2359 | 2360 | semver@7.6.2: {} 2361 | 2362 | shebang-command@2.0.0: 2363 | dependencies: 2364 | shebang-regex: 3.0.0 2365 | 2366 | shebang-regex@3.0.0: {} 2367 | 2368 | slash@3.0.0: {} 2369 | 2370 | source-map-js@1.2.0: {} 2371 | 2372 | strip-ansi@6.0.1: 2373 | dependencies: 2374 | ansi-regex: 5.0.1 2375 | 2376 | strip-json-comments@3.1.1: {} 2377 | 2378 | supports-color@5.5.0: 2379 | dependencies: 2380 | has-flag: 3.0.0 2381 | 2382 | supports-color@7.2.0: 2383 | dependencies: 2384 | has-flag: 4.0.0 2385 | 2386 | text-table@0.2.0: {} 2387 | 2388 | tiny-invariant@1.3.3: {} 2389 | 2390 | tiny-warning@1.0.3: {} 2391 | 2392 | to-fast-properties@2.0.0: {} 2393 | 2394 | to-regex-range@5.0.1: 2395 | dependencies: 2396 | is-number: 7.0.0 2397 | 2398 | ts-api-utils@1.3.0(typescript@5.4.5): 2399 | dependencies: 2400 | typescript: 5.4.5 2401 | 2402 | type-check@0.4.0: 2403 | dependencies: 2404 | prelude-ls: 1.2.1 2405 | 2406 | type-fest@0.20.2: {} 2407 | 2408 | typescript@5.4.5: {} 2409 | 2410 | update-browserslist-db@1.0.16(browserslist@4.23.1): 2411 | dependencies: 2412 | browserslist: 4.23.1 2413 | escalade: 3.1.2 2414 | picocolors: 1.0.1 2415 | 2416 | uri-js@4.4.1: 2417 | dependencies: 2418 | punycode: 2.3.1 2419 | 2420 | use-sync-external-store@1.2.2(react@18.3.1): 2421 | dependencies: 2422 | react: 18.3.1 2423 | 2424 | vite@5.2.13: 2425 | dependencies: 2426 | esbuild: 0.20.2 2427 | postcss: 8.4.38 2428 | rollup: 4.18.0 2429 | optionalDependencies: 2430 | fsevents: 2.3.3 2431 | 2432 | which@2.0.2: 2433 | dependencies: 2434 | isexe: 2.0.0 2435 | 2436 | word-wrap@1.2.5: {} 2437 | 2438 | wrappy@1.0.2: {} 2439 | 2440 | yallist@3.1.1: {} 2441 | 2442 | yocto-queue@0.1.0: {} 2443 | 2444 | zod@3.23.8: {} 2445 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: sans-serif; 3 | font-size: 14px; 4 | } 5 | 6 | table { 7 | border: 1px solid lightgray; 8 | } 9 | 10 | tbody { 11 | border-bottom: 1px solid lightgray; 12 | } 13 | 14 | th { 15 | border-bottom: 1px solid lightgray; 16 | border-right: 1px solid lightgray; 17 | padding: 2px 4px; 18 | } 19 | 20 | tfoot { 21 | color: gray; 22 | } 23 | 24 | tfoot th { 25 | font-weight: normal; 26 | } 27 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; 2 | import { createRouter, RouterProvider } from "@tanstack/react-router"; 3 | import "./App.css"; 4 | import { routeTree } from "./routeTree.gen"; 5 | 6 | const router = createRouter({ routeTree }); 7 | 8 | declare module "@tanstack/react-router" { 9 | interface Register { 10 | router: typeof router; 11 | } 12 | } 13 | 14 | const queryClient = new QueryClient(); 15 | 16 | export function App() { 17 | return ( 18 | 19 | 20 | 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /src/api/types.ts: -------------------------------------------------------------------------------- 1 | export type PaginatedData = { 2 | result: T[]; 3 | rowCount: number; 4 | }; 5 | 6 | export type PaginationParams = { pageIndex: number; pageSize: number }; 7 | export type SortParams = { sortBy: `${string}.${"asc" | "desc"}` }; 8 | export type Filters = Partial; 9 | -------------------------------------------------------------------------------- /src/api/user.ts: -------------------------------------------------------------------------------- 1 | import data from "./data.json"; 2 | import { Filters, PaginatedData } from "./types"; 3 | 4 | const DEFAULT_PAGE = 0; 5 | const DEFAULT_PAGE_SIZE = 10; 6 | 7 | export type User = { 8 | id: number; 9 | firstName: string; 10 | lastName: string; 11 | age: number; 12 | }; 13 | 14 | export type UserFilters = Filters; 15 | 16 | export async function fetchUsers( 17 | filtersAndPagination: UserFilters 18 | ): Promise> { 19 | console.log("fetchUsers", filtersAndPagination); 20 | const { 21 | pageIndex = DEFAULT_PAGE, 22 | pageSize = DEFAULT_PAGE_SIZE, 23 | sortBy, 24 | ...filters 25 | } = filtersAndPagination; 26 | const requestedData = data.slice(); 27 | 28 | if (sortBy) { 29 | const [field, order] = sortBy.split("."); 30 | requestedData.sort((a, b) => { 31 | const aValue = a[field as keyof User]; 32 | const bValue = b[field as keyof User]; 33 | 34 | if (aValue === bValue) return 0; 35 | if (order === "asc") return aValue > bValue ? 1 : -1; 36 | return aValue < bValue ? 1 : -1; 37 | }); 38 | } 39 | 40 | const filteredData = requestedData.filter((user) => { 41 | return Object.keys(filters).every((key) => { 42 | const filter = filters[key as keyof User]; 43 | if (filter === undefined || filter === "") return true; 44 | 45 | const value = user[key as keyof User]; 46 | if (typeof value === "number") return value === +filter; 47 | 48 | return value.toLowerCase().includes(`${filter}`.toLowerCase()); 49 | }); 50 | }); 51 | 52 | await new Promise((resolve) => setTimeout(resolve, 100)); 53 | 54 | return { 55 | result: filteredData.slice( 56 | pageIndex * pageSize, 57 | (pageIndex + 1) * pageSize 58 | ), 59 | rowCount: filteredData.length, 60 | }; 61 | } 62 | 63 | // Function used to generate fake data 64 | // function makeData(amount: number): User[] { 65 | // return Array(amount) 66 | // .fill(0) 67 | // .map((_, index) => { 68 | // return { 69 | // id: index + 1, 70 | // firstName: faker.person.firstName(), 71 | // lastName: faker.person.lastName(), 72 | // age: faker.number.int(40), 73 | // }; 74 | // }); 75 | // } 76 | -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/debouncedInput.tsx: -------------------------------------------------------------------------------- 1 | import { InputHTMLAttributes, useEffect, useState } from "react"; 2 | 3 | export function DebouncedInput({ 4 | value: initialValue, 5 | onChange, 6 | debounce = 200, 7 | ...props 8 | }: { 9 | value: string | number; 10 | onChange: (value: string | number) => void; 11 | debounce?: number; 12 | } & Omit, "onChange">) { 13 | const [value, setValue] = useState(initialValue); 14 | 15 | useEffect(() => { 16 | setValue(initialValue); 17 | }, [initialValue]); 18 | 19 | useEffect(() => { 20 | const timeout = setTimeout(() => { 21 | onChange(value); 22 | }, debounce); 23 | 24 | return () => clearTimeout(timeout); 25 | // eslint-disable-next-line react-hooks/exhaustive-deps 26 | }, [value]); 27 | 28 | return ( 29 | { 33 | if (e.target.value === "") return setValue(""); 34 | if (props.type === "number") { 35 | setValue(e.target.valueAsNumber); 36 | } else { 37 | setValue(e.target.value); 38 | } 39 | }} 40 | /> 41 | ); 42 | } 43 | -------------------------------------------------------------------------------- /src/components/table.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | ColumnDef, 3 | flexRender, 4 | getCoreRowModel, 5 | OnChangeFn, 6 | PaginationOptions, 7 | PaginationState, 8 | SortingState, 9 | useReactTable, 10 | } from "@tanstack/react-table"; 11 | import { Filters } from "../api/types"; 12 | import { DebouncedInput } from "./debouncedInput"; 13 | 14 | export const DEFAULT_PAGE_INDEX = 0; 15 | export const DEFAULT_PAGE_SIZE = 10; 16 | 17 | type Props> = { 18 | data: T[]; 19 | columns: ColumnDef[]; 20 | pagination: PaginationState; 21 | paginationOptions: Pick; 22 | filters: Filters; 23 | onFilterChange: (dataFilters: Partial) => void; 24 | sorting: SortingState; 25 | onSortingChange: OnChangeFn; 26 | }; 27 | 28 | export default function Table>({ 29 | data, 30 | columns, 31 | pagination, 32 | paginationOptions, 33 | filters, 34 | onFilterChange, 35 | sorting, 36 | onSortingChange, 37 | }: Props) { 38 | const table = useReactTable({ 39 | data, 40 | columns, 41 | state: { pagination, sorting }, 42 | onSortingChange, 43 | ...paginationOptions, 44 | manualFiltering: true, 45 | manualSorting: true, 46 | manualPagination: true, 47 | getCoreRowModel: getCoreRowModel(), 48 | }); 49 | 50 | return ( 51 |
52 | 53 | 54 | {table.getHeaderGroups().map((headerGroup) => ( 55 | 56 | {headerGroup.headers.map((header) => { 57 | const fieldMeta = header.column.columnDef.meta; 58 | return ( 59 | 101 | ); 102 | })} 103 | 104 | ))} 105 | 106 | 107 | {table.getRowModel().rows.map((row) => { 108 | return ( 109 | 110 | {row.getVisibleCells().map((cell) => { 111 | return ( 112 | 118 | ); 119 | })} 120 | 121 | ); 122 | })} 123 | 124 |
60 | {header.isPlaceholder ? null : ( 61 | <> 62 |
70 | {flexRender( 71 | header.column.columnDef.header, 72 | header.getContext() 73 | )} 74 | {{ 75 | asc: " 🔼", 76 | desc: " 🔽", 77 | false: " 🔃", 78 | }[header.column.getIsSorted() as string] ?? null} 79 |
80 | {header.column.getCanFilter() && 81 | fieldMeta?.filterKey !== undefined ? ( 82 | { 85 | onFilterChange({ 86 | [fieldMeta.filterKey as keyof T]: value, 87 | } as Partial); 88 | }} 89 | placeholder="Search..." 90 | type={ 91 | fieldMeta.filterVariant === "number" 92 | ? "number" 93 | : "text" 94 | } 95 | value={filters[fieldMeta.filterKey] ?? ""} 96 | /> 97 | ) : null} 98 | 99 | )} 100 |
113 | {flexRender( 114 | cell.column.columnDef.cell, 115 | cell.getContext() 116 | )} 117 |
125 |
126 | 133 | 140 | 147 | 154 | 155 |
Page
156 | 157 | {table.getState().pagination.pageIndex + 1} of{" "} 158 | {table.getPageCount()} 159 | 160 |
161 | 162 | | Go to page: 163 | { 167 | const page = e.target.value ? Number(e.target.value) - 1 : 0; 168 | table.setPageIndex(page); 169 | }} 170 | className="border p-1 rounded w-16" 171 | /> 172 | 173 | 185 |
186 |
187 | ); 188 | } 189 | -------------------------------------------------------------------------------- /src/hooks/useFilters.ts: -------------------------------------------------------------------------------- 1 | import { 2 | getRouteApi, 3 | RegisteredRouter, 4 | RouteIds, 5 | SearchParamOptions, 6 | } from "@tanstack/react-router"; 7 | import { cleanEmptyParams } from "../utils/cleanEmptyParams"; 8 | 9 | export function useFilters< 10 | TId extends RouteIds, 11 | TSearchParams extends SearchParamOptions< 12 | RegisteredRouter, 13 | TId, 14 | TId 15 | >["search"], 16 | >(routeId: TId) { 17 | const routeApi = getRouteApi(routeId); 18 | const navigate = routeApi.useNavigate(); 19 | const filters = routeApi.useSearch(); 20 | 21 | const setFilters = (partialFilters: Partial) => 22 | navigate({ 23 | search: cleanEmptyParams({ 24 | ...filters, 25 | ...partialFilters, 26 | }) as TSearchParams, 27 | }); 28 | 29 | const resetFilters = () => navigate({ search: {} as TSearchParams }); 30 | 31 | return { filters, setFilters, resetFilters }; 32 | } 33 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Balastrong/tanstack-filtered-table-demo/f4261abd91b986dbc83b10dc932a7c0e761f5a65/src/index.css -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom/client"; 3 | import { App } from "./App.tsx"; 4 | import "./index.css"; 5 | 6 | ReactDOM.createRoot(document.getElementById("root")!).render( 7 | 8 | 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /src/routeTree.gen.ts: -------------------------------------------------------------------------------- 1 | /* prettier-ignore-start */ 2 | 3 | /* eslint-disable */ 4 | 5 | // @ts-nocheck 6 | 7 | // noinspection JSUnusedGlobalSymbols 8 | 9 | // This file is auto-generated by TanStack Router 10 | 11 | // Import Routes 12 | 13 | import { Route as rootRoute } from './routes/__root' 14 | import { Route as UsersImport } from './routes/users' 15 | import { Route as AnotherRouteImport } from './routes/anotherRoute' 16 | 17 | // Create/Update Routes 18 | 19 | const UsersRoute = UsersImport.update({ 20 | path: '/users', 21 | getParentRoute: () => rootRoute, 22 | } as any) 23 | 24 | const AnotherRouteRoute = AnotherRouteImport.update({ 25 | path: '/anotherRoute', 26 | getParentRoute: () => rootRoute, 27 | } as any) 28 | 29 | // Populate the FileRoutesByPath interface 30 | 31 | declare module '@tanstack/react-router' { 32 | interface FileRoutesByPath { 33 | '/anotherRoute': { 34 | id: '/anotherRoute' 35 | path: '/anotherRoute' 36 | fullPath: '/anotherRoute' 37 | preLoaderRoute: typeof AnotherRouteImport 38 | parentRoute: typeof rootRoute 39 | } 40 | '/users': { 41 | id: '/users' 42 | path: '/users' 43 | fullPath: '/users' 44 | preLoaderRoute: typeof UsersImport 45 | parentRoute: typeof rootRoute 46 | } 47 | } 48 | } 49 | 50 | // Create and export the route tree 51 | 52 | export const routeTree = rootRoute.addChildren({ 53 | AnotherRouteRoute, 54 | UsersRoute, 55 | }) 56 | 57 | /* prettier-ignore-end */ 58 | 59 | /* ROUTE_MANIFEST_START 60 | { 61 | "routes": { 62 | "__root__": { 63 | "filePath": "__root.tsx", 64 | "children": [ 65 | "/anotherRoute", 66 | "/users" 67 | ] 68 | }, 69 | "/anotherRoute": { 70 | "filePath": "anotherRoute.tsx" 71 | }, 72 | "/users": { 73 | "filePath": "users.tsx" 74 | } 75 | } 76 | } 77 | ROUTE_MANIFEST_END */ 78 | -------------------------------------------------------------------------------- /src/routes/__root.tsx: -------------------------------------------------------------------------------- 1 | import { createRootRoute, Outlet } from "@tanstack/react-router"; 2 | 3 | export const Route = createRootRoute({ 4 | component: Outlet, 5 | }); 6 | -------------------------------------------------------------------------------- /src/routes/anotherRoute.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from "@tanstack/react-router"; 2 | 3 | // This just exists to validate types are working 4 | export const Route = createFileRoute("/anotherRoute")({ 5 | validateSearch: () => ({}) as { foo: string; bar: number }, 6 | }); 7 | -------------------------------------------------------------------------------- /src/routes/users.tsx: -------------------------------------------------------------------------------- 1 | import { keepPreviousData, useQuery } from "@tanstack/react-query"; 2 | import { createFileRoute } from "@tanstack/react-router"; 3 | import { useMemo } from "react"; 4 | import { fetchUsers, UserFilters } from "../api/user"; 5 | import Table, { 6 | DEFAULT_PAGE_INDEX, 7 | DEFAULT_PAGE_SIZE, 8 | } from "../components/table"; 9 | import { useFilters } from "../hooks/useFilters"; 10 | import { sortByToState, stateToSortBy } from "../utils/tableSortMapper"; 11 | import { USER_COLUMNS } from "../utils/userColumns"; 12 | 13 | export const Route = createFileRoute("/users")({ 14 | component: UsersPage, 15 | validateSearch: () => ({}) as UserFilters, 16 | }); 17 | 18 | function UsersPage() { 19 | const { filters, resetFilters, setFilters } = useFilters(Route.id); 20 | 21 | const { data } = useQuery({ 22 | queryKey: ["users", filters], 23 | queryFn: () => fetchUsers(filters), 24 | placeholderData: keepPreviousData, 25 | }); 26 | 27 | const paginationState = { 28 | pageIndex: filters.pageIndex ?? DEFAULT_PAGE_INDEX, 29 | pageSize: filters.pageSize ?? DEFAULT_PAGE_SIZE, 30 | }; 31 | const sortingState = sortByToState(filters.sortBy); 32 | const columns = useMemo(() => USER_COLUMNS, []); 33 | 34 | return ( 35 |
36 |

37 | TanStack Table + Query + Router 38 |

39 | { 45 | setFilters( 46 | typeof pagination === "function" 47 | ? pagination(paginationState) 48 | : pagination 49 | ); 50 | }, 51 | rowCount: data?.rowCount, 52 | }} 53 | filters={filters} 54 | onFilterChange={(filters) => setFilters(filters)} 55 | sorting={sortingState} 56 | onSortingChange={(updaterOrValue) => { 57 | const newSortingState = 58 | typeof updaterOrValue === "function" 59 | ? updaterOrValue(sortingState) 60 | : updaterOrValue; 61 | return setFilters({ sortBy: stateToSortBy(newSortingState) }); 62 | }} 63 | /> 64 |
65 | {data?.rowCount} users found 66 | 73 |
74 |
{JSON.stringify(filters, null, 2)}
75 | 76 | ); 77 | } 78 | -------------------------------------------------------------------------------- /src/utils/cleanEmptyParams.ts: -------------------------------------------------------------------------------- 1 | import { DEFAULT_PAGE_INDEX, DEFAULT_PAGE_SIZE } from "../components/table"; 2 | 3 | export const cleanEmptyParams = >( 4 | search: T 5 | ) => { 6 | const newSearch = { ...search }; 7 | Object.keys(newSearch).forEach((key) => { 8 | const value = newSearch[key]; 9 | if ( 10 | value === undefined || 11 | value === "" || 12 | (typeof value === "number" && isNaN(value)) 13 | ) 14 | delete newSearch[key]; 15 | }); 16 | 17 | if (search.pageIndex === DEFAULT_PAGE_INDEX) delete newSearch.pageIndex; 18 | if (search.pageSize === DEFAULT_PAGE_SIZE) delete newSearch.pageSize; 19 | 20 | return newSearch; 21 | }; 22 | -------------------------------------------------------------------------------- /src/utils/tableSortMapper.ts: -------------------------------------------------------------------------------- 1 | import { SortingState } from "@tanstack/react-table"; 2 | import { SortParams } from "../api/types"; 3 | 4 | export const stateToSortBy = (sorting: SortingState | undefined) => { 5 | if (!sorting || sorting.length == 0) return undefined; 6 | 7 | const sort = sorting[0]; 8 | 9 | return `${sort.id}.${sort.desc ? "desc" : "asc"}` as const; 10 | }; 11 | 12 | export const sortByToState = (sortBy: SortParams["sortBy"] | undefined) => { 13 | if (!sortBy) return []; 14 | 15 | const [id, desc] = sortBy.split("."); 16 | return [{ id, desc: desc === "desc" }]; 17 | }; 18 | -------------------------------------------------------------------------------- /src/utils/userColumns.tsx: -------------------------------------------------------------------------------- 1 | import { ColumnDef, RowData } from "@tanstack/react-table"; 2 | import { User } from "../api/user"; 3 | 4 | declare module "@tanstack/react-table" { 5 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 6 | interface ColumnMeta { 7 | filterKey?: keyof TData; 8 | filterVariant?: "text" | "number"; 9 | } 10 | } 11 | 12 | export const USER_COLUMNS: ColumnDef[] = [ 13 | { 14 | accessorKey: "id", 15 | header: () => ID, 16 | meta: { filterKey: "id", filterVariant: "number" }, 17 | }, 18 | { 19 | accessorKey: "firstName", 20 | header: () => First Name, 21 | meta: { filterKey: "firstName" }, 22 | }, 23 | { 24 | accessorKey: "lastName", 25 | header: () => Last Name, 26 | meta: { filterKey: "lastName" }, 27 | }, 28 | { 29 | accessorKey: "age", 30 | header: () => "Age", 31 | meta: { filterKey: "age", filterVariant: "number" }, 32 | }, 33 | ]; 34 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "react-jsx", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["src"], 24 | "references": [{ "path": "./tsconfig.node.json" }] 25 | } 26 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import react from "@vitejs/plugin-react"; 3 | import { TanStackRouterVite } from "@tanstack/router-vite-plugin"; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react(), TanStackRouterVite()], 8 | }); 9 | --------------------------------------------------------------------------------