From 3ed12c8db0366c8b7691bdddbb24b75fa5aded93 Mon Sep 17 00:00:00 2001 From: ErkiKadhafi Date: Fri, 17 Jan 2025 09:41:09 +0700 Subject: [PATCH] finish project --- package-lock.json | 4456 ++++++++++++++++- package.json | 7 + public/empty-data.jpg | Bin 0 -> 178288 bytes src/app/(auth)/layout.tsx | 11 - src/app/(auth)/login/page.tsx | 76 - src/app/(auth)/signup/page.tsx | 64 - .../[agentId]/_components/ask-agent-card.tsx | 238 + .../_components/response-agent-card.tsx | 131 + .../agents/[agentId]/_components/title.tsx | 19 + src/app/(main)/agents/[agentId]/page.tsx | 34 + .../[agentId]/responses/[responseId]/page.tsx | 38 + .../agents/create/_components/agent-form.tsx | 110 + .../create/_components/form-stepper.tsx | 350 ++ .../agents/create/_components/title.tsx | 19 + src/app/(main)/agents/create/page.tsx | 27 + .../create/schemas/create-agent-schema.tsx | 40 + .../(main)/explore/_components/agent-card.tsx | 259 +- .../(main)/explore/_components/agent-list.tsx | 183 +- src/app/(main)/explore/page.tsx | 13 +- src/app/(marketing)/blog/[slug]/page.tsx | 135 - src/app/(marketing)/blog/layout.tsx | 16 - src/app/(marketing)/blog/page.tsx | 39 - src/app/layout.tsx | 28 +- src/components/card-background.tsx | 31 + src/components/drawer.tsx | 29 +- src/components/sections/cta.tsx | 2 +- src/components/sections/header.tsx | 211 +- src/components/sections/hero.tsx | 2 +- src/components/sections/stats.tsx | 47 + src/components/ui/animated-grid-pattern.tsx | 148 + src/components/ui/avatar.tsx | 50 + src/components/ui/confetti.tsx | 149 + src/components/ui/dropdown-menu.tsx | 200 + src/components/ui/meteors.tsx | 43 + src/components/ui/separator.tsx | 31 + src/components/ui/shine-border.tsx | 61 + src/components/ui/sparkles-text.tsx | 152 + src/lib/config.tsx | 19 + src/lib/utils.ts | 5 + src/providers/privy-provider.tsx | 49 + src/providers/react-query-provider.tsx | 46 +- src/utils/supabase/database.types.ts | 37 +- tailwind.config.ts | 218 +- 43 files changed, 6978 insertions(+), 845 deletions(-) create mode 100644 public/empty-data.jpg delete mode 100644 src/app/(auth)/layout.tsx delete mode 100644 src/app/(auth)/login/page.tsx delete mode 100644 src/app/(auth)/signup/page.tsx create mode 100644 src/app/(main)/agents/[agentId]/_components/ask-agent-card.tsx create mode 100644 src/app/(main)/agents/[agentId]/_components/response-agent-card.tsx create mode 100644 src/app/(main)/agents/[agentId]/_components/title.tsx create mode 100644 src/app/(main)/agents/[agentId]/page.tsx create mode 100644 src/app/(main)/agents/[agentId]/responses/[responseId]/page.tsx create mode 100644 src/app/(main)/agents/create/_components/agent-form.tsx create mode 100644 src/app/(main)/agents/create/_components/form-stepper.tsx create mode 100644 src/app/(main)/agents/create/_components/title.tsx create mode 100644 src/app/(main)/agents/create/page.tsx create mode 100644 src/app/(main)/agents/create/schemas/create-agent-schema.tsx delete mode 100644 src/app/(marketing)/blog/[slug]/page.tsx delete mode 100644 src/app/(marketing)/blog/layout.tsx delete mode 100644 src/app/(marketing)/blog/page.tsx create mode 100644 src/components/card-background.tsx create mode 100644 src/components/sections/stats.tsx create mode 100644 src/components/ui/animated-grid-pattern.tsx create mode 100644 src/components/ui/avatar.tsx create mode 100644 src/components/ui/confetti.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/ui/meteors.tsx create mode 100644 src/components/ui/separator.tsx create mode 100644 src/components/ui/shine-border.tsx create mode 100644 src/components/ui/sparkles-text.tsx create mode 100644 src/providers/privy-provider.tsx diff --git a/package-lock.json b/package-lock.json index 05b0836..8830037 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,17 +9,24 @@ "version": "0.1.0", "dependencies": { "@hookform/resolvers": "^3.10.0", + "@privy-io/react-auth": "^2.0.3", "@radix-ui/react-accordion": "^1.2.0", + "@radix-ui/react-avatar": "^1.1.2", "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-dropdown-menu": "^2.1.4", "@radix-ui/react-label": "^2.1.1", "@radix-ui/react-navigation-menu": "^1.2.0", "@radix-ui/react-select": "^2.1.4", + "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-switch": "^1.1.0", + "@stepperize/react": "^4.1.3", "@supabase/ssr": "^0.5.2", "@tanstack/react-query": "^5.64.1", "@tanstack/react-query-devtools": "^5.64.1", + "@types/canvas-confetti": "^1.9.0", "axios": "^1.7.9", + "canvas-confetti": "^1.9.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "embla-carousel-react": "^8.1.7", @@ -58,6 +65,11 @@ "typescript": "^5" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", + "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==" + }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", @@ -80,6 +92,50 @@ "node": ">=6.9.0" } }, + "node_modules/@coinbase/wallet-sdk": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.0.3.tgz", + "integrity": "sha512-y/OGEjlvosikjfB+wk+4CVb9OxD1ob9cidEBLI5h8Hxaf/Qoob2XoVT1uvhtAzBx34KpGYSd+alKvh/GCRre4Q==", + "dependencies": { + "buffer": "^6.0.3", + "clsx": "^1.2.1", + "eventemitter3": "^5.0.1", + "keccak": "^3.0.3", + "preact": "^10.16.0", + "sha.js": "^2.4.11" + } + }, + "node_modules/@coinbase/wallet-sdk/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@coinbase/wallet-sdk/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", @@ -139,6 +195,744 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "dependencies": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "node_modules/@floating-ui/core": { "version": "1.6.9", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", @@ -156,6 +950,20 @@ "@floating-ui/utils": "^0.2.9" } }, + "node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@floating-ui/react-dom": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", @@ -173,6 +981,32 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" }, + "node_modules/@headlessui/react": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.0.tgz", + "integrity": "sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.17.1", + "@react-aria/interactions": "^3.21.3", + "@tanstack/react-virtual": "^3.8.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/@heroicons/react": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz", + "integrity": "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==", + "peerDependencies": { + "react": ">= 16 || ^19.0.0-rc" + } + }, "node_modules/@hookform/resolvers": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.10.0.tgz", @@ -300,6 +1134,163 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.3.0.tgz", + "integrity": "sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@marsidev/react-turnstile": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@marsidev/react-turnstile/-/react-turnstile-0.4.1.tgz", + "integrity": "sha512-uZusUW9mPr0csWpls8bApe5iuRK0YK7H1PCKqfM4djW3OA9GB9rU68irjk7xRO8qlHyj0aDTeVu9tTLPExBO4Q==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@metamask/abi-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metamask/abi-utils/-/abi-utils-1.2.0.tgz", + "integrity": "sha512-Hf7fnBDM9ptCPDtq/wQffWbw859CdVGMwlpWUEsTH6gLXhXONGrRXHA2piyYPRuia8YYTdJvRC/zSK1/nyLvYg==", + "dependencies": { + "@metamask/utils": "^3.4.1", + "superstruct": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@metamask/abi-utils/node_modules/@metamask/utils": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-3.6.0.tgz", + "integrity": "sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ==", + "dependencies": { + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@metamask/eth-sig-util": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-6.0.2.tgz", + "integrity": "sha512-D6IIefM2vS+4GUGGtezdBbkwUYQC4bCosYx/JteUuF0zfe6lyxR4cruA8+2QHoUg7F7edNH1xymYpqYq1BeOkw==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "@metamask/abi-utils": "^1.2.0", + "@metamask/utils": "^5.0.2", + "ethereum-cryptography": "^2.1.2", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@metamask/utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==", + "dependencies": { + "@ethereumjs/tx": "^4.1.2", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@motionone/animation": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", + "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", + "dependencies": { + "@motionone/easing": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/dom": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", + "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", + "dependencies": { + "@motionone/animation": "^10.18.0", + "@motionone/generators": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/easing": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", + "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", + "dependencies": { + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/generators": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", + "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", + "dependencies": { + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/svelte": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/svelte/-/svelte-10.16.4.tgz", + "integrity": "sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/types": { + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", + "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==" + }, + "node_modules/@motionone/utils": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", + "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", + "dependencies": { + "@motionone/types": "^10.17.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/vue": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/vue/-/vue-10.16.4.tgz", + "integrity": "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==", + "deprecated": "Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, "node_modules/@next/env": { "version": "14.2.7", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.7.tgz", @@ -449,6 +1440,31 @@ "node": ">= 10" } }, + "node_modules/@noble/curves": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.0.tgz", + "integrity": "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==", + "dependencies": { + "@noble/hashes": "1.7.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -499,6 +1515,151 @@ "node": ">=14" } }, + "node_modules/@privy-io/api-base": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@privy-io/api-base/-/api-base-1.4.2.tgz", + "integrity": "sha512-YepVxiylommw2jBuUpdqm90Ebnx6H/HZODDFEpi2/G7lOWMN3GemFHllYC8sKzLIwbPuBqAo5ImvyootOXMCEA==", + "dependencies": { + "zod": "^3.21.4" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + } + }, + "node_modules/@privy-io/js-sdk-core": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@privy-io/js-sdk-core/-/js-sdk-core-0.39.0.tgz", + "integrity": "sha512-m9pMAa/10Bv0CaftPon/Zep+TuKFBm2TJX/eUR5MfLO2x7NwwZEYbMgX0123IdjMuEARlxl/t4/n+EjrO3PGzg==", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/units": "^5.7.0", + "@privy-io/api-base": "^1.4.2", + "@privy-io/public-api": "2.17.0", + "eventemitter3": "^5.0.1", + "fetch-retry": "^5.0.6", + "jose": "^4.15.5", + "js-cookie": "^3.0.5", + "libphonenumber-js": "^1.10.44", + "set-cookie-parser": "^2.6.0", + "uuid": ">=8 <10" + }, + "peerDependencies": { + "permissionless": "^0.2.10", + "viem": "^2.21.36" + }, + "peerDependenciesMeta": { + "permissionless": { + "optional": true + }, + "viem": { + "optional": true + } + } + }, + "node_modules/@privy-io/js-sdk-core/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/@privy-io/public-api": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@privy-io/public-api/-/public-api-2.17.0.tgz", + "integrity": "sha512-LKCWir4usPgAqfPSTrkX6or9knTb7+W1/wvlooFg08fUtldw5+9rt5stZp0Apgwm+I90HR5/fA2dFXsYVn1zPg==", + "dependencies": { + "@privy-io/api-base": "1.4.2", + "bs58": "^5.0.0", + "ethers": "^5.7.2", + "libphonenumber-js": "^1.10.31", + "zod": "^3.22.4" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + } + }, + "node_modules/@privy-io/public-api/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "node_modules/@privy-io/public-api/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@privy-io/react-auth": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@privy-io/react-auth/-/react-auth-2.0.3.tgz", + "integrity": "sha512-Yk5sX051TZMREa2DYNQ0hTIoPTyh924o2ObjDKLdZniNdcxF3kMF2CtVF3uTlT6SLEQ4cnDhmDTuZiaQ0s08JQ==", + "dependencies": { + "@coinbase/wallet-sdk": "4.0.3", + "@floating-ui/react": "^0.26.22", + "@headlessui/react": "^2.2.0", + "@heroicons/react": "^2.1.1", + "@marsidev/react-turnstile": "^0.4.1", + "@metamask/eth-sig-util": "^6.0.0", + "@privy-io/js-sdk-core": "0.39.0", + "@simplewebauthn/browser": "^9.0.1", + "@solana/wallet-adapter-base": "^0.9.23", + "@solana/wallet-standard-wallet-adapter-base": "^1.1.2", + "@solana/wallet-standard-wallet-adapter-react": "^1.1.2", + "@wallet-standard/app": "^1.0.1", + "@walletconnect/ethereum-provider": "^2.15.1", + "@walletconnect/modal": "^2.6.2", + "base64-js": "^1.5.1", + "dotenv": "^16.0.3", + "encoding": "^0.1.13", + "eventemitter3": "^5.0.1", + "fast-password-entropy": "^1.1.1", + "jose": "^4.15.5", + "js-cookie": "^3.0.5", + "lokijs": "^1.5.12", + "md5": "^2.3.0", + "mipd": "^0.0.7", + "ofetch": "^1.3.4", + "pino-pretty": "^10.0.0", + "qrcode": "^1.5.1", + "react-device-detect": "^2.2.2", + "secure-password-utilities": "^0.2.1", + "styled-components": "^6.1.13", + "stylis": "^4.3.4", + "tinycolor2": "^1.6.0", + "uuid": ">=8 <10", + "viem": "^2.21.9", + "zustand": "^5.0.0" + }, + "peerDependencies": { + "@abstract-foundation/agw-client": "^1.0.0", + "@solana/web3.js": "^1.95.8", + "permissionless": "^0.2.10", + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@abstract-foundation/agw-client": { + "optional": true + }, + "@solana/web3.js": { + "optional": true + }, + "permissionless": { + "optional": true + } + } + }, + "node_modules/@privy-io/react-auth/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, "node_modules/@radix-ui/number": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", @@ -561,6 +1722,31 @@ } } }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.2.tgz", + "integrity": "sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig==", + "dependencies": { + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-collapsible": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.2.tgz", @@ -718,6 +1904,34 @@ } } }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.4.tgz", + "integrity": "sha512-iXU1Ab5ecM+yEepGAWK8ZhMyKX4ubFdCNtol4sT9D0OVErG9PNElfx3TQhjw7n7BC5nFVz68/5//clWy+8TXzA==", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-menu": "2.1.4", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-focus-guards": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", @@ -795,6 +2009,45 @@ } } }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.4.tgz", + "integrity": "sha512-BnOgVoL6YYdHAG6DtXONaR29Eq4nvbi8rutrV/xlr3RQCMMb3yqP85Qiw/3NReozrSW+4dfLkK+rc1hb4wPU/A==", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.3", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.1", + "@radix-ui/react-portal": "1.1.3", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-roving-focus": "1.1.1", + "@radix-ui/react-slot": "1.1.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "^2.6.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-navigation-menu": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.3.tgz", @@ -929,6 +2182,36 @@ } } }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz", + "integrity": "sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-select": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.4.tgz", @@ -971,6 +2254,28 @@ } } }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.1.tgz", + "integrity": "sha512-RRiNRSrD8iUiXriq/Y5n4/3iE8HzqgLHsusUSg5jVpU2+3tqcUFPJXHDymwEypunc2sWxDUS3UC+rkZRlHedsw==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", @@ -1153,6 +2458,86 @@ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, + "node_modules/@react-aria/focus": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.19.1.tgz", + "integrity": "sha512-bix9Bu1Ue7RPcYmjwcjhB14BMu2qzfJ3tMQLqDc9pweJA66nOw8DThy3IfVr8Z7j2PHktOLf9kcbiZpydKHqzg==", + "dependencies": { + "@react-aria/interactions": "^3.23.0", + "@react-aria/utils": "^3.27.0", + "@react-types/shared": "^3.27.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.23.0.tgz", + "integrity": "sha512-0qR1atBIWrb7FzQ+Tmr3s8uH5mQdyRH78n0krYaG8tng9+u1JlSi8DGRSaC9ezKyNB84m7vHT207xnHXGeJ3Fg==", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.27.0", + "@react-types/shared": "^3.27.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.7.tgz", + "integrity": "sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.27.0.tgz", + "integrity": "sha512-p681OtApnKOdbeN8ITfnnYqfdHS0z7GE+4l8EXlfLnr70Rp/9xicBO6d2rU+V/B3JujDw2gPWxYKEnEeh0CGCw==", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.27.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.5", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.5.tgz", + "integrity": "sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.27.0.tgz", + "integrity": "sha512-gvznmLhi6JPEf0bsq7SwRYTHAKKq/wcmKqFez9sRdbED+SPMUmK5omfZ6w3EwUFQHbYUa4zPBYedQ7Knv70RMw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1165,6 +2550,72 @@ "integrity": "sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==", "dev": true }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@shikijs/core": { "version": "1.26.1", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.26.1.tgz", @@ -1234,6 +2685,335 @@ "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==", "peer": true }, + "node_modules/@simplewebauthn/browser": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-9.0.1.tgz", + "integrity": "sha512-wD2WpbkaEP4170s13/HUxPcAV5y4ZXaKo1TfNklS5zDefPinIgXOpgz1kpEvobAsaLPa2KeH7AKKX/od1mrBJw==", + "dependencies": { + "@simplewebauthn/types": "^9.0.1" + } + }, + "node_modules/@simplewebauthn/types": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@simplewebauthn/types/-/types-9.0.1.tgz", + "integrity": "sha512-tGSRP1QvsAvsJmnOlRQyw/mvK9gnPtjEc5fg2+m8n+QUa+D7rvrKkOYyfpy42GTs90X3RDOnqJgfHt+qO67/+w==" + }, + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "peer": true, + "dependencies": { + "buffer": "~6.0.3" + }, + "engines": { + "node": ">=5.10" + } + }, + "node_modules/@solana/wallet-adapter-base": { + "version": "0.9.23", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.23.tgz", + "integrity": "sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==", + "dependencies": { + "@solana/wallet-standard-features": "^1.1.0", + "@wallet-standard/base": "^1.0.1", + "@wallet-standard/features": "^1.0.3", + "eventemitter3": "^4.0.7" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.77.3" + } + }, + "node_modules/@solana/wallet-standard-chains": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-chains/-/wallet-standard-chains-1.1.1.tgz", + "integrity": "sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==", + "dependencies": { + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@solana/wallet-standard-features": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-features/-/wallet-standard-features-1.3.0.tgz", + "integrity": "sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==", + "dependencies": { + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@solana/wallet-standard-util": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-util/-/wallet-standard-util-1.1.2.tgz", + "integrity": "sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA==", + "dependencies": { + "@noble/curves": "^1.8.0", + "@solana/wallet-standard-chains": "^1.1.1", + "@solana/wallet-standard-features": "^1.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@solana/wallet-standard-wallet-adapter-base": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-wallet-adapter-base/-/wallet-standard-wallet-adapter-base-1.1.4.tgz", + "integrity": "sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw==", + "dependencies": { + "@solana/wallet-adapter-base": "^0.9.23", + "@solana/wallet-standard-chains": "^1.1.1", + "@solana/wallet-standard-features": "^1.3.0", + "@solana/wallet-standard-util": "^1.1.2", + "@wallet-standard/app": "^1.1.0", + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0", + "@wallet-standard/wallet": "^1.1.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/web3.js": "^1.98.0", + "bs58": "^6.0.0" + } + }, + "node_modules/@solana/wallet-standard-wallet-adapter-react": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@solana/wallet-standard-wallet-adapter-react/-/wallet-standard-wallet-adapter-react-1.1.4.tgz", + "integrity": "sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg==", + "dependencies": { + "@solana/wallet-standard-wallet-adapter-base": "^1.1.4", + "@wallet-standard/app": "^1.1.0", + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@solana/wallet-adapter-base": "*", + "react": "*" + } + }, + "node_modules/@solana/web3.js": { + "version": "1.98.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.0.tgz", + "integrity": "sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.0", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.1", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^2.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "peer": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@stablelib/aead": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==" + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" + }, + "node_modules/@stablelib/chacha": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/chacha20poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", + "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", + "dependencies": { + "@stablelib/aead": "^1.0.1", + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/poly1305": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "dependencies": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "node_modules/@stablelib/hkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hkdf/-/hkdf-1.0.1.tgz", + "integrity": "sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==", + "dependencies": { + "@stablelib/hash": "^1.0.1", + "@stablelib/hmac": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hmac": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", + "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "node_modules/@stablelib/keyagreement": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "dependencies": { + "@stablelib/bytes": "^1.0.1" + } + }, + "node_modules/@stablelib/poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha256": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, + "node_modules/@stablelib/x25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", + "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", + "dependencies": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stepperize/core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@stepperize/core/-/core-1.0.0.tgz", + "integrity": "sha512-DGhUuMvJTo27rE/DizE4junwqR3EGr9JrbdrjhyCHrDwmdYZI1DDLftj24TtHenhPNBKAOpudG6KW5dibnJxcg==" + }, + "node_modules/@stepperize/react": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@stepperize/react/-/react-4.1.3.tgz", + "integrity": "sha512-Qq3oLO6BQ/rUtTvsMG7GY6her0a4Mlev+3wdAzxB8sOPrhbbSsIuq+GUwGviHch0SFmZ0N1DT1DURn0Pm7fUgA==", + "dependencies": { + "@stepperize/core": "1.0.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@supabase/auth-js": { "version": "2.67.3", "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.67.3.tgz", @@ -1398,6 +3178,45 @@ "react": "^18 || ^19" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz", + "integrity": "sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ==", + "dependencies": { + "@tanstack/virtual-core": "3.11.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz", + "integrity": "sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/canvas-confetti": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz", + "integrity": "sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==" + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", @@ -1531,11 +3350,27 @@ "@types/react": "^18.0.0" } }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "peer": true + }, "node_modules/@types/ws": { "version": "8.5.13", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", @@ -1677,6 +3512,494 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==" }, + "node_modules/@wallet-standard/app": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/app/-/app-1.1.0.tgz", + "integrity": "sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==", + "dependencies": { + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@wallet-standard/base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/base/-/base-1.1.0.tgz", + "integrity": "sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@wallet-standard/features": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/features/-/features-1.1.0.tgz", + "integrity": "sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==", + "dependencies": { + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@wallet-standard/wallet": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wallet-standard/wallet/-/wallet-1.1.0.tgz", + "integrity": "sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==", + "dependencies": { + "@wallet-standard/base": "^1.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@walletconnect/core": { + "version": "2.17.4", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.4.tgz", + "integrity": "sha512-/BF+yoY5mjK5RQ6zJ60YLsJysUC0saWrjTAfR2AqCsyaehRKk+Ql0QfbAZd3S3SY/Dwm9o84RD8z01qxwaogQA==", + "dependencies": { + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/jsonrpc-ws-connection": "1.0.16", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.4", + "@walletconnect/utils": "2.17.4", + "@walletconnect/window-getters": "1.0.1", + "events": "3.3.0", + "lodash.isequal": "4.5.0", + "uint8arrays": "3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@walletconnect/environment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz", + "integrity": "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/environment/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@walletconnect/ethereum-provider": { + "version": "2.17.4", + "resolved": "https://registry.npmjs.org/@walletconnect/ethereum-provider/-/ethereum-provider-2.17.4.tgz", + "integrity": "sha512-h6uTYU0YLqwX1ZuMqpQHCGhmQjTltwixQt0iIsDNe5sbDETGUHRe+Ji54ak8dinnUnS79ZsW0sndGmY1VUwdJA==", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/modal": "2.7.0", + "@walletconnect/sign-client": "2.17.4", + "@walletconnect/types": "2.17.4", + "@walletconnect/universal-provider": "2.17.4", + "@walletconnect/utils": "2.17.4", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/events": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz", + "integrity": "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/events/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@walletconnect/heartbeat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz", + "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==", + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-http-connection": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz", + "integrity": "sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.1", + "cross-fetch": "^3.1.4", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz", + "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, + "node_modules/@walletconnect/jsonrpc-utils": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz", + "integrity": "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==", + "dependencies": { + "@walletconnect/environment": "^1.0.1", + "@walletconnect/jsonrpc-types": "^1.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@walletconnect/jsonrpc-ws-connection": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz", + "integrity": "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0", + "ws": "^7.5.1" + } + }, + "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/logger": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz", + "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==", + "dependencies": { + "@walletconnect/safe-json": "^1.0.2", + "pino": "7.11.0" + } + }, + "node_modules/@walletconnect/modal": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal/-/modal-2.7.0.tgz", + "integrity": "sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==", + "dependencies": { + "@walletconnect/modal-core": "2.7.0", + "@walletconnect/modal-ui": "2.7.0" + } + }, + "node_modules/@walletconnect/modal-core": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-core/-/modal-core-2.7.0.tgz", + "integrity": "sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA==", + "dependencies": { + "valtio": "1.11.2" + } + }, + "node_modules/@walletconnect/modal-ui": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-ui/-/modal-ui-2.7.0.tgz", + "integrity": "sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ==", + "dependencies": { + "@walletconnect/modal-core": "2.7.0", + "lit": "2.8.0", + "motion": "10.16.2", + "qrcode": "1.5.3" + } + }, + "node_modules/@walletconnect/modal-ui/node_modules/motion": { + "version": "10.16.2", + "resolved": "https://registry.npmjs.org/motion/-/motion-10.16.2.tgz", + "integrity": "sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==", + "dependencies": { + "@motionone/animation": "^10.15.1", + "@motionone/dom": "^10.16.2", + "@motionone/svelte": "^10.16.2", + "@motionone/types": "^10.15.1", + "@motionone/utils": "^10.15.1", + "@motionone/vue": "^10.16.2" + } + }, + "node_modules/@walletconnect/modal-ui/node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@walletconnect/relay-api": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz", + "integrity": "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==", + "dependencies": { + "@walletconnect/jsonrpc-types": "^1.0.2" + } + }, + "node_modules/@walletconnect/relay-auth": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", + "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==", + "dependencies": { + "@stablelib/ed25519": "^1.0.2", + "@stablelib/random": "^1.0.1", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "tslib": "1.14.1", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/safe-json/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@walletconnect/sign-client": { + "version": "2.17.4", + "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.17.4.tgz", + "integrity": "sha512-9ukS7GHvHkAL3nkwukIfzWYxNsLJBO35Zkp7WdhKH3p3V+IiAMpmG79MEOykun5B8fl8m8z+6EOA1191aKx8jw==", + "dependencies": { + "@walletconnect/core": "2.17.4", + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.4", + "@walletconnect/utils": "2.17.4", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz", + "integrity": "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/time/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@walletconnect/types": { + "version": "2.17.4", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.4.tgz", + "integrity": "sha512-i4yHY005RHhwCavaKk+GaDwwUaSqnwLM4b2btcHSOIqjReyFImnwOY+59zQTO7tbmnjjJpGZcfRGcHk70TQ9mA==", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/universal-provider": { + "version": "2.17.4", + "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.17.4.tgz", + "integrity": "sha512-n4x/QnHFwvNt1k7pOrMikEubpCBpdHkIkAdNROm/hCP/3JH1Z6Z5Is2iwP+H845qJXXKjkzRryvuerw8ga/sxg==", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/sign-client": "2.17.4", + "@walletconnect/types": "2.17.4", + "@walletconnect/utils": "2.17.4", + "events": "3.3.0", + "lodash": "4.17.21" + } + }, + "node_modules/@walletconnect/utils": { + "version": "2.17.4", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.4.tgz", + "integrity": "sha512-Vvqs66cPV4OZteO2PjUjGLiKlo3myJjwSB5ElgwHwfAwr+WfUbJl4WPAOp6YHh6xxObRCQN+AgwC69EKfwXAiA==", + "dependencies": { + "@ethersproject/hash": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.4", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "6.6.1", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@walletconnect/utils/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/@walletconnect/utils/node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", + "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/window-getters/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", + "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "dependencies": { + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/window-metadata/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/abitype": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.7.tgz", + "integrity": "sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw==", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -1698,6 +4021,23 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "peer": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1953,6 +4293,14 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -2010,6 +4358,49 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base-x": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==", + "peer": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -2021,6 +4412,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "peer": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "peer": true, + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/borsh/node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "peer": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2042,6 +4476,57 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "peer": true, + "dependencies": { + "base-x": "^5.0.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/bufferutil": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -2109,6 +4594,14 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -2117,6 +4610,14 @@ "node": ">= 6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001692", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", @@ -2136,6 +4637,15 @@ } ] }, + "node_modules/canvas-confetti": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.9.3.tgz", + "integrity": "sha512-rFfTURMvmVEX1gyXFgn5QMn81bYk70qa0HLzcIOSVEyl57n6o9ItHeBtUSWdvKAPY0xlvBHno4/v3QPrT83q9g==", + "funding": { + "type": "donate", + "url": "https://www.paypal.me/kirilvatev" + } + }, "node_modules/ccount": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", @@ -2188,6 +4698,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -2238,6 +4756,47 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -2262,6 +4821,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2296,6 +4860,14 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/consola": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -2304,6 +4876,30 @@ "node": ">= 0.6" } }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2317,6 +4913,40 @@ "node": ">= 8" } }, + "node_modules/crossws": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.1.tgz", + "integrity": "sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -2500,6 +5130,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -2516,6 +5154,14 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decimal.js-light": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", @@ -2533,6 +5179,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2573,6 +5227,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2589,6 +5260,16 @@ "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", @@ -2611,6 +5292,11 @@ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2649,6 +5335,17 @@ "csstype": "^3.0.2" } }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2663,11 +5360,41 @@ "node": ">= 0.4" } }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, "node_modules/embla-carousel": { "version": "8.5.2", "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.5.2.tgz", @@ -2704,6 +5431,27 @@ "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", "peer": true }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", @@ -2891,6 +5639,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "peer": true + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "peer": true, + "dependencies": { + "es6-promise": "^4.0.3" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3327,16 +6090,139 @@ "node": ">=0.10.0" } }, + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "peer": true, + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3389,6 +6275,30 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-password-entropy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fast-password-entropy/-/fast-password-entropy-1.1.1.tgz", + "integrity": "sha512-dxm29/BPFrNgyEDygg/lf9c2xQR0vnQhG7+hZjAI39M/3um9fD4xiqG6F0ZjW6bya5m9CI0u6YryHGRtxCGCiw==" + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "peer": true + }, "node_modules/fastq": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", @@ -3397,6 +6307,11 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-retry": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", + "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==" + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3409,6 +6324,12 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "peer": true + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3420,6 +6341,14 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3594,6 +6523,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", @@ -3796,6 +6733,23 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/h3": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.13.1.tgz", + "integrity": "sha512-u/z6Z4YY+ANZ05cRRfsFJadTBrNA6e3jxdU+AN5UCbZSZEUwgHiwjvUEe0k1NoQmAvQmETwr+xB5jd7mhCJuIQ==", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.1", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unenv": "^1.10.0" + } + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -3871,6 +6825,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3992,6 +6955,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" + }, + "node_modules/hey-listen": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/html-void-elements": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", @@ -4001,6 +6984,50 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "peer": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idb-keyval": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4049,8 +7076,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { "version": "1.1.0", @@ -4074,6 +7100,14 @@ "node": ">=12" } }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4151,6 +7185,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-bun-module": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", @@ -4279,6 +7318,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -4482,6 +7530,29 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peer": true, + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/isows": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.6.tgz", + "integrity": "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "peerDependencies": { + "ws": "*" + } + }, "node_modules/iterator.prototype": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", @@ -4516,6 +7587,83 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jayson": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.3.tgz", + "integrity": "sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ==", + "peer": true, + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "peer": true + }, + "node_modules/jayson/node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/jayson/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true + }, + "node_modules/jayson/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/jayson/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -4524,6 +7672,35 @@ "jiti": "bin/jiti.js" } }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4559,6 +7736,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "peer": true + }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -4571,6 +7754,31 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "peer": true + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "peer": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -4586,6 +7794,20 @@ "node": ">=4.0" } }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -4595,6 +7817,11 @@ "json-buffer": "3.0.1" } }, + "node_modules/keyvaluestorage-interface": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", + "integrity": "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==" + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -4626,6 +7853,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.18.tgz", + "integrity": "sha512-okMm/MCoFrm1vByeVFLBdkFIXLSHy/AIK2AEGgY3eoicfWZeOZqv3GfhtQgICkzs/tqorAMm3a4GBg5qNCrqzg==" + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -4642,6 +7874,34 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4668,6 +7928,11 @@ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", "dev": true }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -4680,6 +7945,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lokijs": { + "version": "1.5.12", + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", + "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==" + }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -4731,6 +8001,16 @@ "node": ">= 0.4" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", @@ -4948,6 +8228,11 @@ "node": ">= 8" } }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, "node_modules/micromark": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", @@ -5495,6 +8780,17 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -5514,6 +8810,16 @@ "node": ">= 0.6" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5530,7 +8836,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5543,6 +8848,25 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mipd": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mipd/-/mipd-0.0.7.tgz", + "integrity": "sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", @@ -5591,6 +8915,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -5709,6 +9038,45 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5867,11 +9235,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==" + }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -5921,6 +9308,72 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ox": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.5.tgz", + "integrity": "sha512-vmnH8KvMDwFZDbNY1mq2CBRBWIgSliZB/dFV0xKp+DfF/dJkTENt6nmA+DzHSSAgL/GO2ydjkXWvlndJgSY4KQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "^1.10.1", + "@noble/curves": "^1.6.0", + "@noble/hashes": "^1.5.0", + "@scure/bip32": "^1.5.0", + "@scure/bip39": "^1.4.0", + "abitype": "^1.0.6", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/ox/node_modules/@scure/base": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", + "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/@scure/bip32": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.1.tgz", + "integrity": "sha512-jSO+5Ud1E588Y+LFo8TaB8JVPNAZw/lGGao+1SepHDeTs2dFLurdNIAgUuDlwezqEjRjElkCJajVrtrZaBxvaQ==", + "dependencies": { + "@noble/curves": "~1.8.0", + "@noble/hashes": "~1.7.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/@scure/bip39": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.1.tgz", + "integrity": "sha512-GnlufVSP9UdAo/H2Patfv22VTtpNTyfi+I3qCKpvuB5l1KWzEYx+l2TNpBy9Ksh4xTs3Rn06tBlpWCi/1Vz8gw==", + "dependencies": { + "@noble/hashes": "~1.7.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -5951,6 +9404,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5983,7 +9444,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -6034,6 +9494,11 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6058,6 +9523,105 @@ "node": ">=0.10.0" } }, + "node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz", + "integrity": "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/pino-pretty/node_modules/pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-pretty/node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" + }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -6066,6 +9630,14 @@ "node": ">= 6" } }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -6224,6 +9796,15 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/preact": { + "version": "10.25.4", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz", + "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6233,6 +9814,19 @@ "node": ">= 0.8.0" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -6252,11 +9846,25 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proxy-compare": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.5.1.tgz", + "integrity": "sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6266,6 +9874,39 @@ "node": ">=6" } }, + "node_modules/qrcode": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz", + "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6285,6 +9926,16 @@ } ] }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -6296,6 +9947,18 @@ "node": ">=0.10.0" } }, + "node_modules/react-device-detect": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.3.tgz", + "integrity": "sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw==", + "dependencies": { + "ua-parser-js": "^1.0.33" + }, + "peerDependencies": { + "react": ">= 0.14.0", + "react-dom": ">= 0.14.0" + } + }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -6439,6 +10102,19 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6450,6 +10126,14 @@ "node": ">=8.10.0" } }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/recharts": { "version": "2.15.0", "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.0.tgz", @@ -6666,6 +10350,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -6749,6 +10446,53 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rpc-websockets": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.4.tgz", + "integrity": "sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==", + "peer": true, + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/rpc-websockets/node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "peer": true, + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/rpc-websockets/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "peer": true + }, + "node_modules/rpc-websockets/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6790,6 +10534,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -6823,6 +10586,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -6831,11 +10607,25 @@ "loose-envify": "^1.1.0" } }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, + "node_modules/secure-password-utilities": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/secure-password-utilities/-/secure-password-utilities-0.2.1.tgz", + "integrity": "sha512-znUg8ae3cpuAaogiFBhP82gD2daVkSz4Qv/L7OWjB7wWvfbCdeqqQuJkm2/IvhKQPOV0T739YPR6rb7vs0uWaw==" + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -6843,6 +10633,16 @@ "node": ">=10" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -6889,6 +10689,23 @@ "node": ">= 0.4" } }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7016,6 +10833,14 @@ "node": ">=8" } }, + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/sonner": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.1.tgz", @@ -7042,12 +10867,33 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/stable-hash": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", "dev": true }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -7056,6 +10902,22 @@ "node": ">=10.0.0" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -7268,11 +11130,22 @@ "node": ">=4" } }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -7280,6 +11153,70 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-components": { + "version": "6.1.14", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.14.tgz", + "integrity": "sha512-KtfwhU5jw7UoxdM0g6XU9VZQFV4do+KrM8idiVCH5h4v49W+3p3yMe0icYwJgZQZepa5DbH04Qv8P0/RdcLcgg==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/styled-components/node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/styled-jsx": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", @@ -7302,6 +11239,11 @@ } } }, + "node_modules/stylis": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.5.tgz", + "integrity": "sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==" + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -7323,6 +11265,14 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7346,6 +11296,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, "node_modules/tailwind-merge": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", @@ -7420,6 +11375,12 @@ "node": ">=6" } }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==", + "peer": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -7445,11 +11406,30 @@ "node": ">=0.8" } }, + "node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "dependencies": { + "real-require": "^0.1.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "peer": true + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7464,8 +11444,7 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/trim-lines": { "version": "3.0.1", @@ -7519,6 +11498,16 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7621,7 +11610,7 @@ "version": "5.7.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7630,6 +11619,44 @@ "node": ">=14.17" } }, + "node_modules/ua-parser-js": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" + }, + "node_modules/uint8arrays": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", + "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "dependencies": { + "multiformats": "^9.4.2" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -7648,11 +11675,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, + "node_modules/unenv": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz", + "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==", + "dependencies": { + "consola": "^3.2.3", + "defu": "^6.1.4", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2" + } + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", @@ -7734,6 +11778,97 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7784,11 +11919,69 @@ } } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/valtio": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/valtio/-/valtio-1.11.2.tgz", + "integrity": "sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==", + "dependencies": { + "proxy-compare": "2.5.1", + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, "node_modules/vaul": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/vaul/-/vaul-0.9.9.tgz", @@ -7861,6 +12054,104 @@ "d3-timer": "^3.0.1" } }, + "node_modules/viem": { + "version": "2.22.9", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.22.9.tgz", + "integrity": "sha512-2yy46qYhcdo8GZggQ3Zoq9QCahI0goddzpVI/vSnTpcClQBSDxYRCuAqRzzLqjvJ7hS0UYgplC7eRkM2sYgflw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@noble/curves": "1.7.0", + "@noble/hashes": "1.6.1", + "@scure/bip32": "1.6.0", + "@scure/bip39": "1.5.0", + "abitype": "1.0.7", + "isows": "1.0.6", + "ox": "0.6.5", + "ws": "8.18.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz", + "integrity": "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==", + "dependencies": { + "@noble/hashes": "1.6.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz", + "integrity": "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@scure/base": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", + "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@scure/bip32": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.0.tgz", + "integrity": "sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA==", + "dependencies": { + "@noble/curves": "~1.7.0", + "@noble/hashes": "~1.6.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@scure/bip39": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.0.tgz", + "integrity": "sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A==", + "dependencies": { + "@noble/hashes": "~1.6.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -7873,14 +12164,12 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "peer": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -7964,6 +12253,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, "node_modules/which-typed-array": { "version": "1.1.18", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", @@ -8083,14 +12377,12 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -8107,6 +12399,11 @@ } } }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, "node_modules/yaml": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", @@ -8118,6 +12415,105 @@ "node": ">= 14" } }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -8138,6 +12534,34 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zustand": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.3.tgz", + "integrity": "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/package.json b/package.json index 6a14d6d..7fdb311 100644 --- a/package.json +++ b/package.json @@ -10,17 +10,24 @@ }, "dependencies": { "@hookform/resolvers": "^3.10.0", + "@privy-io/react-auth": "^2.0.3", "@radix-ui/react-accordion": "^1.2.0", + "@radix-ui/react-avatar": "^1.1.2", "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-dropdown-menu": "^2.1.4", "@radix-ui/react-label": "^2.1.1", "@radix-ui/react-navigation-menu": "^1.2.0", "@radix-ui/react-select": "^2.1.4", + "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-switch": "^1.1.0", + "@stepperize/react": "^4.1.3", "@supabase/ssr": "^0.5.2", "@tanstack/react-query": "^5.64.1", "@tanstack/react-query-devtools": "^5.64.1", + "@types/canvas-confetti": "^1.9.0", "axios": "^1.7.9", + "canvas-confetti": "^1.9.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "embla-carousel-react": "^8.1.7", diff --git a/public/empty-data.jpg b/public/empty-data.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a1460755995bc9c489e9fe2874f36d95efc9b09 GIT binary patch literal 178288 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 r%-KB2c7Ni6k=l#NRH@}D(9;v5hrA9d%3t - {children} - - ); -} diff --git a/src/app/(auth)/login/page.tsx b/src/app/(auth)/login/page.tsx deleted file mode 100644 index bc2600b..0000000 --- a/src/app/(auth)/login/page.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import Link from "next/link"; - -import { Icons } from "@/components/icons"; -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; - -export default function LoginForm() { - return ( - - - Login - - Enter your email below to login to your account - - - -
- - -
-
- -
-
- - Or continue with - -
-
- -
- - -
-
-
- - - Forgot your password? - -
- -
- -
-
- Don't have an account?{" "} - - Sign up - -
-
-
- ); -} diff --git a/src/app/(auth)/signup/page.tsx b/src/app/(auth)/signup/page.tsx deleted file mode 100644 index 2f6814b..0000000 --- a/src/app/(auth)/signup/page.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import Link from "next/link"; - -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; - -export default function LoginForm() { - return ( - - - Sign Up - - Enter your information to create an account - - - -
-
-
- - -
-
- - -
-
-
- - -
-
- - -
- - -
-
- Already have an account?{" "} - - Sign in - -
-
-
- ); -} diff --git a/src/app/(main)/agents/[agentId]/_components/ask-agent-card.tsx b/src/app/(main)/agents/[agentId]/_components/ask-agent-card.tsx new file mode 100644 index 0000000..9dedd6c --- /dev/null +++ b/src/app/(main)/agents/[agentId]/_components/ask-agent-card.tsx @@ -0,0 +1,238 @@ +"use client"; + +import Image from "next/image"; +import { useRouter } from "next/navigation"; + +import { z } from "zod"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; + +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; + +import axios from "axios"; + +import { Send } from "lucide-react"; + +import clsx from "clsx"; + +import PostgrestError from "@/lib/config"; +import { formatDate } from "@/lib/utils"; +import { createClient } from "@/utils/supabase/client"; +import { Tables } from "@/utils/supabase/database.types"; + +import { + Form, + FormControl, + FormField, + FormItem, + FormMessage, +} from "@/components/ui/form"; +import { Badge } from "@/components/ui/badge"; +import { Input } from "@/components/ui/input"; +import { Button } from "@/components/ui/button"; + +import Spinner from "@/components/spinner"; + +type AskAgentCardProps = { + agentId: string; + disabled?: boolean; +}; + +export default function AskAgentCard({ + agentId, + disabled = false, +}: AskAgentCardProps) { + const { + data: agentsData, + isLoading, + error, + } = useQuery({ + retry: 0, + queryKey: ["agents", agentId], + queryFn: async ({ signal }) => { + const supabase = createClient(); + + const response = await supabase + .from("agents") + .select("*") + .eq("id", parseInt(agentId)) + .limit(1) + .single(); + + if (response.error) throw new PostgrestError(response.error); + + return response; + }, + }); + + if (error) return

{error.message}

; + + if (isLoading || !agentsData || !agentsData.data) + return ; + + return ; +} + +const CardContent = ({ + agent, + disabled, +}: { + agent: Tables<"agents">; + disabled: boolean; +}) => { + const { + id, + image_url, + name, + model_type, + description, + conversation, + last_conv, + } = agent; + + const router = useRouter(); + + const formSchema = z.object({ + question: z + .string({ + required_error: "Question is required", + }) + .min(2, { + message: "Minimum Question is 2 characters.", + }), + }); + + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: { + question: "", + }, + mode: "onChange", + }); + + const queryClient = useQueryClient(); + + const mutation = useMutation({ + mutationFn: async (values: z.infer) => { + const supabase = createClient(); + + const { data: existingAgent, error: error1 } = await supabase + .from("agents") + .select("*") + .eq("id", id); + + if (error1) throw new PostgrestError(error1); + + const { error: error2 } = await supabase + .from("agents") + .update({ + conversation: existingAgent ? existingAgent[0].conversation + 1 : 0, + last_conv: new Date().toISOString(), + }) + .eq("id", id) + .select(); + + if (error2) throw new PostgrestError(error2); + + const botResponseJson = await axios.get( + encodeURI( + `https://ai-endpoint-one.dev3vds1.link/deepinfra-ai/${name}/${model_type}/${description}/${values.question}` + ) + ); + + const { data, error: error3 } = await supabase + .from("agent_responses") + .upsert({ + agent_id: id, + question: values.question, + response: botResponseJson.data.response, + }) + .select() + .limit(1) + .single(); + + if (error3) throw new PostgrestError(error3); + + return data; + }, + onSuccess: (data: Tables<"agent_responses">) => { + router.push(`/agents/${id}/responses/${data.id}`); + queryClient.invalidateQueries({ + queryKey: ["agents", id], + }); + }, + }); + + const onSubmit = (values: z.infer) => { + mutation.mutate(values); + }; + + return ( + <> +
+
+
+

+ +

+ + {conversation} chats + +
+

{name}

+

{description}

+
+
+ test +
+
+
+
+ + ( + + + + + + + )} + /> + + + +
+ + ); +}; diff --git a/src/app/(main)/agents/[agentId]/_components/response-agent-card.tsx b/src/app/(main)/agents/[agentId]/_components/response-agent-card.tsx new file mode 100644 index 0000000..8355fd8 --- /dev/null +++ b/src/app/(main)/agents/[agentId]/_components/response-agent-card.tsx @@ -0,0 +1,131 @@ +"use client"; + +import Link from "next/link"; +import Image from "next/image"; + +import { useQuery } from "@tanstack/react-query"; + +import { Copy, Play, Twitter } from "lucide-react"; + +import PostgrestError from "@/lib/config"; + +import { createClient } from "@/utils/supabase/client"; +import { Tables } from "@/utils/supabase/database.types"; + +import { toast } from "sonner"; + +import { Separator } from "@/components/ui/separator"; +import { Button, buttonVariants } from "@/components/ui/button"; + +import Spinner from "@/components/spinner"; + +type ResponseAgentCardProps = { + agentResponseId: string; +}; + +export default function ResponseAgentCard({ + agentResponseId, +}: ResponseAgentCardProps) { + const { + data: responseData, + isLoading, + error, + } = useQuery({ + retry: 0, + queryKey: ["agent-responses", agentResponseId], + queryFn: async ({ signal }) => { + const supabase = createClient(); + + const response = await supabase + .from("agent_responses") + .select( + ` + *, + agents ( + agent_id:id, + name, + image_url + ) + ` + ) + .eq("id", agentResponseId) + .limit(1) + .single(); + + if (response.error) throw new PostgrestError(response.error); + + return response; + }, + }); + + if (error) return

{error.message}

; + + if (isLoading || !responseData || !responseData.data) + return ; + + return ; +} + +const CardContent = ({ + agentResponse, +}: { + agentResponse: Tables<"agent_responses"> & { + agents: { + agent_id: number; + name: string; + image_url: string; + }; + }; +}) => { + const { id, agent_id, question, response, agents } = agentResponse; + + return ( + <> +
+
+ test +
+
+

{agents.name}

+

{id}

+
+
+ +

Question:

+

{question}

+

Response:

+

{response}

+ +
+ + Share on Twitter + + + Ask Another + + +
+ + ); +}; diff --git a/src/app/(main)/agents/[agentId]/_components/title.tsx b/src/app/(main)/agents/[agentId]/_components/title.tsx new file mode 100644 index 0000000..a843535 --- /dev/null +++ b/src/app/(main)/agents/[agentId]/_components/title.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { motion } from "framer-motion"; + +import SparklesText from "@/components/ui/sparkles-text"; + +const ease = [0.16, 1, 0.3, 1]; + +export default function Title() { + return ( + + + + ); +} diff --git a/src/app/(main)/agents/[agentId]/page.tsx b/src/app/(main)/agents/[agentId]/page.tsx new file mode 100644 index 0000000..ad01cef --- /dev/null +++ b/src/app/(main)/agents/[agentId]/page.tsx @@ -0,0 +1,34 @@ +import { cn } from "@/lib/utils"; + +import AnimatedGridPattern from "@/components/ui/animated-grid-pattern"; + +import Title from "./_components/title"; +import AskAgentCard from "./_components/ask-agent-card"; +import CardBackground from "@/components/card-background"; + +export default function AskAgentPage({ + params, +}: { + params: { agentId: string }; +}) { + return ( +
+
+ + <CardBackground> + <AskAgentCard agentId={params.agentId} /> + </CardBackground> + </div> + <AnimatedGridPattern + numSquares={30} + maxOpacity={0.1} + duration={3} + repeatDelay={1} + className={cn( + "[mask-image:radial-gradient(500px_circle_at_center,white,transparent)]", + "inset-x-0 inset-y-[-30%] h-[200%] skew-y-12" + )} + /> + </section> + ); +} diff --git a/src/app/(main)/agents/[agentId]/responses/[responseId]/page.tsx b/src/app/(main)/agents/[agentId]/responses/[responseId]/page.tsx new file mode 100644 index 0000000..274a84e --- /dev/null +++ b/src/app/(main)/agents/[agentId]/responses/[responseId]/page.tsx @@ -0,0 +1,38 @@ +import { cn } from "@/lib/utils"; + +import AnimatedGridPattern from "@/components/ui/animated-grid-pattern"; +import CardBackground from "@/components/card-background"; + +import Title from "../../_components/title"; +import AskAgentCard from "../../_components/ask-agent-card"; +import ResponseAgentCard from "../../_components/response-agent-card"; + +export default function AgentAsk({ + params, +}: { + params: { agentId: string; responseId: string }; +}) { + return ( + <section className="relative flex min-h-[calc(100vh-64px)] w-full py-10 items-center justify-center overflow-hidden rounded-lg border bg-background"> + <div className="layout flex flex-col items-center"> + <Title /> + <CardBackground> + <AskAgentCard agentId={params.agentId} disabled={true} /> + </CardBackground> + <CardBackground> + <ResponseAgentCard agentResponseId={params.responseId} /> + </CardBackground> + </div> + <AnimatedGridPattern + numSquares={30} + maxOpacity={0.1} + duration={3} + repeatDelay={1} + className={cn( + "[mask-image:radial-gradient(500px_circle_at_center,white,transparent)]", + "inset-x-0 inset-y-[-30%] h-[200%] skew-y-12" + )} + /> + </section> + ); +} diff --git a/src/app/(main)/agents/create/_components/agent-form.tsx b/src/app/(main)/agents/create/_components/agent-form.tsx new file mode 100644 index 0000000..91c2ce1 --- /dev/null +++ b/src/app/(main)/agents/create/_components/agent-form.tsx @@ -0,0 +1,110 @@ +import { z } from "zod"; + +import { UseFormReturn } from "react-hook-form"; + +import { Stepper } from "@stepperize/react"; + +import { cn } from "@/lib/utils"; + +import { createAgentSchema } from "../schemas/create-agent-schema"; + +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { Button } from "@/components/ui/button"; +import { Textarea } from "@/components/ui/textarea"; + +import Spinner from "@/components/spinner"; + +type AgentFormProps = { + stepper: Stepper< + { + id: string; + title: string; + description: string; + }[] + >; + form: UseFormReturn<z.infer<typeof createAgentSchema>, any, undefined>; + onSubmit: (values: z.infer<typeof createAgentSchema>) => void; + isPending: boolean; +}; + +export default function AgentForm(props: AgentFormProps) { + const { stepper, form, onSubmit, isPending } = props; + + const handleSubmit = (values: z.infer<typeof createAgentSchema>) => { + onSubmit(values); + }; + + const { + formState: { errors }, + } = form; + + return ( + <Form {...form}> + <form onSubmit={form.handleSubmit(handleSubmit)} className="space-y-3"> + <FormField + control={form.control} + name="name" + render={({ field }) => ( + <FormItem> + <FormLabel>Agent Name</FormLabel> + <FormControl> + <Input + placeholder="astrobot" + className={cn( + errors.name && "focus-visible:ring-destructive" + )} + {...field} + /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + <FormField + control={form.control} + name="description" + render={({ field }) => ( + <FormItem> + <FormLabel>Description</FormLabel> + <FormControl> + <Textarea + rows={4} + placeholder="For answering daily questions." + className={cn( + errors.description && "focus-visible:ring-destructive" + )} + {...field} + /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + <div> + <div className="flex justify-end gap-4"> + <Button + variant="outline" + onClick={stepper.prev} + disabled={isPending} + > + {isPending && <Spinner className="h-4 w-4 mr-2" />} + Back + </Button> + <Button type="submit" disabled={isPending}> + {isPending && <Spinner className="h-4 w-4 mr-2" />} + Submit + </Button> + </div> + </div> + </form> + </Form> + ); +} diff --git a/src/app/(main)/agents/create/_components/form-stepper.tsx b/src/app/(main)/agents/create/_components/form-stepper.tsx new file mode 100644 index 0000000..c54d6ee --- /dev/null +++ b/src/app/(main)/agents/create/_components/form-stepper.tsx @@ -0,0 +1,350 @@ +"use client"; + +import * as React from "react"; + +import Link from "next/link"; + +import { z } from "zod"; +import { useForm, UseFormReturn } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; + +import { useMutation, useQueryClient } from "@tanstack/react-query"; + +import axios from "axios"; + +import { Braces, Check, Code, MessageCircle } from "lucide-react"; + +import { toast } from "sonner"; +import confetti from "canvas-confetti"; +import { defineStepper, Stepper } from "@stepperize/react"; + +import { createAgentSchema } from "../schemas/create-agent-schema"; + +import { cn } from "@/lib/utils"; +import { Tables } from "@/utils/supabase/database.types"; +import { createClient } from "@/utils/supabase/client"; + +import { Button, buttonVariants } from "@/components/ui/button"; +import { Separator } from "@/components/ui/separator"; + +import CardBackground from "@/components/card-background"; +import AgentForm from "./agent-form"; + +const data = [ + { + id: "agentType", + title: "Agent Type", + description: "Select how your Agent will interact", + }, + { + id: "agentForm", + title: "Agent Form", + description: "Enter your agent informations", + }, + { id: "complete", title: "Complete", description: "Checkout complete" }, +]; + +const { useStepper, steps, utils } = defineStepper(...data); + +const triggerConfetti = () => { + const duration = 5 * 1000; + const animationEnd = Date.now() + duration; + const defaults = { startVelocity: 30, spread: 360, ticks: 60, zIndex: 0 }; + + const randomInRange = (min: number, max: number) => + Math.random() * (max - min) + min; + + const interval = window.setInterval(() => { + const timeLeft = animationEnd - Date.now(); + + if (timeLeft <= 0) { + return clearInterval(interval); + } + + const particleCount = 50 * (timeLeft / duration); + confetti({ + ...defaults, + particleCount, + origin: { x: randomInRange(0.1, 0.3), y: Math.random() - 0.2 }, + }); + confetti({ + ...defaults, + particleCount, + origin: { x: randomInRange(0.7, 0.9), y: Math.random() - 0.2 }, + }); + }, 250); +}; + +export default function FormStepper() { + const [agentId, setAgentId] = React.useState(""); + const [agentName, setAgenName] = React.useState(""); + + const stepper = useStepper(); + + const currentIndex = utils.getIndex(stepper.current.id); + + const form = useForm<z.infer<typeof createAgentSchema>>({ + resolver: zodResolver(createAgentSchema), + defaultValues: { + userId: "", + name: "", + description: "", + modelType: "general", + }, + mode: "onChange", + }); + + const queryClient = useQueryClient(); + + const createAgentMutation = useMutation({ + mutationFn: async (values: z.infer<typeof createAgentSchema>) => { + const { modelType, userId, ...rest } = values; + + const supabase = createClient(); + + const url = encodeURI( + `https://ai-endpoint-one.dev3vds1.link/ai-image/${values.description}` + ); + + const json = await axios.get(url); + + const response = await supabase + .from("agents") + .insert({ + ...rest, + model_type: "general", + image_url: json.data.url, + user_id: userId, + conversation: 0, + last_conv: null, + }) + .select() + .limit(1) + .single(); + + if (response.error) throw new Error(response.error.message); + + return response.data; + }, + onSuccess: (data: Tables<"agents">) => { + queryClient.invalidateQueries({ + queryKey: ["agents"], + }); + triggerConfetti(); + stepper.next(); + + setAgentId(data.id.toString()); + setAgenName(data.name); + + stepper.next(); + }, + onError: (err) => { + toast.error(err.message); + }, + }); + + const handleSubmit = (values: z.infer<typeof createAgentSchema>) => { + createAgentMutation.mutate(values); + }; + + return ( + <CardBackground> + {/* form title */} + <div className="flex justify-between mb-6"> + <div> + <h2 className="text-primary text-lg font-bold mb-1">Agent Form</h2> + <p className="text-sm text-muted-foreground"> + {stepper.current.description} + </p> + </div> + <div className="flex items-center gap-2"> + <span className="text-sm text-muted-foreground"> + Step {currentIndex + 1} of {steps.length} + </span> + <div /> + </div> + </div> + {/* form nav */} + <nav aria-label="Checkout Steps" className="group mb-6"> + <ol + className="flex items-center justify-between gap-2" + aria-orientation="horizontal" + > + {stepper.all.map((step, index, array) => ( + <React.Fragment key={step.id}> + <li className="flex items-center gap-4 flex-shrink-0"> + <Button + type="button" + role="tab" + variant={index <= currentIndex ? "default" : "outline"} + aria-current={ + stepper.current.id === step.id ? "step" : undefined + } + aria-posinset={index + 1} + aria-setsize={steps.length} + aria-selected={stepper.current.id === step.id} + className="flex size-10 items-center justify-center rounded-full" + > + {index + 1} + </Button> + <span className="text-sm font-medium">{step.title}</span> + </li> + {index < array.length - 1 && ( + <Separator + className={`flex-1 ${ + index < currentIndex ? "bg-primary" : "bg-muted" + }`} + /> + )} + </React.Fragment> + ))} + </ol> + </nav> + {/* form content */} + <div className="space-y-4"> + {stepper.switch({ + agentType: () => <AgentTypeComponent stepper={stepper} />, + agentForm: () => ( + <AgentFormComponent + stepper={stepper} + form={form} + isPending={createAgentMutation.isPending} + onSubmit={handleSubmit} + /> + ), + complete: () => ( + <CompleteComponent agentId={agentId} agentName={agentName} /> + ), + })} + </div> + </CardBackground> + ); +} + +const AgentTypeComponent = ({ + stepper, +}: { + stepper: Stepper< + { + id: string; + title: string; + description: string; + }[] + >; +}) => { + const agentTypes = [ + { + icon: MessageCircle, + heading: "Chat", + description: "Access from our website", + }, + { + icon: Code, + heading: "CLI", + description: "Access from terminal", + }, + { + icon: Braces, + heading: "API", + description: "Access with API", + }, + ]; + + return ( + <> + <div className="grid grid-cols-3 gap-4"> + {agentTypes.map((agentType, idx) => ( + <Button + disabled={idx !== 0} + key={idx} + variant={"outline"} + className={cn( + idx === 0 && + "bg-accent-foreground hover:bg-accent-foreground border-primary", + "py-24 border-2" + )} + > + <div className="flex flex-col items-center space-y-3"> + <agentType.icon className="h-9 w-9" /> + <p className="text-xl font-bold">{agentType.heading}</p> + <p className="text-muted-foreground">{agentType.description}</p> + </div> + </Button> + ))} + </div> + {/* form footer */} + <div> + <div className="flex justify-end gap-4"> + <Button variant="outline" disabled={true}> + Back + </Button> + <Button onClick={stepper.next}>Next</Button> + </div> + </div> + </> + ); +}; + +const AgentFormComponent = ({ + stepper, + form, + onSubmit, + isPending, +}: { + stepper: Stepper< + { + id: string; + title: string; + description: string; + }[] + >; + form: UseFormReturn<z.infer<typeof createAgentSchema>, any, undefined>; + onSubmit: (values: z.infer<typeof createAgentSchema>) => void; + isPending: boolean; +}) => { + return ( + <AgentForm + stepper={stepper} + form={form} + onSubmit={onSubmit} + isPending={isPending} + /> + ); +}; + +const CompleteComponent = ({ + agentId, + agentName, +}: { + agentId: string; + agentName: string; +}) => { + return ( + <> + <div className="flex flex-col justify-center items-center py-4"> + <div className="h-12 w-12 flex flex-col justify-center items-center rounded-full bg-green-300 "> + <Check className="h-6 w-6 text-green-800" /> + </div> + <h3 className="text-lg py-4 font-bold">Agent succesfully created!</h3> + <p className="text-muted-foreground"> + You can try to have a conversation with your agent. + </p> + <Link + href={`/agents/${agentId}`} + target="blank" + className="text-blue-500 hover:underline" + > + Chat with {agentName} + </Link> + </div> + {/* form footer */} + <div> + <div className="flex justify-end gap-4"> + <Link href="/" className={buttonVariants({ variant: "outline" })}> + Back to home + </Link> + </div> + </div> + </> + ); +}; diff --git a/src/app/(main)/agents/create/_components/title.tsx b/src/app/(main)/agents/create/_components/title.tsx new file mode 100644 index 0000000..c14c4ec --- /dev/null +++ b/src/app/(main)/agents/create/_components/title.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { motion } from "framer-motion"; + +import SparklesText from "@/components/ui/sparkles-text"; + +const ease = [0.16, 1, 0.3, 1]; + +export default function Title() { + return ( + <motion.div + initial={{ opacity: 0, y: 30 }} + animate={{ opacity: 1, y: 0 }} + transition={{ duration: 0.4, ease }} + > + <SparklesText text="Create your own agent" className="mb-8 text-5xl" /> + </motion.div> + ); +} diff --git a/src/app/(main)/agents/create/page.tsx b/src/app/(main)/agents/create/page.tsx new file mode 100644 index 0000000..d275a15 --- /dev/null +++ b/src/app/(main)/agents/create/page.tsx @@ -0,0 +1,27 @@ +import { cn } from "@/lib/utils"; + +import AnimatedGridPattern from "@/components/ui/animated-grid-pattern"; + +import FormStepper from "./_components/form-stepper"; +import Title from "./_components/title"; + +export default function CreateAgentPage() { + return ( + <section className="relative flex min-h-[calc(100vh-64px)] w-full py-4 items-center justify-center overflow-hidden rounded-lg border bg-background"> + <div className="layout flex flex-col h-full justify-center items-center gap-8"> + <Title /> + <FormStepper /> + </div> + <AnimatedGridPattern + numSquares={30} + maxOpacity={0.1} + duration={3} + repeatDelay={1} + className={cn( + "[mask-image:radial-gradient(500px_circle_at_center,white,transparent)]", + "inset-x-0 inset-y-[-30%] h-[200%] skew-y-12" + )} + /> + </section> + ); +} diff --git a/src/app/(main)/agents/create/schemas/create-agent-schema.tsx b/src/app/(main)/agents/create/schemas/create-agent-schema.tsx new file mode 100644 index 0000000..efde2e9 --- /dev/null +++ b/src/app/(main)/agents/create/schemas/create-agent-schema.tsx @@ -0,0 +1,40 @@ +import { z } from "zod"; + +export const createAgentSchema = z.object({ + userId: z.string(), + name: z + .string({ + required_error: "Name is required", + }) + .min(2, { + message: "Minimum Name is 2 characters.", + }) + .max(30, { + message: "Maximum Name is 30 characters.", + }), + description: z + .string({ + required_error: "Description is required", + }) + .min(2, { + message: "Minimum Description is 2 characters.", + }) + .max(200, { + message: "Maximum Description is 200 characters.", + }), + modelType: z.enum([ + "roleplay", + "programming", + "marketing", + "marketing_seo", + "technology", + "science", + "translation", + "legal", + "finance", + "health", + "trivia", + "academia", + "general", + ]), +}); diff --git a/src/app/(main)/explore/_components/agent-card.tsx b/src/app/(main)/explore/_components/agent-card.tsx index 83d382e..3af99dc 100644 --- a/src/app/(main)/explore/_components/agent-card.tsx +++ b/src/app/(main)/explore/_components/agent-card.tsx @@ -1,47 +1,16 @@ import React from "react"; +import Link from "next/link"; import Image from "next/image"; -import { z } from "zod"; -import { useForm } from "react-hook-form"; -import { zodResolver } from "@hookform/resolvers/zod"; - import { Play } from "lucide-react"; import { formatDate } from "@/lib/utils"; import { Tables } from "@/utils/supabase/database.types"; -import { Button } from "@/components/ui/button"; - -import { - Dialog, - DialogClose, - DialogContent, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "@/components/ui/dialog"; -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form"; import { Badge } from "@/components/ui/badge"; - -import Spinner from "@/components/spinner"; -import { Textarea } from "@/components/ui/textarea"; -import clsx from "clsx"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; - -import axios, { AxiosError } from "axios"; -import { toast } from "sonner"; -import { createClient } from "@/utils/supabase/client"; +import { buttonVariants } from "@/components/ui/button"; type AgentCardProps = { data: Tables<"agents"> }; @@ -57,106 +26,6 @@ export default function AgentCard(props: AgentCardProps) { last_conv, } = props.data; - const [openDialogUpdate, setOpenDialogUpdate] = React.useState(false); - - const formSchema = z.object({ - question: z - .string({ - required_error: "Question is required", - }) - .min(2, { - message: "Minimum Question is 2 characters.", - }), - }); - - const form = useForm<z.infer<typeof formSchema>>({ - resolver: zodResolver(formSchema), - defaultValues: { - question: "", - }, - mode: "onChange", - }); - - const queryClient = useQueryClient(); - - const mutation = useMutation({ - mutationFn: async (values: z.infer<typeof formSchema>) => { - const supabase = createClient(); - - const { data: existingAgent } = await supabase - .from("agents") - .select("*") - .eq("id", id); - - const { data, error } = await supabase - .from("agents") - .update({ - conversation: existingAgent ? existingAgent[0].conversation + 1 : 0, - last_conv: new Date().toISOString(), - }) - .eq("id", id) - .select(); - - const url = encodeURI( - `https://ai-endpoint-one.dev3vds1.link/deepinfra-ai/${name}/${model_type}/${description}/${values.question}` - ); - - const json = await axios.get(url); - - return json.data; - }, - onSuccess: () => { - queryClient.invalidateQueries({ - queryKey: ["agents"], - }); - }, - onError: (error) => { - if (error instanceof AxiosError) { - if (error.response) { - // The request was made and the server responded with a status code - // that falls out of the range of 2xx - const errResponse = error.response.data; - console.log({ errResponse }); - // if (errResponse.errors && Array.isArray(errResponse.errors)) { - // errResponse.errors.forEach( - // (inputErr: { field: string; message: string }) => { - // toast.error(`Error field : ${inputErr.field}`, { - // description: inputErr.message, - // }); - // } - // ); - // } - // if (errResponse.code) { - // toast.error(errResponse?.code, { - // description: errResponse?.message, - // }); - // } - } else if (error.request) { - // The request was made but no response was received - // `error.request` is an instance of XMLHttpRequest in the browser and an instance of - // http.ClientRequest in node.js - toast.error("No response from the server", { - description: "Failed to fetch the data, server returns null.", - }); - } else { - // Something happened in setting up the request that triggered an Error - toast.error("Failed to set up the request", { - description: "There is something wrong when setting up the request", - }); - } - } - // toast.error(err.message); - }, - }); - - const onSubmit = (values: z.infer<typeof formSchema>) => { - mutation.mutate(values); - }; - - const { - formState: { errors }, - } = form; - return ( <li className="flex flex-col rounded-lg p-4 border border-accent-foreground hover:shadow-sm transition-shadow duration-200"> <figure className="overflow-hidden relative rounded-lg object-cover border mb-3 w-full h-[200px]"> @@ -184,124 +53,14 @@ export default function AgentCard(props: AgentCardProps) { <h3 className="text-xl font-semibold mb-2 truncate">{name}</h3> <p className="text-sm text-foreground line-clamp-3 mb-4">{description}</p> <div className="mt-auto grid"> - <Dialog - open={openDialogUpdate} - onOpenChange={(val) => { - form.reset(); - mutation.reset(); - setOpenDialogUpdate(val); - }} + <Link + href={`/agents/${id}`} + target="blank" + className={buttonVariants({ variant: "outline" })} > - <DialogTrigger asChild> - <Button size={"sm"} variant={"outline"}> - <Play className="h-4 w-4 mr-2" /> - <span>Try it</span> - </Button> - </DialogTrigger> - <DialogContent className="w-[90%] max-h-[90vh] max-w-xl rounded-md overflow-y-scroll"> - <DialogHeader> - <DialogTitle>Try Agent</DialogTitle> - <DialogDescription> - Try to ask a question to our agent - </DialogDescription> - </DialogHeader> - <div> - <figure className="overflow-hidden relative rounded-lg object-cover border mb-3 w-full h-[200px]"> - <Image - className="w-full object-cover" - src={image_url ? image_url : "/placeholder.png"} - fill={true} - alt={name} - /> - <div className="h-full w-full absolute top-0 left-0" /> - </figure> - <div className="flex items-center justify-between mb-3"> - <Badge className="mb-2" variant={"secondary"}> - {conversation} chats - </Badge> - <p className="mb-2 text-primary"> - <time dateTime={created_at} className="text-xs"> - Last Active:{" "} - <span className="font-bold"> - {last_conv ? formatDate(last_conv) : "-"} - </span> - </time> - </p> - </div> - <ul className="text-sm space-y-3 mb-3"> - <li> - <h3 className="font-bold">Name:</h3> - <p className="text-gray-500">{name}</p> - </li> - <li> - <h3 className="font-bold">Description:</h3> - <p className="text-gray-500">{description}</p> - </li> - </ul> - <Form {...form}> - <form - onSubmit={form.handleSubmit(onSubmit)} - className="space-y-3" - > - <FormField - control={form.control} - name="question" - render={({ field }) => ( - <FormItem> - <FormLabel className="font-bold">Question:</FormLabel> - <FormControl> - <Textarea - rows={4} - placeholder="For answering daily questions." - className={clsx( - errors.question && - "focus-visible:ring-destructive" - )} - {...field} - /> - </FormControl> - <FormMessage /> - </FormItem> - )} - /> - {mutation.isSuccess && ( - <> - <h3 className="text-sm font-bold">Answer:</h3> - <blockquote className="border-l-2 pl-6 italic"> - {mutation.data.response} - </blockquote> - </> - )} - <DialogFooter className="mt-4 flex justify-end space-x-2"> - <DialogClose asChild> - <Button - type="button" - variant="outline" - disabled={mutation.isPending} - size="sm" - > - {mutation.isPending && ( - <Spinner className="mr-2 h-4 w-4 " /> - )} - Cancel - </Button> - </DialogClose> - <Button - type="submit" - disabled={mutation.isPending} - size="sm" - > - {mutation.isPending && ( - <Spinner className="mr-2 h-4 w-4 " /> - )} - Submit - </Button> - </DialogFooter> - </form> - </Form> - </div> - </DialogContent> - </Dialog> + <Play className="h-4 w-4 mr-2" /> + <span>Try it</span> + </Link> </div> </li> ); diff --git a/src/app/(main)/explore/_components/agent-list.tsx b/src/app/(main)/explore/_components/agent-list.tsx index b9d7445..5a4a7ee 100644 --- a/src/app/(main)/explore/_components/agent-list.tsx +++ b/src/app/(main)/explore/_components/agent-list.tsx @@ -1,25 +1,29 @@ "use client"; +import Image from "next/image"; +import Link from "next/link"; + import { parseAsInteger, useQueryState } from "nuqs"; import { useQuery } from "@tanstack/react-query"; -import { ChevronLeft, ChevronRight, Search } from "lucide-react"; +import { BadgePlus, ChevronLeft, ChevronRight, Search } from "lucide-react"; + +import PostgrestError from "@/lib/config"; +import { cn } from "@/lib/utils"; + +import { createClient } from "@/utils/supabase/client"; import { Input } from "@/components/ui/input"; +import { Button, buttonVariants } from "@/components/ui/button"; import { Pagination, PaginationContent, PaginationItem, } from "@/components/ui/pagination"; -import { createClient } from "@/utils/supabase/client"; - -import { Button } from "@/components/ui/button"; - -import AgentCardSkeleton from "./agent-card-skeleton"; import AgentCard from "./agent-card"; -import { ChatFloatingButton } from "@/components/chat-floating-button"; +import AgentCardSkeleton from "./agent-card-skeleton"; const DATA_DISPLAY = 6; @@ -61,85 +65,106 @@ export function AgentList() { paginationFilter * DATA_DISPLAY + DATA_DISPLAY - 1 ); + console.log(response); + if (response.error) throw new PostgrestError(response.error); + return response; }, }); return ( <> - <section className="group pt-8 pb-10 min-h-[50vh] "> - <div className="layout"> - <h1 className="mb-4 text-3xl font-bold text-foreground sm:text-4xl"> - Agents - </h1> - <div className="mb-8 flex flex-col sm:flex-row justify-between"> - <div className="relative"> - <Input - aria-label="search" - id="search" - type="search" - placeholder="Search..." - className="min-w-64 pl-7" - value={searchFilter} - onChange={(e) => { - setPaginationFilter(0); - e.target.value === "" - ? setSearchFilter(null) - : setSearchFilter(e.target.value); - }} - /> - <Search className="absolute w-4 h-4 left-2 top-1/2 -translate-y-1/2 text-gray-300" /> - </div> - </div> - <ul className="grid gap-8 mb-10 sm:grid-cols-2 lg:grid-cols-3"> - {isLoading && - [...Array(6)].map((_, idx) => ( - <li key={idx}> - <AgentCardSkeleton /> - </li> - ))} - {agentsData && - agentsData.data?.map((agent) => ( - <AgentCard key={agent.name} data={agent} /> - ))} - </ul> - {agentsData ? ( - <Pagination> - <PaginationContent> - <PaginationItem> - <Button - variant={"outline"} - size={"icon"} - disabled={paginationFilter === 0} - onClick={() => setPaginationFilter((old) => old - 1)} - > - <ChevronLeft className="h-4 w-4" /> - </Button> - </PaginationItem> - <p className="text-sm font-semibold text-gray-400"> - Page {paginationFilter + 1} of{" "} - {agentsData.count - ? Math.ceil(agentsData.count / DATA_DISPLAY) - : 1} - </p> - <PaginationItem> - <Button - variant={"outline"} - size={"icon"} - disabled={ - paginationFilter + 1 === - Math.ceil(agentsData.count! / DATA_DISPLAY) - } - onClick={() => setPaginationFilter((old) => old + 1)} - > - <ChevronRight className="h-4 w-4" /> - </Button> - </PaginationItem> - </PaginationContent> - </Pagination> - ) : null} + <div className="mb-8 flex flex-col sm:flex-row justify-between"> + <div className="relative"> + <Input + aria-label="search" + id="search" + type="search" + placeholder="Search..." + className="min-w-64 pl-7" + value={searchFilter} + onChange={(e) => { + setPaginationFilter(0); + e.target.value === "" + ? setSearchFilter(null) + : setSearchFilter(e.target.value); + }} + /> + <Search className="absolute w-4 h-4 left-2 top-1/2 -translate-y-1/2 text-gray-300" /> </div> - </section> + <Link + href={`${process.env.NEXT_PUBLIC_DASHBOARD_URL!}/agents/create`} + className={cn( + buttonVariants({ variant: "default" }), + "w-full sm:w-auto text-background flex gap-2" + )} + > + <BadgePlus className="h-6 w-6" /> + Create new Agent + </Link> + </div> + {agentsData && agentsData.data.length === 0 && ( + <div className="flex flex-col justify-center items-center "> + <figure className="relative w-full sm:w-1/2 h-72 sm:h-96 mb-6"> + <Image + className="object-cover" + src="/empty-data.jpg" + fill={true} + alt="Empty data" + /> + </figure> + <h1 className="text-xl font-bold">No data found</h1> + </div> + )} + <ul className="grid gap-8 mb-10 sm:grid-cols-2 lg:grid-cols-3"> + {isLoading && + [...Array(6)].map((_, idx) => ( + <li key={idx}> + <AgentCardSkeleton /> + </li> + ))} + {agentsData && + agentsData.data?.map((agent) => ( + <AgentCard key={agent.name} data={agent} /> + ))} + </ul> + {agentsData ? ( + <Pagination> + <PaginationContent> + <PaginationItem> + <Button + variant={"outline"} + size={"icon"} + disabled={paginationFilter === 0} + onClick={() => setPaginationFilter((old) => old - 1)} + > + <ChevronLeft className="h-4 w-4" /> + </Button> + </PaginationItem> + <p className="text-sm font-semibold text-gray-400"> + Page {paginationFilter + 1} of{" "} + {agentsData.count + ? Math.ceil(agentsData.count / DATA_DISPLAY) + : 1} + </p> + <PaginationItem> + <Button + variant={"outline"} + size={"icon"} + disabled={ + agentsData.count === 0 + ? true + : paginationFilter + 1 === + Math.ceil(agentsData.count! / DATA_DISPLAY) + } + onClick={() => setPaginationFilter((old) => old + 1)} + > + <ChevronRight className="h-4 w-4" /> + </Button> + </PaginationItem> + </PaginationContent> + </Pagination> + ) : null} </> ); } diff --git a/src/app/(main)/explore/page.tsx b/src/app/(main)/explore/page.tsx index b76bc6a..c664b8a 100644 --- a/src/app/(main)/explore/page.tsx +++ b/src/app/(main)/explore/page.tsx @@ -3,8 +3,15 @@ import { AgentList } from "./_components/agent-list"; export default function Explore() { return ( - <Suspense> - <AgentList /> - </Suspense> + <section className="group pt-8 pb-10 min-h-[50vh] "> + <div className="layout"> + <h1 className="mb-4 text-3xl font-bold text-foreground sm:text-4xl"> + Agents + </h1> + <Suspense> + <AgentList /> + </Suspense> + </div> + </section> ); } diff --git a/src/app/(marketing)/blog/[slug]/page.tsx b/src/app/(marketing)/blog/[slug]/page.tsx deleted file mode 100644 index 1c2520d..0000000 --- a/src/app/(marketing)/blog/[slug]/page.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import Author from "@/components/blog-author"; -import CtaSection from "@/components/sections/cta"; -import { getPost } from "@/lib/blog"; -import { siteConfig } from "@/lib/config"; -import { formatDate } from "@/lib/utils"; -import type { Metadata } from "next"; -import Image from "next/image"; -import { notFound } from "next/navigation"; -import { Suspense } from "react"; - -export async function generateMetadata({ - params, -}: { - params: { - slug: string; - }; -}): Promise<Metadata | undefined> { - let post = await getPost(params.slug); - let { - title, - publishedAt: publishedTime, - summary: description, - image, - } = post.metadata; - - return { - title, - description, - openGraph: { - title, - description, - type: "article", - publishedTime, - url: `${siteConfig.url}/blog/${post.slug}`, - images: [ - { - url: image, - }, - ], - }, - twitter: { - card: "summary_large_image", - title, - description, - images: [image], - }, - }; -} - -export default async function Blog({ - params, -}: { - params: { - slug: string; - }; -}) { - let post = await getPost(params.slug); - if (!post) { - notFound(); - } - return ( - <section id="blog"> - <script - type="application/ld+json" - suppressHydrationWarning - dangerouslySetInnerHTML={{ - __html: JSON.stringify({ - "@context": "https://schema.org", - "@type": "BlogPosting", - headline: post.metadata.title, - datePublished: post.metadata.publishedAt, - dateModified: post.metadata.publishedAt, - description: post.metadata.summary, - image: post.metadata.image - ? `${siteConfig.url}${post.metadata.image}` - : `${siteConfig.url}/blog/${post.slug}/opengraph-image`, - url: `${siteConfig.url}/blog/${post.slug}`, - author: { - "@type": "Person", - name: siteConfig.name, - }, - }), - }} - /> - <div className="mx-auto w-full max-w-[800px] px-4 sm:px-6 lg:px-8 space-y-4 my-12"> - <Suspense - fallback={ - <div className="mb-8 w-full h-64 bg-gray-200 animate-pulse rounded-lg"></div> - } - > - {post.metadata.image && ( - <div className="mb-8"> - <Image - width={1920} - height={1080} - src={post.metadata.image} - alt={post.metadata.title} - className="w-full h-auto rounded-lg border shadow-md" - /> - </div> - )} - </Suspense> - <div className="flex flex-col"> - <h1 className="title font-medium text-3xl tracking-tighter"> - {post.metadata.title} - </h1> - </div> - <div className="flex justify-between items-center text-sm"> - <Suspense fallback={<p className="h-5" />}> - <div className="flex items-center space-x-2"> - <time - dateTime={post.metadata.publishedAt} - className="text-sm text-gray-500" - > - {formatDate(post.metadata.publishedAt)} - </time> - </div> - </Suspense> - </div> - <div className="flex items-center space-x-2"> - <Author - twitterUsername={post.metadata.author} - name={post.metadata.author} - image={"/author.jpg"} - /> - </div> - <article - className="prose dark:prose-invert mx-auto max-w-full" - dangerouslySetInnerHTML={{ __html: post.source }} - ></article> - </div> - <CtaSection /> - </section> - ); -} diff --git a/src/app/(marketing)/blog/layout.tsx b/src/app/(marketing)/blog/layout.tsx deleted file mode 100644 index 4c44456..0000000 --- a/src/app/(marketing)/blog/layout.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import Footer from "@/components/sections/footer"; -import Header from "@/components/sections/header"; - -interface MarketingLayoutProps { - children: React.ReactNode; -} - -export default async function Layout({ children }: MarketingLayoutProps) { - return ( - <> - <Header /> - <main>{children}</main> - <Footer /> - </> - ); -} diff --git a/src/app/(marketing)/blog/page.tsx b/src/app/(marketing)/blog/page.tsx deleted file mode 100644 index 30f740a..0000000 --- a/src/app/(marketing)/blog/page.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import BlogCard from "@/components/blog-card"; -import { getBlogPosts } from "@/lib/blog"; -import { siteConfig } from "@/lib/config"; -import { constructMetadata } from "@/lib/utils"; - -export const metadata = constructMetadata({ - title: "Blog", - description: `Latest news and updates from ${siteConfig.name}.`, -}); - -export default async function Blog() { - const allPosts = await getBlogPosts(); - - const articles = await Promise.all( - allPosts.sort((a, b) => b.publishedAt.localeCompare(a.publishedAt)) - ); - - return ( - <> - <div className="mx-auto w-full max-w-screen-xl px-2.5 lg:px-20 mt-24"> - <div className="text-center py-16"> - <h1 className="text-3xl font-bold text-foreground sm:text-4xl"> - Articles - </h1> - <p className="mt-4 text-xl text-muted-foreground"> - Latest news and updates from {siteConfig.name} - </p> - </div> - </div> - <div className="min-h-[50vh] bg-white/50 shadow-[inset_10px_-50px_94px_0_rgb(199,199,199,0.2)] backdrop-blur-lg"> - <div className="mx-auto grid w-full max-w-screen-xl grid-cols-1 gap-8 px-2.5 py-10 lg:px-20 lg:grid-cols-3"> - {articles.map((data, idx) => ( - <BlogCard key={data.slug} data={data} priority={idx <= 1} /> - ))} - </div> - </div> - </> - ); -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 2880b6c..ac8d7db 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -13,6 +13,8 @@ import { cn, constructMetadata } from "@/lib/utils"; import ReactQueryProvider from "@/providers/react-query-provider"; import { Toaster } from "@/components/ui/sonner"; +import MyPrivyProvider from "@/providers/privy-provider"; + export const metadata: Metadata = constructMetadata({}); export const viewport: Viewport = { @@ -40,18 +42,20 @@ export default function RootLayout({ )} > <ReactQueryProvider> - <NuqsAdapter> - <ThemeProvider - attribute="class" - defaultTheme="light" - enableSystem={false} - > - {children} - {/* <ThemeToggle /> */} - {/* <TailwindIndicator /> */} - <Toaster richColors /> - </ThemeProvider> - </NuqsAdapter> + <MyPrivyProvider> + <NuqsAdapter> + <ThemeProvider + attribute="class" + defaultTheme="light" + enableSystem={false} + > + {children} + {/* <ThemeToggle /> */} + {/* <TailwindIndicator /> */} + <Toaster richColors /> + </ThemeProvider> + </NuqsAdapter> + </MyPrivyProvider> </ReactQueryProvider> </body> </html> diff --git a/src/components/card-background.tsx b/src/components/card-background.tsx new file mode 100644 index 0000000..388c4f1 --- /dev/null +++ b/src/components/card-background.tsx @@ -0,0 +1,31 @@ +"use client"; + +import React from "react"; + +import { motion } from "framer-motion"; + +import ShineBorder from "@/components/ui/shine-border"; + +const ease = [0.16, 1, 0.3, 1]; + +export default function CardBackground({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <motion.div + initial={{ opacity: 0, y: 30 }} + animate={{ opacity: 1, y: 0 }} + transition={{ delay: 0.2, duration: 0.4, ease }} + className="w-full" + > + <ShineBorder + className="mb-8 z-20 relative p-6 mx-auto w-full max-w-2xl flex flex-col overflow-hidden rounded-lg border bg-background md:shadow-xl" + color={["#f8e5da", "#FE8FB5", "#812f20"]} + > + {children} + </ShineBorder> + </motion.div> + ); +} diff --git a/src/components/drawer.tsx b/src/components/drawer.tsx index 5160101..bb6bc71 100644 --- a/src/components/drawer.tsx +++ b/src/components/drawer.tsx @@ -1,5 +1,5 @@ import { Icons } from "@/components/icons"; -import { buttonVariants } from "@/components/ui/button"; +import { Button, buttonVariants } from "@/components/ui/button"; import { Drawer, DrawerContent, @@ -9,10 +9,15 @@ import { } from "@/components/ui/drawer"; import { siteConfig } from "@/lib/config"; import { cn } from "@/lib/utils"; +import { LoginModalOptions } from "@privy-io/react-auth"; import Link from "next/link"; import { IoMenuSharp } from "react-icons/io5"; -export default function drawerDemo() { +export default function drawerDemo({ + login, +}: { + login: (options?: LoginModalOptions | React.MouseEvent<any, any>) => void; +}) { return ( <Drawer> <DrawerTrigger> @@ -47,22 +52,12 @@ export default function drawerDemo() { </nav> </DrawerHeader> <DrawerFooter> - <Link - href="/login" - className={buttonVariants({ variant: "outline" })} + <Button + onClick={login} + className={buttonVariants({ variant: "default" })} > - Login - </Link> - <Link - href="/signup" - className={cn( - buttonVariants({ variant: "default" }), - "w-full sm:w-auto text-background flex gap-2" - )} - > - <Icons.logo className="h-6 w-6" /> - Get Started for Free - </Link> + Connect Wallet + </Button> </DrawerFooter> </DrawerContent> </Drawer> diff --git a/src/components/sections/cta.tsx b/src/components/sections/cta.tsx index e81578c..b12baf2 100644 --- a/src/components/sections/cta.tsx +++ b/src/components/sections/cta.tsx @@ -17,7 +17,7 @@ export default function CtaSection() { > <div className="flex flex-col w-full sm:flex-row items-center justify-center space-y-4 sm:space-y-0 sm:space-x-4 pt-4"> <Link - href={`${process.env.NEXT_PUBLIC_DASHBOARD_URL}/login`} + href={`${process.env.NEXT_PUBLIC_DASHBOARD_URL}/explore`} className={cn( buttonVariants({ variant: "default" }), "w-full sm:w-auto text-background flex gap-2" diff --git a/src/components/sections/header.tsx b/src/components/sections/header.tsx index b231fd6..fb773c3 100644 --- a/src/components/sections/header.tsx +++ b/src/components/sections/header.tsx @@ -1,19 +1,52 @@ "use client"; -import Drawer from "@/components/drawer"; -import { Icons } from "@/components/icons"; -import Menu from "@/components/menu"; -import { buttonVariants } from "@/components/ui/button"; -import { siteConfig } from "@/lib/config"; -import { cn } from "@/lib/utils"; -import Image from "next/image"; +import React from "react"; + import Link from "next/link"; -import { useEffect, useState } from "react"; +import Image from "next/image"; +import { useRouter } from "next/navigation"; + +import { ChevronsUpDown, LogOut } from "lucide-react"; + +import { useLogin, usePrivy } from "@privy-io/react-auth"; + +import { cn, getInitials } from "@/lib/utils"; +import { siteConfig } from "@/lib/config"; + +import { toast } from "sonner"; + +import Drawer from "@/components/drawer"; +import { Avatar, AvatarFallback } from "@/components/ui/avatar"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { Button, buttonVariants } from "@/components/ui/button"; +import Spinner from "../spinner"; export default function Header() { - const [addBorder, setAddBorder] = useState(false); + const [addBorder, setAddBorder] = React.useState(false); - useEffect(() => { + const { ready, authenticated, logout, user } = usePrivy(); + const router = useRouter(); + + const { login } = useLogin({ + onComplete: ({ user, isNewUser, wasAlreadyAuthenticated, loginMethod }) => { + if (!wasAlreadyAuthenticated) toast.success("Login success"); + + router.replace("/"); + }, + onError: (error) => { + console.log(error); + toast.error(error); + }, + }); + + React.useEffect(() => { const handleScroll = () => { if (window.scrollY > 20) { setAddBorder(true); @@ -31,7 +64,7 @@ export default function Header() { return ( <header - className={" sticky top-0 z-50 py-2 bg-background/60 backdrop-blur"} + className={"h-16 sticky top-0 z-50 py-2 bg-background/60 backdrop-blur"} > <div className="flex justify-between items-center container"> <Link @@ -46,35 +79,151 @@ export default function Header() { alt="logo" className="rounded-md shadow" /> - {/* <Icons.logoCrystal className="w-auto h-[28px]" /> */} <span className="font-bold text-xl">{siteConfig.name}</span> </Link> <div className="hidden lg:block"> <div className="flex items-center "> - {/* <nav className="mr-10"> - <Menu /> - </nav> */} - <div className="gap-2 flex"> - <Link href="/" className={buttonVariants({ variant: "default" })}> - Connect Wallet - </Link> - {/* <Link - href="/signup" - className={cn( - buttonVariants({ variant: "default" }), - "w-full sm:w-auto text-background flex gap-2" - )} - > - <Icons.logo className="h-6 w-6" /> - Get Started for Free - </Link> */} + {!ready ? ( + <Spinner /> + ) : ( + <> + {authenticated && user ? ( + <DropdownMenu> + <DropdownMenuTrigger className="max-w-48 flex items-center gap-2 border p-2 rounded-md"> + <Avatar className="h-8 w-8 rounded-lg"> + <AvatarFallback className="rounded-lg"> + {user.email ? getInitials(user.email.address) : "U"} + </AvatarFallback> + </Avatar> + <div className="grid flex-1 text-left text-sm leading-tight"> + <span className="truncate font-semibold"> + {user.email && user.email.address} + {user.wallet && user.wallet.address} + </span> + <span className="truncate text-xs">{user.id}</span> + </div> + <ChevronsUpDown className="ml-auto size-4" /> + </DropdownMenuTrigger> + <DropdownMenuContent + className="w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg" + side={"bottom"} + align="end" + sideOffset={4} + > + <DropdownMenuLabel className="p-0 font-normal"> + <div className="flex items-center gap-2 px-1 py-1.5 text-left text-sm"> + <Avatar className="h-8 w-8 rounded-lg"> + <AvatarFallback className="rounded-lg"> + {user.email + ? getInitials(user.email.address) + : "U"} + </AvatarFallback> + </Avatar> + <div className="grid flex-1 text-left text-sm leading-tight"> + <span className="truncate font-semibold"> + {user.email?.address} + </span> + <span className="truncate text-xs"> + {user.id} + </span> + </div> + </div> + </DropdownMenuLabel> + <DropdownMenuSeparator /> + <DropdownMenuItem + onClick={() => { + logout(); + toast.success("You have been signed out"); + }} + asChild + > + <Button + variant={"ghost"} + className="w-full text-primary " + > + <LogOut /> + Log out + </Button> + </DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + ) : ( + <Button + onClick={login} + className={buttonVariants({ variant: "default" })} + > + Connect Wallet + </Button> + )} + </> + )} </div> </div> </div> - <div className="mt-2 cursor-pointer block lg:hidden"> - <Drawer /> + <div className="ml-2 mt-2 cursor-pointer block lg:hidden"> + {authenticated && user ? ( + <DropdownMenu> + <DropdownMenuTrigger className="max-w-48 flex items-center gap-2 border p-2 rounded-md"> + <Avatar className="hidden sm:block h-8 w-8 rounded-lg"> + <AvatarFallback className="rounded-lg"> + {user.email ? getInitials(user.email.address) : "U"} + </AvatarFallback> + </Avatar> + <div className="grid flex-1 text-left text-sm leading-tight"> + <span className="truncate font-semibold"> + {user.email && user.email.address} + {user.wallet && user.wallet.address} + </span> + <span className="truncate text-xs">{user.id}</span> + </div> + <ChevronsUpDown className="ml-auto size-4" /> + </DropdownMenuTrigger> + <DropdownMenuContent + className="w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg" + side={"bottom"} + align="end" + sideOffset={4} + > + <DropdownMenuLabel className="p-0 font-normal"> + <div className="flex items-center gap-2 px-1 py-1.5 text-left text-sm"> + <Avatar className="h-8 w-8 rounded-lg"> + <AvatarFallback className="rounded-lg"> + {user.email ? getInitials(user.email.address) : "U"} + </AvatarFallback> + </Avatar> + <div className="grid flex-1 text-left text-sm leading-tight"> + <span className="truncate font-semibold"> + {user.email?.address} + </span> + <span className="truncate text-xs">{user.id}</span> + </div> + </div> + </DropdownMenuLabel> + <DropdownMenuSeparator /> + <DropdownMenuItem + onClick={() => { + logout(); + toast.success("You have been signed out"); + }} + asChild + > + <Button variant={"ghost"} className="w-full text-primary "> + <LogOut /> + Log out + </Button> + </DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + ) : ( + <Button + onClick={login} + className={buttonVariants({ variant: "default" })} + > + Connect Wallet + </Button> + )} </div> </div> <hr diff --git a/src/components/sections/hero.tsx b/src/components/sections/hero.tsx index 34731c8..43ca9de 100644 --- a/src/components/sections/hero.tsx +++ b/src/components/sections/hero.tsx @@ -104,7 +104,7 @@ function HeroCTA() { transition={{ delay: 0.8, duration: 0.8, ease }} > <Link - href={`${process.env.NEXT_PUBLIC_DASHBOARD_URL!}`} + href={`${process.env.NEXT_PUBLIC_DASHBOARD_URL!}/agents/create`} className={cn( buttonVariants({ variant: "default" }), "w-full sm:w-auto text-background flex gap-2" diff --git a/src/components/sections/stats.tsx b/src/components/sections/stats.tsx new file mode 100644 index 0000000..6ff53e6 --- /dev/null +++ b/src/components/sections/stats.tsx @@ -0,0 +1,47 @@ +import BlurFade from "@/components/magicui/blur-fade"; +import Section from "@/components/section"; +import { Card, CardContent } from "@/components/ui/card"; +import { Brain, Shield, Zap } from "lucide-react"; + +const problems = [ + { + title: "Dynamic Goal Formation", + description: + "Unlike traditional AI systems that rely on predefined objectives, our agents can formulate and prioritize their own goals based on their understanding of the broader context and desired outcomes.", + icon: Brain, + }, + { + title: "Contextual Understanding", + description: + "Our agents don't operate in a vacuum. They grasp the nuances of their environment, understanding not just what's happening, but why it matters and how it affects their objectives.", + icon: Zap, + }, + { + title: "Ethical Framework Integration", + description: + "We've built robust ethical considerations directly into our agents' decision-making processes, ensuring they operate not just effectively, but responsibly and in alignment with human values.", + icon: Shield, + }, +]; + +export default function Statistic() { + return ( + <Section title="Be Different" subtitle="Technology That Sets Us Apart"> + <div className="grid grid-cols-1 md:grid-cols-3 gap-8 mt-12"> + {problems.map((problem, index) => ( + <BlurFade key={index} delay={0.2 + index * 0.2} inView> + <Card className="bg-background border-none shadow-none"> + <CardContent className="p-6 space-y-4"> + <div className="w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center"> + <problem.icon className="w-6 h-6 text-primary" /> + </div> + <h3 className="text-xl font-semibold">{problem.title}</h3> + <p className="text-muted-foreground">{problem.description}</p> + </CardContent> + </Card> + </BlurFade> + ))} + </div> + </Section> + ); +} diff --git a/src/components/ui/animated-grid-pattern.tsx b/src/components/ui/animated-grid-pattern.tsx new file mode 100644 index 0000000..827b7bb --- /dev/null +++ b/src/components/ui/animated-grid-pattern.tsx @@ -0,0 +1,148 @@ +"use client"; + +import { motion } from "motion/react"; +import { useEffect, useId, useRef, useState } from "react"; + +import { cn } from "@/lib/utils"; + +interface AnimatedGridPatternProps { + width?: number; + height?: number; + x?: number; + y?: number; + strokeDasharray?: any; + numSquares?: number; + className?: string; + maxOpacity?: number; + duration?: number; + repeatDelay?: number; +} + +export default function AnimatedGridPattern({ + width = 40, + height = 40, + x = -1, + y = -1, + strokeDasharray = 0, + numSquares = 50, + className, + maxOpacity = 0.5, + duration = 4, + repeatDelay = 0.5, + ...props +}: AnimatedGridPatternProps) { + const id = useId(); + const containerRef = useRef(null); + const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); + const [squares, setSquares] = useState(() => generateSquares(numSquares)); + + function getPos() { + return [ + Math.floor((Math.random() * dimensions.width) / width), + Math.floor((Math.random() * dimensions.height) / height), + ]; + } + + // Adjust the generateSquares function to return objects with an id, x, and y + function generateSquares(count: number) { + return Array.from({ length: count }, (_, i) => ({ + id: i, + pos: getPos(), + })); + } + + // Function to update a single square's position + const updateSquarePosition = (id: number) => { + setSquares((currentSquares) => + currentSquares.map((sq) => + sq.id === id + ? { + ...sq, + pos: getPos(), + } + : sq, + ), + ); + }; + + // Update squares to animate in + useEffect(() => { + if (dimensions.width && dimensions.height) { + setSquares(generateSquares(numSquares)); + } + }, [dimensions, numSquares]); + + // Resize observer to update container dimensions + useEffect(() => { + const resizeObserver = new ResizeObserver((entries) => { + for (let entry of entries) { + setDimensions({ + width: entry.contentRect.width, + height: entry.contentRect.height, + }); + } + }); + + if (containerRef.current) { + resizeObserver.observe(containerRef.current); + } + + return () => { + if (containerRef.current) { + resizeObserver.unobserve(containerRef.current); + } + }; + }, [containerRef]); + + return ( + <svg + ref={containerRef} + aria-hidden="true" + className={cn( + "pointer-events-none absolute inset-0 h-full w-full fill-red-primary/30 stroke-primary/30", + className, + )} + {...props} + > + <defs> + <pattern + id={id} + width={width} + height={height} + patternUnits="userSpaceOnUse" + x={x} + y={y} + > + <path + d={`M.5 ${height}V.5H${width}`} + fill="none" + strokeDasharray={strokeDasharray} + /> + </pattern> + </defs> + <rect width="100%" height="100%" fill={`url(#${id})`} /> + <svg x={x} y={y} className="overflow-visible"> + {squares.map(({ pos: [x, y], id }, index) => ( + <motion.rect + initial={{ opacity: 0 }} + animate={{ opacity: maxOpacity }} + transition={{ + duration, + repeat: 1, + delay: index * 0.1, + repeatType: "reverse", + }} + onAnimationComplete={() => updateSquarePosition(id)} + key={`${x}-${y}-${index}`} + width={width - 1} + height={height - 1} + x={x * width + 1} + y={y * height + 1} + fill="currentColor" + strokeWidth="0" + /> + ))} + </svg> + </svg> + ); +} diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 0000000..51e507b --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,50 @@ +"use client" + +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +const Avatar = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Root + ref={ref} + className={cn( + "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full", + className + )} + {...props} + /> +)) +Avatar.displayName = AvatarPrimitive.Root.displayName + +const AvatarImage = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Image>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Image + ref={ref} + className={cn("aspect-square h-full w-full", className)} + {...props} + /> +)) +AvatarImage.displayName = AvatarPrimitive.Image.displayName + +const AvatarFallback = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Fallback>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Fallback + ref={ref} + className={cn( + "flex h-full w-full items-center justify-center rounded-full bg-muted", + className + )} + {...props} + /> +)) +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/src/components/ui/confetti.tsx b/src/components/ui/confetti.tsx new file mode 100644 index 0000000..49f8527 --- /dev/null +++ b/src/components/ui/confetti.tsx @@ -0,0 +1,149 @@ +import type { ReactNode } from "react"; +import React, { + createContext, + forwardRef, + useCallback, + useEffect, + useImperativeHandle, + useMemo, + useRef, +} from "react"; +import type { + GlobalOptions as ConfettiGlobalOptions, + CreateTypes as ConfettiInstance, + Options as ConfettiOptions, +} from "canvas-confetti"; +import confetti from "canvas-confetti"; + +import { Button, ButtonProps } from "@/components/ui/button"; + +type Api = { + fire: (options?: ConfettiOptions) => void; +}; + +type Props = React.ComponentPropsWithRef<"canvas"> & { + options?: ConfettiOptions; + globalOptions?: ConfettiGlobalOptions; + manualstart?: boolean; + children?: ReactNode; +}; + +export type ConfettiRef = Api | null; + +const ConfettiContext = createContext<Api>({} as Api); + +// Define component first +const ConfettiComponent = forwardRef<ConfettiRef, Props>((props, ref) => { + const { + options, + globalOptions = { resize: true, useWorker: true }, + manualstart = false, + children, + ...rest + } = props; + const instanceRef = useRef<ConfettiInstance | null>(null); + + const canvasRef = useCallback( + (node: HTMLCanvasElement) => { + if (node !== null) { + if (instanceRef.current) return; + instanceRef.current = confetti.create(node, { + ...globalOptions, + resize: true, + }); + } else { + if (instanceRef.current) { + instanceRef.current.reset(); + instanceRef.current = null; + } + } + }, + [globalOptions], + ); + + const fire = useCallback( + async (opts = {}) => { + try { + await instanceRef.current?.({ ...options, ...opts }); + } catch (error) { + console.error("Confetti error:", error); + } + }, + [options], + ); + + const api = useMemo( + () => ({ + fire, + }), + [fire], + ); + + useImperativeHandle(ref, () => api, [api]); + + useEffect(() => { + if (!manualstart) { + (async () => { + try { + await fire(); + } catch (error) { + console.error("Confetti effect error:", error); + } + })(); + } + }, [manualstart, fire]); + + return ( + <ConfettiContext.Provider value={api}> + <canvas ref={canvasRef} {...rest} /> + {children} + </ConfettiContext.Provider> + ); +}); + +// Set display name immediately +ConfettiComponent.displayName = "Confetti"; + +// Export as Confetti +export const Confetti = ConfettiComponent; + +interface ConfettiButtonProps extends ButtonProps { + options?: ConfettiOptions & + ConfettiGlobalOptions & { canvas?: HTMLCanvasElement }; + children?: React.ReactNode; +} + +const ConfettiButtonComponent = ({ + options, + children, + ...props +}: ConfettiButtonProps) => { + const handleClick = async (event: React.MouseEvent<HTMLButtonElement>) => { + try { + const rect = event.currentTarget.getBoundingClientRect(); + const x = rect.left + rect.width / 2; + const y = rect.top + rect.height / 2; + await confetti({ + ...options, + origin: { + x: x / window.innerWidth, + y: y / window.innerHeight, + }, + }); + } catch (error) { + console.error("Confetti button error:", error); + } + }; + + return ( + <Button onClick={handleClick} {...props}> + {children} + </Button> + ); +}; + +ConfettiButtonComponent.displayName = "ConfettiButton"; + +export const ConfettiButton = ConfettiButtonComponent; + +export default Confetti; diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..0fc4c0e --- /dev/null +++ b/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,200 @@ +"use client" + +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + <DropdownMenuPrimitive.SubTrigger + ref={ref} + className={cn( + "flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + inset && "pl-8", + className + )} + {...props} + > + {children} + <ChevronRight className="ml-auto" /> + </DropdownMenuPrimitive.SubTrigger> +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.SubContent>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> +>(({ className, ...props }, ref) => ( + <DropdownMenuPrimitive.SubContent + ref={ref} + className={cn( + "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", + className + )} + {...props} + /> +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> +>(({ className, sideOffset = 4, ...props }, ref) => ( + <DropdownMenuPrimitive.Portal> + <DropdownMenuPrimitive.Content + ref={ref} + sideOffset={sideOffset} + className={cn( + "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", + className + )} + {...props} + /> + </DropdownMenuPrimitive.Portal> +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Item>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + <DropdownMenuPrimitive.Item + ref={ref} + className={cn( + "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + inset && "pl-8", + className + )} + {...props} + /> +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> +>(({ className, children, checked, ...props }, ref) => ( + <DropdownMenuPrimitive.CheckboxItem + ref={ref} + className={cn( + "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", + className + )} + checked={checked} + {...props} + > + <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <DropdownMenuPrimitive.ItemIndicator> + <Check className="h-4 w-4" /> + </DropdownMenuPrimitive.ItemIndicator> + </span> + {children} + </DropdownMenuPrimitive.CheckboxItem> +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> +>(({ className, children, ...props }, ref) => ( + <DropdownMenuPrimitive.RadioItem + ref={ref} + className={cn( + "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", + className + )} + {...props} + > + <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <DropdownMenuPrimitive.ItemIndicator> + <Circle className="h-2 w-2 fill-current" /> + </DropdownMenuPrimitive.ItemIndicator> + </span> + {children} + </DropdownMenuPrimitive.RadioItem> +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Label>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + <DropdownMenuPrimitive.Label + ref={ref} + className={cn( + "px-2 py-1.5 text-sm font-semibold", + inset && "pl-8", + className + )} + {...props} + /> +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Separator>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> +>(({ className, ...props }, ref) => ( + <DropdownMenuPrimitive.Separator + ref={ref} + className={cn("-mx-1 my-1 h-px bg-muted", className)} + {...props} + /> +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes<HTMLSpanElement>) => { + return ( + <span + className={cn("ml-auto text-xs tracking-widest opacity-60", className)} + {...props} + /> + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/src/components/ui/meteors.tsx b/src/components/ui/meteors.tsx new file mode 100644 index 0000000..eb17d30 --- /dev/null +++ b/src/components/ui/meteors.tsx @@ -0,0 +1,43 @@ +"use client"; + +import { useEffect, useState } from "react"; + +import { cn } from "@/lib/utils"; + +interface MeteorsProps extends React.HTMLAttributes<HTMLSpanElement> { + number?: number; +} +export const Meteors = ({ number = 20, ...props }: MeteorsProps) => { + const [meteorStyles, setMeteorStyles] = useState<Array<React.CSSProperties>>( + [], + ); + + useEffect(() => { + const styles = [...new Array(number)].map(() => ({ + top: -5, + left: Math.floor(Math.random() * window.innerWidth) + "px", + animationDelay: Math.random() * 1 + 0.2 + "s", + animationDuration: Math.floor(Math.random() * 8 + 2) + "s", + })); + setMeteorStyles(styles); + }, [number]); + + return ( + <> + {[...meteorStyles].map((style, idx) => ( + // Meteor Head + <span + key={idx} + className={cn( + "pointer-events-none absolute left-1/2 top-1/2 size-0.5 rotate-[215deg] animate-meteor rounded-full bg-slate-500 shadow-[0_0_0_1px_#ffffff10]", + )} + style={style} + {...props} + > + {/* Meteor Tail */} + <div className="pointer-events-none absolute top-1/2 -z-10 h-px w-[50px] -translate-y-1/2 bg-gradient-to-r from-slate-500 to-transparent" /> + </span> + ))} + </> + ); +}; diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx new file mode 100644 index 0000000..12d81c4 --- /dev/null +++ b/src/components/ui/separator.tsx @@ -0,0 +1,31 @@ +"use client" + +import * as React from "react" +import * as SeparatorPrimitive from "@radix-ui/react-separator" + +import { cn } from "@/lib/utils" + +const Separator = React.forwardRef< + React.ElementRef<typeof SeparatorPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> +>( + ( + { className, orientation = "horizontal", decorative = true, ...props }, + ref + ) => ( + <SeparatorPrimitive.Root + ref={ref} + decorative={decorative} + orientation={orientation} + className={cn( + "shrink-0 bg-border", + orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]", + className + )} + {...props} + /> + ) +) +Separator.displayName = SeparatorPrimitive.Root.displayName + +export { Separator } diff --git a/src/components/ui/shine-border.tsx b/src/components/ui/shine-border.tsx new file mode 100644 index 0000000..4ad60fc --- /dev/null +++ b/src/components/ui/shine-border.tsx @@ -0,0 +1,61 @@ +"use client"; + +import { cn } from "@/lib/utils"; + +type TColorProp = string | string[]; + +interface ShineBorderProps { + borderRadius?: number; + borderWidth?: number; + duration?: number; + color?: TColorProp; + className?: string; + children: React.ReactNode; +} + +/** + * @name Shine Border + * @description It is an animated background border effect component with easy to use and configurable props. + * @param borderRadius defines the radius of the border. + * @param borderWidth defines the width of the border. + * @param duration defines the animation duration to be applied on the shining border + * @param color a string or string array to define border color. + * @param className defines the class name to be applied to the component + * @param children contains react node elements. + */ +export default function ShineBorder({ + borderRadius = 8, + borderWidth = 1, + duration = 14, + color = "#000000", + className, + children, +}: ShineBorderProps) { + return ( + <div + style={ + { + "--border-radius": `${borderRadius}px`, + } as React.CSSProperties + } + className={cn( + "relative min-h-[60px] w-fit min-w-[300px] rounded-[--border-radius] bg-white p-3 text-black dark:bg-black dark:text-white", + className, + )} + > + <div + style={ + { + "--border-width": `${borderWidth}px`, + "--border-radius": `${borderRadius}px`, + "--duration": `${duration}s`, + "--mask-linear-gradient": `linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)`, + "--background-radial-gradient": `radial-gradient(transparent,transparent, ${color instanceof Array ? color.join(",") : color},transparent,transparent)`, + } as React.CSSProperties + } + className={`pointer-events-none before:bg-shine-size before:absolute before:inset-0 before:size-full before:rounded-[--border-radius] before:p-[--border-width] before:will-change-[background-position] before:content-[""] before:![-webkit-mask-composite:xor] before:![mask-composite:exclude] before:[background-image:--background-radial-gradient] before:[background-size:300%_300%] before:[mask:--mask-linear-gradient] motion-safe:before:animate-shine`} + ></div> + {children} + </div> + ); +} diff --git a/src/components/ui/sparkles-text.tsx b/src/components/ui/sparkles-text.tsx new file mode 100644 index 0000000..99d2963 --- /dev/null +++ b/src/components/ui/sparkles-text.tsx @@ -0,0 +1,152 @@ +"use client"; + +import { CSSProperties, ReactElement, useEffect, useState } from "react"; +import { motion } from "motion/react"; + +import { cn } from "@/lib/utils"; + +interface Sparkle { + id: string; + x: string; + y: string; + color: string; + delay: number; + scale: number; + lifespan: number; +} + +interface SparklesTextProps { + /** + * @default <div /> + * @type ReactElement + * @description + * The component to be rendered as the text + * */ + as?: ReactElement; + + /** + * @default "" + * @type string + * @description + * The className of the text + */ + className?: string; + + /** + * @required + * @type string + * @description + * The text to be displayed + * */ + text: string; + + /** + * @default 10 + * @type number + * @description + * The count of sparkles + * */ + sparklesCount?: number; + + /** + * @default "{first: '#9E7AFF', second: '#FE8BBB'}" + * @type string + * @description + * The colors of the sparkles + * */ + colors?: { + first: string; + second: string; + }; +} + +const SparklesText: React.FC<SparklesTextProps> = ({ + text, + colors = { first: "#9E7AFF", second: "#FE8BBB" }, + className, + sparklesCount = 10, + ...props +}) => { + const [sparkles, setSparkles] = useState<Sparkle[]>([]); + + useEffect(() => { + const generateStar = (): Sparkle => { + const starX = `${Math.random() * 100}%`; + const starY = `${Math.random() * 100}%`; + const color = Math.random() > 0.5 ? colors.first : colors.second; + const delay = Math.random() * 2; + const scale = Math.random() * 1 + 0.3; + const lifespan = Math.random() * 10 + 5; + const id = `${starX}-${starY}-${Date.now()}`; + return { id, x: starX, y: starY, color, delay, scale, lifespan }; + }; + + const initializeStars = () => { + const newSparkles = Array.from({ length: sparklesCount }, generateStar); + setSparkles(newSparkles); + }; + + const updateStars = () => { + setSparkles((currentSparkles) => + currentSparkles.map((star) => { + if (star.lifespan <= 0) { + return generateStar(); + } else { + return { ...star, lifespan: star.lifespan - 0.1 }; + } + }), + ); + }; + + initializeStars(); + const interval = setInterval(updateStars, 100); + + return () => clearInterval(interval); + }, [colors.first, colors.second, sparklesCount]); + + return ( + <div + className={cn("text-6xl font-bold", className)} + {...props} + style={ + { + "--sparkles-first-color": `${colors.first}`, + "--sparkles-second-color": `${colors.second}`, + } as CSSProperties + } + > + <span className="relative inline-block"> + {sparkles.map((sparkle) => ( + <Sparkle key={sparkle.id} {...sparkle} /> + ))} + <strong>{text}</strong> + </span> + </div> + ); +}; + +const Sparkle: React.FC<Sparkle> = ({ id, x, y, color, delay, scale }) => { + return ( + <motion.svg + key={id} + className="pointer-events-none absolute z-20" + initial={{ opacity: 0, left: x, top: y }} + animate={{ + opacity: [0, 1, 0], + scale: [0, scale, 0], + rotate: [75, 120, 150], + }} + transition={{ duration: 0.8, repeat: Infinity, delay }} + width="21" + height="21" + viewBox="0 0 21 21" + > + <path + d="M9.82531 0.843845C10.0553 0.215178 10.9446 0.215178 11.1746 0.843845L11.8618 2.72026C12.4006 4.19229 12.3916 6.39157 13.5 7.5C14.6084 8.60843 16.8077 8.59935 18.2797 9.13822L20.1561 9.82534C20.7858 10.0553 20.7858 10.9447 20.1561 11.1747L18.2797 11.8618C16.8077 12.4007 14.6084 12.3916 13.5 13.5C12.3916 14.6084 12.4006 16.8077 11.8618 18.2798L11.1746 20.1562C10.9446 20.7858 10.0553 20.7858 9.82531 20.1562L9.13819 18.2798C8.59932 16.8077 8.60843 14.6084 7.5 13.5C6.39157 12.3916 4.19225 12.4007 2.72023 11.8618L0.843814 11.1747C0.215148 10.9447 0.215148 10.0553 0.843814 9.82534L2.72023 9.13822C4.19225 8.59935 6.39157 8.60843 7.5 7.5C8.60843 6.39157 8.59932 4.19229 9.13819 2.72026L9.82531 0.843845Z" + fill={color} + /> + </motion.svg> + ); +}; + +export default SparklesText; diff --git a/src/lib/config.tsx b/src/lib/config.tsx index 7a3cdcc..0b7d87e 100644 --- a/src/lib/config.tsx +++ b/src/lib/config.tsx @@ -249,3 +249,22 @@ export const siteConfig = { }; export type SiteConfig = typeof siteConfig; + +export default class PostgrestError extends Error { + details: string; + hint: string; + code: string; + + constructor(context: { + message: string; + details: string; + hint: string; + code: string; + }) { + super(context.message); + this.name = "PostgrestError"; + this.details = context.details; + this.hint = context.hint; + this.code = context.code; + } +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 9b2072b..413982c 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -87,3 +87,8 @@ export function formatDate(date: string) { return `${yearsAgo} year${yearsAgo > 1 ? "s" : ""} ago`; } } + +export const getInitials = (string: string) => + string + .split(/\s/) + .reduce((response, word) => (response += word.slice(0, 1)), ""); diff --git a/src/providers/privy-provider.tsx b/src/providers/privy-provider.tsx new file mode 100644 index 0000000..5467142 --- /dev/null +++ b/src/providers/privy-provider.tsx @@ -0,0 +1,49 @@ +"use client"; + +import { PrivyProvider } from "@privy-io/react-auth"; + +import { toSolanaWalletConnectors } from "@privy-io/react-auth/solana"; + +const solanaConnectors = toSolanaWalletConnectors(); + +export default function MyPrivyProvider({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <PrivyProvider + appId={process.env.NEXT_PUBLIC_PRIVY_APP_ID!} + config={{ + // Customize Privy's appearance in your app + appearance: { + accentColor: "#812f20", + theme: "light", + showWalletLoginFirst: false, + walletChainType: "ethereum-and-solana", + walletList: ["detected_wallets", "phantom"], + logo: "https://supabasekong-mco40gw4sc0gs4ks40w4c4g4.dev3vds1.link/storage/v1/object/public/agent-thumbnails/Beactio%20Banner.png", + }, + loginMethods: ["email", "wallet", "discord"], + fundingMethodConfig: { + moonpay: { + useSandbox: true, + }, + }, + // Create embedded wallets for users who don't have a wallet + embeddedWallets: { + createOnLogin: "all-users", + showWalletUIs: true, + }, + mfa: { + noPromptOnMfaRequired: false, + }, + externalWallets: { + solana: { connectors: solanaConnectors }, + }, + }} + > + {children} + </PrivyProvider> + ); +} diff --git a/src/providers/react-query-provider.tsx b/src/providers/react-query-provider.tsx index 1116a0f..b3366b3 100644 --- a/src/providers/react-query-provider.tsx +++ b/src/providers/react-query-provider.tsx @@ -1,23 +1,63 @@ "use client"; -// import { handleError } from "@/lib/utils"; +import PostgrestError from "@/lib/config"; import { MutationCache, QueryCache, QueryClient, QueryClientProvider, } from "@tanstack/react-query"; + import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { AxiosError } from "axios"; + +import { toast } from "sonner"; + const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { - // handleError(error); + if (error instanceof PostgrestError) { + toast.error(error.code, { description: error.message }); + } }, }), mutationCache: new MutationCache({ onError: (error) => { - // handleError(error); + if (error instanceof AxiosError) { + if (error.response) { + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + const errResponse = error.response.data; + console.log({ errResponse }); + // if (errResponse.errors && Array.isArray(errResponse.errors)) { + // errResponse.errors.forEach( + // (inputErr: { field: string; message: string }) => { + // toast.error(`Error field : ${inputErr.field}`, { + // description: inputErr.message, + // }); + // } + // ); + // } + // if (errResponse.code) { + // toast.error(errResponse?.code, { + // description: errResponse?.message, + // }); + // } + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + toast.error("No response from the server", { + description: "Failed to fetch the data, server returns null.", + }); + } else { + // Something happened in setting up the request that triggered an Error + toast.error("Failed to set up the request", { + description: "There is something wrong when setting up the request", + }); + } + } }, }), }); diff --git a/src/utils/supabase/database.types.ts b/src/utils/supabase/database.types.ts index 57de439..046b9ec 100644 --- a/src/utils/supabase/database.types.ts +++ b/src/utils/supabase/database.types.ts @@ -59,13 +59,44 @@ export type Database = { }; public: { Tables: { + agent_responses: { + Row: { + agent_id: number; + created_at: string; + id: string; + question: string; + response: string; + }; + Insert: { + agent_id: number; + created_at?: string; + id?: string; + question: string; + response: string; + }; + Update: { + agent_id?: number; + created_at?: string; + id?: string; + question?: string; + response?: string; + }; + Relationships: [ + { + foreignKeyName: "agent_responses_agent_id_fkey"; + columns: ["agent_id"]; + referencedRelation: "agents"; + referencedColumns: ["id"]; + } + ]; + }; agents: { Row: { conversation: number; created_at: string; description: string; id: number; - image_url: string | null; + image_url: string; last_conv: string | null; model_type: Database["public"]["Enums"]["modelType"]; name: string; @@ -76,7 +107,7 @@ export type Database = { created_at?: string; description: string; id?: number; - image_url?: string | null; + image_url?: string; last_conv?: string | null; model_type: Database["public"]["Enums"]["modelType"]; name: string; @@ -87,7 +118,7 @@ export type Database = { created_at?: string; description?: string; id?: number; - image_url?: string | null; + image_url?: string; last_conv?: string | null; model_type?: Database["public"]["Enums"]["modelType"]; name?: string; diff --git a/tailwind.config.ts b/tailwind.config.ts index 7f0aed0..c96cd33 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -10,94 +10,136 @@ const config = { ], prefix: "", theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - animation: { - marquee: "marquee var(--duration) linear infinite", - "marquee-vertical": "marquee-vertical var(--duration) linear infinite", - "border-beam": "border-beam calc(var(--duration)*1s) infinite linear", - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - ripple: "ripple var(--duration,2s) ease calc(var(--i, 0)*.2s) infinite", - }, - keyframes: { - marquee: { - from: { transform: "translateX(0)" }, - to: { transform: "translateX(calc(-100% - var(--gap)))" }, - }, - "marquee-vertical": { - from: { transform: "translateY(0)" }, - to: { transform: "translateY(calc(-100% - var(--gap)))" }, - }, - "border-beam": { - "100%": { - "offset-distance": "100%", - }, - }, - "accordion-down": { - from: { height: "0" }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: "0" }, - }, - ripple: { - "0%, 100%": { - transform: "translate(-50%, -50%) scale(1)", - }, - "50%": { - transform: "translate(-50%, -50%) scale(0.9)", - }, - }, - }, - }, + container: { + center: true, + padding: '2rem', + screens: { + '2xl': '1400px' + } + }, + extend: { + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + } + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + animation: { + marquee: 'marquee var(--duration) linear infinite', + 'marquee-vertical': 'marquee-vertical var(--duration) linear infinite', + 'border-beam': 'border-beam calc(var(--duration)*1s) infinite linear', + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + ripple: 'ripple var(--duration,2s) ease calc(var(--i, 0)*.2s) infinite', + meteor: 'meteor 5s linear infinite', + shine: 'shine var(--duration) infinite linear' + }, + keyframes: { + marquee: { + from: { + transform: 'translateX(0)' + }, + to: { + transform: 'translateX(calc(-100% - var(--gap)))' + } + }, + 'marquee-vertical': { + from: { + transform: 'translateY(0)' + }, + to: { + transform: 'translateY(calc(-100% - var(--gap)))' + } + }, + 'border-beam': { + '100%': { + 'offset-distance': '100%' + } + }, + 'accordion-down': { + from: { + height: '0' + }, + to: { + height: 'var(--radix-accordion-content-height)' + } + }, + 'accordion-up': { + from: { + height: 'var(--radix-accordion-content-height)' + }, + to: { + height: '0' + } + }, + ripple: { + '0%, 100%': { + transform: 'translate(-50%, -50%) scale(1)' + }, + '50%': { + transform: 'translate(-50%, -50%) scale(0.9)' + } + }, + meteor: { + '0%': { + transform: 'rotate(215deg) translateX(0)', + opacity: '1' + }, + '70%': { + opacity: '1' + }, + '100%': { + transform: 'rotate(215deg) translateX(-500px)', + opacity: '0' + } + }, + shine: { + '0%': { + 'background-position': '0% 0%' + }, + '50%': { + 'background-position': '100% 100%' + }, + to: { + 'background-position': '0% 0%' + } + } + } + } }, plugins: [require("tailwindcss-animate"), require("@tailwindcss/typography")], } satisfies Config;