├── .eslintrc.json ├── .gitignore ├── README.md ├── next.config.mjs ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── next.svg └── vercel.svg ├── src ├── app │ ├── actions │ │ └── adActions.ts │ ├── ad │ │ └── [id] │ │ │ └── page.tsx │ ├── api │ │ ├── ads │ │ │ └── route.ts │ │ ├── auth │ │ │ └── [...nextauth] │ │ │ │ └── route.ts │ │ └── imagekit │ │ │ └── auth │ │ │ └── route.ts │ ├── edit │ │ └── [id] │ │ │ └── page.tsx │ ├── favicon.ico │ ├── globals.css │ ├── layout.tsx │ ├── my-ads │ │ └── page.tsx │ ├── new │ │ └── page.tsx │ └── page.tsx ├── components │ ├── AdForm.tsx │ ├── AdItem.tsx │ ├── AdTextInputs.tsx │ ├── DeleteAdButton.tsx │ ├── DistancePicker.tsx │ ├── Gallery.tsx │ ├── Header.tsx │ ├── LabelRadioButton.tsx │ ├── LocationMap.tsx │ ├── LocationPicker.tsx │ ├── MyImage.tsx │ ├── SearchForm.tsx │ ├── SubmitButton.tsx │ ├── UploadArea.tsx │ ├── UploadThumbnail.tsx │ ├── UploadView.tsx │ └── Uploader.tsx ├── libs │ ├── authOptions.ts │ └── helpers.ts └── models │ └── Ad.ts ├── tailwind.config.ts └── tsconfig.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .env 21 | .DS_Store 22 | *.pem 23 | .idea 24 | 25 | # debug 26 | npm-debug.log* 27 | yarn-debug.log* 28 | yarn-error.log* 29 | 30 | # local env files 31 | .env*.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | # typescript 37 | *.tsbuildinfo 38 | next-env.d.ts 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | # or 14 | bun dev 15 | ``` 16 | 17 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 18 | 19 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. 20 | 21 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 22 | 23 | ## Learn More 24 | 25 | To learn more about Next.js, take a look at the following resources: 26 | 27 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 28 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 29 | 30 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 31 | 32 | ## Deploy on Vercel 33 | 34 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 35 | 36 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 37 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | remotePatterns: [ 5 | { 6 | hostname: '*.googleusercontent.com', 7 | }, 8 | ], 9 | }, 10 | }; 11 | 12 | export default nextConfig; 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "marketplace", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@fortawesome/free-brands-svg-icons": "^6.5.1", 13 | "@fortawesome/free-regular-svg-icons": "^6.5.1", 14 | "@fortawesome/free-solid-svg-icons": "^6.5.1", 15 | "@fortawesome/react-fontawesome": "^0.2.0", 16 | "@googlemaps/js-api-loader": "^1.16.6", 17 | "@types/google.maps": "^3.55.5", 18 | "aws4": "^1.12.0", 19 | "imagekit": "^5.0.0", 20 | "imagekitio-react": "^4.0.0", 21 | "mongoose": "^8.2.4", 22 | "next": "14.1.4", 23 | "next-auth": "^4.24.7", 24 | "react": "^18", 25 | "react-dom": "^18" 26 | }, 27 | "devDependencies": { 28 | "@types/node": "^20", 29 | "@types/react": "^18", 30 | "@types/react-dom": "^18", 31 | "autoprefixer": "^10.0.1", 32 | "eslint": "^8", 33 | "eslint-config-next": "14.1.4", 34 | "postcss": "^8", 35 | "tailwindcss": "^3.3.0", 36 | "typescript": "^5" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@fortawesome/free-brands-svg-icons': 9 | specifier: ^6.5.1 10 | version: 6.5.1 11 | '@fortawesome/free-regular-svg-icons': 12 | specifier: ^6.5.1 13 | version: 6.5.1 14 | '@fortawesome/free-solid-svg-icons': 15 | specifier: ^6.5.1 16 | version: 6.5.1 17 | '@fortawesome/react-fontawesome': 18 | specifier: ^0.2.0 19 | version: 0.2.0(@fortawesome/fontawesome-svg-core@6.5.1)(react@18.2.0) 20 | '@googlemaps/js-api-loader': 21 | specifier: ^1.16.6 22 | version: 1.16.6 23 | '@types/google.maps': 24 | specifier: ^3.55.5 25 | version: 3.55.5 26 | aws4: 27 | specifier: ^1.12.0 28 | version: 1.12.0 29 | imagekit: 30 | specifier: ^5.0.0 31 | version: 5.0.0 32 | imagekitio-react: 33 | specifier: ^4.0.0 34 | version: 4.0.0(react-dom@18.2.0)(react@18.2.0) 35 | mongoose: 36 | specifier: ^8.2.4 37 | version: 8.2.4 38 | next: 39 | specifier: 14.1.4 40 | version: 14.1.4(react-dom@18.2.0)(react@18.2.0) 41 | next-auth: 42 | specifier: ^4.24.7 43 | version: 4.24.7(next@14.1.4)(react-dom@18.2.0)(react@18.2.0) 44 | react: 45 | specifier: ^18 46 | version: 18.2.0 47 | react-dom: 48 | specifier: ^18 49 | version: 18.2.0(react@18.2.0) 50 | 51 | devDependencies: 52 | '@types/node': 53 | specifier: ^20 54 | version: 20.11.30 55 | '@types/react': 56 | specifier: ^18 57 | version: 18.2.73 58 | '@types/react-dom': 59 | specifier: ^18 60 | version: 18.2.22 61 | autoprefixer: 62 | specifier: ^10.0.1 63 | version: 10.4.19(postcss@8.4.38) 64 | eslint: 65 | specifier: ^8 66 | version: 8.57.0 67 | eslint-config-next: 68 | specifier: 14.1.4 69 | version: 14.1.4(eslint@8.57.0)(typescript@5.4.3) 70 | postcss: 71 | specifier: ^8 72 | version: 8.4.38 73 | tailwindcss: 74 | specifier: ^3.3.0 75 | version: 3.4.3 76 | typescript: 77 | specifier: ^5 78 | version: 5.4.3 79 | 80 | packages: 81 | 82 | /@aashutoshrathi/word-wrap@1.2.6: 83 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 84 | engines: {node: '>=0.10.0'} 85 | dev: true 86 | 87 | /@alloc/quick-lru@5.2.0: 88 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 89 | engines: {node: '>=10'} 90 | dev: true 91 | 92 | /@babel/runtime@7.24.1: 93 | resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==} 94 | engines: {node: '>=6.9.0'} 95 | dependencies: 96 | regenerator-runtime: 0.14.1 97 | 98 | /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): 99 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 100 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 101 | peerDependencies: 102 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 103 | dependencies: 104 | eslint: 8.57.0 105 | eslint-visitor-keys: 3.4.3 106 | dev: true 107 | 108 | /@eslint-community/regexpp@4.10.0: 109 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 110 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 111 | dev: true 112 | 113 | /@eslint/eslintrc@2.1.4: 114 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 115 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 116 | dependencies: 117 | ajv: 6.12.6 118 | debug: 4.3.4 119 | espree: 9.6.1 120 | globals: 13.24.0 121 | ignore: 5.3.1 122 | import-fresh: 3.3.0 123 | js-yaml: 4.1.0 124 | minimatch: 3.1.2 125 | strip-json-comments: 3.1.1 126 | transitivePeerDependencies: 127 | - supports-color 128 | dev: true 129 | 130 | /@eslint/js@8.57.0: 131 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 132 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 133 | dev: true 134 | 135 | /@fortawesome/fontawesome-common-types@6.5.1: 136 | resolution: {integrity: sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==} 137 | engines: {node: '>=6'} 138 | requiresBuild: true 139 | dev: false 140 | 141 | /@fortawesome/fontawesome-svg-core@6.5.1: 142 | resolution: {integrity: sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==} 143 | engines: {node: '>=6'} 144 | requiresBuild: true 145 | dependencies: 146 | '@fortawesome/fontawesome-common-types': 6.5.1 147 | dev: false 148 | 149 | /@fortawesome/free-brands-svg-icons@6.5.1: 150 | resolution: {integrity: sha512-093l7DAkx0aEtBq66Sf19MgoZewv1zeY9/4C7vSKPO4qMwEsW/2VYTUTpBtLwfb9T2R73tXaRDPmE4UqLCYHfg==} 151 | engines: {node: '>=6'} 152 | requiresBuild: true 153 | dependencies: 154 | '@fortawesome/fontawesome-common-types': 6.5.1 155 | dev: false 156 | 157 | /@fortawesome/free-regular-svg-icons@6.5.1: 158 | resolution: {integrity: sha512-m6ShXn+wvqEU69wSP84coxLbNl7sGVZb+Ca+XZq6k30SzuP3X4TfPqtycgUh9ASwlNh5OfQCd8pDIWxl+O+LlQ==} 159 | engines: {node: '>=6'} 160 | requiresBuild: true 161 | dependencies: 162 | '@fortawesome/fontawesome-common-types': 6.5.1 163 | dev: false 164 | 165 | /@fortawesome/free-solid-svg-icons@6.5.1: 166 | resolution: {integrity: sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==} 167 | engines: {node: '>=6'} 168 | requiresBuild: true 169 | dependencies: 170 | '@fortawesome/fontawesome-common-types': 6.5.1 171 | dev: false 172 | 173 | /@fortawesome/react-fontawesome@0.2.0(@fortawesome/fontawesome-svg-core@6.5.1)(react@18.2.0): 174 | resolution: {integrity: sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==} 175 | peerDependencies: 176 | '@fortawesome/fontawesome-svg-core': ~1 || ~6 177 | react: '>=16.3' 178 | dependencies: 179 | '@fortawesome/fontawesome-svg-core': 6.5.1 180 | prop-types: 15.8.1 181 | react: 18.2.0 182 | dev: false 183 | 184 | /@googlemaps/js-api-loader@1.16.6: 185 | resolution: {integrity: sha512-V8p5W9DbPQx74jWUmyYJOerhiB4C+MHekaO0ZRmc6lrOYrvY7+syLhzOWpp55kqSPeNb+qbC2h8i69aLIX6krQ==} 186 | dependencies: 187 | fast-deep-equal: 3.1.3 188 | dev: false 189 | 190 | /@humanwhocodes/config-array@0.11.14: 191 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 192 | engines: {node: '>=10.10.0'} 193 | dependencies: 194 | '@humanwhocodes/object-schema': 2.0.2 195 | debug: 4.3.4 196 | minimatch: 3.1.2 197 | transitivePeerDependencies: 198 | - supports-color 199 | dev: true 200 | 201 | /@humanwhocodes/module-importer@1.0.1: 202 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 203 | engines: {node: '>=12.22'} 204 | dev: true 205 | 206 | /@humanwhocodes/object-schema@2.0.2: 207 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 208 | dev: true 209 | 210 | /@isaacs/cliui@8.0.2: 211 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 212 | engines: {node: '>=12'} 213 | dependencies: 214 | string-width: 5.1.2 215 | string-width-cjs: /string-width@4.2.3 216 | strip-ansi: 7.1.0 217 | strip-ansi-cjs: /strip-ansi@6.0.1 218 | wrap-ansi: 8.1.0 219 | wrap-ansi-cjs: /wrap-ansi@7.0.0 220 | dev: true 221 | 222 | /@jridgewell/gen-mapping@0.3.5: 223 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 224 | engines: {node: '>=6.0.0'} 225 | dependencies: 226 | '@jridgewell/set-array': 1.2.1 227 | '@jridgewell/sourcemap-codec': 1.4.15 228 | '@jridgewell/trace-mapping': 0.3.25 229 | dev: true 230 | 231 | /@jridgewell/resolve-uri@3.1.2: 232 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 233 | engines: {node: '>=6.0.0'} 234 | dev: true 235 | 236 | /@jridgewell/set-array@1.2.1: 237 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 238 | engines: {node: '>=6.0.0'} 239 | dev: true 240 | 241 | /@jridgewell/sourcemap-codec@1.4.15: 242 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 243 | dev: true 244 | 245 | /@jridgewell/trace-mapping@0.3.25: 246 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 247 | dependencies: 248 | '@jridgewell/resolve-uri': 3.1.2 249 | '@jridgewell/sourcemap-codec': 1.4.15 250 | dev: true 251 | 252 | /@mongodb-js/saslprep@1.1.5: 253 | resolution: {integrity: sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==} 254 | dependencies: 255 | sparse-bitfield: 3.0.3 256 | dev: false 257 | 258 | /@next/env@14.1.4: 259 | resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} 260 | dev: false 261 | 262 | /@next/eslint-plugin-next@14.1.4: 263 | resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} 264 | dependencies: 265 | glob: 10.3.10 266 | dev: true 267 | 268 | /@next/swc-darwin-arm64@14.1.4: 269 | resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} 270 | engines: {node: '>= 10'} 271 | cpu: [arm64] 272 | os: [darwin] 273 | requiresBuild: true 274 | dev: false 275 | optional: true 276 | 277 | /@next/swc-darwin-x64@14.1.4: 278 | resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} 279 | engines: {node: '>= 10'} 280 | cpu: [x64] 281 | os: [darwin] 282 | requiresBuild: true 283 | dev: false 284 | optional: true 285 | 286 | /@next/swc-linux-arm64-gnu@14.1.4: 287 | resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} 288 | engines: {node: '>= 10'} 289 | cpu: [arm64] 290 | os: [linux] 291 | requiresBuild: true 292 | dev: false 293 | optional: true 294 | 295 | /@next/swc-linux-arm64-musl@14.1.4: 296 | resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} 297 | engines: {node: '>= 10'} 298 | cpu: [arm64] 299 | os: [linux] 300 | requiresBuild: true 301 | dev: false 302 | optional: true 303 | 304 | /@next/swc-linux-x64-gnu@14.1.4: 305 | resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} 306 | engines: {node: '>= 10'} 307 | cpu: [x64] 308 | os: [linux] 309 | requiresBuild: true 310 | dev: false 311 | optional: true 312 | 313 | /@next/swc-linux-x64-musl@14.1.4: 314 | resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} 315 | engines: {node: '>= 10'} 316 | cpu: [x64] 317 | os: [linux] 318 | requiresBuild: true 319 | dev: false 320 | optional: true 321 | 322 | /@next/swc-win32-arm64-msvc@14.1.4: 323 | resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} 324 | engines: {node: '>= 10'} 325 | cpu: [arm64] 326 | os: [win32] 327 | requiresBuild: true 328 | dev: false 329 | optional: true 330 | 331 | /@next/swc-win32-ia32-msvc@14.1.4: 332 | resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} 333 | engines: {node: '>= 10'} 334 | cpu: [ia32] 335 | os: [win32] 336 | requiresBuild: true 337 | dev: false 338 | optional: true 339 | 340 | /@next/swc-win32-x64-msvc@14.1.4: 341 | resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} 342 | engines: {node: '>= 10'} 343 | cpu: [x64] 344 | os: [win32] 345 | requiresBuild: true 346 | dev: false 347 | optional: true 348 | 349 | /@nodelib/fs.scandir@2.1.5: 350 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 351 | engines: {node: '>= 8'} 352 | dependencies: 353 | '@nodelib/fs.stat': 2.0.5 354 | run-parallel: 1.2.0 355 | dev: true 356 | 357 | /@nodelib/fs.stat@2.0.5: 358 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 359 | engines: {node: '>= 8'} 360 | dev: true 361 | 362 | /@nodelib/fs.walk@1.2.8: 363 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 364 | engines: {node: '>= 8'} 365 | dependencies: 366 | '@nodelib/fs.scandir': 2.1.5 367 | fastq: 1.17.1 368 | dev: true 369 | 370 | /@panva/hkdf@1.1.1: 371 | resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} 372 | dev: false 373 | 374 | /@pkgjs/parseargs@0.11.0: 375 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 376 | engines: {node: '>=14'} 377 | requiresBuild: true 378 | dev: true 379 | optional: true 380 | 381 | /@rushstack/eslint-patch@1.9.0: 382 | resolution: {integrity: sha512-AAWymnpvHbGty1BmgbdfbqQDboXs6xN6h2yAacO4yKVyyUUBnpYkp+P9jjPrV9zrAGw7JVVriRtGOHPInnfjZQ==} 383 | dev: true 384 | 385 | /@swc/helpers@0.5.2: 386 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} 387 | dependencies: 388 | tslib: 2.6.2 389 | dev: false 390 | 391 | /@types/google.maps@3.55.5: 392 | resolution: {integrity: sha512-U1QwCo1GeeLm0YI/GoHvfd1VfwgnoUSBcKCMXXFAM+2izSSuqqwZUJ9XNO6NxZxmYKjBNI+NF5eGF6uUSb1aSg==} 393 | dev: false 394 | 395 | /@types/json5@0.0.29: 396 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 397 | dev: true 398 | 399 | /@types/node@20.11.30: 400 | resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} 401 | dependencies: 402 | undici-types: 5.26.5 403 | dev: true 404 | 405 | /@types/prop-types@15.7.12: 406 | resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} 407 | dev: true 408 | 409 | /@types/react-dom@18.2.22: 410 | resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==} 411 | dependencies: 412 | '@types/react': 18.2.73 413 | dev: true 414 | 415 | /@types/react@18.2.73: 416 | resolution: {integrity: sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==} 417 | dependencies: 418 | '@types/prop-types': 15.7.12 419 | csstype: 3.1.3 420 | dev: true 421 | 422 | /@types/webidl-conversions@7.0.3: 423 | resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} 424 | dev: false 425 | 426 | /@types/whatwg-url@11.0.4: 427 | resolution: {integrity: sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==} 428 | dependencies: 429 | '@types/webidl-conversions': 7.0.3 430 | dev: false 431 | 432 | /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.3): 433 | resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} 434 | engines: {node: ^16.0.0 || >=18.0.0} 435 | peerDependencies: 436 | eslint: ^7.0.0 || ^8.0.0 437 | typescript: '*' 438 | peerDependenciesMeta: 439 | typescript: 440 | optional: true 441 | dependencies: 442 | '@typescript-eslint/scope-manager': 6.21.0 443 | '@typescript-eslint/types': 6.21.0 444 | '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.3) 445 | '@typescript-eslint/visitor-keys': 6.21.0 446 | debug: 4.3.4 447 | eslint: 8.57.0 448 | typescript: 5.4.3 449 | transitivePeerDependencies: 450 | - supports-color 451 | dev: true 452 | 453 | /@typescript-eslint/scope-manager@6.21.0: 454 | resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} 455 | engines: {node: ^16.0.0 || >=18.0.0} 456 | dependencies: 457 | '@typescript-eslint/types': 6.21.0 458 | '@typescript-eslint/visitor-keys': 6.21.0 459 | dev: true 460 | 461 | /@typescript-eslint/types@6.21.0: 462 | resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} 463 | engines: {node: ^16.0.0 || >=18.0.0} 464 | dev: true 465 | 466 | /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.3): 467 | resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} 468 | engines: {node: ^16.0.0 || >=18.0.0} 469 | peerDependencies: 470 | typescript: '*' 471 | peerDependenciesMeta: 472 | typescript: 473 | optional: true 474 | dependencies: 475 | '@typescript-eslint/types': 6.21.0 476 | '@typescript-eslint/visitor-keys': 6.21.0 477 | debug: 4.3.4 478 | globby: 11.1.0 479 | is-glob: 4.0.3 480 | minimatch: 9.0.3 481 | semver: 7.6.0 482 | ts-api-utils: 1.3.0(typescript@5.4.3) 483 | typescript: 5.4.3 484 | transitivePeerDependencies: 485 | - supports-color 486 | dev: true 487 | 488 | /@typescript-eslint/visitor-keys@6.21.0: 489 | resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} 490 | engines: {node: ^16.0.0 || >=18.0.0} 491 | dependencies: 492 | '@typescript-eslint/types': 6.21.0 493 | eslint-visitor-keys: 3.4.3 494 | dev: true 495 | 496 | /@ungap/structured-clone@1.2.0: 497 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 498 | dev: true 499 | 500 | /acorn-jsx@5.3.2(acorn@8.11.3): 501 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 502 | peerDependencies: 503 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 504 | dependencies: 505 | acorn: 8.11.3 506 | dev: true 507 | 508 | /acorn@8.11.3: 509 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 510 | engines: {node: '>=0.4.0'} 511 | hasBin: true 512 | dev: true 513 | 514 | /ajv@6.12.6: 515 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 516 | dependencies: 517 | fast-deep-equal: 3.1.3 518 | fast-json-stable-stringify: 2.1.0 519 | json-schema-traverse: 0.4.1 520 | uri-js: 4.4.1 521 | dev: true 522 | 523 | /ansi-regex@5.0.1: 524 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 525 | engines: {node: '>=8'} 526 | dev: true 527 | 528 | /ansi-regex@6.0.1: 529 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 530 | engines: {node: '>=12'} 531 | dev: true 532 | 533 | /ansi-styles@4.3.0: 534 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 535 | engines: {node: '>=8'} 536 | dependencies: 537 | color-convert: 2.0.1 538 | dev: true 539 | 540 | /ansi-styles@6.2.1: 541 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 542 | engines: {node: '>=12'} 543 | dev: true 544 | 545 | /any-promise@1.3.0: 546 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 547 | dev: true 548 | 549 | /anymatch@3.1.3: 550 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 551 | engines: {node: '>= 8'} 552 | dependencies: 553 | normalize-path: 3.0.0 554 | picomatch: 2.3.1 555 | dev: true 556 | 557 | /arg@5.0.2: 558 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 559 | dev: true 560 | 561 | /argparse@2.0.1: 562 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 563 | dev: true 564 | 565 | /aria-query@5.3.0: 566 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 567 | dependencies: 568 | dequal: 2.0.3 569 | dev: true 570 | 571 | /array-buffer-byte-length@1.0.1: 572 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 573 | engines: {node: '>= 0.4'} 574 | dependencies: 575 | call-bind: 1.0.7 576 | is-array-buffer: 3.0.4 577 | dev: true 578 | 579 | /array-includes@3.1.8: 580 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 581 | engines: {node: '>= 0.4'} 582 | dependencies: 583 | call-bind: 1.0.7 584 | define-properties: 1.2.1 585 | es-abstract: 1.23.2 586 | es-object-atoms: 1.0.0 587 | get-intrinsic: 1.2.4 588 | is-string: 1.0.7 589 | dev: true 590 | 591 | /array-union@2.1.0: 592 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 593 | engines: {node: '>=8'} 594 | dev: true 595 | 596 | /array.prototype.findlast@1.2.5: 597 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 598 | engines: {node: '>= 0.4'} 599 | dependencies: 600 | call-bind: 1.0.7 601 | define-properties: 1.2.1 602 | es-abstract: 1.23.2 603 | es-errors: 1.3.0 604 | es-object-atoms: 1.0.0 605 | es-shim-unscopables: 1.0.2 606 | dev: true 607 | 608 | /array.prototype.findlastindex@1.2.5: 609 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 610 | engines: {node: '>= 0.4'} 611 | dependencies: 612 | call-bind: 1.0.7 613 | define-properties: 1.2.1 614 | es-abstract: 1.23.2 615 | es-errors: 1.3.0 616 | es-object-atoms: 1.0.0 617 | es-shim-unscopables: 1.0.2 618 | dev: true 619 | 620 | /array.prototype.flat@1.3.2: 621 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 622 | engines: {node: '>= 0.4'} 623 | dependencies: 624 | call-bind: 1.0.7 625 | define-properties: 1.2.1 626 | es-abstract: 1.23.2 627 | es-shim-unscopables: 1.0.2 628 | dev: true 629 | 630 | /array.prototype.flatmap@1.3.2: 631 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 632 | engines: {node: '>= 0.4'} 633 | dependencies: 634 | call-bind: 1.0.7 635 | define-properties: 1.2.1 636 | es-abstract: 1.23.2 637 | es-shim-unscopables: 1.0.2 638 | dev: true 639 | 640 | /array.prototype.toreversed@1.1.2: 641 | resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} 642 | dependencies: 643 | call-bind: 1.0.7 644 | define-properties: 1.2.1 645 | es-abstract: 1.23.2 646 | es-shim-unscopables: 1.0.2 647 | dev: true 648 | 649 | /array.prototype.tosorted@1.1.3: 650 | resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} 651 | dependencies: 652 | call-bind: 1.0.7 653 | define-properties: 1.2.1 654 | es-abstract: 1.23.2 655 | es-errors: 1.3.0 656 | es-shim-unscopables: 1.0.2 657 | dev: true 658 | 659 | /arraybuffer.prototype.slice@1.0.3: 660 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 661 | engines: {node: '>= 0.4'} 662 | dependencies: 663 | array-buffer-byte-length: 1.0.1 664 | call-bind: 1.0.7 665 | define-properties: 1.2.1 666 | es-abstract: 1.23.2 667 | es-errors: 1.3.0 668 | get-intrinsic: 1.2.4 669 | is-array-buffer: 3.0.4 670 | is-shared-array-buffer: 1.0.3 671 | dev: true 672 | 673 | /ast-types-flow@0.0.8: 674 | resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} 675 | dev: true 676 | 677 | /asynckit@0.4.0: 678 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 679 | dev: false 680 | 681 | /autoprefixer@10.4.19(postcss@8.4.38): 682 | resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} 683 | engines: {node: ^10 || ^12 || >=14} 684 | hasBin: true 685 | peerDependencies: 686 | postcss: ^8.1.0 687 | dependencies: 688 | browserslist: 4.23.0 689 | caniuse-lite: 1.0.30001600 690 | fraction.js: 4.3.7 691 | normalize-range: 0.1.2 692 | picocolors: 1.0.0 693 | postcss: 8.4.38 694 | postcss-value-parser: 4.2.0 695 | dev: true 696 | 697 | /available-typed-arrays@1.0.7: 698 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 699 | engines: {node: '>= 0.4'} 700 | dependencies: 701 | possible-typed-array-names: 1.0.0 702 | dev: true 703 | 704 | /aws4@1.12.0: 705 | resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} 706 | dev: false 707 | 708 | /axe-core@4.7.0: 709 | resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} 710 | engines: {node: '>=4'} 711 | dev: true 712 | 713 | /axios@1.6.8: 714 | resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} 715 | dependencies: 716 | follow-redirects: 1.15.6 717 | form-data: 4.0.0 718 | proxy-from-env: 1.1.0 719 | transitivePeerDependencies: 720 | - debug 721 | dev: false 722 | 723 | /axobject-query@3.2.1: 724 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} 725 | dependencies: 726 | dequal: 2.0.3 727 | dev: true 728 | 729 | /balanced-match@1.0.2: 730 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 731 | dev: true 732 | 733 | /binary-extensions@2.3.0: 734 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 735 | engines: {node: '>=8'} 736 | dev: true 737 | 738 | /brace-expansion@1.1.11: 739 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 740 | dependencies: 741 | balanced-match: 1.0.2 742 | concat-map: 0.0.1 743 | dev: true 744 | 745 | /brace-expansion@2.0.1: 746 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 747 | dependencies: 748 | balanced-match: 1.0.2 749 | dev: true 750 | 751 | /braces@3.0.2: 752 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 753 | engines: {node: '>=8'} 754 | dependencies: 755 | fill-range: 7.0.1 756 | dev: true 757 | 758 | /browserslist@4.23.0: 759 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 760 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 761 | hasBin: true 762 | dependencies: 763 | caniuse-lite: 1.0.30001600 764 | electron-to-chromium: 1.4.719 765 | node-releases: 2.0.14 766 | update-browserslist-db: 1.0.13(browserslist@4.23.0) 767 | dev: true 768 | 769 | /bson@6.5.0: 770 | resolution: {integrity: sha512-DXf1BTAS8vKyR90BO4x5v3rKVarmkdkzwOrnYDFdjAY694ILNDkmA3uRh1xXJEl+C1DAh8XCvAQ+Gh3kzubtpg==} 771 | engines: {node: '>=16.20.1'} 772 | dev: false 773 | 774 | /busboy@1.6.0: 775 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 776 | engines: {node: '>=10.16.0'} 777 | dependencies: 778 | streamsearch: 1.1.0 779 | dev: false 780 | 781 | /call-bind@1.0.7: 782 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 783 | engines: {node: '>= 0.4'} 784 | dependencies: 785 | es-define-property: 1.0.0 786 | es-errors: 1.3.0 787 | function-bind: 1.1.2 788 | get-intrinsic: 1.2.4 789 | set-function-length: 1.2.2 790 | dev: true 791 | 792 | /callsites@3.1.0: 793 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 794 | engines: {node: '>=6'} 795 | dev: true 796 | 797 | /camelcase-css@2.0.1: 798 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 799 | engines: {node: '>= 6'} 800 | dev: true 801 | 802 | /caniuse-lite@1.0.30001600: 803 | resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} 804 | 805 | /chalk@4.1.2: 806 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 807 | engines: {node: '>=10'} 808 | dependencies: 809 | ansi-styles: 4.3.0 810 | supports-color: 7.2.0 811 | dev: true 812 | 813 | /chokidar@3.6.0: 814 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 815 | engines: {node: '>= 8.10.0'} 816 | dependencies: 817 | anymatch: 3.1.3 818 | braces: 3.0.2 819 | glob-parent: 5.1.2 820 | is-binary-path: 2.1.0 821 | is-glob: 4.0.3 822 | normalize-path: 3.0.0 823 | readdirp: 3.6.0 824 | optionalDependencies: 825 | fsevents: 2.3.3 826 | dev: true 827 | 828 | /client-only@0.0.1: 829 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 830 | dev: false 831 | 832 | /color-convert@2.0.1: 833 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 834 | engines: {node: '>=7.0.0'} 835 | dependencies: 836 | color-name: 1.1.4 837 | dev: true 838 | 839 | /color-name@1.1.4: 840 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 841 | dev: true 842 | 843 | /combined-stream@1.0.8: 844 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 845 | engines: {node: '>= 0.8'} 846 | dependencies: 847 | delayed-stream: 1.0.0 848 | dev: false 849 | 850 | /commander@4.1.1: 851 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 852 | engines: {node: '>= 6'} 853 | dev: true 854 | 855 | /concat-map@0.0.1: 856 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 857 | dev: true 858 | 859 | /cookie@0.5.0: 860 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 861 | engines: {node: '>= 0.6'} 862 | dev: false 863 | 864 | /cross-spawn@7.0.3: 865 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 866 | engines: {node: '>= 8'} 867 | dependencies: 868 | path-key: 3.1.1 869 | shebang-command: 2.0.0 870 | which: 2.0.2 871 | dev: true 872 | 873 | /cssesc@3.0.0: 874 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 875 | engines: {node: '>=4'} 876 | hasBin: true 877 | dev: true 878 | 879 | /csstype@3.1.3: 880 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 881 | dev: true 882 | 883 | /damerau-levenshtein@1.0.8: 884 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 885 | dev: true 886 | 887 | /data-view-buffer@1.0.1: 888 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 889 | engines: {node: '>= 0.4'} 890 | dependencies: 891 | call-bind: 1.0.7 892 | es-errors: 1.3.0 893 | is-data-view: 1.0.1 894 | dev: true 895 | 896 | /data-view-byte-length@1.0.1: 897 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 898 | engines: {node: '>= 0.4'} 899 | dependencies: 900 | call-bind: 1.0.7 901 | es-errors: 1.3.0 902 | is-data-view: 1.0.1 903 | dev: true 904 | 905 | /data-view-byte-offset@1.0.0: 906 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 907 | engines: {node: '>= 0.4'} 908 | dependencies: 909 | call-bind: 1.0.7 910 | es-errors: 1.3.0 911 | is-data-view: 1.0.1 912 | dev: true 913 | 914 | /debug@3.2.7: 915 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 916 | peerDependencies: 917 | supports-color: '*' 918 | peerDependenciesMeta: 919 | supports-color: 920 | optional: true 921 | dependencies: 922 | ms: 2.1.3 923 | dev: true 924 | 925 | /debug@4.3.4: 926 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 927 | engines: {node: '>=6.0'} 928 | peerDependencies: 929 | supports-color: '*' 930 | peerDependenciesMeta: 931 | supports-color: 932 | optional: true 933 | dependencies: 934 | ms: 2.1.2 935 | 936 | /deep-is@0.1.4: 937 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 938 | dev: true 939 | 940 | /define-data-property@1.1.4: 941 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 942 | engines: {node: '>= 0.4'} 943 | dependencies: 944 | es-define-property: 1.0.0 945 | es-errors: 1.3.0 946 | gopd: 1.0.1 947 | dev: true 948 | 949 | /define-properties@1.2.1: 950 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 951 | engines: {node: '>= 0.4'} 952 | dependencies: 953 | define-data-property: 1.1.4 954 | has-property-descriptors: 1.0.2 955 | object-keys: 1.1.1 956 | dev: true 957 | 958 | /delayed-stream@1.0.0: 959 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 960 | engines: {node: '>=0.4.0'} 961 | dev: false 962 | 963 | /dequal@2.0.3: 964 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 965 | engines: {node: '>=6'} 966 | dev: true 967 | 968 | /didyoumean@1.2.2: 969 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 970 | dev: true 971 | 972 | /dir-glob@3.0.1: 973 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 974 | engines: {node: '>=8'} 975 | dependencies: 976 | path-type: 4.0.0 977 | dev: true 978 | 979 | /dlv@1.1.3: 980 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 981 | dev: true 982 | 983 | /doctrine@2.1.0: 984 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 985 | engines: {node: '>=0.10.0'} 986 | dependencies: 987 | esutils: 2.0.3 988 | dev: true 989 | 990 | /doctrine@3.0.0: 991 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 992 | engines: {node: '>=6.0.0'} 993 | dependencies: 994 | esutils: 2.0.3 995 | dev: true 996 | 997 | /eastasianwidth@0.2.0: 998 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 999 | dev: true 1000 | 1001 | /electron-to-chromium@1.4.719: 1002 | resolution: {integrity: sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==} 1003 | dev: true 1004 | 1005 | /emoji-regex@8.0.0: 1006 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1007 | dev: true 1008 | 1009 | /emoji-regex@9.2.2: 1010 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1011 | dev: true 1012 | 1013 | /enhanced-resolve@5.16.0: 1014 | resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} 1015 | engines: {node: '>=10.13.0'} 1016 | dependencies: 1017 | graceful-fs: 4.2.11 1018 | tapable: 2.2.1 1019 | dev: true 1020 | 1021 | /es-abstract@1.23.2: 1022 | resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} 1023 | engines: {node: '>= 0.4'} 1024 | dependencies: 1025 | array-buffer-byte-length: 1.0.1 1026 | arraybuffer.prototype.slice: 1.0.3 1027 | available-typed-arrays: 1.0.7 1028 | call-bind: 1.0.7 1029 | data-view-buffer: 1.0.1 1030 | data-view-byte-length: 1.0.1 1031 | data-view-byte-offset: 1.0.0 1032 | es-define-property: 1.0.0 1033 | es-errors: 1.3.0 1034 | es-object-atoms: 1.0.0 1035 | es-set-tostringtag: 2.0.3 1036 | es-to-primitive: 1.2.1 1037 | function.prototype.name: 1.1.6 1038 | get-intrinsic: 1.2.4 1039 | get-symbol-description: 1.0.2 1040 | globalthis: 1.0.3 1041 | gopd: 1.0.1 1042 | has-property-descriptors: 1.0.2 1043 | has-proto: 1.0.3 1044 | has-symbols: 1.0.3 1045 | hasown: 2.0.2 1046 | internal-slot: 1.0.7 1047 | is-array-buffer: 3.0.4 1048 | is-callable: 1.2.7 1049 | is-data-view: 1.0.1 1050 | is-negative-zero: 2.0.3 1051 | is-regex: 1.1.4 1052 | is-shared-array-buffer: 1.0.3 1053 | is-string: 1.0.7 1054 | is-typed-array: 1.1.13 1055 | is-weakref: 1.0.2 1056 | object-inspect: 1.13.1 1057 | object-keys: 1.1.1 1058 | object.assign: 4.1.5 1059 | regexp.prototype.flags: 1.5.2 1060 | safe-array-concat: 1.1.2 1061 | safe-regex-test: 1.0.3 1062 | string.prototype.trim: 1.2.9 1063 | string.prototype.trimend: 1.0.8 1064 | string.prototype.trimstart: 1.0.8 1065 | typed-array-buffer: 1.0.2 1066 | typed-array-byte-length: 1.0.1 1067 | typed-array-byte-offset: 1.0.2 1068 | typed-array-length: 1.0.6 1069 | unbox-primitive: 1.0.2 1070 | which-typed-array: 1.1.15 1071 | dev: true 1072 | 1073 | /es-define-property@1.0.0: 1074 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 1075 | engines: {node: '>= 0.4'} 1076 | dependencies: 1077 | get-intrinsic: 1.2.4 1078 | dev: true 1079 | 1080 | /es-errors@1.3.0: 1081 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1082 | engines: {node: '>= 0.4'} 1083 | dev: true 1084 | 1085 | /es-iterator-helpers@1.0.18: 1086 | resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} 1087 | engines: {node: '>= 0.4'} 1088 | dependencies: 1089 | call-bind: 1.0.7 1090 | define-properties: 1.2.1 1091 | es-abstract: 1.23.2 1092 | es-errors: 1.3.0 1093 | es-set-tostringtag: 2.0.3 1094 | function-bind: 1.1.2 1095 | get-intrinsic: 1.2.4 1096 | globalthis: 1.0.3 1097 | has-property-descriptors: 1.0.2 1098 | has-proto: 1.0.3 1099 | has-symbols: 1.0.3 1100 | internal-slot: 1.0.7 1101 | iterator.prototype: 1.1.2 1102 | safe-array-concat: 1.1.2 1103 | dev: true 1104 | 1105 | /es-object-atoms@1.0.0: 1106 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 1107 | engines: {node: '>= 0.4'} 1108 | dependencies: 1109 | es-errors: 1.3.0 1110 | dev: true 1111 | 1112 | /es-set-tostringtag@2.0.3: 1113 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 1114 | engines: {node: '>= 0.4'} 1115 | dependencies: 1116 | get-intrinsic: 1.2.4 1117 | has-tostringtag: 1.0.2 1118 | hasown: 2.0.2 1119 | dev: true 1120 | 1121 | /es-shim-unscopables@1.0.2: 1122 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 1123 | dependencies: 1124 | hasown: 2.0.2 1125 | dev: true 1126 | 1127 | /es-to-primitive@1.2.1: 1128 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1129 | engines: {node: '>= 0.4'} 1130 | dependencies: 1131 | is-callable: 1.2.7 1132 | is-date-object: 1.0.5 1133 | is-symbol: 1.0.4 1134 | dev: true 1135 | 1136 | /escalade@3.1.2: 1137 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 1138 | engines: {node: '>=6'} 1139 | dev: true 1140 | 1141 | /escape-string-regexp@4.0.0: 1142 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1143 | engines: {node: '>=10'} 1144 | dev: true 1145 | 1146 | /eslint-config-next@14.1.4(eslint@8.57.0)(typescript@5.4.3): 1147 | resolution: {integrity: sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==} 1148 | peerDependencies: 1149 | eslint: ^7.23.0 || ^8.0.0 1150 | typescript: '>=3.3.1' 1151 | peerDependenciesMeta: 1152 | typescript: 1153 | optional: true 1154 | dependencies: 1155 | '@next/eslint-plugin-next': 14.1.4 1156 | '@rushstack/eslint-patch': 1.9.0 1157 | '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.3) 1158 | eslint: 8.57.0 1159 | eslint-import-resolver-node: 0.3.9 1160 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) 1161 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 1162 | eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) 1163 | eslint-plugin-react: 7.34.1(eslint@8.57.0) 1164 | eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) 1165 | typescript: 5.4.3 1166 | transitivePeerDependencies: 1167 | - eslint-import-resolver-webpack 1168 | - supports-color 1169 | dev: true 1170 | 1171 | /eslint-import-resolver-node@0.3.9: 1172 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 1173 | dependencies: 1174 | debug: 3.2.7 1175 | is-core-module: 2.13.1 1176 | resolve: 1.22.8 1177 | transitivePeerDependencies: 1178 | - supports-color 1179 | dev: true 1180 | 1181 | /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): 1182 | resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} 1183 | engines: {node: ^14.18.0 || >=16.0.0} 1184 | peerDependencies: 1185 | eslint: '*' 1186 | eslint-plugin-import: '*' 1187 | dependencies: 1188 | debug: 4.3.4 1189 | enhanced-resolve: 5.16.0 1190 | eslint: 8.57.0 1191 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 1192 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 1193 | fast-glob: 3.3.2 1194 | get-tsconfig: 4.7.3 1195 | is-core-module: 2.13.1 1196 | is-glob: 4.0.3 1197 | transitivePeerDependencies: 1198 | - '@typescript-eslint/parser' 1199 | - eslint-import-resolver-node 1200 | - eslint-import-resolver-webpack 1201 | - supports-color 1202 | dev: true 1203 | 1204 | /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): 1205 | resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} 1206 | engines: {node: '>=4'} 1207 | peerDependencies: 1208 | '@typescript-eslint/parser': '*' 1209 | eslint: '*' 1210 | eslint-import-resolver-node: '*' 1211 | eslint-import-resolver-typescript: '*' 1212 | eslint-import-resolver-webpack: '*' 1213 | peerDependenciesMeta: 1214 | '@typescript-eslint/parser': 1215 | optional: true 1216 | eslint: 1217 | optional: true 1218 | eslint-import-resolver-node: 1219 | optional: true 1220 | eslint-import-resolver-typescript: 1221 | optional: true 1222 | eslint-import-resolver-webpack: 1223 | optional: true 1224 | dependencies: 1225 | '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.3) 1226 | debug: 3.2.7 1227 | eslint: 8.57.0 1228 | eslint-import-resolver-node: 0.3.9 1229 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) 1230 | transitivePeerDependencies: 1231 | - supports-color 1232 | dev: true 1233 | 1234 | /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): 1235 | resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} 1236 | engines: {node: '>=4'} 1237 | peerDependencies: 1238 | '@typescript-eslint/parser': '*' 1239 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1240 | peerDependenciesMeta: 1241 | '@typescript-eslint/parser': 1242 | optional: true 1243 | dependencies: 1244 | '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.3) 1245 | array-includes: 3.1.8 1246 | array.prototype.findlastindex: 1.2.5 1247 | array.prototype.flat: 1.3.2 1248 | array.prototype.flatmap: 1.3.2 1249 | debug: 3.2.7 1250 | doctrine: 2.1.0 1251 | eslint: 8.57.0 1252 | eslint-import-resolver-node: 0.3.9 1253 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 1254 | hasown: 2.0.2 1255 | is-core-module: 2.13.1 1256 | is-glob: 4.0.3 1257 | minimatch: 3.1.2 1258 | object.fromentries: 2.0.8 1259 | object.groupby: 1.0.3 1260 | object.values: 1.2.0 1261 | semver: 6.3.1 1262 | tsconfig-paths: 3.15.0 1263 | transitivePeerDependencies: 1264 | - eslint-import-resolver-typescript 1265 | - eslint-import-resolver-webpack 1266 | - supports-color 1267 | dev: true 1268 | 1269 | /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): 1270 | resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} 1271 | engines: {node: '>=4.0'} 1272 | peerDependencies: 1273 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1274 | dependencies: 1275 | '@babel/runtime': 7.24.1 1276 | aria-query: 5.3.0 1277 | array-includes: 3.1.8 1278 | array.prototype.flatmap: 1.3.2 1279 | ast-types-flow: 0.0.8 1280 | axe-core: 4.7.0 1281 | axobject-query: 3.2.1 1282 | damerau-levenshtein: 1.0.8 1283 | emoji-regex: 9.2.2 1284 | es-iterator-helpers: 1.0.18 1285 | eslint: 8.57.0 1286 | hasown: 2.0.2 1287 | jsx-ast-utils: 3.3.5 1288 | language-tags: 1.0.9 1289 | minimatch: 3.1.2 1290 | object.entries: 1.1.8 1291 | object.fromentries: 2.0.8 1292 | dev: true 1293 | 1294 | /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): 1295 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 1296 | engines: {node: '>=10'} 1297 | peerDependencies: 1298 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 1299 | dependencies: 1300 | eslint: 8.57.0 1301 | dev: true 1302 | 1303 | /eslint-plugin-react@7.34.1(eslint@8.57.0): 1304 | resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} 1305 | engines: {node: '>=4'} 1306 | peerDependencies: 1307 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1308 | dependencies: 1309 | array-includes: 3.1.8 1310 | array.prototype.findlast: 1.2.5 1311 | array.prototype.flatmap: 1.3.2 1312 | array.prototype.toreversed: 1.1.2 1313 | array.prototype.tosorted: 1.1.3 1314 | doctrine: 2.1.0 1315 | es-iterator-helpers: 1.0.18 1316 | eslint: 8.57.0 1317 | estraverse: 5.3.0 1318 | jsx-ast-utils: 3.3.5 1319 | minimatch: 3.1.2 1320 | object.entries: 1.1.8 1321 | object.fromentries: 2.0.8 1322 | object.hasown: 1.1.4 1323 | object.values: 1.2.0 1324 | prop-types: 15.8.1 1325 | resolve: 2.0.0-next.5 1326 | semver: 6.3.1 1327 | string.prototype.matchall: 4.0.11 1328 | dev: true 1329 | 1330 | /eslint-scope@7.2.2: 1331 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1332 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1333 | dependencies: 1334 | esrecurse: 4.3.0 1335 | estraverse: 5.3.0 1336 | dev: true 1337 | 1338 | /eslint-visitor-keys@3.4.3: 1339 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1340 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1341 | dev: true 1342 | 1343 | /eslint@8.57.0: 1344 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 1345 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1346 | hasBin: true 1347 | dependencies: 1348 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 1349 | '@eslint-community/regexpp': 4.10.0 1350 | '@eslint/eslintrc': 2.1.4 1351 | '@eslint/js': 8.57.0 1352 | '@humanwhocodes/config-array': 0.11.14 1353 | '@humanwhocodes/module-importer': 1.0.1 1354 | '@nodelib/fs.walk': 1.2.8 1355 | '@ungap/structured-clone': 1.2.0 1356 | ajv: 6.12.6 1357 | chalk: 4.1.2 1358 | cross-spawn: 7.0.3 1359 | debug: 4.3.4 1360 | doctrine: 3.0.0 1361 | escape-string-regexp: 4.0.0 1362 | eslint-scope: 7.2.2 1363 | eslint-visitor-keys: 3.4.3 1364 | espree: 9.6.1 1365 | esquery: 1.5.0 1366 | esutils: 2.0.3 1367 | fast-deep-equal: 3.1.3 1368 | file-entry-cache: 6.0.1 1369 | find-up: 5.0.0 1370 | glob-parent: 6.0.2 1371 | globals: 13.24.0 1372 | graphemer: 1.4.0 1373 | ignore: 5.3.1 1374 | imurmurhash: 0.1.4 1375 | is-glob: 4.0.3 1376 | is-path-inside: 3.0.3 1377 | js-yaml: 4.1.0 1378 | json-stable-stringify-without-jsonify: 1.0.1 1379 | levn: 0.4.1 1380 | lodash.merge: 4.6.2 1381 | minimatch: 3.1.2 1382 | natural-compare: 1.4.0 1383 | optionator: 0.9.3 1384 | strip-ansi: 6.0.1 1385 | text-table: 0.2.0 1386 | transitivePeerDependencies: 1387 | - supports-color 1388 | dev: true 1389 | 1390 | /espree@9.6.1: 1391 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1392 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1393 | dependencies: 1394 | acorn: 8.11.3 1395 | acorn-jsx: 5.3.2(acorn@8.11.3) 1396 | eslint-visitor-keys: 3.4.3 1397 | dev: true 1398 | 1399 | /esquery@1.5.0: 1400 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1401 | engines: {node: '>=0.10'} 1402 | dependencies: 1403 | estraverse: 5.3.0 1404 | dev: true 1405 | 1406 | /esrecurse@4.3.0: 1407 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1408 | engines: {node: '>=4.0'} 1409 | dependencies: 1410 | estraverse: 5.3.0 1411 | dev: true 1412 | 1413 | /estraverse@5.3.0: 1414 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1415 | engines: {node: '>=4.0'} 1416 | dev: true 1417 | 1418 | /esutils@2.0.3: 1419 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1420 | engines: {node: '>=0.10.0'} 1421 | dev: true 1422 | 1423 | /fast-deep-equal@3.1.3: 1424 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1425 | 1426 | /fast-glob@3.3.2: 1427 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1428 | engines: {node: '>=8.6.0'} 1429 | dependencies: 1430 | '@nodelib/fs.stat': 2.0.5 1431 | '@nodelib/fs.walk': 1.2.8 1432 | glob-parent: 5.1.2 1433 | merge2: 1.4.1 1434 | micromatch: 4.0.5 1435 | dev: true 1436 | 1437 | /fast-json-stable-stringify@2.1.0: 1438 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1439 | dev: true 1440 | 1441 | /fast-levenshtein@2.0.6: 1442 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1443 | dev: true 1444 | 1445 | /fastq@1.17.1: 1446 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1447 | dependencies: 1448 | reusify: 1.0.4 1449 | dev: true 1450 | 1451 | /file-entry-cache@6.0.1: 1452 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1453 | engines: {node: ^10.12.0 || >=12.0.0} 1454 | dependencies: 1455 | flat-cache: 3.2.0 1456 | dev: true 1457 | 1458 | /fill-range@7.0.1: 1459 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1460 | engines: {node: '>=8'} 1461 | dependencies: 1462 | to-regex-range: 5.0.1 1463 | dev: true 1464 | 1465 | /find-up@5.0.0: 1466 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1467 | engines: {node: '>=10'} 1468 | dependencies: 1469 | locate-path: 6.0.0 1470 | path-exists: 4.0.0 1471 | dev: true 1472 | 1473 | /flat-cache@3.2.0: 1474 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1475 | engines: {node: ^10.12.0 || >=12.0.0} 1476 | dependencies: 1477 | flatted: 3.3.1 1478 | keyv: 4.5.4 1479 | rimraf: 3.0.2 1480 | dev: true 1481 | 1482 | /flatted@3.3.1: 1483 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1484 | dev: true 1485 | 1486 | /follow-redirects@1.15.6: 1487 | resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} 1488 | engines: {node: '>=4.0'} 1489 | peerDependencies: 1490 | debug: '*' 1491 | peerDependenciesMeta: 1492 | debug: 1493 | optional: true 1494 | dev: false 1495 | 1496 | /for-each@0.3.3: 1497 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1498 | dependencies: 1499 | is-callable: 1.2.7 1500 | dev: true 1501 | 1502 | /foreground-child@3.1.1: 1503 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 1504 | engines: {node: '>=14'} 1505 | dependencies: 1506 | cross-spawn: 7.0.3 1507 | signal-exit: 4.1.0 1508 | dev: true 1509 | 1510 | /form-data@4.0.0: 1511 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1512 | engines: {node: '>= 6'} 1513 | dependencies: 1514 | asynckit: 0.4.0 1515 | combined-stream: 1.0.8 1516 | mime-types: 2.1.35 1517 | dev: false 1518 | 1519 | /fraction.js@4.3.7: 1520 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 1521 | dev: true 1522 | 1523 | /fs.realpath@1.0.0: 1524 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1525 | dev: true 1526 | 1527 | /fsevents@2.3.3: 1528 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1529 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1530 | os: [darwin] 1531 | requiresBuild: true 1532 | dev: true 1533 | optional: true 1534 | 1535 | /function-bind@1.1.2: 1536 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1537 | dev: true 1538 | 1539 | /function.prototype.name@1.1.6: 1540 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1541 | engines: {node: '>= 0.4'} 1542 | dependencies: 1543 | call-bind: 1.0.7 1544 | define-properties: 1.2.1 1545 | es-abstract: 1.23.2 1546 | functions-have-names: 1.2.3 1547 | dev: true 1548 | 1549 | /functions-have-names@1.2.3: 1550 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1551 | dev: true 1552 | 1553 | /get-intrinsic@1.2.4: 1554 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 1555 | engines: {node: '>= 0.4'} 1556 | dependencies: 1557 | es-errors: 1.3.0 1558 | function-bind: 1.1.2 1559 | has-proto: 1.0.3 1560 | has-symbols: 1.0.3 1561 | hasown: 2.0.2 1562 | dev: true 1563 | 1564 | /get-symbol-description@1.0.2: 1565 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 1566 | engines: {node: '>= 0.4'} 1567 | dependencies: 1568 | call-bind: 1.0.7 1569 | es-errors: 1.3.0 1570 | get-intrinsic: 1.2.4 1571 | dev: true 1572 | 1573 | /get-tsconfig@4.7.3: 1574 | resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} 1575 | dependencies: 1576 | resolve-pkg-maps: 1.0.0 1577 | dev: true 1578 | 1579 | /glob-parent@5.1.2: 1580 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1581 | engines: {node: '>= 6'} 1582 | dependencies: 1583 | is-glob: 4.0.3 1584 | dev: true 1585 | 1586 | /glob-parent@6.0.2: 1587 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1588 | engines: {node: '>=10.13.0'} 1589 | dependencies: 1590 | is-glob: 4.0.3 1591 | dev: true 1592 | 1593 | /glob@10.3.10: 1594 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} 1595 | engines: {node: '>=16 || 14 >=14.17'} 1596 | hasBin: true 1597 | dependencies: 1598 | foreground-child: 3.1.1 1599 | jackspeak: 2.3.6 1600 | minimatch: 9.0.3 1601 | minipass: 7.0.4 1602 | path-scurry: 1.10.2 1603 | dev: true 1604 | 1605 | /glob@7.2.3: 1606 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1607 | dependencies: 1608 | fs.realpath: 1.0.0 1609 | inflight: 1.0.6 1610 | inherits: 2.0.4 1611 | minimatch: 3.1.2 1612 | once: 1.4.0 1613 | path-is-absolute: 1.0.1 1614 | dev: true 1615 | 1616 | /globals@13.24.0: 1617 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1618 | engines: {node: '>=8'} 1619 | dependencies: 1620 | type-fest: 0.20.2 1621 | dev: true 1622 | 1623 | /globalthis@1.0.3: 1624 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1625 | engines: {node: '>= 0.4'} 1626 | dependencies: 1627 | define-properties: 1.2.1 1628 | dev: true 1629 | 1630 | /globby@11.1.0: 1631 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1632 | engines: {node: '>=10'} 1633 | dependencies: 1634 | array-union: 2.1.0 1635 | dir-glob: 3.0.1 1636 | fast-glob: 3.3.2 1637 | ignore: 5.3.1 1638 | merge2: 1.4.1 1639 | slash: 3.0.0 1640 | dev: true 1641 | 1642 | /gopd@1.0.1: 1643 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1644 | dependencies: 1645 | get-intrinsic: 1.2.4 1646 | dev: true 1647 | 1648 | /graceful-fs@4.2.11: 1649 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1650 | 1651 | /graphemer@1.4.0: 1652 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1653 | dev: true 1654 | 1655 | /hamming-distance@1.0.0: 1656 | resolution: {integrity: sha512-hYz2IIKtyuZGfOqCs7skNiFEATf+v9IUNSOaQSr6Ll4JOxxWhOvXvc3mIdCW82Z3xW+zUoto7N/ssD4bDxAWoA==} 1657 | dev: false 1658 | 1659 | /has-bigints@1.0.2: 1660 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1661 | dev: true 1662 | 1663 | /has-flag@4.0.0: 1664 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1665 | engines: {node: '>=8'} 1666 | dev: true 1667 | 1668 | /has-property-descriptors@1.0.2: 1669 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1670 | dependencies: 1671 | es-define-property: 1.0.0 1672 | dev: true 1673 | 1674 | /has-proto@1.0.3: 1675 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 1676 | engines: {node: '>= 0.4'} 1677 | dev: true 1678 | 1679 | /has-symbols@1.0.3: 1680 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1681 | engines: {node: '>= 0.4'} 1682 | dev: true 1683 | 1684 | /has-tostringtag@1.0.2: 1685 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1686 | engines: {node: '>= 0.4'} 1687 | dependencies: 1688 | has-symbols: 1.0.3 1689 | dev: true 1690 | 1691 | /hasown@2.0.2: 1692 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1693 | engines: {node: '>= 0.4'} 1694 | dependencies: 1695 | function-bind: 1.1.2 1696 | dev: true 1697 | 1698 | /ignore@5.3.1: 1699 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 1700 | engines: {node: '>= 4'} 1701 | dev: true 1702 | 1703 | /imagekit-javascript@3.0.0: 1704 | resolution: {integrity: sha512-39Q54v1fwRlCYnVyalfRi9UFuUq4t+vnktWUzqjBHRguOB+wLNnAEuPbNbm0NUBJAUw5He4C1k/0vbNLOvU/4g==} 1705 | dev: false 1706 | 1707 | /imagekit@5.0.0: 1708 | resolution: {integrity: sha512-BrWk2/16xcL1/p9SuphsDPlIV5U8165ZnhaVL87ze00dIf+1lyKXAFCImGYqSjtgjn2gQnrNmFaCSyWNaHvmhQ==} 1709 | engines: {node: '>=12.0.0'} 1710 | dependencies: 1711 | axios: 1.6.8 1712 | form-data: 4.0.0 1713 | hamming-distance: 1.0.0 1714 | lodash: 4.17.21 1715 | tslib: 2.6.2 1716 | uuid: 8.3.2 1717 | transitivePeerDependencies: 1718 | - debug 1719 | dev: false 1720 | 1721 | /imagekitio-react@4.0.0(react-dom@18.2.0)(react@18.2.0): 1722 | resolution: {integrity: sha512-O7dsPnAb92JCtHsl8RqOAYq8uhJR98VgC+ddHXNStaS6Frj6u4pQ4ftdtISfh8AMnZj/celnsdv0qOuj81RHhw==} 1723 | peerDependencies: 1724 | react: ^16.13.1 || ^17.0.0 || ^18.0.0 1725 | react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 1726 | dependencies: 1727 | imagekit-javascript: 3.0.0 1728 | prop-types: 15.8.1 1729 | react: 18.2.0 1730 | react-dom: 18.2.0(react@18.2.0) 1731 | dev: false 1732 | 1733 | /import-fresh@3.3.0: 1734 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1735 | engines: {node: '>=6'} 1736 | dependencies: 1737 | parent-module: 1.0.1 1738 | resolve-from: 4.0.0 1739 | dev: true 1740 | 1741 | /imurmurhash@0.1.4: 1742 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1743 | engines: {node: '>=0.8.19'} 1744 | dev: true 1745 | 1746 | /inflight@1.0.6: 1747 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1748 | dependencies: 1749 | once: 1.4.0 1750 | wrappy: 1.0.2 1751 | dev: true 1752 | 1753 | /inherits@2.0.4: 1754 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1755 | dev: true 1756 | 1757 | /internal-slot@1.0.7: 1758 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 1759 | engines: {node: '>= 0.4'} 1760 | dependencies: 1761 | es-errors: 1.3.0 1762 | hasown: 2.0.2 1763 | side-channel: 1.0.6 1764 | dev: true 1765 | 1766 | /is-array-buffer@3.0.4: 1767 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 1768 | engines: {node: '>= 0.4'} 1769 | dependencies: 1770 | call-bind: 1.0.7 1771 | get-intrinsic: 1.2.4 1772 | dev: true 1773 | 1774 | /is-async-function@2.0.0: 1775 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 1776 | engines: {node: '>= 0.4'} 1777 | dependencies: 1778 | has-tostringtag: 1.0.2 1779 | dev: true 1780 | 1781 | /is-bigint@1.0.4: 1782 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1783 | dependencies: 1784 | has-bigints: 1.0.2 1785 | dev: true 1786 | 1787 | /is-binary-path@2.1.0: 1788 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1789 | engines: {node: '>=8'} 1790 | dependencies: 1791 | binary-extensions: 2.3.0 1792 | dev: true 1793 | 1794 | /is-boolean-object@1.1.2: 1795 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1796 | engines: {node: '>= 0.4'} 1797 | dependencies: 1798 | call-bind: 1.0.7 1799 | has-tostringtag: 1.0.2 1800 | dev: true 1801 | 1802 | /is-callable@1.2.7: 1803 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1804 | engines: {node: '>= 0.4'} 1805 | dev: true 1806 | 1807 | /is-core-module@2.13.1: 1808 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1809 | dependencies: 1810 | hasown: 2.0.2 1811 | dev: true 1812 | 1813 | /is-data-view@1.0.1: 1814 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 1815 | engines: {node: '>= 0.4'} 1816 | dependencies: 1817 | is-typed-array: 1.1.13 1818 | dev: true 1819 | 1820 | /is-date-object@1.0.5: 1821 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1822 | engines: {node: '>= 0.4'} 1823 | dependencies: 1824 | has-tostringtag: 1.0.2 1825 | dev: true 1826 | 1827 | /is-extglob@2.1.1: 1828 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1829 | engines: {node: '>=0.10.0'} 1830 | dev: true 1831 | 1832 | /is-finalizationregistry@1.0.2: 1833 | resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} 1834 | dependencies: 1835 | call-bind: 1.0.7 1836 | dev: true 1837 | 1838 | /is-fullwidth-code-point@3.0.0: 1839 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1840 | engines: {node: '>=8'} 1841 | dev: true 1842 | 1843 | /is-generator-function@1.0.10: 1844 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 1845 | engines: {node: '>= 0.4'} 1846 | dependencies: 1847 | has-tostringtag: 1.0.2 1848 | dev: true 1849 | 1850 | /is-glob@4.0.3: 1851 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1852 | engines: {node: '>=0.10.0'} 1853 | dependencies: 1854 | is-extglob: 2.1.1 1855 | dev: true 1856 | 1857 | /is-map@2.0.3: 1858 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1859 | engines: {node: '>= 0.4'} 1860 | dev: true 1861 | 1862 | /is-negative-zero@2.0.3: 1863 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 1864 | engines: {node: '>= 0.4'} 1865 | dev: true 1866 | 1867 | /is-number-object@1.0.7: 1868 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1869 | engines: {node: '>= 0.4'} 1870 | dependencies: 1871 | has-tostringtag: 1.0.2 1872 | dev: true 1873 | 1874 | /is-number@7.0.0: 1875 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1876 | engines: {node: '>=0.12.0'} 1877 | dev: true 1878 | 1879 | /is-path-inside@3.0.3: 1880 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1881 | engines: {node: '>=8'} 1882 | dev: true 1883 | 1884 | /is-regex@1.1.4: 1885 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1886 | engines: {node: '>= 0.4'} 1887 | dependencies: 1888 | call-bind: 1.0.7 1889 | has-tostringtag: 1.0.2 1890 | dev: true 1891 | 1892 | /is-set@2.0.3: 1893 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1894 | engines: {node: '>= 0.4'} 1895 | dev: true 1896 | 1897 | /is-shared-array-buffer@1.0.3: 1898 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 1899 | engines: {node: '>= 0.4'} 1900 | dependencies: 1901 | call-bind: 1.0.7 1902 | dev: true 1903 | 1904 | /is-string@1.0.7: 1905 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1906 | engines: {node: '>= 0.4'} 1907 | dependencies: 1908 | has-tostringtag: 1.0.2 1909 | dev: true 1910 | 1911 | /is-symbol@1.0.4: 1912 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1913 | engines: {node: '>= 0.4'} 1914 | dependencies: 1915 | has-symbols: 1.0.3 1916 | dev: true 1917 | 1918 | /is-typed-array@1.1.13: 1919 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 1920 | engines: {node: '>= 0.4'} 1921 | dependencies: 1922 | which-typed-array: 1.1.15 1923 | dev: true 1924 | 1925 | /is-weakmap@2.0.2: 1926 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1927 | engines: {node: '>= 0.4'} 1928 | dev: true 1929 | 1930 | /is-weakref@1.0.2: 1931 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1932 | dependencies: 1933 | call-bind: 1.0.7 1934 | dev: true 1935 | 1936 | /is-weakset@2.0.3: 1937 | resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} 1938 | engines: {node: '>= 0.4'} 1939 | dependencies: 1940 | call-bind: 1.0.7 1941 | get-intrinsic: 1.2.4 1942 | dev: true 1943 | 1944 | /isarray@2.0.5: 1945 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1946 | dev: true 1947 | 1948 | /isexe@2.0.0: 1949 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1950 | dev: true 1951 | 1952 | /iterator.prototype@1.1.2: 1953 | resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} 1954 | dependencies: 1955 | define-properties: 1.2.1 1956 | get-intrinsic: 1.2.4 1957 | has-symbols: 1.0.3 1958 | reflect.getprototypeof: 1.0.6 1959 | set-function-name: 2.0.2 1960 | dev: true 1961 | 1962 | /jackspeak@2.3.6: 1963 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 1964 | engines: {node: '>=14'} 1965 | dependencies: 1966 | '@isaacs/cliui': 8.0.2 1967 | optionalDependencies: 1968 | '@pkgjs/parseargs': 0.11.0 1969 | dev: true 1970 | 1971 | /jiti@1.21.0: 1972 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 1973 | hasBin: true 1974 | dev: true 1975 | 1976 | /jose@4.15.5: 1977 | resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} 1978 | dev: false 1979 | 1980 | /js-tokens@4.0.0: 1981 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1982 | 1983 | /js-yaml@4.1.0: 1984 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1985 | hasBin: true 1986 | dependencies: 1987 | argparse: 2.0.1 1988 | dev: true 1989 | 1990 | /json-buffer@3.0.1: 1991 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1992 | dev: true 1993 | 1994 | /json-schema-traverse@0.4.1: 1995 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1996 | dev: true 1997 | 1998 | /json-stable-stringify-without-jsonify@1.0.1: 1999 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2000 | dev: true 2001 | 2002 | /json5@1.0.2: 2003 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 2004 | hasBin: true 2005 | dependencies: 2006 | minimist: 1.2.8 2007 | dev: true 2008 | 2009 | /jsx-ast-utils@3.3.5: 2010 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 2011 | engines: {node: '>=4.0'} 2012 | dependencies: 2013 | array-includes: 3.1.8 2014 | array.prototype.flat: 1.3.2 2015 | object.assign: 4.1.5 2016 | object.values: 1.2.0 2017 | dev: true 2018 | 2019 | /kareem@2.5.1: 2020 | resolution: {integrity: sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==} 2021 | engines: {node: '>=12.0.0'} 2022 | dev: false 2023 | 2024 | /keyv@4.5.4: 2025 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 2026 | dependencies: 2027 | json-buffer: 3.0.1 2028 | dev: true 2029 | 2030 | /language-subtag-registry@0.3.22: 2031 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} 2032 | dev: true 2033 | 2034 | /language-tags@1.0.9: 2035 | resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} 2036 | engines: {node: '>=0.10'} 2037 | dependencies: 2038 | language-subtag-registry: 0.3.22 2039 | dev: true 2040 | 2041 | /levn@0.4.1: 2042 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2043 | engines: {node: '>= 0.8.0'} 2044 | dependencies: 2045 | prelude-ls: 1.2.1 2046 | type-check: 0.4.0 2047 | dev: true 2048 | 2049 | /lilconfig@2.1.0: 2050 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 2051 | engines: {node: '>=10'} 2052 | dev: true 2053 | 2054 | /lilconfig@3.1.1: 2055 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} 2056 | engines: {node: '>=14'} 2057 | dev: true 2058 | 2059 | /lines-and-columns@1.2.4: 2060 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2061 | dev: true 2062 | 2063 | /locate-path@6.0.0: 2064 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2065 | engines: {node: '>=10'} 2066 | dependencies: 2067 | p-locate: 5.0.0 2068 | dev: true 2069 | 2070 | /lodash.merge@4.6.2: 2071 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2072 | dev: true 2073 | 2074 | /lodash@4.17.21: 2075 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 2076 | dev: false 2077 | 2078 | /loose-envify@1.4.0: 2079 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 2080 | hasBin: true 2081 | dependencies: 2082 | js-tokens: 4.0.0 2083 | 2084 | /lru-cache@10.2.0: 2085 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} 2086 | engines: {node: 14 || >=16.14} 2087 | dev: true 2088 | 2089 | /lru-cache@6.0.0: 2090 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2091 | engines: {node: '>=10'} 2092 | dependencies: 2093 | yallist: 4.0.0 2094 | 2095 | /memory-pager@1.5.0: 2096 | resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} 2097 | dev: false 2098 | 2099 | /merge2@1.4.1: 2100 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2101 | engines: {node: '>= 8'} 2102 | dev: true 2103 | 2104 | /micromatch@4.0.5: 2105 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2106 | engines: {node: '>=8.6'} 2107 | dependencies: 2108 | braces: 3.0.2 2109 | picomatch: 2.3.1 2110 | dev: true 2111 | 2112 | /mime-db@1.52.0: 2113 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2114 | engines: {node: '>= 0.6'} 2115 | dev: false 2116 | 2117 | /mime-types@2.1.35: 2118 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2119 | engines: {node: '>= 0.6'} 2120 | dependencies: 2121 | mime-db: 1.52.0 2122 | dev: false 2123 | 2124 | /minimatch@3.1.2: 2125 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2126 | dependencies: 2127 | brace-expansion: 1.1.11 2128 | dev: true 2129 | 2130 | /minimatch@9.0.3: 2131 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 2132 | engines: {node: '>=16 || 14 >=14.17'} 2133 | dependencies: 2134 | brace-expansion: 2.0.1 2135 | dev: true 2136 | 2137 | /minimist@1.2.8: 2138 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2139 | dev: true 2140 | 2141 | /minipass@7.0.4: 2142 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} 2143 | engines: {node: '>=16 || 14 >=14.17'} 2144 | dev: true 2145 | 2146 | /mongodb-connection-string-url@3.0.0: 2147 | resolution: {integrity: sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==} 2148 | dependencies: 2149 | '@types/whatwg-url': 11.0.4 2150 | whatwg-url: 13.0.0 2151 | dev: false 2152 | 2153 | /mongodb@6.3.0: 2154 | resolution: {integrity: sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==} 2155 | engines: {node: '>=16.20.1'} 2156 | peerDependencies: 2157 | '@aws-sdk/credential-providers': ^3.188.0 2158 | '@mongodb-js/zstd': ^1.1.0 2159 | gcp-metadata: ^5.2.0 2160 | kerberos: ^2.0.1 2161 | mongodb-client-encryption: '>=6.0.0 <7' 2162 | snappy: ^7.2.2 2163 | socks: ^2.7.1 2164 | peerDependenciesMeta: 2165 | '@aws-sdk/credential-providers': 2166 | optional: true 2167 | '@mongodb-js/zstd': 2168 | optional: true 2169 | gcp-metadata: 2170 | optional: true 2171 | kerberos: 2172 | optional: true 2173 | mongodb-client-encryption: 2174 | optional: true 2175 | snappy: 2176 | optional: true 2177 | socks: 2178 | optional: true 2179 | dependencies: 2180 | '@mongodb-js/saslprep': 1.1.5 2181 | bson: 6.5.0 2182 | mongodb-connection-string-url: 3.0.0 2183 | dev: false 2184 | 2185 | /mongoose@8.2.4: 2186 | resolution: {integrity: sha512-da/r6zpG+2eAXuhBGUnL6jcBd03zlytoCc5/wq+LyTsmrY9hhPQmSpnugwnfqldtBmUOhB6iMLoV4hNtHRq+ww==} 2187 | engines: {node: '>=16.20.1'} 2188 | dependencies: 2189 | bson: 6.5.0 2190 | kareem: 2.5.1 2191 | mongodb: 6.3.0 2192 | mpath: 0.9.0 2193 | mquery: 5.0.0 2194 | ms: 2.1.3 2195 | sift: 16.0.1 2196 | transitivePeerDependencies: 2197 | - '@aws-sdk/credential-providers' 2198 | - '@mongodb-js/zstd' 2199 | - gcp-metadata 2200 | - kerberos 2201 | - mongodb-client-encryption 2202 | - snappy 2203 | - socks 2204 | - supports-color 2205 | dev: false 2206 | 2207 | /mpath@0.9.0: 2208 | resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} 2209 | engines: {node: '>=4.0.0'} 2210 | dev: false 2211 | 2212 | /mquery@5.0.0: 2213 | resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} 2214 | engines: {node: '>=14.0.0'} 2215 | dependencies: 2216 | debug: 4.3.4 2217 | transitivePeerDependencies: 2218 | - supports-color 2219 | dev: false 2220 | 2221 | /ms@2.1.2: 2222 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2223 | 2224 | /ms@2.1.3: 2225 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2226 | 2227 | /mz@2.7.0: 2228 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 2229 | dependencies: 2230 | any-promise: 1.3.0 2231 | object-assign: 4.1.1 2232 | thenify-all: 1.6.0 2233 | dev: true 2234 | 2235 | /nanoid@3.3.7: 2236 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 2237 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2238 | hasBin: true 2239 | 2240 | /natural-compare@1.4.0: 2241 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2242 | dev: true 2243 | 2244 | /next-auth@4.24.7(next@14.1.4)(react-dom@18.2.0)(react@18.2.0): 2245 | resolution: {integrity: sha512-iChjE8ov/1K/z98gdKbn2Jw+2vLgJtVV39X+rCP5SGnVQuco7QOr19FRNGMIrD8d3LYhHWV9j9sKLzq1aDWWQQ==} 2246 | peerDependencies: 2247 | next: ^12.2.5 || ^13 || ^14 2248 | nodemailer: ^6.6.5 2249 | react: ^17.0.2 || ^18 2250 | react-dom: ^17.0.2 || ^18 2251 | peerDependenciesMeta: 2252 | nodemailer: 2253 | optional: true 2254 | dependencies: 2255 | '@babel/runtime': 7.24.1 2256 | '@panva/hkdf': 1.1.1 2257 | cookie: 0.5.0 2258 | jose: 4.15.5 2259 | next: 14.1.4(react-dom@18.2.0)(react@18.2.0) 2260 | oauth: 0.9.15 2261 | openid-client: 5.6.5 2262 | preact: 10.20.1 2263 | preact-render-to-string: 5.2.6(preact@10.20.1) 2264 | react: 18.2.0 2265 | react-dom: 18.2.0(react@18.2.0) 2266 | uuid: 8.3.2 2267 | dev: false 2268 | 2269 | /next@14.1.4(react-dom@18.2.0)(react@18.2.0): 2270 | resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} 2271 | engines: {node: '>=18.17.0'} 2272 | hasBin: true 2273 | peerDependencies: 2274 | '@opentelemetry/api': ^1.1.0 2275 | react: ^18.2.0 2276 | react-dom: ^18.2.0 2277 | sass: ^1.3.0 2278 | peerDependenciesMeta: 2279 | '@opentelemetry/api': 2280 | optional: true 2281 | sass: 2282 | optional: true 2283 | dependencies: 2284 | '@next/env': 14.1.4 2285 | '@swc/helpers': 0.5.2 2286 | busboy: 1.6.0 2287 | caniuse-lite: 1.0.30001600 2288 | graceful-fs: 4.2.11 2289 | postcss: 8.4.31 2290 | react: 18.2.0 2291 | react-dom: 18.2.0(react@18.2.0) 2292 | styled-jsx: 5.1.1(react@18.2.0) 2293 | optionalDependencies: 2294 | '@next/swc-darwin-arm64': 14.1.4 2295 | '@next/swc-darwin-x64': 14.1.4 2296 | '@next/swc-linux-arm64-gnu': 14.1.4 2297 | '@next/swc-linux-arm64-musl': 14.1.4 2298 | '@next/swc-linux-x64-gnu': 14.1.4 2299 | '@next/swc-linux-x64-musl': 14.1.4 2300 | '@next/swc-win32-arm64-msvc': 14.1.4 2301 | '@next/swc-win32-ia32-msvc': 14.1.4 2302 | '@next/swc-win32-x64-msvc': 14.1.4 2303 | transitivePeerDependencies: 2304 | - '@babel/core' 2305 | - babel-plugin-macros 2306 | dev: false 2307 | 2308 | /node-releases@2.0.14: 2309 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 2310 | dev: true 2311 | 2312 | /normalize-path@3.0.0: 2313 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2314 | engines: {node: '>=0.10.0'} 2315 | dev: true 2316 | 2317 | /normalize-range@0.1.2: 2318 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 2319 | engines: {node: '>=0.10.0'} 2320 | dev: true 2321 | 2322 | /oauth@0.9.15: 2323 | resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} 2324 | dev: false 2325 | 2326 | /object-assign@4.1.1: 2327 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2328 | engines: {node: '>=0.10.0'} 2329 | 2330 | /object-hash@2.2.0: 2331 | resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} 2332 | engines: {node: '>= 6'} 2333 | dev: false 2334 | 2335 | /object-hash@3.0.0: 2336 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 2337 | engines: {node: '>= 6'} 2338 | dev: true 2339 | 2340 | /object-inspect@1.13.1: 2341 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 2342 | dev: true 2343 | 2344 | /object-keys@1.1.1: 2345 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2346 | engines: {node: '>= 0.4'} 2347 | dev: true 2348 | 2349 | /object.assign@4.1.5: 2350 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 2351 | engines: {node: '>= 0.4'} 2352 | dependencies: 2353 | call-bind: 1.0.7 2354 | define-properties: 1.2.1 2355 | has-symbols: 1.0.3 2356 | object-keys: 1.1.1 2357 | dev: true 2358 | 2359 | /object.entries@1.1.8: 2360 | resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} 2361 | engines: {node: '>= 0.4'} 2362 | dependencies: 2363 | call-bind: 1.0.7 2364 | define-properties: 1.2.1 2365 | es-object-atoms: 1.0.0 2366 | dev: true 2367 | 2368 | /object.fromentries@2.0.8: 2369 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 2370 | engines: {node: '>= 0.4'} 2371 | dependencies: 2372 | call-bind: 1.0.7 2373 | define-properties: 1.2.1 2374 | es-abstract: 1.23.2 2375 | es-object-atoms: 1.0.0 2376 | dev: true 2377 | 2378 | /object.groupby@1.0.3: 2379 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 2380 | engines: {node: '>= 0.4'} 2381 | dependencies: 2382 | call-bind: 1.0.7 2383 | define-properties: 1.2.1 2384 | es-abstract: 1.23.2 2385 | dev: true 2386 | 2387 | /object.hasown@1.1.4: 2388 | resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} 2389 | engines: {node: '>= 0.4'} 2390 | dependencies: 2391 | define-properties: 1.2.1 2392 | es-abstract: 1.23.2 2393 | es-object-atoms: 1.0.0 2394 | dev: true 2395 | 2396 | /object.values@1.2.0: 2397 | resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 2398 | engines: {node: '>= 0.4'} 2399 | dependencies: 2400 | call-bind: 1.0.7 2401 | define-properties: 1.2.1 2402 | es-object-atoms: 1.0.0 2403 | dev: true 2404 | 2405 | /oidc-token-hash@5.0.3: 2406 | resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} 2407 | engines: {node: ^10.13.0 || >=12.0.0} 2408 | dev: false 2409 | 2410 | /once@1.4.0: 2411 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2412 | dependencies: 2413 | wrappy: 1.0.2 2414 | dev: true 2415 | 2416 | /openid-client@5.6.5: 2417 | resolution: {integrity: sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==} 2418 | dependencies: 2419 | jose: 4.15.5 2420 | lru-cache: 6.0.0 2421 | object-hash: 2.2.0 2422 | oidc-token-hash: 5.0.3 2423 | dev: false 2424 | 2425 | /optionator@0.9.3: 2426 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2427 | engines: {node: '>= 0.8.0'} 2428 | dependencies: 2429 | '@aashutoshrathi/word-wrap': 1.2.6 2430 | deep-is: 0.1.4 2431 | fast-levenshtein: 2.0.6 2432 | levn: 0.4.1 2433 | prelude-ls: 1.2.1 2434 | type-check: 0.4.0 2435 | dev: true 2436 | 2437 | /p-limit@3.1.0: 2438 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2439 | engines: {node: '>=10'} 2440 | dependencies: 2441 | yocto-queue: 0.1.0 2442 | dev: true 2443 | 2444 | /p-locate@5.0.0: 2445 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2446 | engines: {node: '>=10'} 2447 | dependencies: 2448 | p-limit: 3.1.0 2449 | dev: true 2450 | 2451 | /parent-module@1.0.1: 2452 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2453 | engines: {node: '>=6'} 2454 | dependencies: 2455 | callsites: 3.1.0 2456 | dev: true 2457 | 2458 | /path-exists@4.0.0: 2459 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2460 | engines: {node: '>=8'} 2461 | dev: true 2462 | 2463 | /path-is-absolute@1.0.1: 2464 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2465 | engines: {node: '>=0.10.0'} 2466 | dev: true 2467 | 2468 | /path-key@3.1.1: 2469 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2470 | engines: {node: '>=8'} 2471 | dev: true 2472 | 2473 | /path-parse@1.0.7: 2474 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2475 | dev: true 2476 | 2477 | /path-scurry@1.10.2: 2478 | resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} 2479 | engines: {node: '>=16 || 14 >=14.17'} 2480 | dependencies: 2481 | lru-cache: 10.2.0 2482 | minipass: 7.0.4 2483 | dev: true 2484 | 2485 | /path-type@4.0.0: 2486 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2487 | engines: {node: '>=8'} 2488 | dev: true 2489 | 2490 | /picocolors@1.0.0: 2491 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2492 | 2493 | /picomatch@2.3.1: 2494 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2495 | engines: {node: '>=8.6'} 2496 | dev: true 2497 | 2498 | /pify@2.3.0: 2499 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2500 | engines: {node: '>=0.10.0'} 2501 | dev: true 2502 | 2503 | /pirates@4.0.6: 2504 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2505 | engines: {node: '>= 6'} 2506 | dev: true 2507 | 2508 | /possible-typed-array-names@1.0.0: 2509 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 2510 | engines: {node: '>= 0.4'} 2511 | dev: true 2512 | 2513 | /postcss-import@15.1.0(postcss@8.4.38): 2514 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2515 | engines: {node: '>=14.0.0'} 2516 | peerDependencies: 2517 | postcss: ^8.0.0 2518 | dependencies: 2519 | postcss: 8.4.38 2520 | postcss-value-parser: 4.2.0 2521 | read-cache: 1.0.0 2522 | resolve: 1.22.8 2523 | dev: true 2524 | 2525 | /postcss-js@4.0.1(postcss@8.4.38): 2526 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2527 | engines: {node: ^12 || ^14 || >= 16} 2528 | peerDependencies: 2529 | postcss: ^8.4.21 2530 | dependencies: 2531 | camelcase-css: 2.0.1 2532 | postcss: 8.4.38 2533 | dev: true 2534 | 2535 | /postcss-load-config@4.0.2(postcss@8.4.38): 2536 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 2537 | engines: {node: '>= 14'} 2538 | peerDependencies: 2539 | postcss: '>=8.0.9' 2540 | ts-node: '>=9.0.0' 2541 | peerDependenciesMeta: 2542 | postcss: 2543 | optional: true 2544 | ts-node: 2545 | optional: true 2546 | dependencies: 2547 | lilconfig: 3.1.1 2548 | postcss: 8.4.38 2549 | yaml: 2.4.1 2550 | dev: true 2551 | 2552 | /postcss-nested@6.0.1(postcss@8.4.38): 2553 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2554 | engines: {node: '>=12.0'} 2555 | peerDependencies: 2556 | postcss: ^8.2.14 2557 | dependencies: 2558 | postcss: 8.4.38 2559 | postcss-selector-parser: 6.0.16 2560 | dev: true 2561 | 2562 | /postcss-selector-parser@6.0.16: 2563 | resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} 2564 | engines: {node: '>=4'} 2565 | dependencies: 2566 | cssesc: 3.0.0 2567 | util-deprecate: 1.0.2 2568 | dev: true 2569 | 2570 | /postcss-value-parser@4.2.0: 2571 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2572 | dev: true 2573 | 2574 | /postcss@8.4.31: 2575 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 2576 | engines: {node: ^10 || ^12 || >=14} 2577 | dependencies: 2578 | nanoid: 3.3.7 2579 | picocolors: 1.0.0 2580 | source-map-js: 1.2.0 2581 | dev: false 2582 | 2583 | /postcss@8.4.38: 2584 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 2585 | engines: {node: ^10 || ^12 || >=14} 2586 | dependencies: 2587 | nanoid: 3.3.7 2588 | picocolors: 1.0.0 2589 | source-map-js: 1.2.0 2590 | dev: true 2591 | 2592 | /preact-render-to-string@5.2.6(preact@10.20.1): 2593 | resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} 2594 | peerDependencies: 2595 | preact: '>=10' 2596 | dependencies: 2597 | preact: 10.20.1 2598 | pretty-format: 3.8.0 2599 | dev: false 2600 | 2601 | /preact@10.20.1: 2602 | resolution: {integrity: sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==} 2603 | dev: false 2604 | 2605 | /prelude-ls@1.2.1: 2606 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2607 | engines: {node: '>= 0.8.0'} 2608 | dev: true 2609 | 2610 | /pretty-format@3.8.0: 2611 | resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} 2612 | dev: false 2613 | 2614 | /prop-types@15.8.1: 2615 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 2616 | dependencies: 2617 | loose-envify: 1.4.0 2618 | object-assign: 4.1.1 2619 | react-is: 16.13.1 2620 | 2621 | /proxy-from-env@1.1.0: 2622 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 2623 | dev: false 2624 | 2625 | /punycode@2.3.1: 2626 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2627 | engines: {node: '>=6'} 2628 | 2629 | /queue-microtask@1.2.3: 2630 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2631 | dev: true 2632 | 2633 | /react-dom@18.2.0(react@18.2.0): 2634 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 2635 | peerDependencies: 2636 | react: ^18.2.0 2637 | dependencies: 2638 | loose-envify: 1.4.0 2639 | react: 18.2.0 2640 | scheduler: 0.23.0 2641 | dev: false 2642 | 2643 | /react-is@16.13.1: 2644 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 2645 | 2646 | /react@18.2.0: 2647 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 2648 | engines: {node: '>=0.10.0'} 2649 | dependencies: 2650 | loose-envify: 1.4.0 2651 | dev: false 2652 | 2653 | /read-cache@1.0.0: 2654 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2655 | dependencies: 2656 | pify: 2.3.0 2657 | dev: true 2658 | 2659 | /readdirp@3.6.0: 2660 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2661 | engines: {node: '>=8.10.0'} 2662 | dependencies: 2663 | picomatch: 2.3.1 2664 | dev: true 2665 | 2666 | /reflect.getprototypeof@1.0.6: 2667 | resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} 2668 | engines: {node: '>= 0.4'} 2669 | dependencies: 2670 | call-bind: 1.0.7 2671 | define-properties: 1.2.1 2672 | es-abstract: 1.23.2 2673 | es-errors: 1.3.0 2674 | get-intrinsic: 1.2.4 2675 | globalthis: 1.0.3 2676 | which-builtin-type: 1.1.3 2677 | dev: true 2678 | 2679 | /regenerator-runtime@0.14.1: 2680 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 2681 | 2682 | /regexp.prototype.flags@1.5.2: 2683 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} 2684 | engines: {node: '>= 0.4'} 2685 | dependencies: 2686 | call-bind: 1.0.7 2687 | define-properties: 1.2.1 2688 | es-errors: 1.3.0 2689 | set-function-name: 2.0.2 2690 | dev: true 2691 | 2692 | /resolve-from@4.0.0: 2693 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2694 | engines: {node: '>=4'} 2695 | dev: true 2696 | 2697 | /resolve-pkg-maps@1.0.0: 2698 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2699 | dev: true 2700 | 2701 | /resolve@1.22.8: 2702 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2703 | hasBin: true 2704 | dependencies: 2705 | is-core-module: 2.13.1 2706 | path-parse: 1.0.7 2707 | supports-preserve-symlinks-flag: 1.0.0 2708 | dev: true 2709 | 2710 | /resolve@2.0.0-next.5: 2711 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 2712 | hasBin: true 2713 | dependencies: 2714 | is-core-module: 2.13.1 2715 | path-parse: 1.0.7 2716 | supports-preserve-symlinks-flag: 1.0.0 2717 | dev: true 2718 | 2719 | /reusify@1.0.4: 2720 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2721 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2722 | dev: true 2723 | 2724 | /rimraf@3.0.2: 2725 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2726 | hasBin: true 2727 | dependencies: 2728 | glob: 7.2.3 2729 | dev: true 2730 | 2731 | /run-parallel@1.2.0: 2732 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2733 | dependencies: 2734 | queue-microtask: 1.2.3 2735 | dev: true 2736 | 2737 | /safe-array-concat@1.1.2: 2738 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 2739 | engines: {node: '>=0.4'} 2740 | dependencies: 2741 | call-bind: 1.0.7 2742 | get-intrinsic: 1.2.4 2743 | has-symbols: 1.0.3 2744 | isarray: 2.0.5 2745 | dev: true 2746 | 2747 | /safe-regex-test@1.0.3: 2748 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 2749 | engines: {node: '>= 0.4'} 2750 | dependencies: 2751 | call-bind: 1.0.7 2752 | es-errors: 1.3.0 2753 | is-regex: 1.1.4 2754 | dev: true 2755 | 2756 | /scheduler@0.23.0: 2757 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 2758 | dependencies: 2759 | loose-envify: 1.4.0 2760 | dev: false 2761 | 2762 | /semver@6.3.1: 2763 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2764 | hasBin: true 2765 | dev: true 2766 | 2767 | /semver@7.6.0: 2768 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 2769 | engines: {node: '>=10'} 2770 | hasBin: true 2771 | dependencies: 2772 | lru-cache: 6.0.0 2773 | dev: true 2774 | 2775 | /set-function-length@1.2.2: 2776 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 2777 | engines: {node: '>= 0.4'} 2778 | dependencies: 2779 | define-data-property: 1.1.4 2780 | es-errors: 1.3.0 2781 | function-bind: 1.1.2 2782 | get-intrinsic: 1.2.4 2783 | gopd: 1.0.1 2784 | has-property-descriptors: 1.0.2 2785 | dev: true 2786 | 2787 | /set-function-name@2.0.2: 2788 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 2789 | engines: {node: '>= 0.4'} 2790 | dependencies: 2791 | define-data-property: 1.1.4 2792 | es-errors: 1.3.0 2793 | functions-have-names: 1.2.3 2794 | has-property-descriptors: 1.0.2 2795 | dev: true 2796 | 2797 | /shebang-command@2.0.0: 2798 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2799 | engines: {node: '>=8'} 2800 | dependencies: 2801 | shebang-regex: 3.0.0 2802 | dev: true 2803 | 2804 | /shebang-regex@3.0.0: 2805 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2806 | engines: {node: '>=8'} 2807 | dev: true 2808 | 2809 | /side-channel@1.0.6: 2810 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 2811 | engines: {node: '>= 0.4'} 2812 | dependencies: 2813 | call-bind: 1.0.7 2814 | es-errors: 1.3.0 2815 | get-intrinsic: 1.2.4 2816 | object-inspect: 1.13.1 2817 | dev: true 2818 | 2819 | /sift@16.0.1: 2820 | resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} 2821 | dev: false 2822 | 2823 | /signal-exit@4.1.0: 2824 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2825 | engines: {node: '>=14'} 2826 | dev: true 2827 | 2828 | /slash@3.0.0: 2829 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2830 | engines: {node: '>=8'} 2831 | dev: true 2832 | 2833 | /source-map-js@1.2.0: 2834 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 2835 | engines: {node: '>=0.10.0'} 2836 | 2837 | /sparse-bitfield@3.0.3: 2838 | resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} 2839 | dependencies: 2840 | memory-pager: 1.5.0 2841 | dev: false 2842 | 2843 | /streamsearch@1.1.0: 2844 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2845 | engines: {node: '>=10.0.0'} 2846 | dev: false 2847 | 2848 | /string-width@4.2.3: 2849 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2850 | engines: {node: '>=8'} 2851 | dependencies: 2852 | emoji-regex: 8.0.0 2853 | is-fullwidth-code-point: 3.0.0 2854 | strip-ansi: 6.0.1 2855 | dev: true 2856 | 2857 | /string-width@5.1.2: 2858 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 2859 | engines: {node: '>=12'} 2860 | dependencies: 2861 | eastasianwidth: 0.2.0 2862 | emoji-regex: 9.2.2 2863 | strip-ansi: 7.1.0 2864 | dev: true 2865 | 2866 | /string.prototype.matchall@4.0.11: 2867 | resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} 2868 | engines: {node: '>= 0.4'} 2869 | dependencies: 2870 | call-bind: 1.0.7 2871 | define-properties: 1.2.1 2872 | es-abstract: 1.23.2 2873 | es-errors: 1.3.0 2874 | es-object-atoms: 1.0.0 2875 | get-intrinsic: 1.2.4 2876 | gopd: 1.0.1 2877 | has-symbols: 1.0.3 2878 | internal-slot: 1.0.7 2879 | regexp.prototype.flags: 1.5.2 2880 | set-function-name: 2.0.2 2881 | side-channel: 1.0.6 2882 | dev: true 2883 | 2884 | /string.prototype.trim@1.2.9: 2885 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 2886 | engines: {node: '>= 0.4'} 2887 | dependencies: 2888 | call-bind: 1.0.7 2889 | define-properties: 1.2.1 2890 | es-abstract: 1.23.2 2891 | es-object-atoms: 1.0.0 2892 | dev: true 2893 | 2894 | /string.prototype.trimend@1.0.8: 2895 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 2896 | dependencies: 2897 | call-bind: 1.0.7 2898 | define-properties: 1.2.1 2899 | es-object-atoms: 1.0.0 2900 | dev: true 2901 | 2902 | /string.prototype.trimstart@1.0.8: 2903 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 2904 | engines: {node: '>= 0.4'} 2905 | dependencies: 2906 | call-bind: 1.0.7 2907 | define-properties: 1.2.1 2908 | es-object-atoms: 1.0.0 2909 | dev: true 2910 | 2911 | /strip-ansi@6.0.1: 2912 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2913 | engines: {node: '>=8'} 2914 | dependencies: 2915 | ansi-regex: 5.0.1 2916 | dev: true 2917 | 2918 | /strip-ansi@7.1.0: 2919 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 2920 | engines: {node: '>=12'} 2921 | dependencies: 2922 | ansi-regex: 6.0.1 2923 | dev: true 2924 | 2925 | /strip-bom@3.0.0: 2926 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2927 | engines: {node: '>=4'} 2928 | dev: true 2929 | 2930 | /strip-json-comments@3.1.1: 2931 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2932 | engines: {node: '>=8'} 2933 | dev: true 2934 | 2935 | /styled-jsx@5.1.1(react@18.2.0): 2936 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 2937 | engines: {node: '>= 12.0.0'} 2938 | peerDependencies: 2939 | '@babel/core': '*' 2940 | babel-plugin-macros: '*' 2941 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 2942 | peerDependenciesMeta: 2943 | '@babel/core': 2944 | optional: true 2945 | babel-plugin-macros: 2946 | optional: true 2947 | dependencies: 2948 | client-only: 0.0.1 2949 | react: 18.2.0 2950 | dev: false 2951 | 2952 | /sucrase@3.35.0: 2953 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 2954 | engines: {node: '>=16 || 14 >=14.17'} 2955 | hasBin: true 2956 | dependencies: 2957 | '@jridgewell/gen-mapping': 0.3.5 2958 | commander: 4.1.1 2959 | glob: 10.3.10 2960 | lines-and-columns: 1.2.4 2961 | mz: 2.7.0 2962 | pirates: 4.0.6 2963 | ts-interface-checker: 0.1.13 2964 | dev: true 2965 | 2966 | /supports-color@7.2.0: 2967 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2968 | engines: {node: '>=8'} 2969 | dependencies: 2970 | has-flag: 4.0.0 2971 | dev: true 2972 | 2973 | /supports-preserve-symlinks-flag@1.0.0: 2974 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2975 | engines: {node: '>= 0.4'} 2976 | dev: true 2977 | 2978 | /tailwindcss@3.4.3: 2979 | resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} 2980 | engines: {node: '>=14.0.0'} 2981 | hasBin: true 2982 | dependencies: 2983 | '@alloc/quick-lru': 5.2.0 2984 | arg: 5.0.2 2985 | chokidar: 3.6.0 2986 | didyoumean: 1.2.2 2987 | dlv: 1.1.3 2988 | fast-glob: 3.3.2 2989 | glob-parent: 6.0.2 2990 | is-glob: 4.0.3 2991 | jiti: 1.21.0 2992 | lilconfig: 2.1.0 2993 | micromatch: 4.0.5 2994 | normalize-path: 3.0.0 2995 | object-hash: 3.0.0 2996 | picocolors: 1.0.0 2997 | postcss: 8.4.38 2998 | postcss-import: 15.1.0(postcss@8.4.38) 2999 | postcss-js: 4.0.1(postcss@8.4.38) 3000 | postcss-load-config: 4.0.2(postcss@8.4.38) 3001 | postcss-nested: 6.0.1(postcss@8.4.38) 3002 | postcss-selector-parser: 6.0.16 3003 | resolve: 1.22.8 3004 | sucrase: 3.35.0 3005 | transitivePeerDependencies: 3006 | - ts-node 3007 | dev: true 3008 | 3009 | /tapable@2.2.1: 3010 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 3011 | engines: {node: '>=6'} 3012 | dev: true 3013 | 3014 | /text-table@0.2.0: 3015 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 3016 | dev: true 3017 | 3018 | /thenify-all@1.6.0: 3019 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 3020 | engines: {node: '>=0.8'} 3021 | dependencies: 3022 | thenify: 3.3.1 3023 | dev: true 3024 | 3025 | /thenify@3.3.1: 3026 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 3027 | dependencies: 3028 | any-promise: 1.3.0 3029 | dev: true 3030 | 3031 | /to-regex-range@5.0.1: 3032 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3033 | engines: {node: '>=8.0'} 3034 | dependencies: 3035 | is-number: 7.0.0 3036 | dev: true 3037 | 3038 | /tr46@4.1.1: 3039 | resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} 3040 | engines: {node: '>=14'} 3041 | dependencies: 3042 | punycode: 2.3.1 3043 | dev: false 3044 | 3045 | /ts-api-utils@1.3.0(typescript@5.4.3): 3046 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 3047 | engines: {node: '>=16'} 3048 | peerDependencies: 3049 | typescript: '>=4.2.0' 3050 | dependencies: 3051 | typescript: 5.4.3 3052 | dev: true 3053 | 3054 | /ts-interface-checker@0.1.13: 3055 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 3056 | dev: true 3057 | 3058 | /tsconfig-paths@3.15.0: 3059 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 3060 | dependencies: 3061 | '@types/json5': 0.0.29 3062 | json5: 1.0.2 3063 | minimist: 1.2.8 3064 | strip-bom: 3.0.0 3065 | dev: true 3066 | 3067 | /tslib@2.6.2: 3068 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 3069 | dev: false 3070 | 3071 | /type-check@0.4.0: 3072 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3073 | engines: {node: '>= 0.8.0'} 3074 | dependencies: 3075 | prelude-ls: 1.2.1 3076 | dev: true 3077 | 3078 | /type-fest@0.20.2: 3079 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 3080 | engines: {node: '>=10'} 3081 | dev: true 3082 | 3083 | /typed-array-buffer@1.0.2: 3084 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 3085 | engines: {node: '>= 0.4'} 3086 | dependencies: 3087 | call-bind: 1.0.7 3088 | es-errors: 1.3.0 3089 | is-typed-array: 1.1.13 3090 | dev: true 3091 | 3092 | /typed-array-byte-length@1.0.1: 3093 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 3094 | engines: {node: '>= 0.4'} 3095 | dependencies: 3096 | call-bind: 1.0.7 3097 | for-each: 0.3.3 3098 | gopd: 1.0.1 3099 | has-proto: 1.0.3 3100 | is-typed-array: 1.1.13 3101 | dev: true 3102 | 3103 | /typed-array-byte-offset@1.0.2: 3104 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 3105 | engines: {node: '>= 0.4'} 3106 | dependencies: 3107 | available-typed-arrays: 1.0.7 3108 | call-bind: 1.0.7 3109 | for-each: 0.3.3 3110 | gopd: 1.0.1 3111 | has-proto: 1.0.3 3112 | is-typed-array: 1.1.13 3113 | dev: true 3114 | 3115 | /typed-array-length@1.0.6: 3116 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 3117 | engines: {node: '>= 0.4'} 3118 | dependencies: 3119 | call-bind: 1.0.7 3120 | for-each: 0.3.3 3121 | gopd: 1.0.1 3122 | has-proto: 1.0.3 3123 | is-typed-array: 1.1.13 3124 | possible-typed-array-names: 1.0.0 3125 | dev: true 3126 | 3127 | /typescript@5.4.3: 3128 | resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} 3129 | engines: {node: '>=14.17'} 3130 | hasBin: true 3131 | dev: true 3132 | 3133 | /unbox-primitive@1.0.2: 3134 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 3135 | dependencies: 3136 | call-bind: 1.0.7 3137 | has-bigints: 1.0.2 3138 | has-symbols: 1.0.3 3139 | which-boxed-primitive: 1.0.2 3140 | dev: true 3141 | 3142 | /undici-types@5.26.5: 3143 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 3144 | dev: true 3145 | 3146 | /update-browserslist-db@1.0.13(browserslist@4.23.0): 3147 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 3148 | hasBin: true 3149 | peerDependencies: 3150 | browserslist: '>= 4.21.0' 3151 | dependencies: 3152 | browserslist: 4.23.0 3153 | escalade: 3.1.2 3154 | picocolors: 1.0.0 3155 | dev: true 3156 | 3157 | /uri-js@4.4.1: 3158 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3159 | dependencies: 3160 | punycode: 2.3.1 3161 | dev: true 3162 | 3163 | /util-deprecate@1.0.2: 3164 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 3165 | dev: true 3166 | 3167 | /uuid@8.3.2: 3168 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 3169 | hasBin: true 3170 | dev: false 3171 | 3172 | /webidl-conversions@7.0.0: 3173 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 3174 | engines: {node: '>=12'} 3175 | dev: false 3176 | 3177 | /whatwg-url@13.0.0: 3178 | resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} 3179 | engines: {node: '>=16'} 3180 | dependencies: 3181 | tr46: 4.1.1 3182 | webidl-conversions: 7.0.0 3183 | dev: false 3184 | 3185 | /which-boxed-primitive@1.0.2: 3186 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 3187 | dependencies: 3188 | is-bigint: 1.0.4 3189 | is-boolean-object: 1.1.2 3190 | is-number-object: 1.0.7 3191 | is-string: 1.0.7 3192 | is-symbol: 1.0.4 3193 | dev: true 3194 | 3195 | /which-builtin-type@1.1.3: 3196 | resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} 3197 | engines: {node: '>= 0.4'} 3198 | dependencies: 3199 | function.prototype.name: 1.1.6 3200 | has-tostringtag: 1.0.2 3201 | is-async-function: 2.0.0 3202 | is-date-object: 1.0.5 3203 | is-finalizationregistry: 1.0.2 3204 | is-generator-function: 1.0.10 3205 | is-regex: 1.1.4 3206 | is-weakref: 1.0.2 3207 | isarray: 2.0.5 3208 | which-boxed-primitive: 1.0.2 3209 | which-collection: 1.0.2 3210 | which-typed-array: 1.1.15 3211 | dev: true 3212 | 3213 | /which-collection@1.0.2: 3214 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 3215 | engines: {node: '>= 0.4'} 3216 | dependencies: 3217 | is-map: 2.0.3 3218 | is-set: 2.0.3 3219 | is-weakmap: 2.0.2 3220 | is-weakset: 2.0.3 3221 | dev: true 3222 | 3223 | /which-typed-array@1.1.15: 3224 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 3225 | engines: {node: '>= 0.4'} 3226 | dependencies: 3227 | available-typed-arrays: 1.0.7 3228 | call-bind: 1.0.7 3229 | for-each: 0.3.3 3230 | gopd: 1.0.1 3231 | has-tostringtag: 1.0.2 3232 | dev: true 3233 | 3234 | /which@2.0.2: 3235 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3236 | engines: {node: '>= 8'} 3237 | hasBin: true 3238 | dependencies: 3239 | isexe: 2.0.0 3240 | dev: true 3241 | 3242 | /wrap-ansi@7.0.0: 3243 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3244 | engines: {node: '>=10'} 3245 | dependencies: 3246 | ansi-styles: 4.3.0 3247 | string-width: 4.2.3 3248 | strip-ansi: 6.0.1 3249 | dev: true 3250 | 3251 | /wrap-ansi@8.1.0: 3252 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 3253 | engines: {node: '>=12'} 3254 | dependencies: 3255 | ansi-styles: 6.2.1 3256 | string-width: 5.1.2 3257 | strip-ansi: 7.1.0 3258 | dev: true 3259 | 3260 | /wrappy@1.0.2: 3261 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3262 | dev: true 3263 | 3264 | /yallist@4.0.0: 3265 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3266 | 3267 | /yaml@2.4.1: 3268 | resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} 3269 | engines: {node: '>= 14'} 3270 | hasBin: true 3271 | dev: true 3272 | 3273 | /yocto-queue@0.1.0: 3274 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3275 | engines: {node: '>=10'} 3276 | dev: true 3277 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/actions/adActions.ts: -------------------------------------------------------------------------------- 1 | 'use server'; 2 | 3 | import {Location} from "@/components/LocationPicker"; 4 | import {authOptions} from "@/libs/authOptions"; 5 | import {AdModel} from "@/models/Ad"; 6 | import mongoose from "mongoose"; 7 | import {getServerSession} from "next-auth"; 8 | import {revalidatePath} from "next/cache"; 9 | 10 | async function connect() { 11 | return mongoose.connect(process.env.MONGODB_URL as string); 12 | } 13 | 14 | function locationObjectToMongoObject(location:Location) { 15 | return { 16 | type: "Point", 17 | coordinates: [location.lng, location.lat], 18 | }; 19 | } 20 | 21 | export async function createAd(formData: FormData) { 22 | const {files, location, ...data} = Object.fromEntries(formData); 23 | await connect(); 24 | const session = await getServerSession(authOptions); 25 | const newAdData = { 26 | ...data, 27 | files: JSON.parse(files as string), 28 | location: locationObjectToMongoObject(JSON.parse(location as string)), 29 | userEmail: session?.user?.email, 30 | }; 31 | const newAdDoc = await AdModel.create(newAdData); 32 | return JSON.parse(JSON.stringify(newAdDoc)); 33 | } 34 | 35 | export async function updateAd(formData: FormData) { 36 | const {_id, files, location, ...data} = Object.fromEntries(formData); 37 | await connect(); 38 | const session = await getServerSession(authOptions); 39 | const adDoc = await AdModel.findById(_id); 40 | if (!adDoc || adDoc.userEmail !== session?.user?.email) { 41 | return; 42 | } 43 | const adData = { 44 | ...data, 45 | files: JSON.parse(files as string), 46 | location: locationObjectToMongoObject(JSON.parse(location as string)), 47 | }; 48 | const newAdDoc = await AdModel.findByIdAndUpdate(_id, adData); 49 | revalidatePath(`/ad/`+_id); 50 | return JSON.parse(JSON.stringify(newAdDoc)); 51 | } 52 | -------------------------------------------------------------------------------- /src/app/ad/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | 'use server'; 2 | 3 | import DeleteAdButton from "@/components/DeleteAdButton"; 4 | import Gallery from "@/components/Gallery"; 5 | import LocationMap from "@/components/LocationMap"; 6 | import {authOptions} from "@/libs/authOptions"; 7 | import {connect, formatDate, formatMoney} from "@/libs/helpers"; 8 | import {AdModel} from "@/models/Ad"; 9 | import {faPencil} from "@fortawesome/free-solid-svg-icons"; 10 | import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; 11 | import {getServerSession} from "next-auth"; 12 | import Link from "next/link"; 13 | 14 | type Props = { 15 | params: { 16 | id: string; 17 | }; 18 | searchParams: {[key: string] : string}; 19 | }; 20 | 21 | export default async function SingleAdPage(args: Props) { 22 | await connect(); 23 | const adDoc = await AdModel.findById(args.params.id); 24 | const session = await getServerSession(authOptions); 25 | 26 | if (!adDoc) { 27 | return 'Not found!'; 28 | } 29 | 30 | return ( 31 |
32 |
33 | 34 |
35 |
36 |

{adDoc.title}

37 | {session && session?.user?.email === adDoc.userEmail && ( 38 |
39 | 40 | 41 | Edit 42 | 43 | 44 |
45 | )} 46 | 47 |

{formatMoney(adDoc.price)}

48 | 49 |

{adDoc.category}

50 | 51 |

{adDoc.description}

52 | 53 |

{adDoc.contact}

54 | 55 | 56 |

57 | Posted: {formatDate(adDoc.createdAt)}
58 | Last update: {formatDate(adDoc.updatedAt)} 59 |

60 |
61 |
62 | ); 63 | } -------------------------------------------------------------------------------- /src/app/api/ads/route.ts: -------------------------------------------------------------------------------- 1 | import {authOptions} from "@/libs/authOptions"; 2 | import {connect} from "@/libs/helpers"; 3 | import {Ad, AdModel} from "@/models/Ad"; 4 | import {FilterQuery, PipelineStage} from "mongoose"; 5 | import {getServerSession} from "next-auth"; 6 | 7 | export async function GET(req: Request, res: Response) { 8 | await connect(); 9 | const {searchParams} = new URL(req.url); 10 | 11 | const phrase = searchParams.get('phrase'); 12 | const category = searchParams.get('category'); 13 | const min = searchParams.get('min'); 14 | const max = searchParams.get('max'); 15 | const radius = searchParams.get('radius'); 16 | const center = searchParams.get('center'); 17 | 18 | const filter:FilterQuery = {}; 19 | const aggregationSteps:PipelineStage[] = []; 20 | if (phrase) { 21 | filter.title = {$regex: '.*'+phrase+'.*', $options: 'i'}; 22 | } 23 | if (category) { 24 | filter.category = category; 25 | } 26 | if (min && !max) filter.price = {$gte: min}; 27 | if (max && !min) filter.price = {$lte: max}; 28 | if (min && max) filter.price = {$gte: min, $lte: max}; 29 | 30 | if (radius && center) { 31 | const coords = center.split('-'); 32 | const lat = parseFloat(coords[0]); 33 | const lng = parseFloat(coords[1]); 34 | aggregationSteps.push( 35 | { 36 | $geoNear: { 37 | near: { 38 | type: 'Point', 39 | coordinates: [ lng, lat ] 40 | }, 41 | query: filter, 42 | includeLocs: 'location', 43 | distanceField: 'distance', 44 | maxDistance: parseInt(radius), 45 | spherical: true, 46 | } 47 | } 48 | ); 49 | } 50 | aggregationSteps.push({ 51 | $sort: {createdAt:-1}, 52 | }); 53 | 54 | const adsDocs = await AdModel.aggregate(aggregationSteps); 55 | return Response.json(adsDocs); 56 | } 57 | 58 | export async function DELETE(req: Request) { 59 | const url = new URL(req.url); 60 | const id = url.searchParams.get('id'); 61 | await connect(); 62 | const adDoc = await AdModel.findById(id); 63 | const session = await getServerSession(authOptions); 64 | if (!adDoc || adDoc.userEmail !== session?.user?.email) { 65 | return Response.json(false); 66 | } 67 | await AdModel.findByIdAndDelete(id); 68 | return Response.json(true); 69 | } -------------------------------------------------------------------------------- /src/app/api/auth/[...nextauth]/route.ts: -------------------------------------------------------------------------------- 1 | import {authOptions} from "@/libs/authOptions"; 2 | import NextAuth from "next-auth" 3 | 4 | const handler = NextAuth(authOptions); 5 | 6 | export { handler as GET, handler as POST } -------------------------------------------------------------------------------- /src/app/api/imagekit/auth/route.ts: -------------------------------------------------------------------------------- 1 | import {authOptions} from "@/libs/authOptions"; 2 | import {getServerSession} from "next-auth"; 3 | import ImageKit from 'imagekit'; 4 | 5 | export const GET = async () => { 6 | const session = await getServerSession(authOptions); 7 | if (!session) { 8 | return Response.json(false); 9 | } 10 | const ik = new ImageKit({ 11 | urlEndpoint: process.env.NEXT_PUBLIC_IK_ENDPOINT as string, 12 | publicKey: process.env.NEXT_PUBLIC_IK_PUBLIC_KEY as string, 13 | privateKey: process.env.IK_PRIVATE_KEY as string, 14 | }); 15 | return Response.json(ik.getAuthenticationParameters()); 16 | }; -------------------------------------------------------------------------------- /src/app/edit/[id]/page.tsx: -------------------------------------------------------------------------------- 1 | 'use server'; 2 | 3 | import AdForm from "@/components/AdForm"; 4 | import {authOptions} from "@/libs/authOptions"; 5 | import {connect} from "@/libs/helpers"; 6 | import {AdModel} from "@/models/Ad"; 7 | import {getServerSession} from "next-auth"; 8 | 9 | type Props = { 10 | params: { 11 | id: string; 12 | }; 13 | searchParams: {[key: string] : string}; 14 | }; 15 | 16 | export default async function EditPage(props:Props) { 17 | const id = props.params.id; 18 | await connect(); 19 | const session = await getServerSession(authOptions); 20 | 21 | const adDoc = await AdModel.findById(id); 22 | if (!adDoc) { 23 | return '404 not found'; 24 | } 25 | if (session?.user?.email !== adDoc?.userEmail) { 26 | return 'not yours'; 27 | } 28 | 29 | return ( 30 | 35 | ); 36 | } -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dejwid/marketplace/7fb446286ea8cd70e20eb6070c723920a76164c7/src/app/favicon.ico -------------------------------------------------------------------------------- /src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | input[type="text"], input[type="number"], select, textarea{ 6 | @apply w-full border p-2 rounded; 7 | } 8 | label{ 9 | @apply text-xs text-gray-600 font-bold uppercase block mt-4 mb-1; 10 | } 11 | label.upload-btn input[type="file"]{ 12 | @apply hidden; 13 | } 14 | 15 | label.radio-btn{ 16 | @apply has-[:checked]:bg-blue-100 rounded-md py-1 px-1 flex items-center gap-2 my-0; 17 | } 18 | label.radio-btn span.icon{ 19 | @apply size-8 rounded-full flex items-center justify-center text-gray-500; 20 | } 21 | label.radio-btn svg{ 22 | @apply h-4; 23 | } 24 | label.radio-btn{ 25 | @apply normal-case; 26 | } -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import Header from "@/components/Header"; 2 | import {authOptions} from "@/libs/authOptions"; 3 | import type { Metadata } from "next"; 4 | import {getServerSession} from "next-auth"; 5 | import { Inter } from "next/font/google"; 6 | import "./globals.css"; 7 | 8 | const inter = Inter({ subsets: ["latin"] }); 9 | 10 | export const metadata: Metadata = { 11 | title: "Marketplace", 12 | description: "My cool marketplace", 13 | }; 14 | 15 | export default async function RootLayout({ 16 | children, 17 | }: Readonly<{ 18 | children: React.ReactNode; 19 | }>) { 20 | const session = await getServerSession(authOptions); 21 | return ( 22 | 23 | 24 |
25 | {children} 26 | 27 | 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /src/app/my-ads/page.tsx: -------------------------------------------------------------------------------- 1 | 'use server'; 2 | 3 | import AdItem from "@/components/AdItem"; 4 | import {authOptions} from "@/libs/authOptions"; 5 | import {connect} from "@/libs/helpers"; 6 | import {AdModel} from "@/models/Ad"; 7 | import {getServerSession} from "next-auth"; 8 | 9 | export default async function MyAdsPage() { 10 | const session = await getServerSession(authOptions); 11 | const email = session?.user?.email; 12 | if (!email) { 13 | return 'no email found'; 14 | } 15 | await connect(); 16 | const adsDocs = await AdModel.find({userEmail:email}); 17 | return ( 18 |
19 |

Your ads

20 |
21 | {adsDocs?.map(ad => ( 22 | 23 | ))} 24 |
25 |
26 | ); 27 | } -------------------------------------------------------------------------------- /src/app/new/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import AdForm from "@/components/AdForm"; 3 | 4 | const locationDefault = { 5 | lat: 59.432226005726896, 6 | lng: 18.057839558207103, 7 | } 8 | 9 | export default function NewAdPage() { 10 | return ( 11 | 12 | ); 13 | } -------------------------------------------------------------------------------- /src/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import AdItem from "@/components/AdItem"; 3 | import SearchForm from "@/components/SearchForm"; 4 | import {defaultRadius} from "@/libs/helpers"; 5 | import {Ad} from "@/models/Ad"; 6 | import {useState} from "react"; 7 | 8 | export default function Home() { 9 | const [ads, setAds] = useState(null); 10 | const [adsParams, setAdsParams] = useState(new URLSearchParams); 11 | 12 | function fetchAds(params?:URLSearchParams) { 13 | if (!params) { 14 | params = new URLSearchParams(); 15 | } 16 | if (!params.get('center')) { 17 | return; 18 | } 19 | if (!params.has('radius')) { 20 | params.set('radius', defaultRadius.toString()); 21 | } 22 | const url = `/api/ads?${params?.toString() || ''}`; 23 | fetch(url).then(response => { 24 | response.json().then(adsDocs => { 25 | setAds(adsDocs); 26 | setAdsParams(params); 27 | }); 28 | }); 29 | } 30 | 31 | function handleSearch(formData: FormData) { 32 | const params = new URLSearchParams(); 33 | formData.forEach((value, key) => { 34 | if (typeof value === 'string') { 35 | params.set(key, value); 36 | } 37 | }); 38 | fetchAds(params); 39 | } 40 | 41 | const formDirty = adsParams.get('phrase') 42 | || adsParams.get('category') 43 | || adsParams.get('min') 44 | || adsParams.get('max'); 45 | 46 | return ( 47 |
48 | 49 |
50 |

51 | {formDirty ? 'Search results' : 'Latest ads'} 52 |

53 |
54 | {ads && ads.map(ad => ( 55 | 56 | ))} 57 |
58 | {ads && ads?.length === 0 && ( 59 |
No products found
60 | )} 61 | {ads === null && ( 62 |
Loading...
63 | )} 64 |
65 |
66 | ); 67 | } 68 | -------------------------------------------------------------------------------- /src/components/AdForm.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import {createAd, updateAd} from "@/app/actions/adActions"; 3 | import AdTextInputs, {AdTexts} from "@/components/AdTextInputs"; 4 | import LocationPicker, {Location} from "@/components/LocationPicker"; 5 | import SubmitButton from "@/components/SubmitButton"; 6 | import UploadArea from "@/components/UploadArea"; 7 | import {faLocationCrosshairs} from "@fortawesome/free-solid-svg-icons"; 8 | import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; 9 | import {UploadResponse} from "imagekit/dist/libs/interfaces"; 10 | import {redirect} from "next/navigation"; 11 | import {useState} from "react"; 12 | 13 | type Props = { 14 | id?: string | null; 15 | defaultFiles?: UploadResponse[]; 16 | defaultLocation: Location; 17 | defaultTexts?: AdTexts; 18 | }; 19 | 20 | export default function AdForm({ 21 | id = null, 22 | defaultFiles = [], 23 | defaultLocation, 24 | defaultTexts={}, 25 | }:Props) { 26 | const [files, setFiles] = useState(defaultFiles); 27 | const [location, setLocation] = useState(defaultLocation); 28 | const [gpsCoords, setGpsCoords] = useState(null); 29 | 30 | function handleFindMyPositionClick() { 31 | navigator.geolocation.getCurrentPosition(ev => { 32 | const location = {lat: ev.coords.latitude, lng: ev.coords.longitude}; 33 | setLocation(location); 34 | setGpsCoords(location); 35 | }, console.error); 36 | } 37 | 38 | async function handleSubmit(formData:FormData) { 39 | formData.set('location', JSON.stringify(location)); 40 | formData.set('files', JSON.stringify(files)); 41 | if (id) { 42 | formData.set('_id', id); 43 | } 44 | const result = id 45 | ? await updateAd(formData) 46 | : await createAd(formData); 47 | redirect('/ad/'+result._id); 48 | } 49 | 50 | return ( 51 |
54 |
55 | 56 | 57 | 58 |
59 |
60 | 61 |
62 | 68 |
69 |
70 |
71 | setLocation(location)} 75 | /> 76 |
77 |
78 |
79 | 80 |
81 | 82 | {id ? 'Save' : 'Publish'} 83 |
84 | 85 |
86 | ); 87 | } -------------------------------------------------------------------------------- /src/components/AdItem.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import UploadThumbnail from "@/components/UploadThumbnail"; 3 | import {Ad} from "@/models/Ad"; 4 | import Link from "next/link"; 5 | 6 | export default function AdItem({ad}:{ad:Ad}) { 7 | return ( 8 |
9 | {ad.files?.length > 0 && ( 10 |
11 | { 12 | }} file={ad.files[0]}/> 13 | 14 |
15 | )} 16 |
17 |

${ad.price}

18 | {ad.title} 19 |
20 |
21 | ); 22 | } -------------------------------------------------------------------------------- /src/components/AdTextInputs.tsx: -------------------------------------------------------------------------------- 1 | import {categories} from "@/libs/helpers"; 2 | 3 | export type AdTexts = { 4 | title?: string; 5 | price?: string|number; 6 | category?: string; 7 | description?: string; 8 | contact?: string; 9 | }; 10 | 11 | type Props = { 12 | defaultValues: AdTexts; 13 | }; 14 | 15 | export default function AdTextInputs({defaultValues}:Props) { 16 | return ( 17 | <> 18 | 19 | 26 | 27 | 28 | 35 | 36 | 37 | 47 | 48 | 49 | 55 | 56 | 57 | 63 | 64 | ); 65 | } -------------------------------------------------------------------------------- /src/components/DeleteAdButton.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import {faTrash} from "@fortawesome/free-solid-svg-icons"; 3 | import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; 4 | import {useRouter} from "next/navigation"; 5 | import {useState} from "react"; 6 | 7 | export default function DeleteAdButton({id}:{id:string}) { 8 | const [showDeleteQuestion, setShowDeleteQuestion] = useState(false); 9 | const router = useRouter(); 10 | 11 | function handleDelete() { 12 | fetch(`/api/ads?id=${id}`, { 13 | method: 'DELETE', 14 | }).then(() => { 15 | setShowDeleteQuestion(false); 16 | router.push('/'); 17 | }); 18 | } 19 | 20 | if (showDeleteQuestion) { 21 | return ( 22 |
23 |
24 |

Do you really want to delete this ad?

25 |
26 | 32 | 38 |
39 |
40 |
41 | ); 42 | } 43 | 44 | return ( 45 | 51 | ); 52 | } -------------------------------------------------------------------------------- /src/components/DistancePicker.tsx: -------------------------------------------------------------------------------- 1 | import {Location} from "@/components/LocationPicker"; 2 | import {Loader} from "@googlemaps/js-api-loader"; 3 | import {useEffect, useRef, useState} from "react"; 4 | 5 | export default function DistancePicker({ 6 | onChange, 7 | defaultRadius, 8 | }:{ 9 | onChange:({radius,center}:{radius:number;center:Location;}) => void; 10 | defaultRadius:number; 11 | }) { 12 | const [radius, setRadius] = useState(defaultRadius); 13 | const [center, setCenter] = useState(null); 14 | const [zoom, setZoom] = useState(7); 15 | const [geoError, setGeoError] = useState(''); 16 | const mapsDiv = useRef(null); 17 | 18 | useEffect(() => { 19 | if (center) { 20 | loadMap(); 21 | if (window && window.localStorage) { 22 | window.localStorage.setItem('center', JSON.stringify(center)); 23 | } 24 | } 25 | if (!center) { 26 | if (window && window.localStorage && window.localStorage.getItem('center')) { 27 | const centerFromLS = window.localStorage.getItem('center') || ''; 28 | setCenter(JSON.parse(centerFromLS)); 29 | } 30 | } 31 | }, [center]); 32 | 33 | useEffect(() => { 34 | if (center && radius) { 35 | onChange({center,radius}); 36 | } 37 | }, [radius,center]); 38 | 39 | useEffect(() => { 40 | navigator.geolocation.getCurrentPosition(ev => { 41 | setCenter({lat:ev.coords.latitude, lng:ev.coords.longitude}); 42 | }, err => setGeoError(err.message)); 43 | }, []); 44 | 45 | async function loadMap() { 46 | const loader = new Loader({ 47 | apiKey: process.env.NEXT_PUBLIC_MAPS_KEY as string, 48 | }); 49 | const Core = await loader.importLibrary('core'); 50 | const {Map, Circle} = await loader.importLibrary('maps'); 51 | const map = new Map(mapsDiv.current as HTMLDivElement, { 52 | mapId: 'map', 53 | center: center, 54 | zoom: zoom, 55 | mapTypeControl: false, 56 | streetViewControl: false, 57 | zoomControl: true, 58 | }); 59 | const circle = new Circle({ 60 | map, 61 | strokeColor: "#FF0000", 62 | strokeOpacity: 0.8, 63 | strokeWeight: 2, 64 | fillColor: "#FF0000", 65 | fillOpacity: 0.35, 66 | center: center, 67 | radius, 68 | editable: true, 69 | }); 70 | Core.event.addListener(circle, 'bounds_changed', () => { 71 | const radius = circle.getRadius(); 72 | setRadius(radius); 73 | if (radius > 1500000) map.setZoom(1); 74 | else if (radius > 800000) map.setZoom(2); 75 | else if (radius > 400000) map.setZoom(3); 76 | else if (radius > 180000) map.setZoom(4); 77 | else if (radius > 100000) map.setZoom(5); 78 | else if (radius > 50000) map.setZoom(6); 79 | else if (radius > 25000) map.setZoom(7); 80 | else if (radius > 11000) map.setZoom(8); 81 | else if (radius > 5000) map.setZoom(9); 82 | else if (radius <= 10000) map.setZoom(10); 83 | setZoom(map.getZoom() as number); 84 | }); 85 | Core.event.addListener(circle, 'center_changed', () => { 86 | const circleCenter:Location|undefined = circle.getCenter()?.toJSON(); 87 | if (circleCenter) { 88 | setCenter(circleCenter); 89 | map.setCenter(circleCenter); 90 | } 91 | }); 92 | } 93 | 94 | return ( 95 | <> 96 | 97 |
98 | {(!center || geoError) && ( 99 |
100 | {geoError || 'Loading map....'} 101 |
102 | )} 103 |
104 | 105 | ); 106 | } -------------------------------------------------------------------------------- /src/components/Gallery.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import MyImage from "@/components/MyImage"; 3 | import UploadThumbnail from "@/components/UploadThumbnail"; 4 | import UploadView from "@/components/UploadView"; 5 | import {faChevronLeft, faChevronRight} from "@fortawesome/free-solid-svg-icons"; 6 | import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; 7 | import {UploadResponse} from "imagekit/dist/libs/interfaces"; 8 | import {useState} from "react"; 9 | 10 | export default function Gallery({files}:{files:UploadResponse[]}) { 11 | const [activeFile, setActiveFile] = useState(files?.[0] || null); 12 | function next() { 13 | const activeFileIndex = files.findIndex(f => f.fileId === activeFile?.fileId); 14 | const nextIndex = activeFileIndex === files.length - 1 ? 0 : activeFileIndex + 1; 15 | const nextFile = files[nextIndex]; 16 | setActiveFile(nextFile); 17 | } 18 | function prev() { 19 | const activeFileIndex = files.findIndex(f => f.fileId === activeFile?.fileId); 20 | const prevIndex = activeFileIndex === 0 ? files.length - 1 : activeFileIndex - 1; 21 | const prevFile = files[prevIndex]; 22 | setActiveFile(prevFile); 23 | } 24 | return ( 25 | <> 26 | {activeFile && ( 27 |
28 | 34 |
35 | )} 36 |
37 | {activeFile && ( 38 | <> 39 |
40 | 41 |
42 |
43 |
44 | 49 | 54 |
55 |
56 | 57 | )} 58 |
59 |
60 | {files.map(file => ( 61 |
64 | setActiveFile(file)} 66 | file={file}/> 67 |
68 | ))} 69 |
70 | 71 | ); 72 | } -------------------------------------------------------------------------------- /src/components/Header.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import {faPlus} from "@fortawesome/free-solid-svg-icons"; 3 | import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; 4 | import {Session} from "next-auth"; 5 | import {signIn, signOut} from "next-auth/react"; 6 | import Image from "next/image"; 7 | import Link from "next/link"; 8 | import {useRouter} from "next/navigation"; 9 | import {useState} from "react"; 10 | 11 | export default function Header({session}:{session:Session|null}) { 12 | const router = useRouter(); 13 | const [showDropdown, setShowDropdown] = useState(false); 14 | return ( 15 |
16 | 19 | Marketplace 20 | 21 | 67 |
68 | ); 69 | } -------------------------------------------------------------------------------- /src/components/LabelRadioButton.tsx: -------------------------------------------------------------------------------- 1 | import {IconDefinition} from "@fortawesome/free-regular-svg-icons"; 2 | import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; 3 | import {ReactNode} from "react"; 4 | 5 | type Props = { 6 | name: string; 7 | value: string; 8 | icon: IconDefinition; 9 | onClick: () => void; 10 | label: ReactNode; 11 | defaultChecked?: boolean; 12 | }; 13 | 14 | export default function LabelRadioButton({ 15 | name,value,icon,onClick,label,defaultChecked=false 16 | }:Props) { 17 | return ( 18 | 32 | ); 33 | } -------------------------------------------------------------------------------- /src/components/LocationMap.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import {Loader} from "@googlemaps/js-api-loader"; 3 | import {createRef, HTMLAttributes, useEffect} from "react"; 4 | 5 | type Props = HTMLAttributes & { 6 | location: number[]; 7 | }; 8 | 9 | export default function LocationMap({location, ...divProps}:Props) { 10 | const mapsDivRef = createRef(); 11 | 12 | useEffect(() => { 13 | loadMap(); 14 | }, []); 15 | 16 | async function loadMap() { 17 | const loader = new Loader({ 18 | apiKey: process.env.NEXT_PUBLIC_MAPS_KEY as string, 19 | }); 20 | const {Map} = await loader.importLibrary('maps'); 21 | const {AdvancedMarkerElement} = await loader.importLibrary('marker'); 22 | const map = new Map(mapsDivRef.current as HTMLDivElement, { 23 | mapId: 'map', 24 | center: {lng:location[0], lat:location[1]}, 25 | zoom: 6, 26 | mapTypeControl: false, 27 | streetViewControl: false, 28 | zoomControl: true, 29 | }); 30 | new AdvancedMarkerElement({ 31 | map, 32 | position: {lng:location[0], lat:location[1]}, 33 | }); 34 | } 35 | 36 | return ( 37 | <> 38 |
39 | 40 | ); 41 | } -------------------------------------------------------------------------------- /src/components/LocationPicker.tsx: -------------------------------------------------------------------------------- 1 | 'use effect'; 2 | import {createRef, useEffect} from "react"; 3 | import { Loader } from "@googlemaps/js-api-loader"; 4 | 5 | export type Location = { 6 | lat: number; 7 | lng: number; 8 | } 9 | 10 | export default function LocationPicker({ 11 | defaultLocation, 12 | onChange, 13 | gpsCoords, 14 | }:{ 15 | defaultLocation: Location; 16 | onChange: (location: Location) => void; 17 | gpsCoords: Location|null; 18 | }) { 19 | const divRef = createRef(); 20 | 21 | async function loadMap() { 22 | const loader = new Loader({ 23 | apiKey: process.env.NEXT_PUBLIC_MAPS_KEY as string, 24 | }); 25 | const {Map} = await loader.importLibrary('maps'); 26 | const {AdvancedMarkerElement} = await loader.importLibrary('marker'); 27 | const map = new Map(divRef.current as HTMLDivElement, { 28 | mapId: 'map', 29 | center: defaultLocation, 30 | zoom: 6, 31 | mapTypeControl: false, 32 | streetViewControl: false, 33 | }); 34 | const pin = new AdvancedMarkerElement({ 35 | map, 36 | position: defaultLocation, 37 | }); 38 | map.addListener('click', (ev:any) => { 39 | pin.position = ev.latLng; 40 | const lat = ev.latLng.lat(); 41 | const lng = ev.latLng.lng(); 42 | onChange({lat, lng}); 43 | }); 44 | } 45 | 46 | useEffect(() => { 47 | loadMap(); 48 | }, [gpsCoords]); 49 | 50 | return ( 51 | <> 52 |
53 | 54 | ); 55 | } -------------------------------------------------------------------------------- /src/components/MyImage.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import Image, {ImageProps} from "next/image"; 3 | 4 | type LoaderProps = { 5 | src: string; 6 | width: number; 7 | height?: number; 8 | quality?: number | undefined 9 | aiCrop?: boolean; 10 | }; 11 | 12 | const imageKitLoader = ({ src, width, height, quality, aiCrop }: LoaderProps) => { 13 | if(src[0] === "/") src = src.slice(1); 14 | const params = [`w-${width}`]; 15 | if (height && aiCrop) { 16 | params.push(`h-${height}`); 17 | } 18 | if (quality) { 19 | params.push(`q-${quality}`); 20 | } 21 | if (aiCrop) { 22 | params.push('fo-auto'); 23 | } 24 | const paramsString = params.join(","); 25 | var urlEndpoint = process.env.NEXT_PUBLIC_IK_ENDPOINT as string; 26 | if(urlEndpoint[urlEndpoint.length-1] === "/") urlEndpoint = urlEndpoint.substring(0, urlEndpoint.length - 1); 27 | return `${urlEndpoint}/${src}?tr=${paramsString}` 28 | } 29 | 30 | type MyImageProps = ImageProps & { 31 | aiCrop?: boolean; 32 | width: number; 33 | height?: number; 34 | }; 35 | 36 | const MyImage = ({width,height,aiCrop,...props}:MyImageProps) => { 37 | return ( 38 | imageKitLoader({ 40 | ...args, 41 | width, 42 | height, 43 | aiCrop 44 | })} 45 | width={width} 46 | height={height} 47 | {...props} 48 | /> 49 | ); 50 | }; 51 | 52 | export default MyImage; -------------------------------------------------------------------------------- /src/components/SearchForm.tsx: -------------------------------------------------------------------------------- 1 | import DistancePicker from "@/components/DistancePicker"; 2 | import LabelRadioButton from "@/components/LabelRadioButton"; 3 | import {Location} from "@/components/LocationPicker"; 4 | import SubmitButton from "@/components/SubmitButton"; 5 | import {categories, defaultRadius} from "@/libs/helpers"; 6 | import {faStore} from "@fortawesome/free-solid-svg-icons"; 7 | import {useEffect, useRef, useState} from "react"; 8 | 9 | type Props = { 10 | action: (data:FormData) => void; 11 | }; 12 | 13 | export default function SearchForm({action}: Props){ 14 | const [radius, setRadius] = useState(defaultRadius); 15 | const [center, setCenter] = useState(null); 16 | const [prevCenter, setPrevCenter] = useState(null); 17 | const formRef = useRef(null); 18 | useEffect(() => { 19 | if (center && !prevCenter) { 20 | formRef.current?.requestSubmit(); 21 | setPrevCenter(center); 22 | } 23 | }, [center]); 24 | return ( 25 |
29 | 30 |
31 | formRef.current?.requestSubmit()} 36 | label={'All categories'} 37 | defaultChecked={true} 38 | /> 39 | {categories.map(({key: categoryKey, label, icon}) => ( 40 | formRef.current?.requestSubmit()} 46 | label={label} 47 | /> 48 | ))} 49 |
50 |
51 | 52 |
53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 |
61 |
62 | 63 | 64 | { 67 | setRadius(radius); 68 | setCenter(center); 69 | }}/> 70 |
71 | Search 72 |
73 | ); 74 | } -------------------------------------------------------------------------------- /src/components/SubmitButton.tsx: -------------------------------------------------------------------------------- 1 | import {ReactNode} from "react"; 2 | import {useFormStatus} from 'react-dom'; 3 | 4 | export default function SubmitButton({children}:{children:ReactNode}) { 5 | const {pending} = useFormStatus(); 6 | return ( 7 | <> 8 | 20 | 21 | ); 22 | } -------------------------------------------------------------------------------- /src/components/UploadArea.tsx: -------------------------------------------------------------------------------- 1 | import Uploader from "@/components/Uploader"; 2 | import UploadThumbnail from "@/components/UploadThumbnail"; 3 | import {faImage, faPlus} from "@fortawesome/free-solid-svg-icons"; 4 | import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; 5 | import {UploadResponse} from "imagekit/dist/libs/interfaces"; 6 | import {Dispatch, SetStateAction, useState} from "react"; 7 | 8 | type Props = { 9 | files: UploadResponse[]; 10 | setFiles: Dispatch>; 11 | }; 12 | 13 | export default function UploadArea({files,setFiles}:Props) { 14 | const [isUploading, setIsUploading] = useState(false); 15 | return ( 16 |
17 |

18 | Add photos your product 19 |

20 |
21 | 22 | 48 |
49 | {files.map(file => ( 50 |
51 | 52 |
53 | ))} 54 |
55 |
56 |
57 | ); 58 | } -------------------------------------------------------------------------------- /src/components/UploadThumbnail.tsx: -------------------------------------------------------------------------------- 1 | import MyImage from "@/components/MyImage"; 2 | import {UploadResponse} from "imagekit/dist/libs/interfaces"; 3 | import React from "react"; 4 | 5 | type Props = { 6 | file:UploadResponse; 7 | onClick?: () => void; 8 | } 9 | 10 | export default function UploadThumbnail({file,onClick}:Props) { 11 | function handleClick(ev:React.MouseEvent) { 12 | if (onClick) { 13 | ev.preventDefault(); 14 | return onClick(); 15 | } 16 | location.href = file.url; 17 | } 18 | if (file.fileType === 'image') { 19 | return ( 20 | 21 | 28 | 29 | ); 30 | } 31 | return ( 32 |
{file.url} »
33 | ); 34 | } -------------------------------------------------------------------------------- /src/components/UploadView.tsx: -------------------------------------------------------------------------------- 1 | import MyImage from "@/components/MyImage"; 2 | import {UploadResponse} from "imagekit/dist/libs/interfaces"; 3 | 4 | export default function UploadView({file}:{file:UploadResponse}) { 5 | if (file.fileType === 'image') { 6 | return ( 7 | 14 | ); 15 | } 16 | 17 | return ( 18 | <> 19 | {file.name} 20 | 21 | ); 22 | } -------------------------------------------------------------------------------- /src/components/Uploader.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import {IKContext, IKUpload} from "imagekitio-react"; 3 | import {IKUploadProps} from "imagekitio-react/src/components/IKUpload/props"; 4 | 5 | export default function Uploader(props:IKUploadProps) { 6 | return ( 7 | <> 8 | { 12 | const response = await fetch('/api/imagekit/auth'); 13 | return await response.json(); 14 | }} 15 | > 16 | 17 | 18 | 19 | ); 20 | } -------------------------------------------------------------------------------- /src/libs/authOptions.ts: -------------------------------------------------------------------------------- 1 | import GoogleProvider from "next-auth/providers/google"; 2 | 3 | export const authOptions = { 4 | secret: process.env.SECRET, 5 | providers: [ 6 | GoogleProvider({ 7 | clientId: process.env.GOOGLE_CLIENT_ID as string, 8 | clientSecret: process.env.GOOGLE_CLIENT_SECRET as string, 9 | }), 10 | ], 11 | }; -------------------------------------------------------------------------------- /src/libs/helpers.ts: -------------------------------------------------------------------------------- 1 | import {faCar, faHome, faMobile, faTshirt} from "@fortawesome/free-solid-svg-icons"; 2 | import mongoose from "mongoose"; 3 | 4 | export async function connect() { 5 | return mongoose.connect(process.env.MONGODB_URL as string); 6 | } 7 | 8 | export const categories = [ 9 | {key:'cars', label:'Cars', icon: faCar}, 10 | {key:'electronics', label:'Electronics', icon: faMobile}, 11 | {key:'clothes', label:'Clothes', icon: faTshirt}, 12 | // {key:'properties', label:'Properties', icon: faHome}, 13 | ]; 14 | 15 | export function formatMoney(amount: number): string { 16 | return '$' + Intl.NumberFormat('US', {currency: 'USD'}).format(amount); 17 | } 18 | 19 | export function formatDate(date: Date):string { 20 | return date.toLocaleDateString() + ' ' + date.toLocaleTimeString(); 21 | } 22 | 23 | export const defaultRadius = 50 * 1000; -------------------------------------------------------------------------------- /src/models/Ad.ts: -------------------------------------------------------------------------------- 1 | import {UploadResponse} from "imagekit/dist/libs/interfaces"; 2 | import {Model, model, models, Schema} from "mongoose"; 3 | 4 | export type Ad = { 5 | _id: string; 6 | title: string; 7 | price: number; 8 | category: string; 9 | description: string; 10 | contact: string; 11 | files: UploadResponse[]; 12 | location: { 13 | type: string; 14 | coordinates: number[]; 15 | }, 16 | userEmail: string; 17 | createdAt: Date; 18 | updatedAt: Date; 19 | }; 20 | 21 | const adSchema = new Schema({ 22 | title: String, 23 | price: Number, 24 | category: String, 25 | description: String, 26 | contact: String, 27 | files: [Object], 28 | location: Object, 29 | userEmail: {type: String, required: true}, 30 | }, { 31 | timestamps: true, 32 | }); 33 | 34 | adSchema.index({location:'2dsphere'}); 35 | 36 | export const AdModel = (models?.Ad as Model) || model('Ad', adSchema); -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | const config: Config = { 4 | content: [ 5 | "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./src/components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./src/app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", 13 | "gradient-conic": 14 | "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | }; 20 | export default config; 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["dom", "dom.iterable", "esnext"], 4 | "allowJs": true, 5 | "skipLibCheck": true, 6 | "strict": true, 7 | "noEmit": true, 8 | "esModuleInterop": true, 9 | "module": "esnext", 10 | "moduleResolution": "bundler", 11 | "resolveJsonModule": true, 12 | "isolatedModules": true, 13 | "jsx": "preserve", 14 | "incremental": true, 15 | "plugins": [ 16 | { 17 | "name": "next" 18 | } 19 | ], 20 | "paths": { 21 | "@/*": ["./src/*"] 22 | } 23 | }, 24 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 25 | "exclude": ["node_modules"] 26 | } 27 | --------------------------------------------------------------------------------